From b952b7263a87de5366b30a315744fb2f78207fce Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 13 Mar 2018 18:35:17 +0000 Subject: [PATCH 01/48] anonymous record types implementation --- src/absil/il.fs | 4 + src/absil/il.fsi | 1 + .../FSharp.Compiler.Private/FSComp.fs | 1942 +++++++++-------- .../FSharp.Compiler.Private/FSComp.resx | 20 +- src/fsharp/CompileOps.fs | 6 +- src/fsharp/ConstraintSolver.fs | 92 +- src/fsharp/FSComp.txt | 8 +- src/fsharp/FSStrings.resx | 6 + src/fsharp/FindUnsolved.fs | 33 +- src/fsharp/IlxGen.fs | 1887 ++++++++-------- src/fsharp/IlxGen.fsi | 7 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 4 +- src/fsharp/LexFilter.fs | 25 +- src/fsharp/NameResolution.fs | 62 +- src/fsharp/NameResolution.fsi | 6 + src/fsharp/NicePrint.fs | 9 + src/fsharp/Optimizer.fs | 36 +- src/fsharp/PostInferenceChecks.fs | 60 +- src/fsharp/PostInferenceChecks.fsi | 4 +- src/fsharp/QuotationTranslator.fs | 18 + src/fsharp/TastOps.fs | 77 +- src/fsharp/TastOps.fsi | 16 +- src/fsharp/TastPickle.fs | 172 +- src/fsharp/TypeChecker.fs | 199 +- src/fsharp/ast.fs | 92 +- src/fsharp/fsc.fs | 13 +- src/fsharp/fsi/fsi.fs | 2 +- src/fsharp/infos.fs | 2 + src/fsharp/layout.fs | 2 + src/fsharp/layout.fsi | 2 + src/fsharp/lex.fsl | 2 + src/fsharp/pars.fsy | 207 +- src/fsharp/service/ServiceAssemblyContent.fs | 8 +- src/fsharp/service/ServiceDeclarationLists.fs | 5 + .../service/ServiceInterfaceStubGenerator.fs | 6 +- src/fsharp/service/ServiceLexing.fs | 8 +- .../service/ServiceParamInfoLocations.fs | 4 +- src/fsharp/service/ServiceParseTreeWalk.fs | 11 +- src/fsharp/service/ServiceStructure.fs | 5 +- src/fsharp/service/ServiceUntypedParse.fs | 20 +- src/fsharp/service/ServiceXmlDocParser.fs | 3 +- src/fsharp/symbols/Exprs.fs | 2 +- src/fsharp/symbols/SymbolHelpers.fs | 19 + src/fsharp/symbols/SymbolPatterns.fs | 4 +- src/fsharp/symbols/Symbols.fs | 142 +- src/fsharp/symbols/Symbols.fsi | 29 +- src/fsharp/tast.fs | 76 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 30 + src/fsharp/xlf/FSComp.txt.de.xlf | 30 + src/fsharp/xlf/FSComp.txt.en.xlf | 30 + src/fsharp/xlf/FSComp.txt.es.xlf | 30 + src/fsharp/xlf/FSComp.txt.fr.xlf | 30 + src/fsharp/xlf/FSComp.txt.it.xlf | 30 + src/fsharp/xlf/FSComp.txt.ja.xlf | 30 + src/fsharp/xlf/FSComp.txt.ko.xlf | 30 + src/fsharp/xlf/FSComp.txt.pl.xlf | 30 + src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 30 + src/fsharp/xlf/FSComp.txt.ru.xlf | 30 + src/fsharp/xlf/FSComp.txt.tr.xlf | 30 + src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 30 + src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 30 + src/fsharp/xlf/FSStrings.cs.xlf | 10 + src/fsharp/xlf/FSStrings.de.xlf | 10 + src/fsharp/xlf/FSStrings.en.xlf | 10 + src/fsharp/xlf/FSStrings.es.xlf | 10 + src/fsharp/xlf/FSStrings.fr.xlf | 10 + src/fsharp/xlf/FSStrings.it.xlf | 10 + src/fsharp/xlf/FSStrings.ja.xlf | 10 + src/fsharp/xlf/FSStrings.ko.xlf | 10 + src/fsharp/xlf/FSStrings.pl.xlf | 10 + src/fsharp/xlf/FSStrings.pt-BR.xlf | 10 + src/fsharp/xlf/FSStrings.ru.xlf | 10 + src/fsharp/xlf/FSStrings.tr.xlf | 10 + src/fsharp/xlf/FSStrings.zh-Hans.xlf | 10 + src/fsharp/xlf/FSStrings.zh-Hant.xlf | 10 + src/utils/sformat.fs | 2 + src/utils/sformat.fsi | 2 + tests/fsharp/core/anon/lib.fs | 209 ++ tests/fsharp/core/anon/test.fsx | 83 + tests/fsharp/core/fsi-load/test.fsx | 3 + .../core/queriesOverIQueryable/test.fsx | 116 +- tests/fsharp/tests.fs | 38 + tests/fsharp/typecheck/sigs/neg103.bsl | 24 + tests/fsharp/typecheck/sigs/neg103.fs | 20 + tests/fsharp/typecheck/sigs/neg103.vsbsl | 24 + tests/fsharp/typecheck/sigs/neg104.bsl | 20 + tests/fsharp/typecheck/sigs/neg104.fs | 13 + tests/fsharp/typecheck/sigs/neg104.vsbsl | 24 + .../BasicApplication/E_PostfixType01.fs | 2 +- .../BasicApplication/E_PostfixType03.fs | 2 +- .../OCamlCompat/MultiArgumentGenericType.fs | 2 +- tests/scripts/compiler-perf-results.txt | 6 + tests/service/Common.fs | 3 + tests/service/ProjectAnalysisTests.fs | 82 + 94 files changed, 4247 insertions(+), 2346 deletions(-) create mode 100644 tests/fsharp/core/anon/lib.fs create mode 100644 tests/fsharp/core/anon/test.fsx create mode 100644 tests/fsharp/typecheck/sigs/neg103.bsl create mode 100644 tests/fsharp/typecheck/sigs/neg103.fs create mode 100644 tests/fsharp/typecheck/sigs/neg103.vsbsl create mode 100644 tests/fsharp/typecheck/sigs/neg104.bsl create mode 100644 tests/fsharp/typecheck/sigs/neg104.fs create mode 100644 tests/fsharp/typecheck/sigs/neg104.vsbsl diff --git a/src/absil/il.fs b/src/absil/il.fs index 3316f156e6e..abb71e0ce9e 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -293,8 +293,12 @@ module SHA1 = let (_h0,_h1,_h2,h3,h4) = sha1Hash { stream = s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 Array.map byte [| b0 h4; b1 h4; b2 h4; b3 h4; b0 h3; b1 h3; b2 h3; b3 h3; |] + let sha1HashInt64 s = + let (_h0,_h1,_h2,h3,h4) = sha1Hash { stream = s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 + (int64 h3 <<< 32) ||| int64 h4 let sha1HashBytes s = SHA1.sha1HashBytes s +let sha1HashInt64 s = SHA1.sha1HashInt64 s // -------------------------------------------------------------------- // diff --git a/src/absil/il.fsi b/src/absil/il.fsi index cb24a7180a9..02ef056daaf 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -1934,6 +1934,7 @@ val isILTypedReferenceTy: ILType -> bool val isILDoubleTy: ILType -> bool val isILSingleTy: ILType -> bool +val sha1HashInt64 : byte[] -> int64 /// Get a public key token from a public key. val sha1HashBytes : byte[] -> byte[] (* SHA1 hash *) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs index ac222406a21..a88526f0fe7 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs @@ -1429,2883 +1429,2901 @@ type internal SR private() = /// Unmatched '{' /// (Originally from ..\FSComp.txt:442) static member parsUnmatchedBrace() = (604, GetStringFunc("parsUnmatchedBrace",",,,") ) - /// Field bindings must have the form 'id = expr;' + /// Unmatched '{|' /// (Originally from ..\FSComp.txt:443) + static member parsUnmatchedBraceBar() = (605, GetStringFunc("parsUnmatchedBraceBar",",,,") ) + /// Field bindings must have the form 'id = expr;' + /// (Originally from ..\FSComp.txt:444) static member parsFieldBinding() = (609, GetStringFunc("parsFieldBinding",",,,") ) /// This member is not permitted in an object implementation - /// (Originally from ..\FSComp.txt:444) + /// (Originally from ..\FSComp.txt:445) static member parsMemberIllegalInObjectImplementation() = (610, GetStringFunc("parsMemberIllegalInObjectImplementation",",,,") ) /// Missing function body - /// (Originally from ..\FSComp.txt:445) + /// (Originally from ..\FSComp.txt:446) static member parsMissingFunctionBody() = (611, GetStringFunc("parsMissingFunctionBody",",,,") ) /// Syntax error in labelled type argument - /// (Originally from ..\FSComp.txt:446) + /// (Originally from ..\FSComp.txt:447) static member parsSyntaxErrorInLabeledType() = (613, GetStringFunc("parsSyntaxErrorInLabeledType",",,,") ) /// Unexpected infix operator in type expression - /// (Originally from ..\FSComp.txt:447) + /// (Originally from ..\FSComp.txt:448) static member parsUnexpectedInfixOperator() = (615, GetStringFunc("parsUnexpectedInfixOperator",",,,") ) /// The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident' instead - /// (Originally from ..\FSComp.txt:448) + /// (Originally from ..\FSComp.txt:449) static member parsMultiArgumentGenericTypeFormDeprecated() = (GetStringFunc("parsMultiArgumentGenericTypeFormDeprecated",",,,") ) /// Invalid literal in type - /// (Originally from ..\FSComp.txt:449) + /// (Originally from ..\FSComp.txt:450) static member parsInvalidLiteralInType() = (618, GetStringFunc("parsInvalidLiteralInType",",,,") ) /// Unexpected infix operator in unit-of-measure expression. Legal operators are '*', '/' and '^'. - /// (Originally from ..\FSComp.txt:450) + /// (Originally from ..\FSComp.txt:451) static member parsUnexpectedOperatorForUnitOfMeasure() = (619, GetStringFunc("parsUnexpectedOperatorForUnitOfMeasure",",,,") ) /// Unexpected integer literal in unit-of-measure expression - /// (Originally from ..\FSComp.txt:451) + /// (Originally from ..\FSComp.txt:452) static member parsUnexpectedIntegerLiteralForUnitOfMeasure() = (620, GetStringFunc("parsUnexpectedIntegerLiteralForUnitOfMeasure",",,,") ) /// Syntax error: unexpected type parameter specification - /// (Originally from ..\FSComp.txt:452) + /// (Originally from ..\FSComp.txt:453) static member parsUnexpectedTypeParameter() = (621, GetStringFunc("parsUnexpectedTypeParameter",",,,") ) /// Mismatched quotation operator name, beginning with '%s' - /// (Originally from ..\FSComp.txt:453) + /// (Originally from ..\FSComp.txt:454) static member parsMismatchedQuotationName(a0 : System.String) = (622, GetStringFunc("parsMismatchedQuotationName",",,,%s,,,") a0) /// Active pattern case identifiers must begin with an uppercase letter - /// (Originally from ..\FSComp.txt:454) + /// (Originally from ..\FSComp.txt:455) static member parsActivePatternCaseMustBeginWithUpperCase() = (623, GetStringFunc("parsActivePatternCaseMustBeginWithUpperCase",",,,") ) /// The '|' character is not permitted in active pattern case identifiers - /// (Originally from ..\FSComp.txt:455) + /// (Originally from ..\FSComp.txt:456) static member parsActivePatternCaseContainsPipe() = (624, GetStringFunc("parsActivePatternCaseContainsPipe",",,,") ) /// Denominator must not be 0 in unit-of-measure exponent - /// (Originally from ..\FSComp.txt:456) + /// (Originally from ..\FSComp.txt:457) static member parsIllegalDenominatorForMeasureExponent() = (625, GetStringFunc("parsIllegalDenominatorForMeasureExponent",",,,") ) /// No '=' symbol should follow a 'namespace' declaration - /// (Originally from ..\FSComp.txt:457) + /// (Originally from ..\FSComp.txt:458) static member parsNoEqualShouldFollowNamespace() = (GetStringFunc("parsNoEqualShouldFollowNamespace",",,,") ) /// The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end' - /// (Originally from ..\FSComp.txt:458) + /// (Originally from ..\FSComp.txt:459) static member parsSyntaxModuleStructEndDeprecated() = (GetStringFunc("parsSyntaxModuleStructEndDeprecated",",,,") ) /// The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end' - /// (Originally from ..\FSComp.txt:459) + /// (Originally from ..\FSComp.txt:460) static member parsSyntaxModuleSigEndDeprecated() = (GetStringFunc("parsSyntaxModuleSigEndDeprecated",",,,") ) /// A static field was used where an instance field is expected - /// (Originally from ..\FSComp.txt:460) + /// (Originally from ..\FSComp.txt:461) static member tcStaticFieldUsedWhenInstanceFieldExpected() = (627, GetStringFunc("tcStaticFieldUsedWhenInstanceFieldExpected",",,,") ) /// Method '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:461) + /// (Originally from ..\FSComp.txt:462) static member tcMethodNotAccessible(a0 : System.String) = (629, GetStringFunc("tcMethodNotAccessible",",,,%s,,,") a0) /// Implicit product of measures following / - /// (Originally from ..\FSComp.txt:463) + /// (Originally from ..\FSComp.txt:464) static member tcImplicitMeasureFollowingSlash() = (632, GetStringFunc("tcImplicitMeasureFollowingSlash",",,,") ) /// Unexpected SynMeasure.Anon - /// (Originally from ..\FSComp.txt:464) + /// (Originally from ..\FSComp.txt:465) static member tcUnexpectedMeasureAnon() = (633, GetStringFunc("tcUnexpectedMeasureAnon",",,,") ) /// Non-zero constants cannot have generic units. For generic zero, write 0.0<_>. - /// (Originally from ..\FSComp.txt:465) + /// (Originally from ..\FSComp.txt:466) static member tcNonZeroConstantCannotHaveGenericUnit() = (634, GetStringFunc("tcNonZeroConstantCannotHaveGenericUnit",",,,") ) /// In sequence expressions, results are generated using 'yield' - /// (Originally from ..\FSComp.txt:466) + /// (Originally from ..\FSComp.txt:467) static member tcSeqResultsUseYield() = (635, GetStringFunc("tcSeqResultsUseYield",",,,") ) /// Unexpected big rational constant - /// (Originally from ..\FSComp.txt:467) + /// (Originally from ..\FSComp.txt:468) static member tcUnexpectedBigRationalConstant() = (GetStringFunc("tcUnexpectedBigRationalConstant",",,,") ) /// Units-of-measure supported only on float, float32, decimal and signed integer types - /// (Originally from ..\FSComp.txt:468) + /// (Originally from ..\FSComp.txt:469) static member tcInvalidTypeForUnitsOfMeasure() = (636, GetStringFunc("tcInvalidTypeForUnitsOfMeasure",",,,") ) /// Unexpected Const_uint16array - /// (Originally from ..\FSComp.txt:469) + /// (Originally from ..\FSComp.txt:470) static member tcUnexpectedConstUint16Array() = (GetStringFunc("tcUnexpectedConstUint16Array",",,,") ) /// Unexpected Const_bytearray - /// (Originally from ..\FSComp.txt:470) + /// (Originally from ..\FSComp.txt:471) static member tcUnexpectedConstByteArray() = (GetStringFunc("tcUnexpectedConstByteArray",",,,") ) /// A parameter with attributes must also be given a name, e.g. '[] Name : Type' - /// (Originally from ..\FSComp.txt:471) + /// (Originally from ..\FSComp.txt:472) static member tcParameterRequiresName() = (640, GetStringFunc("tcParameterRequiresName",",,,") ) /// Return values cannot have names - /// (Originally from ..\FSComp.txt:472) + /// (Originally from ..\FSComp.txt:473) static member tcReturnValuesCannotHaveNames() = (641, GetStringFunc("tcReturnValuesCannotHaveNames",",,,") ) /// MemberKind.PropertyGetSet only expected in parse trees - /// (Originally from ..\FSComp.txt:473) + /// (Originally from ..\FSComp.txt:474) static member tcMemberKindPropertyGetSetNotExpected() = (GetStringFunc("tcMemberKindPropertyGetSetNotExpected",",,,") ) /// Namespaces cannot contain values. Consider using a module to hold your value declarations. - /// (Originally from ..\FSComp.txt:474) + /// (Originally from ..\FSComp.txt:475) static member tcNamespaceCannotContainValues() = (201, GetStringFunc("tcNamespaceCannotContainValues",",,,") ) /// Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined. Consider using a module to hold declarations of extension members. - /// (Originally from ..\FSComp.txt:475) + /// (Originally from ..\FSComp.txt:476) static member tcNamespaceCannotContainExtensionMembers() = (644, GetStringFunc("tcNamespaceCannotContainExtensionMembers",",,,") ) /// Multiple visibility attributes have been specified for this identifier - /// (Originally from ..\FSComp.txt:476) + /// (Originally from ..\FSComp.txt:477) static member tcMultipleVisibilityAttributes() = (645, GetStringFunc("tcMultipleVisibilityAttributes",",,,") ) /// Multiple visibility attributes have been specified for this identifier. 'let' bindings in classes are always private, as are any 'let' bindings inside expressions. - /// (Originally from ..\FSComp.txt:477) + /// (Originally from ..\FSComp.txt:478) static member tcMultipleVisibilityAttributesWithLet() = (646, GetStringFunc("tcMultipleVisibilityAttributesWithLet",",,,") ) /// The name '(%s)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ..\FSComp.txt:478) + /// (Originally from ..\FSComp.txt:479) static member tcInvalidMethodNameForRelationalOperator(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMethodNameForRelationalOperator",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ..\FSComp.txt:479) + /// (Originally from ..\FSComp.txt:480) static member tcInvalidMethodNameForEquality(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMethodNameForEquality",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ..\FSComp.txt:480) + /// (Originally from ..\FSComp.txt:481) static member tcInvalidMemberName(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMemberName",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name because it is given a standard definition in the F# library over fixed types - /// (Originally from ..\FSComp.txt:481) + /// (Originally from ..\FSComp.txt:482) static member tcInvalidMemberNameFixedTypes(a0 : System.String) = (GetStringFunc("tcInvalidMemberNameFixedTypes",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. To define overloaded comparison semantics for a particular type, implement the 'System.IComparable' interface in the definition of that type. - /// (Originally from ..\FSComp.txt:482) + /// (Originally from ..\FSComp.txt:483) static member tcInvalidOperatorDefinitionRelational(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinitionRelational",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. To define equality semantics for a type, override the 'Object.Equals' member in the definition of that type. - /// (Originally from ..\FSComp.txt:483) + /// (Originally from ..\FSComp.txt:484) static member tcInvalidOperatorDefinitionEquality(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinitionEquality",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. Consider using a different operator name - /// (Originally from ..\FSComp.txt:484) + /// (Originally from ..\FSComp.txt:485) static member tcInvalidOperatorDefinition(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinition",",,,%s,,,") a0) /// The '%s' operator cannot be redefined. Consider using a different operator name - /// (Originally from ..\FSComp.txt:485) + /// (Originally from ..\FSComp.txt:486) static member tcInvalidIndexOperatorDefinition(a0 : System.String) = (GetStringFunc("tcInvalidIndexOperatorDefinition",",,,%s,,,") a0) /// Expected module or namespace parent %s - /// (Originally from ..\FSComp.txt:486) + /// (Originally from ..\FSComp.txt:487) static member tcExpectModuleOrNamespaceParent(a0 : System.String) = (GetStringFunc("tcExpectModuleOrNamespaceParent",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IComparable' explicitly. You must apply the 'CustomComparison' attribute to the type. - /// (Originally from ..\FSComp.txt:487) + /// (Originally from ..\FSComp.txt:488) static member tcImplementsIComparableExplicitly(a0 : System.String) = (647, GetStringFunc("tcImplementsIComparableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable. - /// (Originally from ..\FSComp.txt:488) + /// (Originally from ..\FSComp.txt:489) static member tcImplementsGenericIComparableExplicitly(a0 : System.String) = (648, GetStringFunc("tcImplementsGenericIComparableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IStructuralComparable' explicitly. Apply the 'CustomComparison' attribute to the type. - /// (Originally from ..\FSComp.txt:489) + /// (Originally from ..\FSComp.txt:490) static member tcImplementsIStructuralComparableExplicitly(a0 : System.String) = (649, GetStringFunc("tcImplementsIStructuralComparableExplicitly",",,,%s,,,") a0) /// This record contains fields from inconsistent types - /// (Originally from ..\FSComp.txt:490) + /// (Originally from ..\FSComp.txt:491) static member tcRecordFieldInconsistentTypes() = (656, GetStringFunc("tcRecordFieldInconsistentTypes",",,,") ) /// DLLImport stubs cannot be inlined - /// (Originally from ..\FSComp.txt:491) + /// (Originally from ..\FSComp.txt:492) static member tcDllImportStubsCannotBeInlined() = (657, GetStringFunc("tcDllImportStubsCannotBeInlined",",,,") ) /// Structs may only bind a 'this' parameter at member declarations - /// (Originally from ..\FSComp.txt:492) + /// (Originally from ..\FSComp.txt:493) static member tcStructsCanOnlyBindThisAtMemberDeclaration() = (658, GetStringFunc("tcStructsCanOnlyBindThisAtMemberDeclaration",",,,") ) /// Unexpected expression at recursive inference point - /// (Originally from ..\FSComp.txt:493) + /// (Originally from ..\FSComp.txt:494) static member tcUnexpectedExprAtRecInfPoint() = (659, GetStringFunc("tcUnexpectedExprAtRecInfPoint",",,,") ) /// This code is less generic than required by its annotations because the explicit type variable '%s' could not be generalized. It was constrained to be '%s'. - /// (Originally from ..\FSComp.txt:494) + /// (Originally from ..\FSComp.txt:495) static member tcLessGenericBecauseOfAnnotation(a0 : System.String, a1 : System.String) = (660, GetStringFunc("tcLessGenericBecauseOfAnnotation",",,,%s,,,%s,,,") a0 a1) /// One or more of the explicit class or function type variables for this binding could not be generalized, because they were constrained to other types - /// (Originally from ..\FSComp.txt:495) + /// (Originally from ..\FSComp.txt:496) static member tcConstrainedTypeVariableCannotBeGeneralized() = (661, GetStringFunc("tcConstrainedTypeVariableCannotBeGeneralized",",,,") ) /// A generic type parameter has been used in a way that constrains it to always be '%s' - /// (Originally from ..\FSComp.txt:496) + /// (Originally from ..\FSComp.txt:497) static member tcGenericParameterHasBeenConstrained(a0 : System.String) = (662, GetStringFunc("tcGenericParameterHasBeenConstrained",",,,%s,,,") a0) /// This type parameter has been used in a way that constrains it to always be '%s' - /// (Originally from ..\FSComp.txt:497) + /// (Originally from ..\FSComp.txt:498) static member tcTypeParameterHasBeenConstrained(a0 : System.String) = (663, GetStringFunc("tcTypeParameterHasBeenConstrained",",,,%s,,,") a0) /// The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x). - /// (Originally from ..\FSComp.txt:498) + /// (Originally from ..\FSComp.txt:499) static member tcTypeParametersInferredAreNotStable() = (664, GetStringFunc("tcTypeParametersInferredAreNotStable",",,,") ) /// Explicit type parameters may only be used on module or member bindings - /// (Originally from ..\FSComp.txt:499) + /// (Originally from ..\FSComp.txt:500) static member tcExplicitTypeParameterInvalid() = (665, GetStringFunc("tcExplicitTypeParameterInvalid",",,,") ) /// You must explicitly declare either all or no type parameters when overriding a generic abstract method - /// (Originally from ..\FSComp.txt:500) + /// (Originally from ..\FSComp.txt:501) static member tcOverridingMethodRequiresAllOrNoTypeParameters() = (666, GetStringFunc("tcOverridingMethodRequiresAllOrNoTypeParameters",",,,") ) /// The field labels and expected type of this record expression or pattern do not uniquely determine a corresponding record type - /// (Originally from ..\FSComp.txt:501) + /// (Originally from ..\FSComp.txt:502) static member tcFieldsDoNotDetermineUniqueRecordType() = (667, GetStringFunc("tcFieldsDoNotDetermineUniqueRecordType",",,,") ) /// The field '%s' appears twice in this record expression or pattern - /// (Originally from ..\FSComp.txt:502) + /// (Originally from ..\FSComp.txt:503) static member tcFieldAppearsTwiceInRecord(a0 : System.String) = (668, GetStringFunc("tcFieldAppearsTwiceInRecord",",,,%s,,,") a0) /// Unknown union case - /// (Originally from ..\FSComp.txt:503) + /// (Originally from ..\FSComp.txt:504) static member tcUnknownUnion() = (669, GetStringFunc("tcUnknownUnion",",,,") ) /// This code is not sufficiently generic. The type variable %s could not be generalized because it would escape its scope. - /// (Originally from ..\FSComp.txt:504) + /// (Originally from ..\FSComp.txt:505) static member tcNotSufficientlyGenericBecauseOfScope(a0 : System.String) = (670, GetStringFunc("tcNotSufficientlyGenericBecauseOfScope",",,,%s,,,") a0) /// A property cannot have explicit type parameters. Consider using a method instead. - /// (Originally from ..\FSComp.txt:505) + /// (Originally from ..\FSComp.txt:506) static member tcPropertyRequiresExplicitTypeParameters() = (671, GetStringFunc("tcPropertyRequiresExplicitTypeParameters",",,,") ) /// A constructor cannot have explicit type parameters. Consider using a static construction method instead. - /// (Originally from ..\FSComp.txt:506) + /// (Originally from ..\FSComp.txt:507) static member tcConstructorCannotHaveTypeParameters() = (672, GetStringFunc("tcConstructorCannotHaveTypeParameters",",,,") ) /// This instance member needs a parameter to represent the object being invoked. Make the member static or use the notation 'member x.Member(args) = ...'. - /// (Originally from ..\FSComp.txt:507) + /// (Originally from ..\FSComp.txt:508) static member tcInstanceMemberRequiresTarget() = (673, GetStringFunc("tcInstanceMemberRequiresTarget",",,,") ) /// Unexpected source-level property specification in syntax tree - /// (Originally from ..\FSComp.txt:508) + /// (Originally from ..\FSComp.txt:509) static member tcUnexpectedPropertyInSyntaxTree() = (674, GetStringFunc("tcUnexpectedPropertyInSyntaxTree",",,,") ) /// A static initializer requires an argument - /// (Originally from ..\FSComp.txt:509) + /// (Originally from ..\FSComp.txt:510) static member tcStaticInitializerRequiresArgument() = (675, GetStringFunc("tcStaticInitializerRequiresArgument",",,,") ) /// An object constructor requires an argument - /// (Originally from ..\FSComp.txt:510) + /// (Originally from ..\FSComp.txt:511) static member tcObjectConstructorRequiresArgument() = (676, GetStringFunc("tcObjectConstructorRequiresArgument",",,,") ) /// This static member should not have a 'this' parameter. Consider using the notation 'member Member(args) = ...'. - /// (Originally from ..\FSComp.txt:511) + /// (Originally from ..\FSComp.txt:512) static member tcStaticMemberShouldNotHaveThis() = (677, GetStringFunc("tcStaticMemberShouldNotHaveThis",",,,") ) /// An explicit static initializer should use the syntax 'static new(args) = expr' - /// (Originally from ..\FSComp.txt:512) + /// (Originally from ..\FSComp.txt:513) static member tcExplicitStaticInitializerSyntax() = (678, GetStringFunc("tcExplicitStaticInitializerSyntax",",,,") ) /// An explicit object constructor should use the syntax 'new(args) = expr' - /// (Originally from ..\FSComp.txt:513) + /// (Originally from ..\FSComp.txt:514) static member tcExplicitObjectConstructorSyntax() = (679, GetStringFunc("tcExplicitObjectConstructorSyntax",",,,") ) /// Unexpected source-level property specification - /// (Originally from ..\FSComp.txt:514) + /// (Originally from ..\FSComp.txt:515) static member tcUnexpectedPropertySpec() = (680, GetStringFunc("tcUnexpectedPropertySpec",",,,") ) /// This form of object expression is not used in F#. Use 'member this.MemberName ... = ...' to define member implementations in object expressions. - /// (Originally from ..\FSComp.txt:515) + /// (Originally from ..\FSComp.txt:516) static member tcObjectExpressionFormDeprecated() = (GetStringFunc("tcObjectExpressionFormDeprecated",",,,") ) /// Invalid declaration - /// (Originally from ..\FSComp.txt:516) + /// (Originally from ..\FSComp.txt:517) static member tcInvalidDeclaration() = (682, GetStringFunc("tcInvalidDeclaration",",,,") ) /// Attributes are not allowed within patterns - /// (Originally from ..\FSComp.txt:517) + /// (Originally from ..\FSComp.txt:518) static member tcAttributesInvalidInPatterns() = (683, GetStringFunc("tcAttributesInvalidInPatterns",",,,") ) /// The generic function '%s' must be given explicit type argument(s) - /// (Originally from ..\FSComp.txt:518) + /// (Originally from ..\FSComp.txt:519) static member tcFunctionRequiresExplicitTypeArguments(a0 : System.String) = (685, GetStringFunc("tcFunctionRequiresExplicitTypeArguments",",,,%s,,,") a0) /// The method or function '%s' should not be given explicit type argument(s) because it does not declare its type parameters explicitly - /// (Originally from ..\FSComp.txt:519) + /// (Originally from ..\FSComp.txt:520) static member tcDoesNotAllowExplicitTypeArguments(a0 : System.String) = (686, GetStringFunc("tcDoesNotAllowExplicitTypeArguments",",,,%s,,,") a0) /// This value, type or method expects %d type parameter(s) but was given %d - /// (Originally from ..\FSComp.txt:520) + /// (Originally from ..\FSComp.txt:521) static member tcTypeParameterArityMismatch(a0 : System.Int32, a1 : System.Int32) = (687, GetStringFunc("tcTypeParameterArityMismatch",",,,%d,,,%d,,,") a0 a1) /// The default, zero-initializing constructor of a struct type may only be used if all the fields of the struct type admit default initialization - /// (Originally from ..\FSComp.txt:521) + /// (Originally from ..\FSComp.txt:522) static member tcDefaultStructConstructorCall() = (688, GetStringFunc("tcDefaultStructConstructorCall",",,,") ) /// Couldn't find Dispose on IDisposable, or it was overloaded - /// (Originally from ..\FSComp.txt:522) + /// (Originally from ..\FSComp.txt:523) static member tcCouldNotFindIDisposable() = (GetStringFunc("tcCouldNotFindIDisposable",",,,") ) /// This value is not a literal and cannot be used in a pattern - /// (Originally from ..\FSComp.txt:523) + /// (Originally from ..\FSComp.txt:524) static member tcNonLiteralCannotBeUsedInPattern() = (689, GetStringFunc("tcNonLiteralCannotBeUsedInPattern",",,,") ) /// This field is readonly - /// (Originally from ..\FSComp.txt:524) + /// (Originally from ..\FSComp.txt:525) static member tcFieldIsReadonly() = (690, GetStringFunc("tcFieldIsReadonly",",,,") ) /// Named arguments must appear after all other arguments - /// (Originally from ..\FSComp.txt:525) + /// (Originally from ..\FSComp.txt:526) static member tcNameArgumentsMustAppearLast() = (691, GetStringFunc("tcNameArgumentsMustAppearLast",",,,") ) /// This function value is being used to construct a delegate type whose signature includes a byref argument. You must use an explicit lambda expression taking %d arguments. - /// (Originally from ..\FSComp.txt:526) + /// (Originally from ..\FSComp.txt:527) static member tcFunctionRequiresExplicitLambda(a0 : System.Int32) = (692, GetStringFunc("tcFunctionRequiresExplicitLambda",",,,%d,,,") a0) /// The type '%s' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method - /// (Originally from ..\FSComp.txt:527) + /// (Originally from ..\FSComp.txt:528) static member tcTypeCannotBeEnumerated(a0 : System.String) = (693, GetStringFunc("tcTypeCannotBeEnumerated",",,,%s,,,") a0) /// This recursive binding uses an invalid mixture of recursive forms - /// (Originally from ..\FSComp.txt:528) + /// (Originally from ..\FSComp.txt:529) static member tcInvalidMixtureOfRecursiveForms() = (695, GetStringFunc("tcInvalidMixtureOfRecursiveForms",",,,") ) /// This is not a valid object construction expression. Explicit object constructors must either call an alternate constructor or initialize all fields of the object and specify a call to a super class constructor. - /// (Originally from ..\FSComp.txt:529) + /// (Originally from ..\FSComp.txt:530) static member tcInvalidObjectConstructionExpression() = (696, GetStringFunc("tcInvalidObjectConstructionExpression",",,,") ) /// Invalid constraint - /// (Originally from ..\FSComp.txt:530) + /// (Originally from ..\FSComp.txt:531) static member tcInvalidConstraint() = (697, GetStringFunc("tcInvalidConstraint",",,,") ) /// Invalid constraint: the type used for the constraint is sealed, which means the constraint could only be satisfied by at most one solution - /// (Originally from ..\FSComp.txt:531) + /// (Originally from ..\FSComp.txt:532) static member tcInvalidConstraintTypeSealed() = (698, GetStringFunc("tcInvalidConstraintTypeSealed",",,,") ) /// An 'enum' constraint must be of the form 'enum' - /// (Originally from ..\FSComp.txt:532) + /// (Originally from ..\FSComp.txt:533) static member tcInvalidEnumConstraint() = (699, GetStringFunc("tcInvalidEnumConstraint",",,,") ) /// 'new' constraints must take one argument of type 'unit' and return the constructed type - /// (Originally from ..\FSComp.txt:533) + /// (Originally from ..\FSComp.txt:534) static member tcInvalidNewConstraint() = (700, GetStringFunc("tcInvalidNewConstraint",",,,") ) /// This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'. - /// (Originally from ..\FSComp.txt:534) + /// (Originally from ..\FSComp.txt:535) static member tcInvalidPropertyType() = (701, GetStringFunc("tcInvalidPropertyType",",,,") ) /// Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [] attribute. - /// (Originally from ..\FSComp.txt:535) + /// (Originally from ..\FSComp.txt:536) static member tcExpectedUnitOfMeasureMarkWithAttribute() = (702, GetStringFunc("tcExpectedUnitOfMeasureMarkWithAttribute",",,,") ) /// Expected type parameter, not unit-of-measure parameter - /// (Originally from ..\FSComp.txt:536) + /// (Originally from ..\FSComp.txt:537) static member tcExpectedTypeParameter() = (703, GetStringFunc("tcExpectedTypeParameter",",,,") ) /// Expected type, not unit-of-measure - /// (Originally from ..\FSComp.txt:537) + /// (Originally from ..\FSComp.txt:538) static member tcExpectedTypeNotUnitOfMeasure() = (704, GetStringFunc("tcExpectedTypeNotUnitOfMeasure",",,,") ) /// Expected unit-of-measure, not type - /// (Originally from ..\FSComp.txt:538) + /// (Originally from ..\FSComp.txt:539) static member tcExpectedUnitOfMeasureNotType() = (705, GetStringFunc("tcExpectedUnitOfMeasureNotType",",,,") ) /// Units-of-measure cannot be used as prefix arguments to a type. Rewrite as postfix arguments in angle brackets. - /// (Originally from ..\FSComp.txt:539) + /// (Originally from ..\FSComp.txt:540) static member tcInvalidUnitsOfMeasurePrefix() = (706, GetStringFunc("tcInvalidUnitsOfMeasurePrefix",",,,") ) /// Unit-of-measure cannot be used in type constructor application - /// (Originally from ..\FSComp.txt:540) + /// (Originally from ..\FSComp.txt:541) static member tcUnitsOfMeasureInvalidInTypeConstructor() = (707, GetStringFunc("tcUnitsOfMeasureInvalidInTypeConstructor",",,,") ) /// This control construct may only be used if the computation expression builder defines a '%s' method - /// (Originally from ..\FSComp.txt:541) + /// (Originally from ..\FSComp.txt:542) static member tcRequireBuilderMethod(a0 : System.String) = (708, GetStringFunc("tcRequireBuilderMethod",",,,%s,,,") a0) /// This type has no nested types - /// (Originally from ..\FSComp.txt:542) + /// (Originally from ..\FSComp.txt:543) static member tcTypeHasNoNestedTypes() = (709, GetStringFunc("tcTypeHasNoNestedTypes",",,,") ) /// Unexpected %s in type expression - /// (Originally from ..\FSComp.txt:543) + /// (Originally from ..\FSComp.txt:544) static member tcUnexpectedSymbolInTypeExpression(a0 : System.String) = (711, GetStringFunc("tcUnexpectedSymbolInTypeExpression",",,,%s,,,") a0) /// Type parameter cannot be used as type constructor - /// (Originally from ..\FSComp.txt:544) + /// (Originally from ..\FSComp.txt:545) static member tcTypeParameterInvalidAsTypeConstructor() = (712, GetStringFunc("tcTypeParameterInvalidAsTypeConstructor",",,,") ) /// Illegal syntax in type expression - /// (Originally from ..\FSComp.txt:545) + /// (Originally from ..\FSComp.txt:546) static member tcIllegalSyntaxInTypeExpression() = (713, GetStringFunc("tcIllegalSyntaxInTypeExpression",",,,") ) /// Anonymous unit-of-measure cannot be nested inside another unit-of-measure expression - /// (Originally from ..\FSComp.txt:546) + /// (Originally from ..\FSComp.txt:547) static member tcAnonymousUnitsOfMeasureCannotBeNested() = (714, GetStringFunc("tcAnonymousUnitsOfMeasureCannotBeNested",",,,") ) /// Anonymous type variables are not permitted in this declaration - /// (Originally from ..\FSComp.txt:547) + /// (Originally from ..\FSComp.txt:548) static member tcAnonymousTypeInvalidInDeclaration() = (715, GetStringFunc("tcAnonymousTypeInvalidInDeclaration",",,,") ) /// Unexpected / in type - /// (Originally from ..\FSComp.txt:548) + /// (Originally from ..\FSComp.txt:549) static member tcUnexpectedSlashInType() = (716, GetStringFunc("tcUnexpectedSlashInType",",,,") ) /// Unexpected type arguments - /// (Originally from ..\FSComp.txt:549) + /// (Originally from ..\FSComp.txt:550) static member tcUnexpectedTypeArguments() = (717, GetStringFunc("tcUnexpectedTypeArguments",",,,") ) /// Optional arguments are only permitted on type members - /// (Originally from ..\FSComp.txt:550) + /// (Originally from ..\FSComp.txt:551) static member tcOptionalArgsOnlyOnMembers() = (718, GetStringFunc("tcOptionalArgsOnlyOnMembers",",,,") ) /// Name '%s' not bound in pattern context - /// (Originally from ..\FSComp.txt:551) + /// (Originally from ..\FSComp.txt:552) static member tcNameNotBoundInPattern(a0 : System.String) = (719, GetStringFunc("tcNameNotBoundInPattern",",,,%s,,,") a0) /// Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when = ' at the end of the match clause. - /// (Originally from ..\FSComp.txt:552) + /// (Originally from ..\FSComp.txt:553) static member tcInvalidNonPrimitiveLiteralInPatternMatch() = (720, GetStringFunc("tcInvalidNonPrimitiveLiteralInPatternMatch",",,,") ) /// Type arguments cannot be specified here - /// (Originally from ..\FSComp.txt:553) + /// (Originally from ..\FSComp.txt:554) static member tcInvalidTypeArgumentUsage() = (721, GetStringFunc("tcInvalidTypeArgumentUsage",",,,") ) /// Only active patterns returning exactly one result may accept arguments - /// (Originally from ..\FSComp.txt:554) + /// (Originally from ..\FSComp.txt:555) static member tcRequireActivePatternWithOneResult() = (722, GetStringFunc("tcRequireActivePatternWithOneResult",",,,") ) /// Invalid argument to parameterized pattern label - /// (Originally from ..\FSComp.txt:555) + /// (Originally from ..\FSComp.txt:556) static member tcInvalidArgForParameterizedPattern() = (723, GetStringFunc("tcInvalidArgForParameterizedPattern",",,,") ) /// Internal error. Invalid index into active pattern array - /// (Originally from ..\FSComp.txt:556) + /// (Originally from ..\FSComp.txt:557) static member tcInvalidIndexIntoActivePatternArray() = (724, GetStringFunc("tcInvalidIndexIntoActivePatternArray",",,,") ) /// This union case does not take arguments - /// (Originally from ..\FSComp.txt:557) + /// (Originally from ..\FSComp.txt:558) static member tcUnionCaseDoesNotTakeArguments() = (725, GetStringFunc("tcUnionCaseDoesNotTakeArguments",",,,") ) /// This union case takes one argument - /// (Originally from ..\FSComp.txt:558) + /// (Originally from ..\FSComp.txt:559) static member tcUnionCaseRequiresOneArgument() = (726, GetStringFunc("tcUnionCaseRequiresOneArgument",",,,") ) /// This union case expects %d arguments in tupled form - /// (Originally from ..\FSComp.txt:559) + /// (Originally from ..\FSComp.txt:560) static member tcUnionCaseExpectsTupledArguments(a0 : System.Int32) = (727, GetStringFunc("tcUnionCaseExpectsTupledArguments",",,,%d,,,") a0) /// Field '%s' is not static - /// (Originally from ..\FSComp.txt:560) + /// (Originally from ..\FSComp.txt:561) static member tcFieldIsNotStatic(a0 : System.String) = (728, GetStringFunc("tcFieldIsNotStatic",",,,%s,,,") a0) /// This field is not a literal and cannot be used in a pattern - /// (Originally from ..\FSComp.txt:561) + /// (Originally from ..\FSComp.txt:562) static member tcFieldNotLiteralCannotBeUsedInPattern() = (729, GetStringFunc("tcFieldNotLiteralCannotBeUsedInPattern",",,,") ) /// This is not a variable, constant, active recognizer or literal - /// (Originally from ..\FSComp.txt:562) + /// (Originally from ..\FSComp.txt:563) static member tcRequireVarConstRecogOrLiteral() = (730, GetStringFunc("tcRequireVarConstRecogOrLiteral",",,,") ) /// This is not a valid pattern - /// (Originally from ..\FSComp.txt:563) + /// (Originally from ..\FSComp.txt:564) static member tcInvalidPattern() = (731, GetStringFunc("tcInvalidPattern",",,,") ) /// Character range matches have been removed in F#. Consider using a 'when' pattern guard instead. - /// (Originally from ..\FSComp.txt:564) + /// (Originally from ..\FSComp.txt:565) static member tcUseWhenPatternGuard() = (GetStringFunc("tcUseWhenPatternGuard",",,,") ) /// Illegal pattern - /// (Originally from ..\FSComp.txt:565) + /// (Originally from ..\FSComp.txt:566) static member tcIllegalPattern() = (733, GetStringFunc("tcIllegalPattern",",,,") ) /// Syntax error - unexpected '?' symbol - /// (Originally from ..\FSComp.txt:566) + /// (Originally from ..\FSComp.txt:567) static member tcSyntaxErrorUnexpectedQMark() = (734, GetStringFunc("tcSyntaxErrorUnexpectedQMark",",,,") ) /// Expected %d expressions, got %d - /// (Originally from ..\FSComp.txt:567) + /// (Originally from ..\FSComp.txt:568) static member tcExpressionCountMisMatch(a0 : System.Int32, a1 : System.Int32) = (735, GetStringFunc("tcExpressionCountMisMatch",",,,%d,,,%d,,,") a0 a1) /// TcExprUndelayed: delayed - /// (Originally from ..\FSComp.txt:568) + /// (Originally from ..\FSComp.txt:569) static member tcExprUndelayed() = (736, GetStringFunc("tcExprUndelayed",",,,") ) /// This expression form may only be used in sequence and computation expressions - /// (Originally from ..\FSComp.txt:569) + /// (Originally from ..\FSComp.txt:570) static member tcExpressionRequiresSequence() = (737, GetStringFunc("tcExpressionRequiresSequence",",,,") ) /// Invalid object expression. Objects without overrides or interfaces should use the expression form 'new Type(args)' without braces. - /// (Originally from ..\FSComp.txt:570) + /// (Originally from ..\FSComp.txt:571) static member tcInvalidObjectExpressionSyntaxForm() = (738, GetStringFunc("tcInvalidObjectExpressionSyntaxForm",",,,") ) /// Invalid object, sequence or record expression - /// (Originally from ..\FSComp.txt:571) + /// (Originally from ..\FSComp.txt:572) static member tcInvalidObjectSequenceOrRecordExpression() = (739, GetStringFunc("tcInvalidObjectSequenceOrRecordExpression",",,,") ) /// Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq { ... }' - /// (Originally from ..\FSComp.txt:572) + /// (Originally from ..\FSComp.txt:573) static member tcInvalidSequenceExpressionSyntaxForm() = (740, GetStringFunc("tcInvalidSequenceExpressionSyntaxForm",",,,") ) /// This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - /// (Originally from ..\FSComp.txt:573) + /// (Originally from ..\FSComp.txt:574) static member tcExpressionWithIfRequiresParenthesis() = (GetStringFunc("tcExpressionWithIfRequiresParenthesis",",,,") ) /// Unable to parse format string '%s' - /// (Originally from ..\FSComp.txt:574) + /// (Originally from ..\FSComp.txt:575) static member tcUnableToParseFormatString(a0 : System.String) = (741, GetStringFunc("tcUnableToParseFormatString",",,,%s,,,") a0) /// This list expression exceeds the maximum size for list literals. Use an array for larger literals and call Array.ToList. - /// (Originally from ..\FSComp.txt:575) + /// (Originally from ..\FSComp.txt:576) static member tcListLiteralMaxSize() = (742, GetStringFunc("tcListLiteralMaxSize",",,,") ) /// The expression form 'expr then expr' may only be used as part of an explicit object constructor - /// (Originally from ..\FSComp.txt:576) + /// (Originally from ..\FSComp.txt:577) static member tcExpressionFormRequiresObjectConstructor() = (743, GetStringFunc("tcExpressionFormRequiresObjectConstructor",",,,") ) /// Named arguments cannot be given to member trait calls - /// (Originally from ..\FSComp.txt:577) + /// (Originally from ..\FSComp.txt:578) static member tcNamedArgumentsCannotBeUsedInMemberTraits() = (744, GetStringFunc("tcNamedArgumentsCannotBeUsedInMemberTraits",",,,") ) /// This is not a valid name for an enumeration case - /// (Originally from ..\FSComp.txt:578) + /// (Originally from ..\FSComp.txt:579) static member tcNotValidEnumCaseName() = (745, GetStringFunc("tcNotValidEnumCaseName",",,,") ) /// This field is not mutable - /// (Originally from ..\FSComp.txt:579) + /// (Originally from ..\FSComp.txt:580) static member tcFieldIsNotMutable() = (746, GetStringFunc("tcFieldIsNotMutable",",,,") ) /// This construct may only be used within list, array and sequence expressions, e.g. expressions of the form 'seq { ... }', '[ ... ]' or '[| ... |]'. These use the syntax 'for ... in ... do ... yield...' to generate elements - /// (Originally from ..\FSComp.txt:580) + /// (Originally from ..\FSComp.txt:581) static member tcConstructRequiresListArrayOrSequence() = (747, GetStringFunc("tcConstructRequiresListArrayOrSequence",",,,") ) /// This construct may only be used within computation expressions. To return a value from an ordinary function simply write the expression without 'return'. - /// (Originally from ..\FSComp.txt:581) + /// (Originally from ..\FSComp.txt:582) static member tcConstructRequiresComputationExpressions() = (748, GetStringFunc("tcConstructRequiresComputationExpressions",",,,") ) /// This construct may only be used within sequence or computation expressions - /// (Originally from ..\FSComp.txt:582) + /// (Originally from ..\FSComp.txt:583) static member tcConstructRequiresSequenceOrComputations() = (749, GetStringFunc("tcConstructRequiresSequenceOrComputations",",,,") ) /// This construct may only be used within computation expressions - /// (Originally from ..\FSComp.txt:583) + /// (Originally from ..\FSComp.txt:584) static member tcConstructRequiresComputationExpression() = (750, GetStringFunc("tcConstructRequiresComputationExpression",",,,") ) /// Invalid indexer expression - /// (Originally from ..\FSComp.txt:584) + /// (Originally from ..\FSComp.txt:585) static member tcInvalidIndexerExpression() = (751, GetStringFunc("tcInvalidIndexerExpression",",,,") ) /// The operator 'expr.[idx]' has been used on an object of indeterminate type based on information prior to this program point. Consider adding further type constraints - /// (Originally from ..\FSComp.txt:585) + /// (Originally from ..\FSComp.txt:586) static member tcObjectOfIndeterminateTypeUsedRequireTypeConstraint() = (752, GetStringFunc("tcObjectOfIndeterminateTypeUsedRequireTypeConstraint",",,,") ) /// Cannot inherit from a variable type - /// (Originally from ..\FSComp.txt:586) + /// (Originally from ..\FSComp.txt:587) static member tcCannotInheritFromVariableType() = (753, GetStringFunc("tcCannotInheritFromVariableType",",,,") ) /// Calls to object constructors on type parameters cannot be given arguments - /// (Originally from ..\FSComp.txt:587) + /// (Originally from ..\FSComp.txt:588) static member tcObjectConstructorsOnTypeParametersCannotTakeArguments() = (754, GetStringFunc("tcObjectConstructorsOnTypeParametersCannotTakeArguments",",,,") ) /// The 'CompiledName' attribute cannot be used with this language element - /// (Originally from ..\FSComp.txt:588) + /// (Originally from ..\FSComp.txt:589) static member tcCompiledNameAttributeMisused() = (755, GetStringFunc("tcCompiledNameAttributeMisused",",,,") ) /// '%s' may only be used with named types - /// (Originally from ..\FSComp.txt:589) + /// (Originally from ..\FSComp.txt:590) static member tcNamedTypeRequired(a0 : System.String) = (756, GetStringFunc("tcNamedTypeRequired",",,,%s,,,") a0) /// 'inherit' cannot be used on interface types. Consider implementing the interface by using 'interface ... with ... end' instead. - /// (Originally from ..\FSComp.txt:590) + /// (Originally from ..\FSComp.txt:591) static member tcInheritCannotBeUsedOnInterfaceType() = (757, GetStringFunc("tcInheritCannotBeUsedOnInterfaceType",",,,") ) /// 'new' cannot be used on interface types. Consider using an object expression '{ new ... with ... }' instead. - /// (Originally from ..\FSComp.txt:591) + /// (Originally from ..\FSComp.txt:592) static member tcNewCannotBeUsedOnInterfaceType() = (758, GetStringFunc("tcNewCannotBeUsedOnInterfaceType",",,,") ) /// Instances of this type cannot be created since it has been marked abstract or not all methods have been given implementations. Consider using an object expression '{ new ... with ... }' instead. - /// (Originally from ..\FSComp.txt:592) + /// (Originally from ..\FSComp.txt:593) static member tcAbstractTypeCannotBeInstantiated() = (759, GetStringFunc("tcAbstractTypeCannotBeInstantiated",",,,") ) /// It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type(args)', rather than 'Type(args)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value - /// (Originally from ..\FSComp.txt:593) + /// (Originally from ..\FSComp.txt:594) static member tcIDisposableTypeShouldUseNew() = (760, GetStringFunc("tcIDisposableTypeShouldUseNew",",,,") ) /// '%s' may only be used to construct object types - /// (Originally from ..\FSComp.txt:594) + /// (Originally from ..\FSComp.txt:595) static member tcSyntaxCanOnlyBeUsedToCreateObjectTypes(a0 : System.String) = (761, GetStringFunc("tcSyntaxCanOnlyBeUsedToCreateObjectTypes",",,,%s,,,") a0) /// Constructors for the type '%s' must directly or indirectly call its implicit object constructor. Use a call to the implicit object constructor instead of a record expression. - /// (Originally from ..\FSComp.txt:595) + /// (Originally from ..\FSComp.txt:596) static member tcConstructorRequiresCall(a0 : System.String) = (762, GetStringFunc("tcConstructorRequiresCall",",,,%s,,,") a0) /// The field '%s' has been given a value, but is not present in the type '%s' - /// (Originally from ..\FSComp.txt:596) + /// (Originally from ..\FSComp.txt:597) static member tcUndefinedField(a0 : System.String, a1 : System.String) = (763, GetStringFunc("tcUndefinedField",",,,%s,,,%s,,,") a0 a1) /// No assignment given for field '%s' of type '%s' - /// (Originally from ..\FSComp.txt:597) + /// (Originally from ..\FSComp.txt:598) static member tcFieldRequiresAssignment(a0 : System.String, a1 : System.String) = (764, GetStringFunc("tcFieldRequiresAssignment",",,,%s,,,%s,,,") a0 a1) /// Extraneous fields have been given values - /// (Originally from ..\FSComp.txt:598) + /// (Originally from ..\FSComp.txt:599) static member tcExtraneousFieldsGivenValues() = (765, GetStringFunc("tcExtraneousFieldsGivenValues",",,,") ) /// Only overrides of abstract and virtual members may be specified in object expressions - /// (Originally from ..\FSComp.txt:599) + /// (Originally from ..\FSComp.txt:600) static member tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual() = (766, GetStringFunc("tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual",",,,") ) /// The member '%s' does not correspond to any abstract or virtual method available to override or implement. - /// (Originally from ..\FSComp.txt:600) + /// (Originally from ..\FSComp.txt:601) static member tcNoAbstractOrVirtualMemberFound(a0 : System.String) = (767, GetStringFunc("tcNoAbstractOrVirtualMemberFound",",,,%s,,,") a0) /// The type %s contains the member '%s' but it is not a virtual or abstract method that is available to override or implement. - /// (Originally from ..\FSComp.txt:601) + /// (Originally from ..\FSComp.txt:602) static member tcMemberFoundIsNotAbstractOrVirtual(a0 : System.String, a1 : System.String) = (767, GetStringFunc("tcMemberFoundIsNotAbstractOrVirtual",",,,%s,,,%s,,,") a0 a1) /// The member '%s' does not accept the correct number of arguments. %d argument(s) are expected, but %d were given. The required signature is '%s'.%s - /// (Originally from ..\FSComp.txt:602) + /// (Originally from ..\FSComp.txt:603) static member tcArgumentArityMismatch(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String, a4 : System.String) = (768, GetStringFunc("tcArgumentArityMismatch",",,,%s,,,%d,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3 a4) /// The member '%s' does not accept the correct number of arguments. One overload accepts %d arguments, but %d were given. The required signature is '%s'.%s - /// (Originally from ..\FSComp.txt:603) + /// (Originally from ..\FSComp.txt:604) static member tcArgumentArityMismatchOneOverload(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String, a4 : System.String) = (769, GetStringFunc("tcArgumentArityMismatchOneOverload",",,,%s,,,%d,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3 a4) /// A simple method name is required here - /// (Originally from ..\FSComp.txt:604) + /// (Originally from ..\FSComp.txt:605) static member tcSimpleMethodNameRequired() = (770, GetStringFunc("tcSimpleMethodNameRequired",",,,") ) /// The types System.ValueType, System.Enum, System.Delegate, System.MulticastDelegate and System.Array cannot be used as super types in an object expression or class - /// (Originally from ..\FSComp.txt:605) + /// (Originally from ..\FSComp.txt:606) static member tcPredefinedTypeCannotBeUsedAsSuperType() = (771, GetStringFunc("tcPredefinedTypeCannotBeUsedAsSuperType",",,,") ) /// 'new' must be used with a named type - /// (Originally from ..\FSComp.txt:606) + /// (Originally from ..\FSComp.txt:607) static member tcNewMustBeUsedWithNamedType() = (772, GetStringFunc("tcNewMustBeUsedWithNamedType",",,,") ) /// Cannot create an extension of a sealed type - /// (Originally from ..\FSComp.txt:607) + /// (Originally from ..\FSComp.txt:608) static member tcCannotCreateExtensionOfSealedType() = (773, GetStringFunc("tcCannotCreateExtensionOfSealedType",",,,") ) /// No arguments may be given when constructing a record value - /// (Originally from ..\FSComp.txt:608) + /// (Originally from ..\FSComp.txt:609) static member tcNoArgumentsForRecordValue() = (774, GetStringFunc("tcNoArgumentsForRecordValue",",,,") ) /// Interface implementations cannot be given on construction expressions - /// (Originally from ..\FSComp.txt:609) + /// (Originally from ..\FSComp.txt:610) static member tcNoInterfaceImplementationForConstructionExpression() = (775, GetStringFunc("tcNoInterfaceImplementationForConstructionExpression",",,,") ) /// Object construction expressions may only be used to implement constructors in class types - /// (Originally from ..\FSComp.txt:610) + /// (Originally from ..\FSComp.txt:611) static member tcObjectConstructionCanOnlyBeUsedInClassTypes() = (776, GetStringFunc("tcObjectConstructionCanOnlyBeUsedInClassTypes",",,,") ) /// Only simple bindings of the form 'id = expr' can be used in construction expressions - /// (Originally from ..\FSComp.txt:611) + /// (Originally from ..\FSComp.txt:612) static member tcOnlySimpleBindingsCanBeUsedInConstructionExpressions() = (777, GetStringFunc("tcOnlySimpleBindingsCanBeUsedInConstructionExpressions",",,,") ) /// Objects must be initialized by an object construction expression that calls an inherited object constructor and assigns a value to each field - /// (Originally from ..\FSComp.txt:612) + /// (Originally from ..\FSComp.txt:613) static member tcObjectsMustBeInitializedWithObjectExpression() = (778, GetStringFunc("tcObjectsMustBeInitializedWithObjectExpression",",,,") ) /// Expected an interface type - /// (Originally from ..\FSComp.txt:613) + /// (Originally from ..\FSComp.txt:614) static member tcExpectedInterfaceType() = (779, GetStringFunc("tcExpectedInterfaceType",",,,") ) /// Constructor expressions for interfaces do not take arguments - /// (Originally from ..\FSComp.txt:614) + /// (Originally from ..\FSComp.txt:615) static member tcConstructorForInterfacesDoNotTakeArguments() = (780, GetStringFunc("tcConstructorForInterfacesDoNotTakeArguments",",,,") ) /// This object constructor requires arguments - /// (Originally from ..\FSComp.txt:615) + /// (Originally from ..\FSComp.txt:616) static member tcConstructorRequiresArguments() = (781, GetStringFunc("tcConstructorRequiresArguments",",,,") ) /// 'new' may only be used with object constructors - /// (Originally from ..\FSComp.txt:616) + /// (Originally from ..\FSComp.txt:617) static member tcNewRequiresObjectConstructor() = (782, GetStringFunc("tcNewRequiresObjectConstructor",",,,") ) /// At least one override did not correctly implement its corresponding abstract member - /// (Originally from ..\FSComp.txt:617) + /// (Originally from ..\FSComp.txt:618) static member tcAtLeastOneOverrideIsInvalid() = (783, GetStringFunc("tcAtLeastOneOverrideIsInvalid",",,,") ) /// This numeric literal requires that a module '%s' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope - /// (Originally from ..\FSComp.txt:618) + /// (Originally from ..\FSComp.txt:619) static member tcNumericLiteralRequiresModule(a0 : System.String) = (784, GetStringFunc("tcNumericLiteralRequiresModule",",,,%s,,,") a0) /// Invalid record construction - /// (Originally from ..\FSComp.txt:619) + /// (Originally from ..\FSComp.txt:620) static member tcInvalidRecordConstruction() = (785, GetStringFunc("tcInvalidRecordConstruction",",,,") ) /// The expression form { expr with ... } may only be used with record types. To build object types use { new Type(...) with ... } - /// (Originally from ..\FSComp.txt:620) + /// (Originally from ..\FSComp.txt:621) static member tcExpressionFormRequiresRecordTypes() = (786, GetStringFunc("tcExpressionFormRequiresRecordTypes",",,,") ) /// The inherited type is not an object model type - /// (Originally from ..\FSComp.txt:621) + /// (Originally from ..\FSComp.txt:622) static member tcInheritedTypeIsNotObjectModelType() = (787, GetStringFunc("tcInheritedTypeIsNotObjectModelType",",,,") ) /// Object construction expressions (i.e. record expressions with inheritance specifications) may only be used to implement constructors in object model types. Use 'new ObjectType(args)' to construct instances of object model types outside of constructors - /// (Originally from ..\FSComp.txt:622) + /// (Originally from ..\FSComp.txt:623) static member tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes() = (788, GetStringFunc("tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes",",,,") ) /// '{ }' is not a valid expression. Records must include at least one field. Empty sequences are specified by using Seq.empty or an empty list '[]'. - /// (Originally from ..\FSComp.txt:623) + /// (Originally from ..\FSComp.txt:624) static member tcEmptyRecordInvalid() = (789, GetStringFunc("tcEmptyRecordInvalid",",,,") ) /// This type is not a record type. Values of class and struct types must be created using calls to object constructors. - /// (Originally from ..\FSComp.txt:624) + /// (Originally from ..\FSComp.txt:625) static member tcTypeIsNotARecordTypeNeedConstructor() = (790, GetStringFunc("tcTypeIsNotARecordTypeNeedConstructor",",,,") ) /// This type is not a record type - /// (Originally from ..\FSComp.txt:625) + /// (Originally from ..\FSComp.txt:626) static member tcTypeIsNotARecordType() = (791, GetStringFunc("tcTypeIsNotARecordType",",,,") ) /// This construct is ambiguous as part of a computation expression. Nested expressions may be written using 'let _ = (...)' and nested computations using 'let! res = builder { ... }'. - /// (Originally from ..\FSComp.txt:626) + /// (Originally from ..\FSComp.txt:627) static member tcConstructIsAmbiguousInComputationExpression() = (792, GetStringFunc("tcConstructIsAmbiguousInComputationExpression",",,,") ) /// This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {... }'. - /// (Originally from ..\FSComp.txt:627) + /// (Originally from ..\FSComp.txt:628) static member tcConstructIsAmbiguousInSequenceExpression() = (793, GetStringFunc("tcConstructIsAmbiguousInSequenceExpression",",,,") ) /// 'do!' cannot be used within sequence expressions - /// (Originally from ..\FSComp.txt:628) + /// (Originally from ..\FSComp.txt:629) static member tcDoBangIllegalInSequenceExpression() = (794, GetStringFunc("tcDoBangIllegalInSequenceExpression",",,,") ) /// The use of 'let! x = coll' in sequence expressions is not permitted. Use 'for x in coll' instead. - /// (Originally from ..\FSComp.txt:629) + /// (Originally from ..\FSComp.txt:630) static member tcUseForInSequenceExpression() = (795, GetStringFunc("tcUseForInSequenceExpression",",,,") ) /// 'try'/'with' cannot be used within sequence expressions - /// (Originally from ..\FSComp.txt:630) + /// (Originally from ..\FSComp.txt:631) static member tcTryIllegalInSequenceExpression() = (796, GetStringFunc("tcTryIllegalInSequenceExpression",",,,") ) /// In sequence expressions, multiple results are generated using 'yield!' - /// (Originally from ..\FSComp.txt:631) + /// (Originally from ..\FSComp.txt:632) static member tcUseYieldBangForMultipleResults() = (797, GetStringFunc("tcUseYieldBangForMultipleResults",",,,") ) /// Invalid assignment - /// (Originally from ..\FSComp.txt:632) + /// (Originally from ..\FSComp.txt:633) static member tcInvalidAssignment() = (799, GetStringFunc("tcInvalidAssignment",",,,") ) /// Invalid use of a type name - /// (Originally from ..\FSComp.txt:633) + /// (Originally from ..\FSComp.txt:634) static member tcInvalidUseOfTypeName() = (800, GetStringFunc("tcInvalidUseOfTypeName",",,,") ) /// This type has no accessible object constructors - /// (Originally from ..\FSComp.txt:634) + /// (Originally from ..\FSComp.txt:635) static member tcTypeHasNoAccessibleConstructor() = (801, GetStringFunc("tcTypeHasNoAccessibleConstructor",",,,") ) /// Invalid use of an interface type - /// (Originally from ..\FSComp.txt:637) + /// (Originally from ..\FSComp.txt:638) static member tcInvalidUseOfInterfaceType() = (804, GetStringFunc("tcInvalidUseOfInterfaceType",",,,") ) /// Invalid use of a delegate constructor. Use the syntax 'new Type(args)' or just 'Type(args)'. - /// (Originally from ..\FSComp.txt:638) + /// (Originally from ..\FSComp.txt:639) static member tcInvalidUseOfDelegate() = (805, GetStringFunc("tcInvalidUseOfDelegate",",,,") ) /// Property '%s' is not static - /// (Originally from ..\FSComp.txt:639) + /// (Originally from ..\FSComp.txt:640) static member tcPropertyIsNotStatic(a0 : System.String) = (806, GetStringFunc("tcPropertyIsNotStatic",",,,%s,,,") a0) /// Property '%s' is not readable - /// (Originally from ..\FSComp.txt:640) + /// (Originally from ..\FSComp.txt:641) static member tcPropertyIsNotReadable(a0 : System.String) = (807, GetStringFunc("tcPropertyIsNotReadable",",,,%s,,,") a0) /// This lookup cannot be used here - /// (Originally from ..\FSComp.txt:641) + /// (Originally from ..\FSComp.txt:642) static member tcLookupMayNotBeUsedHere() = (808, GetStringFunc("tcLookupMayNotBeUsedHere",",,,") ) /// Property '%s' is static - /// (Originally from ..\FSComp.txt:642) + /// (Originally from ..\FSComp.txt:643) static member tcPropertyIsStatic(a0 : System.String) = (809, GetStringFunc("tcPropertyIsStatic",",,,%s,,,") a0) /// Property '%s' cannot be set - /// (Originally from ..\FSComp.txt:643) + /// (Originally from ..\FSComp.txt:644) static member tcPropertyCannotBeSet1(a0 : System.String) = (810, GetStringFunc("tcPropertyCannotBeSet1",",,,%s,,,") a0) /// Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'. - /// (Originally from ..\FSComp.txt:644) + /// (Originally from ..\FSComp.txt:645) static member tcConstructorsCannotBeFirstClassValues() = (811, GetStringFunc("tcConstructorsCannotBeFirstClassValues",",,,") ) /// The syntax 'expr.id' may only be used with record labels, properties and fields - /// (Originally from ..\FSComp.txt:645) + /// (Originally from ..\FSComp.txt:646) static member tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields() = (812, GetStringFunc("tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields",",,,") ) /// Event '%s' is static - /// (Originally from ..\FSComp.txt:646) + /// (Originally from ..\FSComp.txt:647) static member tcEventIsStatic(a0 : System.String) = (813, GetStringFunc("tcEventIsStatic",",,,%s,,,") a0) /// Event '%s' is not static - /// (Originally from ..\FSComp.txt:647) + /// (Originally from ..\FSComp.txt:648) static member tcEventIsNotStatic(a0 : System.String) = (814, GetStringFunc("tcEventIsNotStatic",",,,%s,,,") a0) /// The named argument '%s' did not match any argument or mutable property - /// (Originally from ..\FSComp.txt:648) + /// (Originally from ..\FSComp.txt:649) static member tcNamedArgumentDidNotMatch(a0 : System.String) = (815, GetStringFunc("tcNamedArgumentDidNotMatch",",,,%s,,,") a0) /// One or more of the overloads of this method has curried arguments. Consider redesigning these members to take arguments in tupled form. - /// (Originally from ..\FSComp.txt:649) + /// (Originally from ..\FSComp.txt:650) static member tcOverloadsCannotHaveCurriedArguments() = (816, GetStringFunc("tcOverloadsCannotHaveCurriedArguments",",,,") ) /// The unnamed arguments do not form a prefix of the arguments of the method called - /// (Originally from ..\FSComp.txt:650) + /// (Originally from ..\FSComp.txt:651) static member tcUnnamedArgumentsDoNotFormPrefix() = (GetStringFunc("tcUnnamedArgumentsDoNotFormPrefix",",,,") ) /// Static optimization conditionals are only for use within the F# library - /// (Originally from ..\FSComp.txt:651) + /// (Originally from ..\FSComp.txt:652) static member tcStaticOptimizationConditionalsOnlyForFSharpLibrary() = (817, GetStringFunc("tcStaticOptimizationConditionalsOnlyForFSharpLibrary",",,,") ) /// The corresponding formal argument is not optional - /// (Originally from ..\FSComp.txt:652) + /// (Originally from ..\FSComp.txt:653) static member tcFormalArgumentIsNotOptional() = (818, GetStringFunc("tcFormalArgumentIsNotOptional",",,,") ) /// Invalid optional assignment to a property or field - /// (Originally from ..\FSComp.txt:653) + /// (Originally from ..\FSComp.txt:654) static member tcInvalidOptionalAssignmentToPropertyOrField() = (819, GetStringFunc("tcInvalidOptionalAssignmentToPropertyOrField",",,,") ) /// A delegate constructor must be passed a single function value - /// (Originally from ..\FSComp.txt:654) + /// (Originally from ..\FSComp.txt:655) static member tcDelegateConstructorMustBePassed() = (820, GetStringFunc("tcDelegateConstructorMustBePassed",",,,") ) /// A binding cannot be marked both 'use' and 'rec' - /// (Originally from ..\FSComp.txt:655) + /// (Originally from ..\FSComp.txt:656) static member tcBindingCannotBeUseAndRec() = (821, GetStringFunc("tcBindingCannotBeUseAndRec",",,,") ) /// The 'VolatileField' attribute may only be used on 'let' bindings in classes - /// (Originally from ..\FSComp.txt:656) + /// (Originally from ..\FSComp.txt:657) static member tcVolatileOnlyOnClassLetBindings() = (823, GetStringFunc("tcVolatileOnlyOnClassLetBindings",",,,") ) /// Attributes are not permitted on 'let' bindings in expressions - /// (Originally from ..\FSComp.txt:657) + /// (Originally from ..\FSComp.txt:658) static member tcAttributesAreNotPermittedOnLetBindings() = (824, GetStringFunc("tcAttributesAreNotPermittedOnLetBindings",",,,") ) /// The 'DefaultValue' attribute may only be used on 'val' declarations - /// (Originally from ..\FSComp.txt:658) + /// (Originally from ..\FSComp.txt:659) static member tcDefaultValueAttributeRequiresVal() = (825, GetStringFunc("tcDefaultValueAttributeRequiresVal",",,,") ) /// The 'ConditionalAttribute' attribute may only be used on members - /// (Originally from ..\FSComp.txt:659) + /// (Originally from ..\FSComp.txt:660) static member tcConditionalAttributeRequiresMembers() = (826, GetStringFunc("tcConditionalAttributeRequiresMembers",",,,") ) /// This is not a valid name for an active pattern - /// (Originally from ..\FSComp.txt:660) + /// (Originally from ..\FSComp.txt:661) static member tcInvalidActivePatternName() = (827, GetStringFunc("tcInvalidActivePatternName",",,,") ) /// The 'EntryPointAttribute' attribute may only be used on function definitions in modules - /// (Originally from ..\FSComp.txt:661) + /// (Originally from ..\FSComp.txt:662) static member tcEntryPointAttributeRequiresFunctionInModule() = (828, GetStringFunc("tcEntryPointAttributeRequiresFunctionInModule",",,,") ) /// Mutable values cannot be marked 'inline' - /// (Originally from ..\FSComp.txt:662) + /// (Originally from ..\FSComp.txt:663) static member tcMutableValuesCannotBeInline() = (829, GetStringFunc("tcMutableValuesCannotBeInline",",,,") ) /// Mutable values cannot have generic parameters - /// (Originally from ..\FSComp.txt:663) + /// (Originally from ..\FSComp.txt:664) static member tcMutableValuesMayNotHaveGenericParameters() = (830, GetStringFunc("tcMutableValuesMayNotHaveGenericParameters",",,,") ) /// Mutable function values should be written 'let mutable f = (fun args -> ...)' - /// (Originally from ..\FSComp.txt:664) + /// (Originally from ..\FSComp.txt:665) static member tcMutableValuesSyntax() = (831, GetStringFunc("tcMutableValuesSyntax",",,,") ) /// Only functions may be marked 'inline' - /// (Originally from ..\FSComp.txt:665) + /// (Originally from ..\FSComp.txt:666) static member tcOnlyFunctionsCanBeInline() = (832, GetStringFunc("tcOnlyFunctionsCanBeInline",",,,") ) /// A literal value cannot be given the [] or [] attributes - /// (Originally from ..\FSComp.txt:666) + /// (Originally from ..\FSComp.txt:667) static member tcIllegalAttributesForLiteral() = (833, GetStringFunc("tcIllegalAttributesForLiteral",",,,") ) /// A literal value cannot be marked 'mutable' - /// (Originally from ..\FSComp.txt:667) + /// (Originally from ..\FSComp.txt:668) static member tcLiteralCannotBeMutable() = (834, GetStringFunc("tcLiteralCannotBeMutable",",,,") ) /// A literal value cannot be marked 'inline' - /// (Originally from ..\FSComp.txt:668) + /// (Originally from ..\FSComp.txt:669) static member tcLiteralCannotBeInline() = (835, GetStringFunc("tcLiteralCannotBeInline",",,,") ) /// Literal values cannot have generic parameters - /// (Originally from ..\FSComp.txt:669) + /// (Originally from ..\FSComp.txt:670) static member tcLiteralCannotHaveGenericParameters() = (836, GetStringFunc("tcLiteralCannotHaveGenericParameters",",,,") ) /// This is not a valid constant expression - /// (Originally from ..\FSComp.txt:670) + /// (Originally from ..\FSComp.txt:671) static member tcInvalidConstantExpression() = (837, GetStringFunc("tcInvalidConstantExpression",",,,") ) /// This type is not accessible from this code location - /// (Originally from ..\FSComp.txt:671) + /// (Originally from ..\FSComp.txt:672) static member tcTypeIsInaccessible() = (838, GetStringFunc("tcTypeIsInaccessible",",,,") ) /// Unexpected condition in imported assembly: failed to decode AttributeUsage attribute - /// (Originally from ..\FSComp.txt:672) + /// (Originally from ..\FSComp.txt:673) static member tcUnexpectedConditionInImportedAssembly() = (839, GetStringFunc("tcUnexpectedConditionInImportedAssembly",",,,") ) /// Unrecognized attribute target. Valid attribute targets are 'assembly', 'module', 'type', 'method', 'property', 'return', 'param', 'field', 'event', 'constructor'. - /// (Originally from ..\FSComp.txt:673) + /// (Originally from ..\FSComp.txt:674) static member tcUnrecognizedAttributeTarget() = (840, GetStringFunc("tcUnrecognizedAttributeTarget",",,,") ) /// This attribute is not valid for use on this language element. Assembly attributes should be attached to a 'do ()' declaration, if necessary within an F# module. - /// (Originally from ..\FSComp.txt:674) + /// (Originally from ..\FSComp.txt:675) static member tcAttributeIsNotValidForLanguageElementUseDo() = (841, GetStringFunc("tcAttributeIsNotValidForLanguageElementUseDo",",,,") ) /// This attribute is not valid for use on this language element - /// (Originally from ..\FSComp.txt:675) + /// (Originally from ..\FSComp.txt:676) static member tcAttributeIsNotValidForLanguageElement() = (842, GetStringFunc("tcAttributeIsNotValidForLanguageElement",",,,") ) /// Optional arguments cannot be used in custom attributes - /// (Originally from ..\FSComp.txt:676) + /// (Originally from ..\FSComp.txt:677) static member tcOptionalArgumentsCannotBeUsedInCustomAttribute() = (843, GetStringFunc("tcOptionalArgumentsCannotBeUsedInCustomAttribute",",,,") ) /// This property cannot be set - /// (Originally from ..\FSComp.txt:677) + /// (Originally from ..\FSComp.txt:678) static member tcPropertyCannotBeSet0() = (844, GetStringFunc("tcPropertyCannotBeSet0",",,,") ) /// This property or field was not found on this custom attribute type - /// (Originally from ..\FSComp.txt:678) + /// (Originally from ..\FSComp.txt:679) static member tcPropertyOrFieldNotFoundInAttribute() = (845, GetStringFunc("tcPropertyOrFieldNotFoundInAttribute",",,,") ) /// A custom attribute must be a reference type - /// (Originally from ..\FSComp.txt:679) + /// (Originally from ..\FSComp.txt:680) static member tcCustomAttributeMustBeReferenceType() = (846, GetStringFunc("tcCustomAttributeMustBeReferenceType",",,,") ) /// The number of args for a custom attribute does not match the expected number of args for the attribute constructor - /// (Originally from ..\FSComp.txt:680) + /// (Originally from ..\FSComp.txt:681) static member tcCustomAttributeArgumentMismatch() = (847, GetStringFunc("tcCustomAttributeArgumentMismatch",",,,") ) /// A custom attribute must invoke an object constructor - /// (Originally from ..\FSComp.txt:681) + /// (Originally from ..\FSComp.txt:682) static member tcCustomAttributeMustInvokeConstructor() = (848, GetStringFunc("tcCustomAttributeMustInvokeConstructor",",,,") ) /// Attribute expressions must be calls to object constructors - /// (Originally from ..\FSComp.txt:682) + /// (Originally from ..\FSComp.txt:683) static member tcAttributeExpressionsMustBeConstructorCalls() = (849, GetStringFunc("tcAttributeExpressionsMustBeConstructorCalls",",,,") ) /// This attribute cannot be used in this version of F# - /// (Originally from ..\FSComp.txt:683) + /// (Originally from ..\FSComp.txt:684) static member tcUnsupportedAttribute() = (850, GetStringFunc("tcUnsupportedAttribute",",,,") ) /// Invalid inline specification - /// (Originally from ..\FSComp.txt:684) + /// (Originally from ..\FSComp.txt:685) static member tcInvalidInlineSpecification() = (851, GetStringFunc("tcInvalidInlineSpecification",",,,") ) /// 'use' bindings must be of the form 'use = ' - /// (Originally from ..\FSComp.txt:685) + /// (Originally from ..\FSComp.txt:686) static member tcInvalidUseBinding() = (852, GetStringFunc("tcInvalidUseBinding",",,,") ) /// Abstract members are not permitted in an augmentation - they must be defined as part of the type itself - /// (Originally from ..\FSComp.txt:686) + /// (Originally from ..\FSComp.txt:687) static member tcAbstractMembersIllegalInAugmentation() = (853, GetStringFunc("tcAbstractMembersIllegalInAugmentation",",,,") ) /// Method overrides and interface implementations are not permitted here - /// (Originally from ..\FSComp.txt:687) + /// (Originally from ..\FSComp.txt:688) static member tcMethodOverridesIllegalHere() = (854, GetStringFunc("tcMethodOverridesIllegalHere",",,,") ) /// No abstract or interface member was found that corresponds to this override - /// (Originally from ..\FSComp.txt:688) + /// (Originally from ..\FSComp.txt:689) static member tcNoMemberFoundForOverride() = (855, GetStringFunc("tcNoMemberFoundForOverride",",,,") ) /// This override takes a different number of arguments to the corresponding abstract member. The following abstract members were found:%s - /// (Originally from ..\FSComp.txt:689) + /// (Originally from ..\FSComp.txt:690) static member tcOverrideArityMismatch(a0 : System.String) = (856, GetStringFunc("tcOverrideArityMismatch",",,,%s,,,") a0) /// This method already has a default implementation - /// (Originally from ..\FSComp.txt:690) + /// (Originally from ..\FSComp.txt:691) static member tcDefaultImplementationAlreadyExists() = (857, GetStringFunc("tcDefaultImplementationAlreadyExists",",,,") ) /// The method implemented by this default is ambiguous - /// (Originally from ..\FSComp.txt:691) + /// (Originally from ..\FSComp.txt:692) static member tcDefaultAmbiguous() = (858, GetStringFunc("tcDefaultAmbiguous",",,,") ) /// No abstract property was found that corresponds to this override - /// (Originally from ..\FSComp.txt:692) + /// (Originally from ..\FSComp.txt:693) static member tcNoPropertyFoundForOverride() = (859, GetStringFunc("tcNoPropertyFoundForOverride",",,,") ) /// This property overrides or implements an abstract property but the abstract property doesn't have a corresponding %s - /// (Originally from ..\FSComp.txt:693) + /// (Originally from ..\FSComp.txt:694) static member tcAbstractPropertyMissingGetOrSet(a0 : System.String) = (860, GetStringFunc("tcAbstractPropertyMissingGetOrSet",",,,%s,,,") a0) /// Invalid signature for set member - /// (Originally from ..\FSComp.txt:694) + /// (Originally from ..\FSComp.txt:695) static member tcInvalidSignatureForSet() = (861, GetStringFunc("tcInvalidSignatureForSet",",,,") ) /// This new member hides the abstract member '%s'. Rename the member or use 'override' instead. - /// (Originally from ..\FSComp.txt:695) + /// (Originally from ..\FSComp.txt:696) static member tcNewMemberHidesAbstractMember(a0 : System.String) = (864, GetStringFunc("tcNewMemberHidesAbstractMember",",,,%s,,,") a0) /// This new member hides the abstract member '%s' once tuples, functions, units of measure and/or provided types are erased. Rename the member or use 'override' instead. - /// (Originally from ..\FSComp.txt:696) + /// (Originally from ..\FSComp.txt:697) static member tcNewMemberHidesAbstractMemberWithSuffix(a0 : System.String) = (864, GetStringFunc("tcNewMemberHidesAbstractMemberWithSuffix",",,,%s,,,") a0) /// Interfaces cannot contain definitions of static initializers - /// (Originally from ..\FSComp.txt:697) + /// (Originally from ..\FSComp.txt:698) static member tcStaticInitializersIllegalInInterface() = (865, GetStringFunc("tcStaticInitializersIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of object constructors - /// (Originally from ..\FSComp.txt:698) + /// (Originally from ..\FSComp.txt:699) static member tcObjectConstructorsIllegalInInterface() = (866, GetStringFunc("tcObjectConstructorsIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of member overrides - /// (Originally from ..\FSComp.txt:699) + /// (Originally from ..\FSComp.txt:700) static member tcMemberOverridesIllegalInInterface() = (867, GetStringFunc("tcMemberOverridesIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of concrete members. You may need to define a constructor on your type to indicate that the type is a class. - /// (Originally from ..\FSComp.txt:700) + /// (Originally from ..\FSComp.txt:701) static member tcConcreteMembersIllegalInInterface() = (868, GetStringFunc("tcConcreteMembersIllegalInInterface",",,,") ) /// Constructors cannot be specified in exception augmentations - /// (Originally from ..\FSComp.txt:701) + /// (Originally from ..\FSComp.txt:702) static member tcConstructorsDisallowedInExceptionAugmentation() = (869, GetStringFunc("tcConstructorsDisallowedInExceptionAugmentation",",,,") ) /// Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. - /// (Originally from ..\FSComp.txt:702) + /// (Originally from ..\FSComp.txt:703) static member tcStructsCannotHaveConstructorWithNoArguments() = (870, GetStringFunc("tcStructsCannotHaveConstructorWithNoArguments",",,,") ) /// Constructors cannot be defined for this type - /// (Originally from ..\FSComp.txt:703) + /// (Originally from ..\FSComp.txt:704) static member tcConstructorsIllegalForThisType() = (871, GetStringFunc("tcConstructorsIllegalForThisType",",,,") ) /// Recursive bindings that include member specifications can only occur as a direct augmentation of a type - /// (Originally from ..\FSComp.txt:704) + /// (Originally from ..\FSComp.txt:705) static member tcRecursiveBindingsWithMembersMustBeDirectAugmentation() = (872, GetStringFunc("tcRecursiveBindingsWithMembersMustBeDirectAugmentation",",,,") ) /// Only simple variable patterns can be bound in 'let rec' constructs - /// (Originally from ..\FSComp.txt:705) + /// (Originally from ..\FSComp.txt:706) static member tcOnlySimplePatternsInLetRec() = (873, GetStringFunc("tcOnlySimplePatternsInLetRec",",,,") ) /// Only record fields and simple, non-recursive 'let' bindings may be marked mutable - /// (Originally from ..\FSComp.txt:706) + /// (Originally from ..\FSComp.txt:707) static member tcOnlyRecordFieldsAndSimpleLetCanBeMutable() = (874, GetStringFunc("tcOnlyRecordFieldsAndSimpleLetCanBeMutable",",,,") ) /// This member is not sufficiently generic - /// (Originally from ..\FSComp.txt:707) + /// (Originally from ..\FSComp.txt:708) static member tcMemberIsNotSufficientlyGeneric() = (875, GetStringFunc("tcMemberIsNotSufficientlyGeneric",",,,") ) /// A declaration may only be the [] attribute if a constant value is also given, e.g. 'val x : int = 1' - /// (Originally from ..\FSComp.txt:708) + /// (Originally from ..\FSComp.txt:709) static member tcLiteralAttributeRequiresConstantValue() = (876, GetStringFunc("tcLiteralAttributeRequiresConstantValue",",,,") ) /// A declaration may only be given a value in a signature if the declaration has the [] attribute - /// (Originally from ..\FSComp.txt:709) + /// (Originally from ..\FSComp.txt:710) static member tcValueInSignatureRequiresLiteralAttribute() = (877, GetStringFunc("tcValueInSignatureRequiresLiteralAttribute",",,,") ) /// Thread-static and context-static variables must be static and given the [] attribute to indicate that the value is initialized to the default value on each new thread - /// (Originally from ..\FSComp.txt:710) + /// (Originally from ..\FSComp.txt:711) static member tcThreadStaticAndContextStaticMustBeStatic() = (878, GetStringFunc("tcThreadStaticAndContextStaticMustBeStatic",",,,") ) /// Volatile fields must be marked 'mutable' and cannot be thread-static - /// (Originally from ..\FSComp.txt:711) + /// (Originally from ..\FSComp.txt:712) static member tcVolatileFieldsMustBeMutable() = (879, GetStringFunc("tcVolatileFieldsMustBeMutable",",,,") ) /// Uninitialized 'val' fields must be mutable and marked with the '[]' attribute. Consider using a 'let' binding instead of a 'val' field. - /// (Originally from ..\FSComp.txt:712) + /// (Originally from ..\FSComp.txt:713) static member tcUninitializedValFieldsMustBeMutable() = (880, GetStringFunc("tcUninitializedValFieldsMustBeMutable",",,,") ) /// Static 'val' fields in types must be mutable, private and marked with the '[]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type. - /// (Originally from ..\FSComp.txt:713) + /// (Originally from ..\FSComp.txt:714) static member tcStaticValFieldsMustBeMutableAndPrivate() = (881, GetStringFunc("tcStaticValFieldsMustBeMutableAndPrivate",",,,") ) /// This field requires a name - /// (Originally from ..\FSComp.txt:714) + /// (Originally from ..\FSComp.txt:715) static member tcFieldRequiresName() = (882, GetStringFunc("tcFieldRequiresName",",,,") ) /// Invalid namespace, module, type or union case name - /// (Originally from ..\FSComp.txt:715) + /// (Originally from ..\FSComp.txt:716) static member tcInvalidNamespaceModuleTypeUnionName() = (883, GetStringFunc("tcInvalidNamespaceModuleTypeUnionName",",,,") ) /// Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy' - /// (Originally from ..\FSComp.txt:716) + /// (Originally from ..\FSComp.txt:717) static member tcIllegalFormForExplicitTypeDeclaration() = (884, GetStringFunc("tcIllegalFormForExplicitTypeDeclaration",",,,") ) /// Return types of union cases must be identical to the type being defined, up to abbreviations - /// (Originally from ..\FSComp.txt:717) + /// (Originally from ..\FSComp.txt:718) static member tcReturnTypesForUnionMustBeSameAsType() = (885, GetStringFunc("tcReturnTypesForUnionMustBeSameAsType",",,,") ) /// This is not a valid value for an enumeration literal - /// (Originally from ..\FSComp.txt:718) + /// (Originally from ..\FSComp.txt:719) static member tcInvalidEnumerationLiteral() = (886, GetStringFunc("tcInvalidEnumerationLiteral",",,,") ) /// The type '%s' is not an interface type - /// (Originally from ..\FSComp.txt:719) + /// (Originally from ..\FSComp.txt:720) static member tcTypeIsNotInterfaceType1(a0 : System.String) = (887, GetStringFunc("tcTypeIsNotInterfaceType1",",,,%s,,,") a0) /// Duplicate specification of an interface - /// (Originally from ..\FSComp.txt:720) + /// (Originally from ..\FSComp.txt:721) static member tcDuplicateSpecOfInterface() = (888, GetStringFunc("tcDuplicateSpecOfInterface",",,,") ) /// A field/val declaration is not permitted here - /// (Originally from ..\FSComp.txt:721) + /// (Originally from ..\FSComp.txt:722) static member tcFieldValIllegalHere() = (889, GetStringFunc("tcFieldValIllegalHere",",,,") ) /// A inheritance declaration is not permitted here - /// (Originally from ..\FSComp.txt:722) + /// (Originally from ..\FSComp.txt:723) static member tcInheritIllegalHere() = (890, GetStringFunc("tcInheritIllegalHere",",,,") ) /// This declaration opens the module '%s', which is marked as 'RequireQualifiedAccess'. Adjust your code to use qualified references to the elements of the module instead, e.g. 'List.map' instead of 'map'. This change will ensure that your code is robust as new constructs are added to libraries. - /// (Originally from ..\FSComp.txt:723) + /// (Originally from ..\FSComp.txt:724) static member tcModuleRequiresQualifiedAccess(a0 : System.String) = (892, GetStringFunc("tcModuleRequiresQualifiedAccess",",,,%s,,,") a0) /// This declaration opens the namespace or module '%s' through a partially qualified path. Adjust this code to use the full path of the namespace. This change will make your code more robust as new constructs are added to the F# and CLI libraries. - /// (Originally from ..\FSComp.txt:724) + /// (Originally from ..\FSComp.txt:725) static member tcOpenUsedWithPartiallyQualifiedPath(a0 : System.String) = (893, GetStringFunc("tcOpenUsedWithPartiallyQualifiedPath",",,,%s,,,") a0) /// Local class bindings cannot be marked inline. Consider lifting the definition out of the class or else do not mark it as inline. - /// (Originally from ..\FSComp.txt:725) + /// (Originally from ..\FSComp.txt:726) static member tcLocalClassBindingsCannotBeInline() = (894, GetStringFunc("tcLocalClassBindingsCannotBeInline",",,,") ) /// Type abbreviations cannot have members - /// (Originally from ..\FSComp.txt:726) + /// (Originally from ..\FSComp.txt:727) static member tcTypeAbbreviationsMayNotHaveMembers() = (895, GetStringFunc("tcTypeAbbreviationsMayNotHaveMembers",",,,") ) /// As of F# 4.1, the accessibility of type abbreviations is checked at compile-time. Consider changing the accessibility of the type abbreviation. Ignoring this warning might lead to runtime errors. - /// (Originally from ..\FSComp.txt:727) + /// (Originally from ..\FSComp.txt:728) static member tcTypeAbbreviationsCheckedAtCompileTime() = (GetStringFunc("tcTypeAbbreviationsCheckedAtCompileTime",",,,") ) /// Enumerations cannot have members - /// (Originally from ..\FSComp.txt:728) + /// (Originally from ..\FSComp.txt:729) static member tcEnumerationsMayNotHaveMembers() = (896, GetStringFunc("tcEnumerationsMayNotHaveMembers",",,,") ) /// Measure declarations may have only static members - /// (Originally from ..\FSComp.txt:729) + /// (Originally from ..\FSComp.txt:730) static member tcMeasureDeclarationsRequireStaticMembers() = (897, GetStringFunc("tcMeasureDeclarationsRequireStaticMembers",",,,") ) /// Structs cannot contain 'do' bindings because the default constructor for structs would not execute these bindings - /// (Originally from ..\FSComp.txt:730) + /// (Originally from ..\FSComp.txt:731) static member tcStructsMayNotContainDoBindings() = (GetStringFunc("tcStructsMayNotContainDoBindings",",,,") ) /// Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type. - /// (Originally from ..\FSComp.txt:731) + /// (Originally from ..\FSComp.txt:732) static member tcStructsMayNotContainLetBindings() = (901, GetStringFunc("tcStructsMayNotContainLetBindings",",,,") ) /// Static value definitions may only be used in types with a primary constructor. Consider adding arguments to the type definition, e.g. 'type X(args) = ...'. - /// (Originally from ..\FSComp.txt:732) + /// (Originally from ..\FSComp.txt:733) static member tcStaticLetBindingsRequireClassesWithImplicitConstructors() = (902, GetStringFunc("tcStaticLetBindingsRequireClassesWithImplicitConstructors",",,,") ) /// Measure declarations may have only static members: constructors are not available - /// (Originally from ..\FSComp.txt:733) + /// (Originally from ..\FSComp.txt:734) static member tcMeasureDeclarationsRequireStaticMembersNotConstructors() = (904, GetStringFunc("tcMeasureDeclarationsRequireStaticMembersNotConstructors",",,,") ) /// A member and a local class binding both have the name '%s' - /// (Originally from ..\FSComp.txt:734) + /// (Originally from ..\FSComp.txt:735) static member tcMemberAndLocalClassBindingHaveSameName(a0 : System.String) = (905, GetStringFunc("tcMemberAndLocalClassBindingHaveSameName",",,,%s,,,") a0) /// Type abbreviations cannot have interface declarations - /// (Originally from ..\FSComp.txt:735) + /// (Originally from ..\FSComp.txt:736) static member tcTypeAbbreviationsCannotHaveInterfaceDeclaration() = (906, GetStringFunc("tcTypeAbbreviationsCannotHaveInterfaceDeclaration",",,,") ) /// Enumerations cannot have interface declarations - /// (Originally from ..\FSComp.txt:736) + /// (Originally from ..\FSComp.txt:737) static member tcEnumerationsCannotHaveInterfaceDeclaration() = (907, GetStringFunc("tcEnumerationsCannotHaveInterfaceDeclaration",",,,") ) /// This type is not an interface type - /// (Originally from ..\FSComp.txt:737) + /// (Originally from ..\FSComp.txt:738) static member tcTypeIsNotInterfaceType0() = (908, GetStringFunc("tcTypeIsNotInterfaceType0",",,,") ) /// All implemented interfaces should be declared on the initial declaration of the type - /// (Originally from ..\FSComp.txt:738) + /// (Originally from ..\FSComp.txt:739) static member tcAllImplementedInterfacesShouldBeDeclared() = (909, GetStringFunc("tcAllImplementedInterfacesShouldBeDeclared",",,,") ) /// A default implementation of this interface has already been added because the explicit implementation of the interface was not specified at the definition of the type - /// (Originally from ..\FSComp.txt:739) + /// (Originally from ..\FSComp.txt:740) static member tcDefaultImplementationForInterfaceHasAlreadyBeenAdded() = (910, GetStringFunc("tcDefaultImplementationForInterfaceHasAlreadyBeenAdded",",,,") ) /// This member is not permitted in an interface implementation - /// (Originally from ..\FSComp.txt:740) + /// (Originally from ..\FSComp.txt:741) static member tcMemberNotPermittedInInterfaceImplementation() = (911, GetStringFunc("tcMemberNotPermittedInInterfaceImplementation",",,,") ) /// This declaration element is not permitted in an augmentation - /// (Originally from ..\FSComp.txt:741) + /// (Originally from ..\FSComp.txt:742) static member tcDeclarationElementNotPermittedInAugmentation() = (912, GetStringFunc("tcDeclarationElementNotPermittedInAugmentation",",,,") ) /// Types cannot contain nested type definitions - /// (Originally from ..\FSComp.txt:742) + /// (Originally from ..\FSComp.txt:743) static member tcTypesCannotContainNestedTypes() = (913, GetStringFunc("tcTypesCannotContainNestedTypes",",,,") ) /// type, exception or module - /// (Originally from ..\FSComp.txt:743) + /// (Originally from ..\FSComp.txt:744) static member tcTypeExceptionOrModule() = (GetStringFunc("tcTypeExceptionOrModule",",,,") ) /// type or module - /// (Originally from ..\FSComp.txt:744) + /// (Originally from ..\FSComp.txt:745) static member tcTypeOrModule() = (GetStringFunc("tcTypeOrModule",",,,") ) /// The struct, record or union type '%s' implements the interface 'System.IStructuralEquatable' explicitly. Apply the 'CustomEquality' attribute to the type. - /// (Originally from ..\FSComp.txt:745) + /// (Originally from ..\FSComp.txt:746) static member tcImplementsIStructuralEquatableExplicitly(a0 : System.String) = (914, GetStringFunc("tcImplementsIStructuralEquatableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'. - /// (Originally from ..\FSComp.txt:746) + /// (Originally from ..\FSComp.txt:747) static member tcImplementsIEquatableExplicitly(a0 : System.String) = (915, GetStringFunc("tcImplementsIEquatableExplicitly",",,,%s,,,") a0) /// Explicit type specifications cannot be used for exception constructors - /// (Originally from ..\FSComp.txt:747) + /// (Originally from ..\FSComp.txt:748) static member tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors() = (916, GetStringFunc("tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors",",,,") ) /// Exception abbreviations should not have argument lists - /// (Originally from ..\FSComp.txt:748) + /// (Originally from ..\FSComp.txt:749) static member tcExceptionAbbreviationsShouldNotHaveArgumentList() = (917, GetStringFunc("tcExceptionAbbreviationsShouldNotHaveArgumentList",",,,") ) /// Abbreviations for Common IL exceptions cannot take arguments - /// (Originally from ..\FSComp.txt:749) + /// (Originally from ..\FSComp.txt:750) static member tcAbbreviationsFordotNetExceptionsCannotTakeArguments() = (918, GetStringFunc("tcAbbreviationsFordotNetExceptionsCannotTakeArguments",",,,") ) /// Exception abbreviations must refer to existing exceptions or F# types deriving from System.Exception - /// (Originally from ..\FSComp.txt:750) + /// (Originally from ..\FSComp.txt:751) static member tcExceptionAbbreviationsMustReferToValidExceptions() = (919, GetStringFunc("tcExceptionAbbreviationsMustReferToValidExceptions",",,,") ) /// Abbreviations for Common IL exception types must have a matching object constructor - /// (Originally from ..\FSComp.txt:751) + /// (Originally from ..\FSComp.txt:752) static member tcAbbreviationsFordotNetExceptionsMustHaveMatchingObjectConstructor() = (920, GetStringFunc("tcAbbreviationsFordotNetExceptionsMustHaveMatchingObjectConstructor",",,,") ) /// Not an exception - /// (Originally from ..\FSComp.txt:752) + /// (Originally from ..\FSComp.txt:753) static member tcNotAnException() = (921, GetStringFunc("tcNotAnException",",,,") ) /// Invalid module name - /// (Originally from ..\FSComp.txt:754) + /// (Originally from ..\FSComp.txt:755) static member tcInvalidModuleName() = (924, GetStringFunc("tcInvalidModuleName",",,,") ) /// Invalid type extension - /// (Originally from ..\FSComp.txt:755) + /// (Originally from ..\FSComp.txt:756) static member tcInvalidTypeExtension() = (925, GetStringFunc("tcInvalidTypeExtension",",,,") ) /// The attributes of this type specify multiple kinds for the type - /// (Originally from ..\FSComp.txt:756) + /// (Originally from ..\FSComp.txt:757) static member tcAttributesOfTypeSpecifyMultipleKindsForType() = (926, GetStringFunc("tcAttributesOfTypeSpecifyMultipleKindsForType",",,,") ) /// The kind of the type specified by its attributes does not match the kind implied by its definition - /// (Originally from ..\FSComp.txt:757) + /// (Originally from ..\FSComp.txt:758) static member tcKindOfTypeSpecifiedDoesNotMatchDefinition() = (927, GetStringFunc("tcKindOfTypeSpecifiedDoesNotMatchDefinition",",,,") ) /// Measure definitions cannot have type parameters - /// (Originally from ..\FSComp.txt:758) + /// (Originally from ..\FSComp.txt:759) static member tcMeasureDefinitionsCannotHaveTypeParameters() = (928, GetStringFunc("tcMeasureDefinitionsCannotHaveTypeParameters",",,,") ) /// This type requires a definition - /// (Originally from ..\FSComp.txt:759) + /// (Originally from ..\FSComp.txt:760) static member tcTypeRequiresDefinition() = (929, GetStringFunc("tcTypeRequiresDefinition",",,,") ) /// This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'. - /// (Originally from ..\FSComp.txt:760) + /// (Originally from ..\FSComp.txt:761) static member tcTypeAbbreviationHasTypeParametersMissingOnType() = (GetStringFunc("tcTypeAbbreviationHasTypeParametersMissingOnType",",,,") ) /// Structs, interfaces, enums and delegates cannot inherit from other types - /// (Originally from ..\FSComp.txt:761) + /// (Originally from ..\FSComp.txt:762) static member tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes() = (931, GetStringFunc("tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes",",,,") ) /// Types cannot inherit from multiple concrete types - /// (Originally from ..\FSComp.txt:762) + /// (Originally from ..\FSComp.txt:763) static member tcTypesCannotInheritFromMultipleConcreteTypes() = (932, GetStringFunc("tcTypesCannotInheritFromMultipleConcreteTypes",",,,") ) /// Records, union, abbreviations and struct types cannot have the 'AllowNullLiteral' attribute - /// (Originally from ..\FSComp.txt:763) + /// (Originally from ..\FSComp.txt:764) static member tcRecordsUnionsAbbreviationsStructsMayNotHaveAllowNullLiteralAttribute() = (934, GetStringFunc("tcRecordsUnionsAbbreviationsStructsMayNotHaveAllowNullLiteralAttribute",",,,") ) /// Types with the 'AllowNullLiteral' attribute may only inherit from or implement types which also allow the use of the null literal - /// (Originally from ..\FSComp.txt:764) + /// (Originally from ..\FSComp.txt:765) static member tcAllowNullTypesMayOnlyInheritFromAllowNullTypes() = (935, GetStringFunc("tcAllowNullTypesMayOnlyInheritFromAllowNullTypes",",,,") ) /// Generic types cannot be given the 'StructLayout' attribute - /// (Originally from ..\FSComp.txt:765) + /// (Originally from ..\FSComp.txt:766) static member tcGenericTypesCannotHaveStructLayout() = (936, GetStringFunc("tcGenericTypesCannotHaveStructLayout",",,,") ) /// Only structs and classes without primary constructors may be given the 'StructLayout' attribute - /// (Originally from ..\FSComp.txt:766) + /// (Originally from ..\FSComp.txt:767) static member tcOnlyStructsCanHaveStructLayout() = (937, GetStringFunc("tcOnlyStructsCanHaveStructLayout",",,,") ) /// The representation of this type is hidden by the signature. It must be given an attribute such as [], [] or [] to indicate the characteristics of the type. - /// (Originally from ..\FSComp.txt:767) + /// (Originally from ..\FSComp.txt:768) static member tcRepresentationOfTypeHiddenBySignature() = (938, GetStringFunc("tcRepresentationOfTypeHiddenBySignature",",,,") ) /// Only classes may be given the 'AbstractClass' attribute - /// (Originally from ..\FSComp.txt:768) + /// (Originally from ..\FSComp.txt:769) static member tcOnlyClassesCanHaveAbstract() = (939, GetStringFunc("tcOnlyClassesCanHaveAbstract",",,,") ) /// Only types representing units-of-measure may be given the 'Measure' attribute - /// (Originally from ..\FSComp.txt:769) + /// (Originally from ..\FSComp.txt:770) static member tcOnlyTypesRepresentingUnitsOfMeasureCanHaveMeasure() = (940, GetStringFunc("tcOnlyTypesRepresentingUnitsOfMeasureCanHaveMeasure",",,,") ) /// Accessibility modifiers are not permitted on overrides or interface implementations - /// (Originally from ..\FSComp.txt:770) + /// (Originally from ..\FSComp.txt:771) static member tcOverridesCannotHaveVisibilityDeclarations() = (941, GetStringFunc("tcOverridesCannotHaveVisibilityDeclarations",",,,") ) /// Discriminated union types are always sealed - /// (Originally from ..\FSComp.txt:771) + /// (Originally from ..\FSComp.txt:772) static member tcTypesAreAlwaysSealedDU() = (942, GetStringFunc("tcTypesAreAlwaysSealedDU",",,,") ) /// Record types are always sealed - /// (Originally from ..\FSComp.txt:772) + /// (Originally from ..\FSComp.txt:773) static member tcTypesAreAlwaysSealedRecord() = (942, GetStringFunc("tcTypesAreAlwaysSealedRecord",",,,") ) /// Assembly code types are always sealed - /// (Originally from ..\FSComp.txt:773) + /// (Originally from ..\FSComp.txt:774) static member tcTypesAreAlwaysSealedAssemblyCode() = (942, GetStringFunc("tcTypesAreAlwaysSealedAssemblyCode",",,,") ) /// Struct types are always sealed - /// (Originally from ..\FSComp.txt:774) + /// (Originally from ..\FSComp.txt:775) static member tcTypesAreAlwaysSealedStruct() = (942, GetStringFunc("tcTypesAreAlwaysSealedStruct",",,,") ) /// Delegate types are always sealed - /// (Originally from ..\FSComp.txt:775) + /// (Originally from ..\FSComp.txt:776) static member tcTypesAreAlwaysSealedDelegate() = (942, GetStringFunc("tcTypesAreAlwaysSealedDelegate",",,,") ) /// Enum types are always sealed - /// (Originally from ..\FSComp.txt:776) + /// (Originally from ..\FSComp.txt:777) static member tcTypesAreAlwaysSealedEnum() = (942, GetStringFunc("tcTypesAreAlwaysSealedEnum",",,,") ) /// Interface types and delegate types cannot contain fields - /// (Originally from ..\FSComp.txt:777) + /// (Originally from ..\FSComp.txt:778) static member tcInterfaceTypesAndDelegatesCannotContainFields() = (943, GetStringFunc("tcInterfaceTypesAndDelegatesCannotContainFields",",,,") ) /// Abbreviated types cannot be given the 'Sealed' attribute - /// (Originally from ..\FSComp.txt:778) + /// (Originally from ..\FSComp.txt:779) static member tcAbbreviatedTypesCannotBeSealed() = (944, GetStringFunc("tcAbbreviatedTypesCannotBeSealed",",,,") ) /// Cannot inherit a sealed type - /// (Originally from ..\FSComp.txt:779) + /// (Originally from ..\FSComp.txt:780) static member tcCannotInheritFromSealedType() = (945, GetStringFunc("tcCannotInheritFromSealedType",",,,") ) /// Cannot inherit from interface type. Use interface ... with instead. - /// (Originally from ..\FSComp.txt:780) + /// (Originally from ..\FSComp.txt:781) static member tcCannotInheritFromInterfaceType() = (946, GetStringFunc("tcCannotInheritFromInterfaceType",",,,") ) /// Struct types cannot contain abstract members - /// (Originally from ..\FSComp.txt:781) + /// (Originally from ..\FSComp.txt:782) static member tcStructTypesCannotContainAbstractMembers() = (947, GetStringFunc("tcStructTypesCannotContainAbstractMembers",",,,") ) /// Interface types cannot be sealed - /// (Originally from ..\FSComp.txt:782) + /// (Originally from ..\FSComp.txt:783) static member tcInterfaceTypesCannotBeSealed() = (948, GetStringFunc("tcInterfaceTypesCannotBeSealed",",,,") ) /// Delegate specifications must be of the form 'typ -> typ' - /// (Originally from ..\FSComp.txt:783) + /// (Originally from ..\FSComp.txt:784) static member tcInvalidDelegateSpecification() = (949, GetStringFunc("tcInvalidDelegateSpecification",",,,") ) /// Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values. - /// (Originally from ..\FSComp.txt:784) + /// (Originally from ..\FSComp.txt:785) static member tcDelegatesCannotBeCurried() = (950, GetStringFunc("tcDelegatesCannotBeCurried",",,,") ) /// Literal enumerations must have type int, uint, int16, uint16, int64, uint64, byte, sbyte or char - /// (Originally from ..\FSComp.txt:785) + /// (Originally from ..\FSComp.txt:786) static member tcInvalidTypeForLiteralEnumeration() = (951, GetStringFunc("tcInvalidTypeForLiteralEnumeration",",,,") ) /// This type definition involves an immediate cyclic reference through an abbreviation - /// (Originally from ..\FSComp.txt:787) + /// (Originally from ..\FSComp.txt:788) static member tcTypeDefinitionIsCyclic() = (953, GetStringFunc("tcTypeDefinitionIsCyclic",",,,") ) /// This type definition involves an immediate cyclic reference through a struct field or inheritance relation - /// (Originally from ..\FSComp.txt:788) + /// (Originally from ..\FSComp.txt:789) static member tcTypeDefinitionIsCyclicThroughInheritance() = (954, GetStringFunc("tcTypeDefinitionIsCyclicThroughInheritance",",,,") ) /// The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[] attribute to the type definition in the signature - /// (Originally from ..\FSComp.txt:789) + /// (Originally from ..\FSComp.txt:790) static member tcReservedSyntaxForAugmentation() = (GetStringFunc("tcReservedSyntaxForAugmentation",",,,") ) /// Members that extend interface, delegate or enum types must be placed in a module separate to the definition of the type. This module must either have the AutoOpen attribute or be opened explicitly by client code to bring the extension members into scope. - /// (Originally from ..\FSComp.txt:790) + /// (Originally from ..\FSComp.txt:791) static member tcMembersThatExtendInterfaceMustBePlacedInSeparateModule() = (956, GetStringFunc("tcMembersThatExtendInterfaceMustBePlacedInSeparateModule",",,,") ) /// One or more of the declared type parameters for this type extension have a missing or wrong type constraint not matching the original type constraints on '%s' - /// (Originally from ..\FSComp.txt:791) + /// (Originally from ..\FSComp.txt:792) static member tcDeclaredTypeParametersForExtensionDoNotMatchOriginal(a0 : System.String) = (957, GetStringFunc("tcDeclaredTypeParametersForExtensionDoNotMatchOriginal",",,,%s,,,") a0) /// Type definitions may only have one 'inherit' specification and it must be the first declaration - /// (Originally from ..\FSComp.txt:792) + /// (Originally from ..\FSComp.txt:793) static member tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit() = (959, GetStringFunc("tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit",",,,") ) /// 'let' and 'do' bindings must come before member and interface definitions in type definitions - /// (Originally from ..\FSComp.txt:793) + /// (Originally from ..\FSComp.txt:794) static member tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers() = (960, GetStringFunc("tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers",",,,") ) /// This 'inherit' declaration specifies the inherited type but no arguments. Consider supplying arguments, e.g. 'inherit BaseType(args)'. - /// (Originally from ..\FSComp.txt:794) + /// (Originally from ..\FSComp.txt:795) static member tcInheritDeclarationMissingArguments() = (961, GetStringFunc("tcInheritDeclarationMissingArguments",",,,") ) /// This 'inherit' declaration has arguments, but is not in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ..\FSComp.txt:795) + /// (Originally from ..\FSComp.txt:796) static member tcInheritConstructionCallNotPartOfImplicitSequence() = (962, GetStringFunc("tcInheritConstructionCallNotPartOfImplicitSequence",",,,") ) /// This definition may only be used in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ..\FSComp.txt:796) + /// (Originally from ..\FSComp.txt:797) static member tcLetAndDoRequiresImplicitConstructionSequence() = (963, GetStringFunc("tcLetAndDoRequiresImplicitConstructionSequence",",,,") ) /// Type abbreviations cannot have augmentations - /// (Originally from ..\FSComp.txt:797) + /// (Originally from ..\FSComp.txt:798) static member tcTypeAbbreviationsCannotHaveAugmentations() = (964, GetStringFunc("tcTypeAbbreviationsCannotHaveAugmentations",",,,") ) /// The path '%s' is a namespace. A module abbreviation may not abbreviate a namespace. - /// (Originally from ..\FSComp.txt:798) + /// (Originally from ..\FSComp.txt:799) static member tcModuleAbbreviationForNamespace(a0 : System.String) = (965, GetStringFunc("tcModuleAbbreviationForNamespace",",,,%s,,,") a0) /// The type '%s' is used in an invalid way. A value prior to '%s' has an inferred type involving '%s', which is an invalid forward reference. - /// (Originally from ..\FSComp.txt:799) + /// (Originally from ..\FSComp.txt:800) static member tcTypeUsedInInvalidWay(a0 : System.String, a1 : System.String, a2 : System.String) = (966, GetStringFunc("tcTypeUsedInInvalidWay",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The member '%s' is used in an invalid way. A use of '%s' has been inferred prior to the definition of '%s', which is an invalid forward reference. - /// (Originally from ..\FSComp.txt:800) + /// (Originally from ..\FSComp.txt:801) static member tcMemberUsedInInvalidWay(a0 : System.String, a1 : System.String, a2 : System.String) = (967, GetStringFunc("tcMemberUsedInInvalidWay",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The attribute 'AutoOpen(\"%s\")' in the assembly '%s' did not refer to a valid module or namespace in that assembly and has been ignored - /// (Originally from ..\FSComp.txt:803) + /// (Originally from ..\FSComp.txt:804) static member tcAttributeAutoOpenWasIgnored(a0 : System.String, a1 : System.String) = (970, GetStringFunc("tcAttributeAutoOpenWasIgnored",",,,%s,,,%s,,,") a0 a1) /// Undefined value '%s' - /// (Originally from ..\FSComp.txt:804) + /// (Originally from ..\FSComp.txt:805) static member ilUndefinedValue(a0 : System.String) = (971, GetStringFunc("ilUndefinedValue",",,,%s,,,") a0) /// Label %s not found - /// (Originally from ..\FSComp.txt:805) + /// (Originally from ..\FSComp.txt:806) static member ilLabelNotFound(a0 : System.String) = (972, GetStringFunc("ilLabelNotFound",",,,%s,,,") a0) /// Incorrect number of type arguments to local call - /// (Originally from ..\FSComp.txt:806) + /// (Originally from ..\FSComp.txt:807) static member ilIncorrectNumberOfTypeArguments() = (973, GetStringFunc("ilIncorrectNumberOfTypeArguments",",,,") ) /// Dynamic invocation of %s is not supported - /// (Originally from ..\FSComp.txt:807) + /// (Originally from ..\FSComp.txt:808) static member ilDynamicInvocationNotSupported(a0 : System.String) = (GetStringFunc("ilDynamicInvocationNotSupported",",,,%s,,,") a0) /// Taking the address of a literal field is invalid - /// (Originally from ..\FSComp.txt:808) + /// (Originally from ..\FSComp.txt:809) static member ilAddressOfLiteralFieldIsInvalid() = (975, GetStringFunc("ilAddressOfLiteralFieldIsInvalid",",,,") ) /// This operation involves taking the address of a value '%s' represented using a local variable or other special representation. This is invalid. - /// (Originally from ..\FSComp.txt:809) + /// (Originally from ..\FSComp.txt:810) static member ilAddressOfValueHereIsInvalid(a0 : System.String) = (976, GetStringFunc("ilAddressOfValueHereIsInvalid",",,,%s,,,") a0) /// Custom marshallers cannot be specified in F# code. Consider using a C# helper function. - /// (Originally from ..\FSComp.txt:810) + /// (Originally from ..\FSComp.txt:811) static member ilCustomMarshallersCannotBeUsedInFSharp() = (980, GetStringFunc("ilCustomMarshallersCannotBeUsedInFSharp",",,,") ) /// The MarshalAs attribute could not be decoded - /// (Originally from ..\FSComp.txt:811) + /// (Originally from ..\FSComp.txt:812) static member ilMarshalAsAttributeCannotBeDecoded() = (981, GetStringFunc("ilMarshalAsAttributeCannotBeDecoded",",,,") ) /// The signature for this external function contains type parameters. Constrain the argument and return types to indicate the types of the corresponding C function. - /// (Originally from ..\FSComp.txt:812) + /// (Originally from ..\FSComp.txt:813) static member ilSignatureForExternalFunctionContainsTypeParameters() = (982, GetStringFunc("ilSignatureForExternalFunctionContainsTypeParameters",",,,") ) /// The DllImport attribute could not be decoded - /// (Originally from ..\FSComp.txt:813) + /// (Originally from ..\FSComp.txt:814) static member ilDllImportAttributeCouldNotBeDecoded() = (983, GetStringFunc("ilDllImportAttributeCouldNotBeDecoded",",,,") ) /// Literal fields cannot be set - /// (Originally from ..\FSComp.txt:814) + /// (Originally from ..\FSComp.txt:815) static member ilLiteralFieldsCannotBeSet() = (984, GetStringFunc("ilLiteralFieldsCannotBeSet",",,,") ) /// GenSetStorage: %s was represented as a static method but was not an appropriate lambda expression - /// (Originally from ..\FSComp.txt:815) + /// (Originally from ..\FSComp.txt:816) static member ilStaticMethodIsNotLambda(a0 : System.String) = (985, GetStringFunc("ilStaticMethodIsNotLambda",",,,%s,,,") a0) /// Mutable variables cannot escape their method - /// (Originally from ..\FSComp.txt:816) + /// (Originally from ..\FSComp.txt:817) static member ilMutableVariablesCannotEscapeMethod() = (986, GetStringFunc("ilMutableVariablesCannotEscapeMethod",",,,") ) /// Compiler error: unexpected unrealized value - /// (Originally from ..\FSComp.txt:817) + /// (Originally from ..\FSComp.txt:818) static member ilUnexpectedUnrealizedValue() = (987, GetStringFunc("ilUnexpectedUnrealizedValue",",,,") ) /// Main module of program is empty: nothing will happen when it is run - /// (Originally from ..\FSComp.txt:818) + /// (Originally from ..\FSComp.txt:819) static member ilMainModuleEmpty() = (988, GetStringFunc("ilMainModuleEmpty",",,,") ) /// This type cannot be used for a literal field - /// (Originally from ..\FSComp.txt:819) + /// (Originally from ..\FSComp.txt:820) static member ilTypeCannotBeUsedForLiteralField() = (989, GetStringFunc("ilTypeCannotBeUsedForLiteralField",",,,") ) /// Unexpected GetSet annotation on a property - /// (Originally from ..\FSComp.txt:820) + /// (Originally from ..\FSComp.txt:821) static member ilUnexpectedGetSetAnnotation() = (990, GetStringFunc("ilUnexpectedGetSetAnnotation",",,,") ) /// The FieldOffset attribute could not be decoded - /// (Originally from ..\FSComp.txt:821) + /// (Originally from ..\FSComp.txt:822) static member ilFieldOffsetAttributeCouldNotBeDecoded() = (991, GetStringFunc("ilFieldOffsetAttributeCouldNotBeDecoded",",,,") ) /// The StructLayout attribute could not be decoded - /// (Originally from ..\FSComp.txt:822) + /// (Originally from ..\FSComp.txt:823) static member ilStructLayoutAttributeCouldNotBeDecoded() = (992, GetStringFunc("ilStructLayoutAttributeCouldNotBeDecoded",",,,") ) /// The DefaultAugmentation attribute could not be decoded - /// (Originally from ..\FSComp.txt:823) + /// (Originally from ..\FSComp.txt:824) static member ilDefaultAugmentationAttributeCouldNotBeDecoded() = (993, GetStringFunc("ilDefaultAugmentationAttributeCouldNotBeDecoded",",,,") ) /// Reflected definitions cannot contain uses of the prefix splice operator '%%' - /// (Originally from ..\FSComp.txt:824) + /// (Originally from ..\FSComp.txt:825) static member ilReflectedDefinitionsCannotUseSliceOperator() = (994, GetStringFunc("ilReflectedDefinitionsCannotUseSliceOperator",",,,") ) /// Problem with codepage '%d': %s - /// (Originally from ..\FSComp.txt:825) + /// (Originally from ..\FSComp.txt:826) static member optsProblemWithCodepage(a0 : System.Int32, a1 : System.String) = (1000, GetStringFunc("optsProblemWithCodepage",",,,%d,,,%s,,,") a0 a1) /// Copyright (c) Microsoft Corporation. All Rights Reserved. - /// (Originally from ..\FSComp.txt:826) + /// (Originally from ..\FSComp.txt:827) static member optsCopyright() = (GetStringFunc("optsCopyright",",,,") ) /// Freely distributed under the MIT Open Source License. https://github.com/Microsoft/visualfsharp/blob/master/License.txt - /// (Originally from ..\FSComp.txt:827) + /// (Originally from ..\FSComp.txt:828) static member optsCopyrightCommunity() = (GetStringFunc("optsCopyrightCommunity",",,,") ) /// Name of the output file (Short form: -o) - /// (Originally from ..\FSComp.txt:828) + /// (Originally from ..\FSComp.txt:829) static member optsNameOfOutputFile() = (GetStringFunc("optsNameOfOutputFile",",,,") ) /// Build a console executable - /// (Originally from ..\FSComp.txt:829) + /// (Originally from ..\FSComp.txt:830) static member optsBuildConsole() = (GetStringFunc("optsBuildConsole",",,,") ) /// Build a Windows executable - /// (Originally from ..\FSComp.txt:830) + /// (Originally from ..\FSComp.txt:831) static member optsBuildWindows() = (GetStringFunc("optsBuildWindows",",,,") ) /// Build a library (Short form: -a) - /// (Originally from ..\FSComp.txt:831) + /// (Originally from ..\FSComp.txt:832) static member optsBuildLibrary() = (GetStringFunc("optsBuildLibrary",",,,") ) /// Build a module that can be added to another assembly - /// (Originally from ..\FSComp.txt:832) + /// (Originally from ..\FSComp.txt:833) static member optsBuildModule() = (GetStringFunc("optsBuildModule",",,,") ) /// Delay-sign the assembly using only the public portion of the strong name key - /// (Originally from ..\FSComp.txt:833) + /// (Originally from ..\FSComp.txt:834) static member optsDelaySign() = (GetStringFunc("optsDelaySign",",,,") ) /// Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - /// (Originally from ..\FSComp.txt:834) + /// (Originally from ..\FSComp.txt:835) static member optsPublicSign() = (GetStringFunc("optsPublicSign",",,,") ) /// Write the xmldoc of the assembly to the given file - /// (Originally from ..\FSComp.txt:835) + /// (Originally from ..\FSComp.txt:836) static member optsWriteXml() = (GetStringFunc("optsWriteXml",",,,") ) /// Specify a strong name key file - /// (Originally from ..\FSComp.txt:836) + /// (Originally from ..\FSComp.txt:837) static member optsStrongKeyFile() = (GetStringFunc("optsStrongKeyFile",",,,") ) /// Specify a strong name key container - /// (Originally from ..\FSComp.txt:837) + /// (Originally from ..\FSComp.txt:838) static member optsStrongKeyContainer() = (GetStringFunc("optsStrongKeyContainer",",,,") ) /// Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The default is anycpu. - /// (Originally from ..\FSComp.txt:838) + /// (Originally from ..\FSComp.txt:839) static member optsPlatform() = (GetStringFunc("optsPlatform",",,,") ) /// Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. - /// (Originally from ..\FSComp.txt:839) + /// (Originally from ..\FSComp.txt:840) static member optsNoOpt() = (GetStringFunc("optsNoOpt",",,,") ) /// Don't add a resource to the generated assembly containing F#-specific metadata - /// (Originally from ..\FSComp.txt:840) + /// (Originally from ..\FSComp.txt:841) static member optsNoInterface() = (GetStringFunc("optsNoInterface",",,,") ) /// Print the inferred interface of the assembly to a file - /// (Originally from ..\FSComp.txt:841) + /// (Originally from ..\FSComp.txt:842) static member optsSig() = (GetStringFunc("optsSig",",,,") ) /// Reference an assembly (Short form: -r) - /// (Originally from ..\FSComp.txt:842) + /// (Originally from ..\FSComp.txt:843) static member optsReference() = (GetStringFunc("optsReference",",,,") ) /// Specify a Win32 resource file (.res) - /// (Originally from ..\FSComp.txt:843) + /// (Originally from ..\FSComp.txt:844) static member optsWin32res() = (GetStringFunc("optsWin32res",",,,") ) /// Specify a Win32 manifest file - /// (Originally from ..\FSComp.txt:844) + /// (Originally from ..\FSComp.txt:845) static member optsWin32manifest() = (GetStringFunc("optsWin32manifest",",,,") ) /// Do not include the default Win32 manifest - /// (Originally from ..\FSComp.txt:845) + /// (Originally from ..\FSComp.txt:846) static member optsNowin32manifest() = (GetStringFunc("optsNowin32manifest",",,,") ) /// Embed all source files in the portable PDB file - /// (Originally from ..\FSComp.txt:846) + /// (Originally from ..\FSComp.txt:847) static member optsEmbedAllSource() = (GetStringFunc("optsEmbedAllSource",",,,") ) /// Embed specific source files in the portable PDB file - /// (Originally from ..\FSComp.txt:847) + /// (Originally from ..\FSComp.txt:848) static member optsEmbedSource() = (GetStringFunc("optsEmbedSource",",,,") ) /// Source link information file to embed in the portable PDB file - /// (Originally from ..\FSComp.txt:848) + /// (Originally from ..\FSComp.txt:849) static member optsSourceLink() = (GetStringFunc("optsSourceLink",",,,") ) /// --embed switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - /// (Originally from ..\FSComp.txt:849) + /// (Originally from ..\FSComp.txt:850) static member optsEmbeddedSourceRequirePortablePDBs() = (1501, GetStringFunc("optsEmbeddedSourceRequirePortablePDBs",",,,") ) /// --sourcelink switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - /// (Originally from ..\FSComp.txt:850) + /// (Originally from ..\FSComp.txt:851) static member optsSourceLinkRequirePortablePDBs() = (1502, GetStringFunc("optsSourceLinkRequirePortablePDBs",",,,") ) /// Source file is too large to embed in a portable PDB - /// (Originally from ..\FSComp.txt:851) + /// (Originally from ..\FSComp.txt:852) static member srcFileTooLarge() = (GetStringFunc("srcFileTooLarge",",,,") ) /// Embed the specified managed resource - /// (Originally from ..\FSComp.txt:852) + /// (Originally from ..\FSComp.txt:853) static member optsResource() = (GetStringFunc("optsResource",",,,") ) /// Link the specified resource to this assembly where the resinfo format is [,[,public|private]] - /// (Originally from ..\FSComp.txt:853) + /// (Originally from ..\FSComp.txt:854) static member optsLinkresource() = (GetStringFunc("optsLinkresource",",,,") ) /// Emit debug information (Short form: -g) - /// (Originally from ..\FSComp.txt:854) + /// (Originally from ..\FSComp.txt:855) static member optsDebugPM() = (GetStringFunc("optsDebugPM",",,,") ) /// Specify debugging type: full, portable, embedded, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). - /// (Originally from ..\FSComp.txt:855) + /// (Originally from ..\FSComp.txt:856) static member optsDebug(a0 : System.String) = (GetStringFunc("optsDebug",",,,%s,,,") a0) /// Enable optimizations (Short form: -O) - /// (Originally from ..\FSComp.txt:856) + /// (Originally from ..\FSComp.txt:857) static member optsOptimize() = (GetStringFunc("optsOptimize",",,,") ) /// Enable or disable tailcalls - /// (Originally from ..\FSComp.txt:857) + /// (Originally from ..\FSComp.txt:858) static member optsTailcalls() = (GetStringFunc("optsTailcalls",",,,") ) /// Produce a deterministic assembly (including module version GUID and timestamp) - /// (Originally from ..\FSComp.txt:858) + /// (Originally from ..\FSComp.txt:859) static member optsDeterministic() = (GetStringFunc("optsDeterministic",",,,") ) /// Enable or disable cross-module optimizations - /// (Originally from ..\FSComp.txt:859) + /// (Originally from ..\FSComp.txt:860) static member optsCrossoptimize() = (GetStringFunc("optsCrossoptimize",",,,") ) /// Report all warnings as errors - /// (Originally from ..\FSComp.txt:860) + /// (Originally from ..\FSComp.txt:861) static member optsWarnaserrorPM() = (GetStringFunc("optsWarnaserrorPM",",,,") ) /// Report specific warnings as errors - /// (Originally from ..\FSComp.txt:861) + /// (Originally from ..\FSComp.txt:862) static member optsWarnaserror() = (GetStringFunc("optsWarnaserror",",,,") ) /// Set a warning level (0-5) - /// (Originally from ..\FSComp.txt:862) + /// (Originally from ..\FSComp.txt:863) static member optsWarn() = (GetStringFunc("optsWarn",",,,") ) /// Disable specific warning messages - /// (Originally from ..\FSComp.txt:863) + /// (Originally from ..\FSComp.txt:864) static member optsNowarn() = (GetStringFunc("optsNowarn",",,,") ) /// Enable specific warnings that may be off by default - /// (Originally from ..\FSComp.txt:864) + /// (Originally from ..\FSComp.txt:865) static member optsWarnOn() = (GetStringFunc("optsWarnOn",",,,") ) /// Generate overflow checks - /// (Originally from ..\FSComp.txt:865) + /// (Originally from ..\FSComp.txt:866) static member optsChecked() = (GetStringFunc("optsChecked",",,,") ) /// Define conditional compilation symbols (Short form: -d) - /// (Originally from ..\FSComp.txt:866) + /// (Originally from ..\FSComp.txt:867) static member optsDefine() = (GetStringFunc("optsDefine",",,,") ) /// Ignore ML compatibility warnings - /// (Originally from ..\FSComp.txt:867) + /// (Originally from ..\FSComp.txt:868) static member optsMlcompatibility() = (GetStringFunc("optsMlcompatibility",",,,") ) /// Suppress compiler copyright message - /// (Originally from ..\FSComp.txt:868) + /// (Originally from ..\FSComp.txt:869) static member optsNologo() = (GetStringFunc("optsNologo",",,,") ) /// Display this usage message (Short form: -?) - /// (Originally from ..\FSComp.txt:869) + /// (Originally from ..\FSComp.txt:870) static member optsHelp() = (GetStringFunc("optsHelp",",,,") ) /// Read response file for more options - /// (Originally from ..\FSComp.txt:870) + /// (Originally from ..\FSComp.txt:871) static member optsResponseFile() = (GetStringFunc("optsResponseFile",",,,") ) /// Specify the codepage used to read source files - /// (Originally from ..\FSComp.txt:871) + /// (Originally from ..\FSComp.txt:872) static member optsCodepage() = (GetStringFunc("optsCodepage",",,,") ) /// Output messages in UTF-8 encoding - /// (Originally from ..\FSComp.txt:872) + /// (Originally from ..\FSComp.txt:873) static member optsUtf8output() = (GetStringFunc("optsUtf8output",",,,") ) /// Output messages with fully qualified paths - /// (Originally from ..\FSComp.txt:873) + /// (Originally from ..\FSComp.txt:874) static member optsFullpaths() = (GetStringFunc("optsFullpaths",",,,") ) /// Specify a directory for the include path which is used to resolve source files and assemblies (Short form: -I) - /// (Originally from ..\FSComp.txt:874) + /// (Originally from ..\FSComp.txt:875) static member optsLib() = (GetStringFunc("optsLib",",,,") ) /// Base address for the library to be built - /// (Originally from ..\FSComp.txt:875) + /// (Originally from ..\FSComp.txt:876) static member optsBaseaddress() = (GetStringFunc("optsBaseaddress",",,,") ) /// Do not reference the default CLI assemblies by default - /// (Originally from ..\FSComp.txt:876) + /// (Originally from ..\FSComp.txt:877) static member optsNoframework() = (GetStringFunc("optsNoframework",",,,") ) /// Statically link the F# library and all referenced DLLs that depend on it into the assembly being generated - /// (Originally from ..\FSComp.txt:877) + /// (Originally from ..\FSComp.txt:878) static member optsStandalone() = (GetStringFunc("optsStandalone",",,,") ) /// Statically link the given assembly and all referenced DLLs that depend on this assembly. Use an assembly name e.g. mylib, not a DLL name. - /// (Originally from ..\FSComp.txt:878) + /// (Originally from ..\FSComp.txt:879) static member optsStaticlink() = (GetStringFunc("optsStaticlink",",,,") ) /// Use a resident background compilation service to improve compiler startup times. - /// (Originally from ..\FSComp.txt:879) + /// (Originally from ..\FSComp.txt:880) static member optsResident() = (GetStringFunc("optsResident",",,,") ) /// Name the output debug file - /// (Originally from ..\FSComp.txt:880) + /// (Originally from ..\FSComp.txt:881) static member optsPdb() = (GetStringFunc("optsPdb",",,,") ) /// Resolve assembly references using directory-based rules rather than MSBuild resolution - /// (Originally from ..\FSComp.txt:881) + /// (Originally from ..\FSComp.txt:882) static member optsSimpleresolution() = (GetStringFunc("optsSimpleresolution",",,,") ) /// Unrecognized target '%s', expected 'exe', 'winexe', 'library' or 'module' - /// (Originally from ..\FSComp.txt:882) + /// (Originally from ..\FSComp.txt:883) static member optsUnrecognizedTarget(a0 : System.String) = (1048, GetStringFunc("optsUnrecognizedTarget",",,,%s,,,") a0) /// Unrecognized debug type '%s', expected 'pdbonly' or 'full' - /// (Originally from ..\FSComp.txt:883) + /// (Originally from ..\FSComp.txt:884) static member optsUnrecognizedDebugType(a0 : System.String) = (1049, GetStringFunc("optsUnrecognizedDebugType",",,,%s,,,") a0) /// Invalid warning level '%d' - /// (Originally from ..\FSComp.txt:884) + /// (Originally from ..\FSComp.txt:885) static member optsInvalidWarningLevel(a0 : System.Int32) = (1050, GetStringFunc("optsInvalidWarningLevel",",,,%d,,,") a0) /// Short form of '%s' - /// (Originally from ..\FSComp.txt:885) + /// (Originally from ..\FSComp.txt:886) static member optsShortFormOf(a0 : System.String) = (GetStringFunc("optsShortFormOf",",,,%s,,,") a0) /// The command-line option '--cliroot' has been deprecated. Use an explicit reference to a specific copy of mscorlib.dll instead. - /// (Originally from ..\FSComp.txt:886) + /// (Originally from ..\FSComp.txt:887) static member optsClirootDeprecatedMsg() = (GetStringFunc("optsClirootDeprecatedMsg",",,,") ) /// Use to override where the compiler looks for mscorlib.dll and framework components - /// (Originally from ..\FSComp.txt:887) + /// (Originally from ..\FSComp.txt:888) static member optsClirootDescription() = (GetStringFunc("optsClirootDescription",",,,") ) /// - OUTPUT FILES - - /// (Originally from ..\FSComp.txt:888) + /// (Originally from ..\FSComp.txt:889) static member optsHelpBannerOutputFiles() = (GetStringFunc("optsHelpBannerOutputFiles",",,,") ) /// - INPUT FILES - - /// (Originally from ..\FSComp.txt:889) + /// (Originally from ..\FSComp.txt:890) static member optsHelpBannerInputFiles() = (GetStringFunc("optsHelpBannerInputFiles",",,,") ) /// - RESOURCES - - /// (Originally from ..\FSComp.txt:890) + /// (Originally from ..\FSComp.txt:891) static member optsHelpBannerResources() = (GetStringFunc("optsHelpBannerResources",",,,") ) /// - CODE GENERATION - - /// (Originally from ..\FSComp.txt:891) + /// (Originally from ..\FSComp.txt:892) static member optsHelpBannerCodeGen() = (GetStringFunc("optsHelpBannerCodeGen",",,,") ) /// - ADVANCED - - /// (Originally from ..\FSComp.txt:892) + /// (Originally from ..\FSComp.txt:893) static member optsHelpBannerAdvanced() = (GetStringFunc("optsHelpBannerAdvanced",",,,") ) /// - MISCELLANEOUS - - /// (Originally from ..\FSComp.txt:893) + /// (Originally from ..\FSComp.txt:894) static member optsHelpBannerMisc() = (GetStringFunc("optsHelpBannerMisc",",,,") ) /// - LANGUAGE - - /// (Originally from ..\FSComp.txt:894) + /// (Originally from ..\FSComp.txt:895) static member optsHelpBannerLanguage() = (GetStringFunc("optsHelpBannerLanguage",",,,") ) /// - ERRORS AND WARNINGS - - /// (Originally from ..\FSComp.txt:895) + /// (Originally from ..\FSComp.txt:896) static member optsHelpBannerErrsAndWarns() = (GetStringFunc("optsHelpBannerErrsAndWarns",",,,") ) /// Unknown --test argument: '%s' - /// (Originally from ..\FSComp.txt:896) + /// (Originally from ..\FSComp.txt:897) static member optsUnknownArgumentToTheTestSwitch(a0 : System.String) = (1063, GetStringFunc("optsUnknownArgumentToTheTestSwitch",",,,%s,,,") a0) /// Unrecognized platform '%s', valid values are 'x86', 'x64', 'Itanium', 'anycpu32bitpreferred', and 'anycpu' - /// (Originally from ..\FSComp.txt:897) + /// (Originally from ..\FSComp.txt:898) static member optsUnknownPlatform(a0 : System.String) = (1064, GetStringFunc("optsUnknownPlatform",",,,%s,,,") a0) /// The command-line option '%s' is for test purposes only - /// (Originally from ..\FSComp.txt:898) + /// (Originally from ..\FSComp.txt:899) static member optsInternalNoDescription(a0 : System.String) = (GetStringFunc("optsInternalNoDescription",",,,%s,,,") a0) /// The command-line option '%s' has been deprecated - /// (Originally from ..\FSComp.txt:899) + /// (Originally from ..\FSComp.txt:900) static member optsDCLONoDescription(a0 : System.String) = (GetStringFunc("optsDCLONoDescription",",,,%s,,,") a0) /// The command-line option '%s' has been deprecated. Use '%s' instead. - /// (Originally from ..\FSComp.txt:900) + /// (Originally from ..\FSComp.txt:901) static member optsDCLODeprecatedSuggestAlternative(a0 : System.String, a1 : System.String) = (GetStringFunc("optsDCLODeprecatedSuggestAlternative",",,,%s,,,%s,,,") a0 a1) /// The command-line option '%s' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe. - /// (Originally from ..\FSComp.txt:901) + /// (Originally from ..\FSComp.txt:902) static member optsDCLOHtmlDoc(a0 : System.String) = (GetStringFunc("optsDCLOHtmlDoc",",,,%s,,,") a0) /// Output warning and error messages in color - /// (Originally from ..\FSComp.txt:902) + /// (Originally from ..\FSComp.txt:903) static member optsConsoleColors() = (GetStringFunc("optsConsoleColors",",,,") ) /// Enable high-entropy ASLR - /// (Originally from ..\FSComp.txt:903) + /// (Originally from ..\FSComp.txt:904) static member optsUseHighEntropyVA() = (GetStringFunc("optsUseHighEntropyVA",",,,") ) /// Specify subsystem version of this assembly - /// (Originally from ..\FSComp.txt:904) + /// (Originally from ..\FSComp.txt:905) static member optsSubSystemVersion() = (GetStringFunc("optsSubSystemVersion",",,,") ) /// Specify target framework profile of this assembly. Valid values are mscorlib, netcore or netstandard. Default - mscorlib - /// (Originally from ..\FSComp.txt:905) + /// (Originally from ..\FSComp.txt:906) static member optsTargetProfile() = (GetStringFunc("optsTargetProfile",",,,") ) /// Emit debug information in quotations - /// (Originally from ..\FSComp.txt:906) + /// (Originally from ..\FSComp.txt:907) static member optsEmitDebugInfoInQuotations() = (GetStringFunc("optsEmitDebugInfoInQuotations",",,,") ) /// Specify the preferred output language culture name (e.g. es-ES, ja-JP) - /// (Originally from ..\FSComp.txt:907) + /// (Originally from ..\FSComp.txt:908) static member optsPreferredUiLang() = (GetStringFunc("optsPreferredUiLang",",,,") ) /// Don't copy FSharp.Core.dll along the produced binaries - /// (Originally from ..\FSComp.txt:908) + /// (Originally from ..\FSComp.txt:909) static member optsNoCopyFsharpCore() = (GetStringFunc("optsNoCopyFsharpCore",",,,") ) /// Invalid version '%s' for '--subsystemversion'. The version must be 4.00 or greater. - /// (Originally from ..\FSComp.txt:909) + /// (Originally from ..\FSComp.txt:910) static member optsInvalidSubSystemVersion(a0 : System.String) = (1051, GetStringFunc("optsInvalidSubSystemVersion",",,,%s,,,") a0) /// Invalid value '%s' for '--targetprofile', valid values are 'mscorlib', 'netcore' or 'netstandard'. - /// (Originally from ..\FSComp.txt:910) + /// (Originally from ..\FSComp.txt:911) static member optsInvalidTargetProfile(a0 : System.String) = (1052, GetStringFunc("optsInvalidTargetProfile",",,,%s,,,") a0) /// Full name - /// (Originally from ..\FSComp.txt:911) + /// (Originally from ..\FSComp.txt:912) static member typeInfoFullName() = (GetStringFunc("typeInfoFullName",",,,") ) /// and %d other overloads - /// (Originally from ..\FSComp.txt:915) + /// (Originally from ..\FSComp.txt:916) static member typeInfoOtherOverloads(a0 : System.Int32) = (GetStringFunc("typeInfoOtherOverloads",",,,%d,,,") a0) /// union case - /// (Originally from ..\FSComp.txt:916) + /// (Originally from ..\FSComp.txt:917) static member typeInfoUnionCase() = (GetStringFunc("typeInfoUnionCase",",,,") ) /// active pattern result - /// (Originally from ..\FSComp.txt:917) + /// (Originally from ..\FSComp.txt:918) static member typeInfoActivePatternResult() = (GetStringFunc("typeInfoActivePatternResult",",,,") ) /// active recognizer - /// (Originally from ..\FSComp.txt:918) + /// (Originally from ..\FSComp.txt:919) static member typeInfoActiveRecognizer() = (GetStringFunc("typeInfoActiveRecognizer",",,,") ) /// field - /// (Originally from ..\FSComp.txt:919) + /// (Originally from ..\FSComp.txt:920) static member typeInfoField() = (GetStringFunc("typeInfoField",",,,") ) /// event - /// (Originally from ..\FSComp.txt:920) + /// (Originally from ..\FSComp.txt:921) static member typeInfoEvent() = (GetStringFunc("typeInfoEvent",",,,") ) /// property - /// (Originally from ..\FSComp.txt:921) + /// (Originally from ..\FSComp.txt:922) static member typeInfoProperty() = (GetStringFunc("typeInfoProperty",",,,") ) /// extension - /// (Originally from ..\FSComp.txt:922) + /// (Originally from ..\FSComp.txt:923) static member typeInfoExtension() = (GetStringFunc("typeInfoExtension",",,,") ) /// custom operation - /// (Originally from ..\FSComp.txt:923) + /// (Originally from ..\FSComp.txt:924) static member typeInfoCustomOperation() = (GetStringFunc("typeInfoCustomOperation",",,,") ) /// argument - /// (Originally from ..\FSComp.txt:924) + /// (Originally from ..\FSComp.txt:925) static member typeInfoArgument() = (GetStringFunc("typeInfoArgument",",,,") ) + /// anonymous record field + /// (Originally from ..\FSComp.txt:926) + static member typeInfoAnonRecdField() = (GetStringFunc("typeInfoAnonRecdField",",,,") ) /// patvar - /// (Originally from ..\FSComp.txt:925) + /// (Originally from ..\FSComp.txt:927) static member typeInfoPatternVariable() = (GetStringFunc("typeInfoPatternVariable",",,,") ) /// namespace - /// (Originally from ..\FSComp.txt:926) + /// (Originally from ..\FSComp.txt:928) static member typeInfoNamespace() = (GetStringFunc("typeInfoNamespace",",,,") ) /// module - /// (Originally from ..\FSComp.txt:927) + /// (Originally from ..\FSComp.txt:929) static member typeInfoModule() = (GetStringFunc("typeInfoModule",",,,") ) /// namespace/module - /// (Originally from ..\FSComp.txt:928) + /// (Originally from ..\FSComp.txt:930) static member typeInfoNamespaceOrModule() = (GetStringFunc("typeInfoNamespaceOrModule",",,,") ) /// from %s - /// (Originally from ..\FSComp.txt:929) + /// (Originally from ..\FSComp.txt:931) static member typeInfoFromFirst(a0 : System.String) = (GetStringFunc("typeInfoFromFirst",",,,%s,,,") a0) /// also from %s - /// (Originally from ..\FSComp.txt:930) + /// (Originally from ..\FSComp.txt:932) static member typeInfoFromNext(a0 : System.String) = (GetStringFunc("typeInfoFromNext",",,,%s,,,") a0) /// generated property - /// (Originally from ..\FSComp.txt:931) + /// (Originally from ..\FSComp.txt:933) static member typeInfoGeneratedProperty() = (GetStringFunc("typeInfoGeneratedProperty",",,,") ) /// generated type - /// (Originally from ..\FSComp.txt:932) + /// (Originally from ..\FSComp.txt:934) static member typeInfoGeneratedType() = (GetStringFunc("typeInfoGeneratedType",",,,") ) /// Found by AssemblyFolders registry key - /// (Originally from ..\FSComp.txt:933) + /// (Originally from ..\FSComp.txt:935) static member assemblyResolutionFoundByAssemblyFoldersKey() = (GetStringFunc("assemblyResolutionFoundByAssemblyFoldersKey",",,,") ) /// Found by AssemblyFoldersEx registry key - /// (Originally from ..\FSComp.txt:934) + /// (Originally from ..\FSComp.txt:936) static member assemblyResolutionFoundByAssemblyFoldersExKey() = (GetStringFunc("assemblyResolutionFoundByAssemblyFoldersExKey",",,,") ) /// .NET Framework - /// (Originally from ..\FSComp.txt:935) + /// (Originally from ..\FSComp.txt:937) static member assemblyResolutionNetFramework() = (GetStringFunc("assemblyResolutionNetFramework",",,,") ) /// Global Assembly Cache - /// (Originally from ..\FSComp.txt:936) + /// (Originally from ..\FSComp.txt:938) static member assemblyResolutionGAC() = (GetStringFunc("assemblyResolutionGAC",",,,") ) /// Recursive class hierarchy in type '%s' - /// (Originally from ..\FSComp.txt:937) + /// (Originally from ..\FSComp.txt:939) static member recursiveClassHierarchy(a0 : System.String) = (1089, GetStringFunc("recursiveClassHierarchy",",,,%s,,,") a0) /// Invalid recursive reference to an abstract slot - /// (Originally from ..\FSComp.txt:938) + /// (Originally from ..\FSComp.txt:940) static member InvalidRecursiveReferenceToAbstractSlot() = (1090, GetStringFunc("InvalidRecursiveReferenceToAbstractSlot",",,,") ) /// The event '%s' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit %s and %s methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'. - /// (Originally from ..\FSComp.txt:939) + /// (Originally from ..\FSComp.txt:941) static member eventHasNonStandardType(a0 : System.String, a1 : System.String, a2 : System.String) = (1091, GetStringFunc("eventHasNonStandardType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:940) + /// (Originally from ..\FSComp.txt:942) static member typeIsNotAccessible(a0 : System.String) = (1092, GetStringFunc("typeIsNotAccessible",",,,%s,,,") a0) /// The union cases or fields of the type '%s' are not accessible from this code location - /// (Originally from ..\FSComp.txt:941) + /// (Originally from ..\FSComp.txt:943) static member unionCasesAreNotAccessible(a0 : System.String) = (1093, GetStringFunc("unionCasesAreNotAccessible",",,,%s,,,") a0) /// The value '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:942) + /// (Originally from ..\FSComp.txt:944) static member valueIsNotAccessible(a0 : System.String) = (1094, GetStringFunc("valueIsNotAccessible",",,,%s,,,") a0) /// The union case '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:943) + /// (Originally from ..\FSComp.txt:945) static member unionCaseIsNotAccessible(a0 : System.String) = (1095, GetStringFunc("unionCaseIsNotAccessible",",,,%s,,,") a0) /// The record, struct or class field '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:944) + /// (Originally from ..\FSComp.txt:946) static member fieldIsNotAccessible(a0 : System.String) = (1096, GetStringFunc("fieldIsNotAccessible",",,,%s,,,") a0) /// The struct or class field '%s' is not accessible from this code location - /// (Originally from ..\FSComp.txt:945) + /// (Originally from ..\FSComp.txt:947) static member structOrClassFieldIsNotAccessible(a0 : System.String) = (1097, GetStringFunc("structOrClassFieldIsNotAccessible",",,,%s,,,") a0) /// This construct is experimental - /// (Originally from ..\FSComp.txt:946) + /// (Originally from ..\FSComp.txt:948) static member experimentalConstruct() = (GetStringFunc("experimentalConstruct",",,,") ) /// No Invoke methods found for delegate type - /// (Originally from ..\FSComp.txt:947) + /// (Originally from ..\FSComp.txt:949) static member noInvokeMethodsFound() = (1099, GetStringFunc("noInvokeMethodsFound",",,,") ) /// More than one Invoke method found for delegate type - /// (Originally from ..\FSComp.txt:948) + /// (Originally from ..\FSComp.txt:950) static member moreThanOneInvokeMethodFound() = (GetStringFunc("moreThanOneInvokeMethodFound",",,,") ) /// Delegates are not allowed to have curried signatures - /// (Originally from ..\FSComp.txt:949) + /// (Originally from ..\FSComp.txt:951) static member delegatesNotAllowedToHaveCurriedSignatures() = (1101, GetStringFunc("delegatesNotAllowedToHaveCurriedSignatures",",,,") ) /// Unexpected Expr.TyChoose - /// (Originally from ..\FSComp.txt:950) + /// (Originally from ..\FSComp.txt:952) static member tlrUnexpectedTExpr() = (1102, GetStringFunc("tlrUnexpectedTExpr",",,,") ) /// Note: Lambda-lifting optimizations have not been applied because of the use of this local constrained generic function as a first class value. Adding type constraints may resolve this condition. - /// (Originally from ..\FSComp.txt:951) + /// (Originally from ..\FSComp.txt:953) static member tlrLambdaLiftingOptimizationsNotApplied() = (1103, GetStringFunc("tlrLambdaLiftingOptimizationsNotApplied",",,,") ) /// Identifiers containing '@' are reserved for use in F# code generation - /// (Originally from ..\FSComp.txt:952) + /// (Originally from ..\FSComp.txt:954) static member lexhlpIdentifiersContainingAtSymbolReserved() = (1104, GetStringFunc("lexhlpIdentifiersContainingAtSymbolReserved",",,,") ) /// The identifier '%s' is reserved for future use by F# - /// (Originally from ..\FSComp.txt:953) + /// (Originally from ..\FSComp.txt:955) static member lexhlpIdentifierReserved(a0 : System.String) = (GetStringFunc("lexhlpIdentifierReserved",",,,%s,,,") a0) /// Missing variable '%s' - /// (Originally from ..\FSComp.txt:954) + /// (Originally from ..\FSComp.txt:956) static member patcMissingVariable(a0 : System.String) = (1106, GetStringFunc("patcMissingVariable",",,,%s,,,") a0) /// Partial active patterns may only generate one result - /// (Originally from ..\FSComp.txt:955) + /// (Originally from ..\FSComp.txt:957) static member patcPartialActivePatternsGenerateOneResult() = (1107, GetStringFunc("patcPartialActivePatternsGenerateOneResult",",,,") ) /// The type '%s' is required here and is unavailable. You must add a reference to assembly '%s'. - /// (Originally from ..\FSComp.txt:956) + /// (Originally from ..\FSComp.txt:958) static member impTypeRequiredUnavailable(a0 : System.String, a1 : System.String) = (1108, GetStringFunc("impTypeRequiredUnavailable",",,,%s,,,%s,,,") a0 a1) /// A reference to the type '%s' in assembly '%s' was found, but the type could not be found in that assembly - /// (Originally from ..\FSComp.txt:957) + /// (Originally from ..\FSComp.txt:959) static member impReferencedTypeCouldNotBeFoundInAssembly(a0 : System.String, a1 : System.String) = (1109, GetStringFunc("impReferencedTypeCouldNotBeFoundInAssembly",",,,%s,,,%s,,,") a0 a1) /// Internal error or badly formed metadata: not enough type parameters were in scope while importing - /// (Originally from ..\FSComp.txt:958) + /// (Originally from ..\FSComp.txt:960) static member impNotEnoughTypeParamsInScopeWhileImporting() = (1110, GetStringFunc("impNotEnoughTypeParamsInScopeWhileImporting",",,,") ) /// A reference to the DLL %s is required by assembly %s. The imported type %s is located in the first assembly and could not be resolved. - /// (Originally from ..\FSComp.txt:959) + /// (Originally from ..\FSComp.txt:961) static member impReferenceToDllRequiredByAssembly(a0 : System.String, a1 : System.String, a2 : System.String) = (1111, GetStringFunc("impReferenceToDllRequiredByAssembly",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// An imported assembly uses the type '%s' but that type is not public - /// (Originally from ..\FSComp.txt:960) + /// (Originally from ..\FSComp.txt:962) static member impImportedAssemblyUsesNotPublicType(a0 : System.String) = (1112, GetStringFunc("impImportedAssemblyUsesNotPublicType",",,,%s,,,") a0) /// The value '%s' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible - /// (Originally from ..\FSComp.txt:961) + /// (Originally from ..\FSComp.txt:963) static member optValueMarkedInlineButIncomplete(a0 : System.String) = (1113, GetStringFunc("optValueMarkedInlineButIncomplete",",,,%s,,,") a0) /// The value '%s' was marked inline but was not bound in the optimization environment - /// (Originally from ..\FSComp.txt:962) + /// (Originally from ..\FSComp.txt:964) static member optValueMarkedInlineButWasNotBoundInTheOptEnv(a0 : System.String) = (1114, GetStringFunc("optValueMarkedInlineButWasNotBoundInTheOptEnv",",,,%s,,,") a0) /// Local value %s not found during optimization - /// (Originally from ..\FSComp.txt:963) + /// (Originally from ..\FSComp.txt:965) static member optLocalValueNotFoundDuringOptimization(a0 : System.String) = (1115, GetStringFunc("optLocalValueNotFoundDuringOptimization",",,,%s,,,") a0) /// A value marked as 'inline' has an unexpected value - /// (Originally from ..\FSComp.txt:964) + /// (Originally from ..\FSComp.txt:966) static member optValueMarkedInlineHasUnexpectedValue() = (1116, GetStringFunc("optValueMarkedInlineHasUnexpectedValue",",,,") ) /// A value marked as 'inline' could not be inlined - /// (Originally from ..\FSComp.txt:965) + /// (Originally from ..\FSComp.txt:967) static member optValueMarkedInlineCouldNotBeInlined() = (1117, GetStringFunc("optValueMarkedInlineCouldNotBeInlined",",,,") ) /// Failed to inline the value '%s' marked 'inline', perhaps because a recursive value was marked 'inline' - /// (Originally from ..\FSComp.txt:966) + /// (Originally from ..\FSComp.txt:968) static member optFailedToInlineValue(a0 : System.String) = (1118, GetStringFunc("optFailedToInlineValue",",,,%s,,,") a0) /// Recursive ValValue %s - /// (Originally from ..\FSComp.txt:967) + /// (Originally from ..\FSComp.txt:969) static member optRecursiveValValue(a0 : System.String) = (1119, GetStringFunc("optRecursiveValValue",",,,%s,,,") a0) /// The indentation of this 'in' token is incorrect with respect to the corresponding 'let' - /// (Originally from ..\FSComp.txt:968) + /// (Originally from ..\FSComp.txt:970) static member lexfltIncorrentIndentationOfIn() = (GetStringFunc("lexfltIncorrentIndentationOfIn",",,,") ) /// Possible incorrect indentation: this token is offside of context started at position %s. Try indenting this token further or using standard formatting conventions. - /// (Originally from ..\FSComp.txt:969) + /// (Originally from ..\FSComp.txt:971) static member lexfltTokenIsOffsideOfContextStartedEarlier(a0 : System.String) = (GetStringFunc("lexfltTokenIsOffsideOfContextStartedEarlier",",,,%s,,,") a0) /// The '|' tokens separating rules of this pattern match are misaligned by one column. Consider realigning your code or using further indentation. - /// (Originally from ..\FSComp.txt:970) + /// (Originally from ..\FSComp.txt:972) static member lexfltSeparatorTokensOfPatternMatchMisaligned() = (GetStringFunc("lexfltSeparatorTokensOfPatternMatchMisaligned",",,,") ) /// Invalid module/expression/type - /// (Originally from ..\FSComp.txt:971) + /// (Originally from ..\FSComp.txt:973) static member nrInvalidModuleExprType() = (1123, GetStringFunc("nrInvalidModuleExprType",",,,") ) /// Multiple types exist called '%s', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. '%s'. - /// (Originally from ..\FSComp.txt:972) + /// (Originally from ..\FSComp.txt:974) static member nrTypeInstantiationNeededToDisambiguateTypesWithSameName(a0 : System.String, a1 : System.String) = (1124, GetStringFunc("nrTypeInstantiationNeededToDisambiguateTypesWithSameName",",,,%s,,,%s,,,") a0 a1) /// The instantiation of the generic type '%s' is missing and can't be inferred from the arguments or return type of this member. Consider providing a type instantiation when accessing this type, e.g. '%s'. - /// (Originally from ..\FSComp.txt:973) + /// (Originally from ..\FSComp.txt:975) static member nrTypeInstantiationIsMissingAndCouldNotBeInferred(a0 : System.String, a1 : System.String) = (1125, GetStringFunc("nrTypeInstantiationIsMissingAndCouldNotBeInferred",",,,%s,,,%s,,,") a0 a1) /// 'global' may only be used as the first name in a qualified path - /// (Originally from ..\FSComp.txt:974) + /// (Originally from ..\FSComp.txt:976) static member nrGlobalUsedOnlyAsFirstName() = (1126, GetStringFunc("nrGlobalUsedOnlyAsFirstName",",,,") ) /// This is not a constructor or literal, or a constructor is being used incorrectly - /// (Originally from ..\FSComp.txt:975) + /// (Originally from ..\FSComp.txt:977) static member nrIsNotConstructorOrLiteral() = (1127, GetStringFunc("nrIsNotConstructorOrLiteral",",,,") ) /// Unexpected empty long identifier - /// (Originally from ..\FSComp.txt:976) + /// (Originally from ..\FSComp.txt:978) static member nrUnexpectedEmptyLongId() = (1128, GetStringFunc("nrUnexpectedEmptyLongId",",,,") ) /// The record type '%s' does not contain a label '%s'. - /// (Originally from ..\FSComp.txt:977) + /// (Originally from ..\FSComp.txt:979) static member nrRecordDoesNotContainSuchLabel(a0 : System.String, a1 : System.String) = (1129, GetStringFunc("nrRecordDoesNotContainSuchLabel",",,,%s,,,%s,,,") a0 a1) /// Invalid field label - /// (Originally from ..\FSComp.txt:978) + /// (Originally from ..\FSComp.txt:980) static member nrInvalidFieldLabel() = (1130, GetStringFunc("nrInvalidFieldLabel",",,,") ) /// Invalid expression '%s' - /// (Originally from ..\FSComp.txt:979) + /// (Originally from ..\FSComp.txt:981) static member nrInvalidExpression(a0 : System.String) = (1132, GetStringFunc("nrInvalidExpression",",,,%s,,,") a0) /// No constructors are available for the type '%s' - /// (Originally from ..\FSComp.txt:980) + /// (Originally from ..\FSComp.txt:982) static member nrNoConstructorsAvailableForType(a0 : System.String) = (1133, GetStringFunc("nrNoConstructorsAvailableForType",",,,%s,,,") a0) /// The union type for union case '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('%s') in the name you are using. - /// (Originally from ..\FSComp.txt:981) + /// (Originally from ..\FSComp.txt:983) static member nrUnionTypeNeedsQualifiedAccess(a0 : System.String, a1 : System.String) = (1134, GetStringFunc("nrUnionTypeNeedsQualifiedAccess",",,,%s,,,%s,,,") a0 a1) /// The record type for the record field '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('%s') in the name you are using. - /// (Originally from ..\FSComp.txt:982) + /// (Originally from ..\FSComp.txt:984) static member nrRecordTypeNeedsQualifiedAccess(a0 : System.String, a1 : System.String) = (1135, GetStringFunc("nrRecordTypeNeedsQualifiedAccess",",,,%s,,,%s,,,") a0 a1) /// Unexpected error creating debug information file '%s' - /// (Originally from ..\FSComp.txt:983) + /// (Originally from ..\FSComp.txt:985) static member ilwriteErrorCreatingPdb(a0 : System.String) = (1136, GetStringFunc("ilwriteErrorCreatingPdb",",,,%s,,,") a0) /// This number is outside the allowable range for this integer type - /// (Originally from ..\FSComp.txt:984) + /// (Originally from ..\FSComp.txt:986) static member lexOutsideIntegerRange() = (1138, GetStringFunc("lexOutsideIntegerRange",",,,") ) /// '%s' is not permitted as a character in operator names and is reserved for future use - /// (Originally from ..\FSComp.txt:988) + /// (Originally from ..\FSComp.txt:990) static member lexCharNotAllowedInOperatorNames(a0 : System.String) = (GetStringFunc("lexCharNotAllowedInOperatorNames",",,,%s,,,") a0) /// Unexpected character '%s' - /// (Originally from ..\FSComp.txt:989) + /// (Originally from ..\FSComp.txt:991) static member lexUnexpectedChar(a0 : System.String) = (GetStringFunc("lexUnexpectedChar",",,,%s,,,") a0) /// This byte array literal contains characters that do not encode as a single byte - /// (Originally from ..\FSComp.txt:990) + /// (Originally from ..\FSComp.txt:992) static member lexByteArrayCannotEncode() = (1140, GetStringFunc("lexByteArrayCannotEncode",",,,") ) /// Identifiers followed by '%s' are reserved for future use - /// (Originally from ..\FSComp.txt:991) + /// (Originally from ..\FSComp.txt:993) static member lexIdentEndInMarkReserved(a0 : System.String) = (1141, GetStringFunc("lexIdentEndInMarkReserved",",,,%s,,,") a0) /// This number is outside the allowable range for 8-bit signed integers - /// (Originally from ..\FSComp.txt:992) + /// (Originally from ..\FSComp.txt:994) static member lexOutsideEightBitSigned() = (1142, GetStringFunc("lexOutsideEightBitSigned",",,,") ) /// This number is outside the allowable range for hexadecimal 8-bit signed integers - /// (Originally from ..\FSComp.txt:993) + /// (Originally from ..\FSComp.txt:995) static member lexOutsideEightBitSignedHex() = (1143, GetStringFunc("lexOutsideEightBitSignedHex",",,,") ) /// This number is outside the allowable range for 8-bit unsigned integers - /// (Originally from ..\FSComp.txt:994) + /// (Originally from ..\FSComp.txt:996) static member lexOutsideEightBitUnsigned() = (1144, GetStringFunc("lexOutsideEightBitUnsigned",",,,") ) /// This number is outside the allowable range for 16-bit signed integers - /// (Originally from ..\FSComp.txt:995) + /// (Originally from ..\FSComp.txt:997) static member lexOutsideSixteenBitSigned() = (1145, GetStringFunc("lexOutsideSixteenBitSigned",",,,") ) /// This number is outside the allowable range for 16-bit unsigned integers - /// (Originally from ..\FSComp.txt:996) + /// (Originally from ..\FSComp.txt:998) static member lexOutsideSixteenBitUnsigned() = (1146, GetStringFunc("lexOutsideSixteenBitUnsigned",",,,") ) /// This number is outside the allowable range for 32-bit signed integers - /// (Originally from ..\FSComp.txt:997) + /// (Originally from ..\FSComp.txt:999) static member lexOutsideThirtyTwoBitSigned() = (1147, GetStringFunc("lexOutsideThirtyTwoBitSigned",",,,") ) /// This number is outside the allowable range for 32-bit unsigned integers - /// (Originally from ..\FSComp.txt:998) + /// (Originally from ..\FSComp.txt:1000) static member lexOutsideThirtyTwoBitUnsigned() = (1148, GetStringFunc("lexOutsideThirtyTwoBitUnsigned",",,,") ) /// This number is outside the allowable range for 64-bit signed integers - /// (Originally from ..\FSComp.txt:999) + /// (Originally from ..\FSComp.txt:1001) static member lexOutsideSixtyFourBitSigned() = (1149, GetStringFunc("lexOutsideSixtyFourBitSigned",",,,") ) /// This number is outside the allowable range for 64-bit unsigned integers - /// (Originally from ..\FSComp.txt:1000) + /// (Originally from ..\FSComp.txt:1002) static member lexOutsideSixtyFourBitUnsigned() = (1150, GetStringFunc("lexOutsideSixtyFourBitUnsigned",",,,") ) /// This number is outside the allowable range for signed native integers - /// (Originally from ..\FSComp.txt:1001) + /// (Originally from ..\FSComp.txt:1003) static member lexOutsideNativeSigned() = (1151, GetStringFunc("lexOutsideNativeSigned",",,,") ) /// This number is outside the allowable range for unsigned native integers - /// (Originally from ..\FSComp.txt:1002) + /// (Originally from ..\FSComp.txt:1004) static member lexOutsideNativeUnsigned() = (1152, GetStringFunc("lexOutsideNativeUnsigned",",,,") ) /// Invalid floating point number - /// (Originally from ..\FSComp.txt:1003) + /// (Originally from ..\FSComp.txt:1005) static member lexInvalidFloat() = (1153, GetStringFunc("lexInvalidFloat",",,,") ) /// This number is outside the allowable range for decimal literals - /// (Originally from ..\FSComp.txt:1004) + /// (Originally from ..\FSComp.txt:1006) static member lexOusideDecimal() = (1154, GetStringFunc("lexOusideDecimal",",,,") ) /// This number is outside the allowable range for 32-bit floats - /// (Originally from ..\FSComp.txt:1005) + /// (Originally from ..\FSComp.txt:1007) static member lexOusideThirtyTwoBitFloat() = (1155, GetStringFunc("lexOusideThirtyTwoBitFloat",",,,") ) /// This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0b0001 (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger). - /// (Originally from ..\FSComp.txt:1006) + /// (Originally from ..\FSComp.txt:1008) static member lexInvalidNumericLiteral() = (1156, GetStringFunc("lexInvalidNumericLiteral",",,,") ) /// This is not a valid byte literal - /// (Originally from ..\FSComp.txt:1007) + /// (Originally from ..\FSComp.txt:1009) static member lexInvalidByteLiteral() = (1157, GetStringFunc("lexInvalidByteLiteral",",,,") ) /// This is not a valid character literal - /// (Originally from ..\FSComp.txt:1008) + /// (Originally from ..\FSComp.txt:1010) static member lexInvalidCharLiteral() = (1158, GetStringFunc("lexInvalidCharLiteral",",,,") ) /// This Unicode encoding is only valid in string literals - /// (Originally from ..\FSComp.txt:1009) + /// (Originally from ..\FSComp.txt:1011) static member lexThisUnicodeOnlyInStringLiterals() = (1159, GetStringFunc("lexThisUnicodeOnlyInStringLiterals",",,,") ) /// This token is reserved for future use - /// (Originally from ..\FSComp.txt:1010) + /// (Originally from ..\FSComp.txt:1012) static member lexTokenReserved() = (1160, GetStringFunc("lexTokenReserved",",,,") ) /// TABs are not allowed in F# code unless the #indent \"off\" option is used - /// (Originally from ..\FSComp.txt:1011) + /// (Originally from ..\FSComp.txt:1013) static member lexTabsNotAllowed() = (1161, GetStringFunc("lexTabsNotAllowed",",,,") ) /// Invalid line number: '%s' - /// (Originally from ..\FSComp.txt:1012) + /// (Originally from ..\FSComp.txt:1014) static member lexInvalidLineNumber(a0 : System.String) = (1162, GetStringFunc("lexInvalidLineNumber",",,,%s,,,") a0) /// #if directive must appear as the first non-whitespace character on a line - /// (Originally from ..\FSComp.txt:1013) + /// (Originally from ..\FSComp.txt:1015) static member lexHashIfMustBeFirst() = (1163, GetStringFunc("lexHashIfMustBeFirst",",,,") ) /// #else has no matching #if - /// (Originally from ..\FSComp.txt:1014) + /// (Originally from ..\FSComp.txt:1016) static member lexHashElseNoMatchingIf() = (GetStringFunc("lexHashElseNoMatchingIf",",,,") ) /// #endif required for #else - /// (Originally from ..\FSComp.txt:1015) + /// (Originally from ..\FSComp.txt:1017) static member lexHashEndifRequiredForElse() = (GetStringFunc("lexHashEndifRequiredForElse",",,,") ) /// #else directive must appear as the first non-whitespace character on a line - /// (Originally from ..\FSComp.txt:1016) + /// (Originally from ..\FSComp.txt:1018) static member lexHashElseMustBeFirst() = (1166, GetStringFunc("lexHashElseMustBeFirst",",,,") ) /// #endif has no matching #if - /// (Originally from ..\FSComp.txt:1017) + /// (Originally from ..\FSComp.txt:1019) static member lexHashEndingNoMatchingIf() = (GetStringFunc("lexHashEndingNoMatchingIf",",,,") ) /// #endif directive must appear as the first non-whitespace character on a line - /// (Originally from ..\FSComp.txt:1018) + /// (Originally from ..\FSComp.txt:1020) static member lexHashEndifMustBeFirst() = (1168, GetStringFunc("lexHashEndifMustBeFirst",",,,") ) /// #if directive should be immediately followed by an identifier - /// (Originally from ..\FSComp.txt:1019) + /// (Originally from ..\FSComp.txt:1021) static member lexHashIfMustHaveIdent() = (1169, GetStringFunc("lexHashIfMustHaveIdent",",,,") ) /// Syntax error. Wrong nested #endif, unexpected tokens before it. - /// (Originally from ..\FSComp.txt:1020) + /// (Originally from ..\FSComp.txt:1022) static member lexWrongNestedHashEndif() = (1170, GetStringFunc("lexWrongNestedHashEndif",",,,") ) /// #! may only appear as the first line at the start of a file. - /// (Originally from ..\FSComp.txt:1021) + /// (Originally from ..\FSComp.txt:1023) static member lexHashBangMustBeFirstInFile() = (GetStringFunc("lexHashBangMustBeFirstInFile",",,,") ) /// Expected single line comment or end of line - /// (Originally from ..\FSComp.txt:1022) + /// (Originally from ..\FSComp.txt:1024) static member pplexExpectedSingleLineComment() = (1171, GetStringFunc("pplexExpectedSingleLineComment",",,,") ) /// Infix operator member '%s' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ..\FSComp.txt:1023) + /// (Originally from ..\FSComp.txt:1025) static member memberOperatorDefinitionWithNoArguments(a0 : System.String) = (1172, GetStringFunc("memberOperatorDefinitionWithNoArguments",",,,%s,,,") a0) /// Infix operator member '%s' has %d initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ..\FSComp.txt:1024) + /// (Originally from ..\FSComp.txt:1026) static member memberOperatorDefinitionWithNonPairArgument(a0 : System.String, a1 : System.Int32) = (1173, GetStringFunc("memberOperatorDefinitionWithNonPairArgument",",,,%s,,,%d,,,") a0 a1) /// Infix operator member '%s' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ..\FSComp.txt:1025) + /// (Originally from ..\FSComp.txt:1027) static member memberOperatorDefinitionWithCurriedArguments(a0 : System.String) = (1174, GetStringFunc("memberOperatorDefinitionWithCurriedArguments",",,,%s,,,") a0) /// All record, union and struct types in FSharp.Core.dll must be explicitly labelled with 'StructuralComparison' or 'NoComparison' - /// (Originally from ..\FSComp.txt:1026) + /// (Originally from ..\FSComp.txt:1028) static member tcFSharpCoreRequiresExplicit() = (1175, GetStringFunc("tcFSharpCoreRequiresExplicit",",,,") ) /// The struct, record or union type '%s' has the 'StructuralComparison' attribute but the type parameter '%s' does not satisfy the 'comparison' constraint. Consider adding the 'comparison' constraint to the type parameter - /// (Originally from ..\FSComp.txt:1027) + /// (Originally from ..\FSComp.txt:1029) static member tcStructuralComparisonNotSatisfied1(a0 : System.String, a1 : System.String) = (1176, GetStringFunc("tcStructuralComparisonNotSatisfied1",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' has the 'StructuralComparison' attribute but the component type '%s' does not satisfy the 'comparison' constraint - /// (Originally from ..\FSComp.txt:1028) + /// (Originally from ..\FSComp.txt:1030) static member tcStructuralComparisonNotSatisfied2(a0 : System.String, a1 : System.String) = (1177, GetStringFunc("tcStructuralComparisonNotSatisfied2",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' is not structurally comparable because the type parameter %s does not satisfy the 'comparison' constraint. Consider adding the 'NoComparison' attribute to the type '%s' to clarify that the type is not comparable - /// (Originally from ..\FSComp.txt:1029) + /// (Originally from ..\FSComp.txt:1031) static member tcNoComparisonNeeded1(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoComparisonNeeded1",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' is not structurally comparable because the type '%s' does not satisfy the 'comparison' constraint. Consider adding the 'NoComparison' attribute to the type '%s' to clarify that the type is not comparable - /// (Originally from ..\FSComp.txt:1030) + /// (Originally from ..\FSComp.txt:1032) static member tcNoComparisonNeeded2(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoComparisonNeeded2",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' does not support structural equality because the type parameter %s does not satisfy the 'equality' constraint. Consider adding the 'NoEquality' attribute to the type '%s' to clarify that the type does not support structural equality - /// (Originally from ..\FSComp.txt:1031) + /// (Originally from ..\FSComp.txt:1033) static member tcNoEqualityNeeded1(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoEqualityNeeded1",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' does not support structural equality because the type '%s' does not satisfy the 'equality' constraint. Consider adding the 'NoEquality' attribute to the type '%s' to clarify that the type does not support structural equality - /// (Originally from ..\FSComp.txt:1032) + /// (Originally from ..\FSComp.txt:1034) static member tcNoEqualityNeeded2(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoEqualityNeeded2",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' has the 'StructuralEquality' attribute but the type parameter '%s' does not satisfy the 'equality' constraint. Consider adding the 'equality' constraint to the type parameter - /// (Originally from ..\FSComp.txt:1033) + /// (Originally from ..\FSComp.txt:1035) static member tcStructuralEqualityNotSatisfied1(a0 : System.String, a1 : System.String) = (1179, GetStringFunc("tcStructuralEqualityNotSatisfied1",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' has the 'StructuralEquality' attribute but the component type '%s' does not satisfy the 'equality' constraint - /// (Originally from ..\FSComp.txt:1034) + /// (Originally from ..\FSComp.txt:1036) static member tcStructuralEqualityNotSatisfied2(a0 : System.String, a1 : System.String) = (1180, GetStringFunc("tcStructuralEqualityNotSatisfied2",",,,%s,,,%s,,,") a0 a1) /// Each argument of the primary constructor for a struct must be given a type, for example 'type S(x1:int, x2: int) = ...'. These arguments determine the fields of the struct. - /// (Originally from ..\FSComp.txt:1035) + /// (Originally from ..\FSComp.txt:1037) static member tcStructsMustDeclareTypesOfImplicitCtorArgsExplicitly() = (1181, GetStringFunc("tcStructsMustDeclareTypesOfImplicitCtorArgsExplicitly",",,,") ) /// The value '%s' is unused - /// (Originally from ..\FSComp.txt:1036) + /// (Originally from ..\FSComp.txt:1038) static member chkUnusedValue(a0 : System.String) = (1182, GetStringFunc("chkUnusedValue",",,,%s,,,") a0) /// The recursive object reference '%s' is unused. The presence of a recursive object reference adds runtime initialization checks to members in this and derived types. Consider removing this recursive object reference. - /// (Originally from ..\FSComp.txt:1037) + /// (Originally from ..\FSComp.txt:1039) static member chkUnusedThisVariable(a0 : System.String) = (1183, GetStringFunc("chkUnusedThisVariable",",,,%s,,,") a0) /// A getter property may have at most one argument group - /// (Originally from ..\FSComp.txt:1038) + /// (Originally from ..\FSComp.txt:1040) static member parsGetterAtMostOneArgument() = (1184, GetStringFunc("parsGetterAtMostOneArgument",",,,") ) /// A setter property may have at most two argument groups - /// (Originally from ..\FSComp.txt:1039) + /// (Originally from ..\FSComp.txt:1041) static member parsSetterAtMostTwoArguments() = (1185, GetStringFunc("parsSetterAtMostTwoArguments",",,,") ) /// Invalid property getter or setter - /// (Originally from ..\FSComp.txt:1040) + /// (Originally from ..\FSComp.txt:1042) static member parsInvalidProperty() = (1186, GetStringFunc("parsInvalidProperty",",,,") ) /// An indexer property must be given at least one argument - /// (Originally from ..\FSComp.txt:1041) + /// (Originally from ..\FSComp.txt:1043) static member parsIndexerPropertyRequiresAtLeastOneArgument() = (1187, GetStringFunc("parsIndexerPropertyRequiresAtLeastOneArgument",",,,") ) /// This operation accesses a mutable top-level value defined in another assembly in an unsupported way. The value cannot be accessed through its address. Consider copying the expression to a mutable local, e.g. 'let mutable x = ...', and if necessary assigning the value back after the completion of the operation - /// (Originally from ..\FSComp.txt:1042) + /// (Originally from ..\FSComp.txt:1044) static member tastInvalidAddressOfMutableAcrossAssemblyBoundary() = (1188, GetStringFunc("tastInvalidAddressOfMutableAcrossAssemblyBoundary",",,,") ) /// Type parameters must be placed directly adjacent to the type name, e.g. \"type C<'T>\", not type \"C <'T>\" - /// (Originally from ..\FSComp.txt:1043) + /// (Originally from ..\FSComp.txt:1045) static member parsNonAdjacentTypars() = (1189, GetStringFunc("parsNonAdjacentTypars",",,,") ) /// Type arguments must be placed directly adjacent to the type name, e.g. \"C<'T>\", not \"C <'T>\" - /// (Originally from ..\FSComp.txt:1044) + /// (Originally from ..\FSComp.txt:1046) static member parsNonAdjacentTyargs() = (1190, GetStringFunc("parsNonAdjacentTyargs",",,,") ) /// The use of the type syntax 'int C' and 'C ' is not permitted here. Consider adjusting this type to be written in the form 'C' - /// (Originally from ..\FSComp.txt:1045) + /// (Originally from ..\FSComp.txt:1047) static member parsNonAtomicType() = (GetStringFunc("parsNonAtomicType",",,,") ) /// The module/namespace '%s' from compilation unit '%s' did not contain the module/namespace '%s' - /// (Originally from ..\FSComp.txt:1048) + /// (Originally from ..\FSComp.txt:1050) static member tastUndefinedItemRefModuleNamespace(a0 : System.String, a1 : System.String, a2 : System.String) = (1193, GetStringFunc("tastUndefinedItemRefModuleNamespace",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The module/namespace '%s' from compilation unit '%s' did not contain the val '%s' - /// (Originally from ..\FSComp.txt:1049) + /// (Originally from ..\FSComp.txt:1051) static member tastUndefinedItemRefVal(a0 : System.String, a1 : System.String, a2 : System.String) = (1194, GetStringFunc("tastUndefinedItemRefVal",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The module/namespace '%s' from compilation unit '%s' did not contain the namespace, module or type '%s' - /// (Originally from ..\FSComp.txt:1050) + /// (Originally from ..\FSComp.txt:1052) static member tastUndefinedItemRefModuleNamespaceType(a0 : System.String, a1 : System.String, a2 : System.String) = (1195, GetStringFunc("tastUndefinedItemRefModuleNamespaceType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The 'UseNullAsTrueValue' attribute flag may only be used with union types that have one nullary case and at least one non-nullary case - /// (Originally from ..\FSComp.txt:1051) + /// (Originally from ..\FSComp.txt:1053) static member tcInvalidUseNullAsTrueValue() = (1196, GetStringFunc("tcInvalidUseNullAsTrueValue",",,,") ) /// The parameter '%s' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref'. When used, a byref parameter is implicitly dereferenced. - /// (Originally from ..\FSComp.txt:1052) + /// (Originally from ..\FSComp.txt:1054) static member tcParameterInferredByref(a0 : System.String) = (1197, GetStringFunc("tcParameterInferredByref",",,,%s,,,") a0) /// The generic member '%s' has been used at a non-uniform instantiation prior to this program point. Consider reordering the members so this member occurs first. Alternatively, specify the full type of the member explicitly, including argument types, return type and any additional generic parameters and constraints. - /// (Originally from ..\FSComp.txt:1053) + /// (Originally from ..\FSComp.txt:1055) static member tcNonUniformMemberUse(a0 : System.String) = (1198, GetStringFunc("tcNonUniformMemberUse",",,,%s,,,") a0) /// The attribute '%s' appears in both the implementation and the signature, but the attribute arguments differ. Only the attribute from the signature will be included in the compiled code. - /// (Originally from ..\FSComp.txt:1054) + /// (Originally from ..\FSComp.txt:1056) static member tcAttribArgsDiffer(a0 : System.String) = (1200, GetStringFunc("tcAttribArgsDiffer",",,,%s,,,") a0) /// Cannot call an abstract base member: '%s' - /// (Originally from ..\FSComp.txt:1055) + /// (Originally from ..\FSComp.txt:1057) static member tcCannotCallAbstractBaseMember(a0 : System.String) = (1201, GetStringFunc("tcCannotCallAbstractBaseMember",",,,%s,,,") a0) /// Could not resolve the ambiguity in the use of a generic construct with an 'unmanaged' constraint at or near this position - /// (Originally from ..\FSComp.txt:1056) + /// (Originally from ..\FSComp.txt:1058) static member typrelCannotResolveAmbiguityInUnmanaged() = (1202, GetStringFunc("typrelCannotResolveAmbiguityInUnmanaged",",,,") ) /// This construct is for ML compatibility. %s. You can disable this warning by using '--mlcompatibility' or '--nowarn:62'. - /// (Originally from ..\FSComp.txt:1059) + /// (Originally from ..\FSComp.txt:1061) static member mlCompatMessage(a0 : System.String) = (GetStringFunc("mlCompatMessage",",,,%s,,,") a0) /// The type '%s' has been marked as having an Explicit layout, but the field '%s' has not been marked with the 'FieldOffset' attribute - /// (Originally from ..\FSComp.txt:1061) + /// (Originally from ..\FSComp.txt:1063) static member ilFieldDoesNotHaveValidOffsetForStructureLayout(a0 : System.String, a1 : System.String) = (1206, GetStringFunc("ilFieldDoesNotHaveValidOffsetForStructureLayout",",,,%s,,,%s,,,") a0 a1) /// Interfaces inherited by other interfaces should be declared using 'inherit ...' instead of 'interface ...' - /// (Originally from ..\FSComp.txt:1062) + /// (Originally from ..\FSComp.txt:1064) static member tcInterfacesShouldUseInheritNotInterface() = (1207, GetStringFunc("tcInterfacesShouldUseInheritNotInterface",",,,") ) /// Invalid prefix operator - /// (Originally from ..\FSComp.txt:1063) + /// (Originally from ..\FSComp.txt:1065) static member parsInvalidPrefixOperator() = (1208, GetStringFunc("parsInvalidPrefixOperator",",,,") ) /// Invalid operator definition. Prefix operator definitions must use a valid prefix operator name. - /// (Originally from ..\FSComp.txt:1064) + /// (Originally from ..\FSComp.txt:1066) static member parsInvalidPrefixOperatorDefinition() = (1208, GetStringFunc("parsInvalidPrefixOperatorDefinition",",,,") ) /// The file extensions '.ml' and '.mli' are for ML compatibility - /// (Originally from ..\FSComp.txt:1065) + /// (Originally from ..\FSComp.txt:1067) static member buildCompilingExtensionIsForML() = (GetStringFunc("buildCompilingExtensionIsForML",",,,") ) /// Consider using a file with extension '.ml' or '.mli' instead - /// (Originally from ..\FSComp.txt:1066) + /// (Originally from ..\FSComp.txt:1068) static member lexIndentOffForML() = (GetStringFunc("lexIndentOffForML",",,,") ) /// Active pattern '%s' is not a function - /// (Originally from ..\FSComp.txt:1067) + /// (Originally from ..\FSComp.txt:1069) static member activePatternIdentIsNotFunctionTyped(a0 : System.String) = (1209, GetStringFunc("activePatternIdentIsNotFunctionTyped",",,,%s,,,") a0) /// Active pattern '%s' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x' - /// (Originally from ..\FSComp.txt:1068) + /// (Originally from ..\FSComp.txt:1070) static member activePatternChoiceHasFreeTypars(a0 : System.String) = (1210, GetStringFunc("activePatternChoiceHasFreeTypars",",,,%s,,,") a0) /// The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) - /// (Originally from ..\FSComp.txt:1069) + /// (Originally from ..\FSComp.txt:1071) static member ilFieldHasOffsetForSequentialLayout() = (1211, GetStringFunc("ilFieldHasOffsetForSequentialLayout",",,,") ) /// Optional arguments must come at the end of the argument list, after any non-optional arguments - /// (Originally from ..\FSComp.txt:1070) + /// (Originally from ..\FSComp.txt:1072) static member tcOptionalArgsMustComeAfterNonOptionalArgs() = (1212, GetStringFunc("tcOptionalArgsMustComeAfterNonOptionalArgs",",,,") ) /// Attribute 'System.Diagnostics.ConditionalAttribute' is only valid on methods or attribute classes - /// (Originally from ..\FSComp.txt:1071) + /// (Originally from ..\FSComp.txt:1073) static member tcConditionalAttributeUsage() = (1213, GetStringFunc("tcConditionalAttributeUsage",",,,") ) /// Extension members cannot provide operator overloads. Consider defining the operator as part of the type definition instead. - /// (Originally from ..\FSComp.txt:1073) + /// (Originally from ..\FSComp.txt:1075) static member tcMemberOperatorDefinitionInExtrinsic() = (1215, GetStringFunc("tcMemberOperatorDefinitionInExtrinsic",",,,") ) /// The name of the MDB file must be .mdb. The --pdb option will be ignored. - /// (Originally from ..\FSComp.txt:1074) + /// (Originally from ..\FSComp.txt:1076) static member ilwriteMDBFileNameCannotBeChangedWarning() = (1216, GetStringFunc("ilwriteMDBFileNameCannotBeChangedWarning",",,,") ) /// MDB generation failed. Could not find compatible member %s - /// (Originally from ..\FSComp.txt:1075) + /// (Originally from ..\FSComp.txt:1077) static member ilwriteMDBMemberMissing(a0 : System.String) = (1217, GetStringFunc("ilwriteMDBMemberMissing",",,,%s,,,") a0) /// Cannot generate MDB debug information. Failed to load the 'MonoSymbolWriter' type from the 'Mono.CompilerServices.SymbolWriter.dll' assembly. - /// (Originally from ..\FSComp.txt:1076) + /// (Originally from ..\FSComp.txt:1078) static member ilwriteErrorCreatingMdb() = (1218, GetStringFunc("ilwriteErrorCreatingMdb",",,,") ) /// The union case named '%s' conflicts with the generated type '%s' - /// (Originally from ..\FSComp.txt:1077) + /// (Originally from ..\FSComp.txt:1079) static member tcUnionCaseNameConflictsWithGeneratedType(a0 : System.String, a1 : System.String) = (1219, GetStringFunc("tcUnionCaseNameConflictsWithGeneratedType",",,,%s,,,%s,,,") a0 a1) /// ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter - /// (Originally from ..\FSComp.txt:1078) + /// (Originally from ..\FSComp.txt:1080) static member chkNoReflectedDefinitionOnStructMember() = (1220, GetStringFunc("chkNoReflectedDefinitionOnStructMember",",,,") ) /// DLLImport bindings must be static members in a class or function definitions in a module - /// (Originally from ..\FSComp.txt:1079) + /// (Originally from ..\FSComp.txt:1081) static member tcDllImportNotAllowed() = (1221, GetStringFunc("tcDllImportNotAllowed",",,,") ) /// When mscorlib.dll or FSharp.Core.dll is explicitly referenced the %s option must also be passed - /// (Originally from ..\FSComp.txt:1080) + /// (Originally from ..\FSComp.txt:1082) static member buildExplicitCoreLibRequiresNoFramework(a0 : System.String) = (1222, GetStringFunc("buildExplicitCoreLibRequiresNoFramework",",,,%s,,,") a0) /// 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. - /// (Originally from ..\FSComp.txt:1081) + /// (Originally from ..\FSComp.txt:1083) static member buildExpectedSigdataFile(a0 : System.String) = (1223, GetStringFunc("buildExpectedSigdataFile",",,,%s,,,") a0) /// 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. - /// (Originally from ..\FSComp.txt:1082) + /// (Originally from ..\FSComp.txt:1084) static member buildExpectedFileAlongSideFSharpCore(a0 : System.String, a1 : System.String) = (1225, GetStringFunc("buildExpectedFileAlongSideFSharpCore",",,,%s,,,%s,,,") a0 a1) /// Filename '%s' contains invalid character '%s' - /// (Originally from ..\FSComp.txt:1083) + /// (Originally from ..\FSComp.txt:1085) static member buildUnexpectedFileNameCharacter(a0 : System.String, a1 : System.String) = (1227, GetStringFunc("buildUnexpectedFileNameCharacter",",,,%s,,,%s,,,") a0 a1) /// 'use!' bindings must be of the form 'use! = ' - /// (Originally from ..\FSComp.txt:1084) + /// (Originally from ..\FSComp.txt:1086) static member tcInvalidUseBangBinding() = (1228, GetStringFunc("tcInvalidUseBangBinding",",,,") ) /// Inner generic functions are not permitted in quoted expressions. Consider adding some type constraints until this function is no longer generic. - /// (Originally from ..\FSComp.txt:1085) + /// (Originally from ..\FSComp.txt:1087) static member crefNoInnerGenericsInQuotations() = (1230, GetStringFunc("crefNoInnerGenericsInQuotations",",,,") ) /// The type '%s' is not a valid enumerator type , i.e. does not have a 'MoveNext()' method returning a bool, and a 'Current' property - /// (Originally from ..\FSComp.txt:1086) + /// (Originally from ..\FSComp.txt:1088) static member tcEnumTypeCannotBeEnumerated(a0 : System.String) = (1231, GetStringFunc("tcEnumTypeCannotBeEnumerated",",,,%s,,,") a0) /// End of file in triple-quote string begun at or before here - /// (Originally from ..\FSComp.txt:1087) + /// (Originally from ..\FSComp.txt:1089) static member parsEofInTripleQuoteString() = (1232, GetStringFunc("parsEofInTripleQuoteString",",,,") ) /// End of file in triple-quote string embedded in comment begun at or before here - /// (Originally from ..\FSComp.txt:1088) + /// (Originally from ..\FSComp.txt:1090) static member parsEofInTripleQuoteStringInComment() = (1233, GetStringFunc("parsEofInTripleQuoteStringInComment",",,,") ) /// This type test or downcast will ignore the unit-of-measure '%s' - /// (Originally from ..\FSComp.txt:1089) + /// (Originally from ..\FSComp.txt:1091) static member tcTypeTestLosesMeasures(a0 : System.String) = (1240, GetStringFunc("tcTypeTestLosesMeasures",",,,%s,,,") a0) /// Expected type argument or static argument - /// (Originally from ..\FSComp.txt:1090) + /// (Originally from ..\FSComp.txt:1092) static member parsMissingTypeArgs() = (1241, GetStringFunc("parsMissingTypeArgs",",,,") ) /// Unmatched '<'. Expected closing '>' - /// (Originally from ..\FSComp.txt:1091) + /// (Originally from ..\FSComp.txt:1093) static member parsMissingGreaterThan() = (1242, GetStringFunc("parsMissingGreaterThan",",,,") ) /// Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters. - /// (Originally from ..\FSComp.txt:1092) + /// (Originally from ..\FSComp.txt:1094) static member parsUnexpectedQuotationOperatorInTypeAliasDidYouMeanVerbatimString() = (1243, GetStringFunc("parsUnexpectedQuotationOperatorInTypeAliasDidYouMeanVerbatimString",",,,") ) /// Attempted to parse this as an operator name, but failed - /// (Originally from ..\FSComp.txt:1093) + /// (Originally from ..\FSComp.txt:1095) static member parsErrorParsingAsOperatorName() = (1244, GetStringFunc("parsErrorParsingAsOperatorName",",,,") ) /// \U%s is not a valid Unicode character escape sequence - /// (Originally from ..\FSComp.txt:1094) + /// (Originally from ..\FSComp.txt:1096) static member lexInvalidUnicodeLiteral(a0 : System.String) = (1245, GetStringFunc("lexInvalidUnicodeLiteral",",,,%s,,,") a0) /// '%s' must be applied to an argument of type '%s', but has been applied to an argument of type '%s' - /// (Originally from ..\FSComp.txt:1095) + /// (Originally from ..\FSComp.txt:1097) static member tcCallerInfoWrongType(a0 : System.String, a1 : System.String, a2 : System.String) = (1246, GetStringFunc("tcCallerInfoWrongType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// '%s' can only be applied to optional arguments - /// (Originally from ..\FSComp.txt:1096) + /// (Originally from ..\FSComp.txt:1098) static member tcCallerInfoNotOptional(a0 : System.String) = (1247, GetStringFunc("tcCallerInfoNotOptional",",,,%s,,,") a0) /// The specified .NET Framework version '%s' is not supported. Please specify a value from the enumeration Microsoft.Build.Utilities.TargetDotNetFrameworkVersion. - /// (Originally from ..\FSComp.txt:1098) + /// (Originally from ..\FSComp.txt:1100) static member toolLocationHelperUnsupportedFrameworkVersion(a0 : System.String) = (1300, GetStringFunc("toolLocationHelperUnsupportedFrameworkVersion",",,,%s,,,") a0) /// Invalid Magic value in CLR Header - /// (Originally from ..\FSComp.txt:1102) + /// (Originally from ..\FSComp.txt:1104) static member ilSignInvalidMagicValue() = (1301, GetStringFunc("ilSignInvalidMagicValue",",,,") ) /// Bad image format - /// (Originally from ..\FSComp.txt:1103) + /// (Originally from ..\FSComp.txt:1105) static member ilSignBadImageFormat() = (1302, GetStringFunc("ilSignBadImageFormat",",,,") ) /// Private key expected - /// (Originally from ..\FSComp.txt:1104) + /// (Originally from ..\FSComp.txt:1106) static member ilSignPrivateKeyExpected() = (1303, GetStringFunc("ilSignPrivateKeyExpected",",,,") ) /// RSA key expected - /// (Originally from ..\FSComp.txt:1105) + /// (Originally from ..\FSComp.txt:1107) static member ilSignRsaKeyExpected() = (1304, GetStringFunc("ilSignRsaKeyExpected",",,,") ) /// Invalid bit Length - /// (Originally from ..\FSComp.txt:1106) + /// (Originally from ..\FSComp.txt:1108) static member ilSignInvalidBitLen() = (1305, GetStringFunc("ilSignInvalidBitLen",",,,") ) /// Invalid RSAParameters structure - '{0}' expected - /// (Originally from ..\FSComp.txt:1107) + /// (Originally from ..\FSComp.txt:1109) static member ilSignInvalidRSAParams() = (1306, GetStringFunc("ilSignInvalidRSAParams",",,,") ) /// Invalid algId - 'Exponent' expected - /// (Originally from ..\FSComp.txt:1108) + /// (Originally from ..\FSComp.txt:1110) static member ilSignInvalidAlgId() = (1307, GetStringFunc("ilSignInvalidAlgId",",,,") ) /// Invalid signature size - /// (Originally from ..\FSComp.txt:1109) + /// (Originally from ..\FSComp.txt:1111) static member ilSignInvalidSignatureSize() = (1308, GetStringFunc("ilSignInvalidSignatureSize",",,,") ) /// No signature directory - /// (Originally from ..\FSComp.txt:1110) + /// (Originally from ..\FSComp.txt:1112) static member ilSignNoSignatureDirectory() = (1309, GetStringFunc("ilSignNoSignatureDirectory",",,,") ) /// Invalid Public Key blob - /// (Originally from ..\FSComp.txt:1111) + /// (Originally from ..\FSComp.txt:1113) static member ilSignInvalidPKBlob() = (1310, GetStringFunc("ilSignInvalidPKBlob",",,,") ) /// Exiting - too many errors - /// (Originally from ..\FSComp.txt:1113) + /// (Originally from ..\FSComp.txt:1115) static member fscTooManyErrors() = (GetStringFunc("fscTooManyErrors",",,,") ) /// The documentation file has no .xml suffix - /// (Originally from ..\FSComp.txt:1114) + /// (Originally from ..\FSComp.txt:1116) static member docfileNoXmlSuffix() = (2001, GetStringFunc("docfileNoXmlSuffix",",,,") ) /// No implementation files specified - /// (Originally from ..\FSComp.txt:1115) + /// (Originally from ..\FSComp.txt:1117) static member fscNoImplementationFiles() = (2002, GetStringFunc("fscNoImplementationFiles",",,,") ) /// An %s specified version '%s', but this value is invalid and has been ignored - /// (Originally from ..\FSComp.txt:1116) + /// (Originally from ..\FSComp.txt:1118) static member fscBadAssemblyVersion(a0 : System.String, a1 : System.String) = (2003, GetStringFunc("fscBadAssemblyVersion",",,,%s,,,%s,,,") a0 a1) /// Conflicting options specified: 'win32manifest' and 'win32res'. Only one of these can be used. - /// (Originally from ..\FSComp.txt:1117) + /// (Originally from ..\FSComp.txt:1119) static member fscTwoResourceManifests() = (2004, GetStringFunc("fscTwoResourceManifests",",,,") ) /// The code in assembly '%s' makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - /// (Originally from ..\FSComp.txt:1118) + /// (Originally from ..\FSComp.txt:1120) static member fscQuotationLiteralsStaticLinking(a0 : System.String) = (2005, GetStringFunc("fscQuotationLiteralsStaticLinking",",,,%s,,,") a0) /// Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - /// (Originally from ..\FSComp.txt:1119) + /// (Originally from ..\FSComp.txt:1121) static member fscQuotationLiteralsStaticLinking0() = (2006, GetStringFunc("fscQuotationLiteralsStaticLinking0",",,,") ) /// Static linking may not include a .EXE - /// (Originally from ..\FSComp.txt:1120) + /// (Originally from ..\FSComp.txt:1122) static member fscStaticLinkingNoEXE() = (2007, GetStringFunc("fscStaticLinkingNoEXE",",,,") ) /// Static linking may not include a mixed managed/unmanaged DLL - /// (Originally from ..\FSComp.txt:1121) + /// (Originally from ..\FSComp.txt:1123) static member fscStaticLinkingNoMixedDLL() = (2008, GetStringFunc("fscStaticLinkingNoMixedDLL",",,,") ) /// Ignoring mixed managed/unmanaged assembly '%s' during static linking - /// (Originally from ..\FSComp.txt:1122) + /// (Originally from ..\FSComp.txt:1124) static member fscIgnoringMixedWhenLinking(a0 : System.String) = (2009, GetStringFunc("fscIgnoringMixedWhenLinking",",,,%s,,,") a0) /// Assembly '%s' was referenced transitively and the assembly could not be resolved automatically. Static linking will assume this DLL has no dependencies on the F# library or other statically linked DLLs. Consider adding an explicit reference to this DLL. - /// (Originally from ..\FSComp.txt:1123) + /// (Originally from ..\FSComp.txt:1125) static member fscAssumeStaticLinkContainsNoDependencies(a0 : System.String) = (2011, GetStringFunc("fscAssumeStaticLinkContainsNoDependencies",",,,%s,,,") a0) /// Assembly '%s' not found in dependency set of target binary. Statically linked roots should be specified using an assembly name, without a DLL or EXE extension. If this assembly was referenced explicitly then it is possible the assembly was not actually required by the generated binary, in which case it should not be statically linked. - /// (Originally from ..\FSComp.txt:1124) + /// (Originally from ..\FSComp.txt:1126) static member fscAssemblyNotFoundInDependencySet(a0 : System.String) = (2012, GetStringFunc("fscAssemblyNotFoundInDependencySet",",,,%s,,,") a0) /// The key file '%s' could not be opened - /// (Originally from ..\FSComp.txt:1125) + /// (Originally from ..\FSComp.txt:1127) static member fscKeyFileCouldNotBeOpened(a0 : System.String) = (2013, GetStringFunc("fscKeyFileCouldNotBeOpened",",,,%s,,,") a0) /// A problem occurred writing the binary '%s': %s - /// (Originally from ..\FSComp.txt:1126) + /// (Originally from ..\FSComp.txt:1128) static member fscProblemWritingBinary(a0 : System.String, a1 : System.String) = (2014, GetStringFunc("fscProblemWritingBinary",",,,%s,,,%s,,,") a0 a1) /// The 'AssemblyVersionAttribute' has been ignored because a version was given using a command line option - /// (Originally from ..\FSComp.txt:1127) + /// (Originally from ..\FSComp.txt:1129) static member fscAssemblyVersionAttributeIgnored() = (2015, GetStringFunc("fscAssemblyVersionAttributeIgnored",",,,") ) /// Error emitting 'System.Reflection.AssemblyCultureAttribute' attribute -- 'Executables cannot be satellite assemblies, Culture should always be empty' - /// (Originally from ..\FSComp.txt:1128) + /// (Originally from ..\FSComp.txt:1130) static member fscAssemblyCultureAttributeError() = (2016, GetStringFunc("fscAssemblyCultureAttributeError",",,,") ) /// Option '--delaysign' overrides attribute 'System.Reflection.AssemblyDelaySignAttribute' given in a source file or added module - /// (Originally from ..\FSComp.txt:1129) + /// (Originally from ..\FSComp.txt:1131) static member fscDelaySignWarning() = (2017, GetStringFunc("fscDelaySignWarning",",,,") ) /// Option '--keyfile' overrides attribute 'System.Reflection.AssemblyKeyFileAttribute' given in a source file or added module - /// (Originally from ..\FSComp.txt:1130) + /// (Originally from ..\FSComp.txt:1132) static member fscKeyFileWarning() = (2018, GetStringFunc("fscKeyFileWarning",",,,") ) /// Option '--keycontainer' overrides attribute 'System.Reflection.AssemblyNameAttribute' given in a source file or added module - /// (Originally from ..\FSComp.txt:1131) + /// (Originally from ..\FSComp.txt:1133) static member fscKeyNameWarning() = (2019, GetStringFunc("fscKeyNameWarning",",,,") ) /// The assembly '%s' is listed on the command line. Assemblies should be referenced using a command line flag such as '-r'. - /// (Originally from ..\FSComp.txt:1132) + /// (Originally from ..\FSComp.txt:1134) static member fscReferenceOnCommandLine(a0 : System.String) = (2020, GetStringFunc("fscReferenceOnCommandLine",",,,%s,,,") a0) /// The resident compilation service was not used because a problem occured in communicating with the server. - /// (Originally from ..\FSComp.txt:1133) + /// (Originally from ..\FSComp.txt:1135) static member fscRemotingError() = (2021, GetStringFunc("fscRemotingError",",,,") ) /// Problem with filename '%s': Illegal characters in path. - /// (Originally from ..\FSComp.txt:1134) + /// (Originally from ..\FSComp.txt:1136) static member pathIsInvalid(a0 : System.String) = (2022, GetStringFunc("pathIsInvalid",",,,%s,,,") a0) /// Passing a .resx file (%s) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an item in the .fsproj project file. - /// (Originally from ..\FSComp.txt:1135) + /// (Originally from ..\FSComp.txt:1137) static member fscResxSourceFileDeprecated(a0 : System.String) = (2023, GetStringFunc("fscResxSourceFileDeprecated",",,,%s,,,") a0) /// Static linking may not be used on an assembly referencing mscorlib (e.g. a .NET Framework assembly) when generating an assembly that references System.Runtime (e.g. a .NET Core or Portable assembly). - /// (Originally from ..\FSComp.txt:1136) + /// (Originally from ..\FSComp.txt:1138) static member fscStaticLinkingNoProfileMismatches() = (2024, GetStringFunc("fscStaticLinkingNoProfileMismatches",",,,") ) /// An %s specified version '%s', but this value is a wildcard, and you have requested a deterministic build, these are in conflict. - /// (Originally from ..\FSComp.txt:1137) + /// (Originally from ..\FSComp.txt:1139) static member fscAssemblyWildcardAndDeterminism(a0 : System.String, a1 : System.String) = (2025, GetStringFunc("fscAssemblyWildcardAndDeterminism",",,,%s,,,%s,,,") a0 a1) /// Determinstic builds only support portable PDBs (--debug:portable or --debug:embedded) - /// (Originally from ..\FSComp.txt:1138) + /// (Originally from ..\FSComp.txt:1140) static member fscDeterministicDebugRequiresPortablePdb() = (2026, GetStringFunc("fscDeterministicDebugRequiresPortablePdb",",,,") ) /// Character '%s' is not allowed in provided namespace name '%s' - /// (Originally from ..\FSComp.txt:1139) + /// (Originally from ..\FSComp.txt:1141) static member etIllegalCharactersInNamespaceName(a0 : System.String, a1 : System.String) = (3000, GetStringFunc("etIllegalCharactersInNamespaceName",",,,%s,,,%s,,,") a0 a1) /// The provided type '%s' returned a member with a null or empty member name - /// (Originally from ..\FSComp.txt:1140) + /// (Originally from ..\FSComp.txt:1142) static member etNullOrEmptyMemberName(a0 : System.String) = (3001, GetStringFunc("etNullOrEmptyMemberName",",,,%s,,,") a0) /// The provided type '%s' returned a null member - /// (Originally from ..\FSComp.txt:1141) + /// (Originally from ..\FSComp.txt:1143) static member etNullMember(a0 : System.String) = (3002, GetStringFunc("etNullMember",",,,%s,,,") a0) /// The provided type '%s' member info '%s' has null declaring type - /// (Originally from ..\FSComp.txt:1142) + /// (Originally from ..\FSComp.txt:1144) static member etNullMemberDeclaringType(a0 : System.String, a1 : System.String) = (3003, GetStringFunc("etNullMemberDeclaringType",",,,%s,,,%s,,,") a0 a1) /// The provided type '%s' has member '%s' which has declaring type '%s'. Expected declaring type to be the same as provided type. - /// (Originally from ..\FSComp.txt:1143) + /// (Originally from ..\FSComp.txt:1145) static member etNullMemberDeclaringTypeDifferentFromProvidedType(a0 : System.String, a1 : System.String, a2 : System.String) = (3004, GetStringFunc("etNullMemberDeclaringTypeDifferentFromProvidedType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Referenced assembly '%s' has assembly level attribute '%s' but no public type provider classes were found - /// (Originally from ..\FSComp.txt:1144) + /// (Originally from ..\FSComp.txt:1146) static member etHostingAssemblyFoundWithoutHosts(a0 : System.String, a1 : System.String) = (3005, GetStringFunc("etHostingAssemblyFoundWithoutHosts",",,,%s,,,%s,,,") a0 a1) /// Type '%s' from type provider '%s' has an empty namespace. Use 'null' for the global namespace. - /// (Originally from ..\FSComp.txt:1145) + /// (Originally from ..\FSComp.txt:1147) static member etEmptyNamespaceOfTypeNotAllowed(a0 : System.String, a1 : System.String) = (3006, GetStringFunc("etEmptyNamespaceOfTypeNotAllowed",",,,%s,,,%s,,,") a0 a1) /// Empty namespace found from the type provider '%s'. Use 'null' for the global namespace. - /// (Originally from ..\FSComp.txt:1146) + /// (Originally from ..\FSComp.txt:1148) static member etEmptyNamespaceNotAllowed(a0 : System.String) = (3007, GetStringFunc("etEmptyNamespaceNotAllowed",",,,%s,,,") a0) /// Provided type '%s' has 'IsGenericType' as true, but generic types are not supported. - /// (Originally from ..\FSComp.txt:1147) + /// (Originally from ..\FSComp.txt:1149) static member etMustNotBeGeneric(a0 : System.String) = (3011, GetStringFunc("etMustNotBeGeneric",",,,%s,,,") a0) /// Provided type '%s' has 'IsArray' as true, but array types are not supported. - /// (Originally from ..\FSComp.txt:1148) + /// (Originally from ..\FSComp.txt:1150) static member etMustNotBeAnArray(a0 : System.String) = (3013, GetStringFunc("etMustNotBeAnArray",",,,%s,,,") a0) /// Invalid member '%s' on provided type '%s'. Provided type members must be public, and not be generic, virtual, or abstract. - /// (Originally from ..\FSComp.txt:1149) + /// (Originally from ..\FSComp.txt:1151) static member etMethodHasRequirements(a0 : System.String, a1 : System.String) = (3014, GetStringFunc("etMethodHasRequirements",",,,%s,,,%s,,,") a0 a1) /// Invalid member '%s' on provided type '%s'. Only properties, methods and constructors are allowed - /// (Originally from ..\FSComp.txt:1150) + /// (Originally from ..\FSComp.txt:1152) static member etUnsupportedMemberKind(a0 : System.String, a1 : System.String) = (3015, GetStringFunc("etUnsupportedMemberKind",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanRead=true but there was no value from GetGetMethod() - /// (Originally from ..\FSComp.txt:1151) + /// (Originally from ..\FSComp.txt:1153) static member etPropertyCanReadButHasNoGetter(a0 : System.String, a1 : System.String) = (3016, GetStringFunc("etPropertyCanReadButHasNoGetter",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanRead=false but GetGetMethod() returned a method - /// (Originally from ..\FSComp.txt:1152) + /// (Originally from ..\FSComp.txt:1154) static member etPropertyHasGetterButNoCanRead(a0 : System.String, a1 : System.String) = (3017, GetStringFunc("etPropertyHasGetterButNoCanRead",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanWrite=true but there was no value from GetSetMethod() - /// (Originally from ..\FSComp.txt:1153) + /// (Originally from ..\FSComp.txt:1155) static member etPropertyCanWriteButHasNoSetter(a0 : System.String, a1 : System.String) = (3018, GetStringFunc("etPropertyCanWriteButHasNoSetter",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanWrite=false but GetSetMethod() returned a method - /// (Originally from ..\FSComp.txt:1154) + /// (Originally from ..\FSComp.txt:1156) static member etPropertyHasSetterButNoCanWrite(a0 : System.String, a1 : System.String) = (3019, GetStringFunc("etPropertyHasSetterButNoCanWrite",",,,%s,,,%s,,,") a0 a1) /// One or more errors seen during provided type setup - /// (Originally from ..\FSComp.txt:1155) + /// (Originally from ..\FSComp.txt:1157) static member etOneOrMoreErrorsSeenDuringExtensionTypeSetting() = (3020, GetStringFunc("etOneOrMoreErrorsSeenDuringExtensionTypeSetting",",,,") ) /// Unexpected exception from provided type '%s' member '%s': %s - /// (Originally from ..\FSComp.txt:1156) + /// (Originally from ..\FSComp.txt:1158) static member etUnexpectedExceptionFromProvidedTypeMember(a0 : System.String, a1 : System.String, a2 : System.String) = (3021, GetStringFunc("etUnexpectedExceptionFromProvidedTypeMember",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Unsupported constant type '%s'. Quotations provided by type providers can only contain simple constants. The implementation of the type provider may need to be adjusted by moving a value declared outside a provided quotation literal to be a 'let' binding inside the quotation literal. - /// (Originally from ..\FSComp.txt:1157) + /// (Originally from ..\FSComp.txt:1159) static member etUnsupportedConstantType(a0 : System.String) = (3022, GetStringFunc("etUnsupportedConstantType",",,,%s,,,") a0) /// Unsupported expression '%s' from type provider. If you are the author of this type provider, consider adjusting it to provide a different provided expression. - /// (Originally from ..\FSComp.txt:1158) + /// (Originally from ..\FSComp.txt:1160) static member etUnsupportedProvidedExpression(a0 : System.String) = (3025, GetStringFunc("etUnsupportedProvidedExpression",",,,%s,,,") a0) /// Expected provided type named '%s' but provided type has 'Name' with value '%s' - /// (Originally from ..\FSComp.txt:1159) + /// (Originally from ..\FSComp.txt:1161) static member etProvidedTypeHasUnexpectedName(a0 : System.String, a1 : System.String) = (3028, GetStringFunc("etProvidedTypeHasUnexpectedName",",,,%s,,,%s,,,") a0 a1) /// Event '%s' on provided type '%s' has no value from GetAddMethod() - /// (Originally from ..\FSComp.txt:1160) + /// (Originally from ..\FSComp.txt:1162) static member etEventNoAdd(a0 : System.String, a1 : System.String) = (3029, GetStringFunc("etEventNoAdd",",,,%s,,,%s,,,") a0 a1) /// Event '%s' on provided type '%s' has no value from GetRemoveMethod() - /// (Originally from ..\FSComp.txt:1161) + /// (Originally from ..\FSComp.txt:1163) static member etEventNoRemove(a0 : System.String, a1 : System.String) = (3030, GetStringFunc("etEventNoRemove",",,,%s,,,%s,,,") a0 a1) /// Assembly attribute '%s' refers to a designer assembly '%s' which cannot be loaded or doesn't exist. %s - /// (Originally from ..\FSComp.txt:1162) + /// (Originally from ..\FSComp.txt:1164) static member etProviderHasWrongDesignerAssembly(a0 : System.String, a1 : System.String, a2 : System.String) = (3031, GetStringFunc("etProviderHasWrongDesignerAssembly",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected. - /// (Originally from ..\FSComp.txt:1163) + /// (Originally from ..\FSComp.txt:1165) static member etProviderDoesNotHaveValidConstructor() = (3032, GetStringFunc("etProviderDoesNotHaveValidConstructor",",,,") ) /// The type provider '%s' reported an error: %s - /// (Originally from ..\FSComp.txt:1164) + /// (Originally from ..\FSComp.txt:1166) static member etProviderError(a0 : System.String, a1 : System.String) = (3033, GetStringFunc("etProviderError",",,,%s,,,%s,,,") a0 a1) /// The type provider '%s' used an invalid parameter in the ParameterExpression: %s - /// (Originally from ..\FSComp.txt:1165) + /// (Originally from ..\FSComp.txt:1167) static member etIncorrectParameterExpression(a0 : System.String, a1 : System.String) = (3034, GetStringFunc("etIncorrectParameterExpression",",,,%s,,,%s,,,") a0 a1) /// The type provider '%s' provided a method with a name '%s' and metadata token '%d', which is not reported among its methods of its declaring type '%s' - /// (Originally from ..\FSComp.txt:1166) + /// (Originally from ..\FSComp.txt:1168) static member etIncorrectProvidedMethod(a0 : System.String, a1 : System.String, a2 : System.Int32, a3 : System.String) = (3035, GetStringFunc("etIncorrectProvidedMethod",",,,%s,,,%s,,,%d,,,%s,,,") a0 a1 a2 a3) /// The type provider '%s' provided a constructor which is not reported among the constructors of its declaring type '%s' - /// (Originally from ..\FSComp.txt:1167) + /// (Originally from ..\FSComp.txt:1169) static member etIncorrectProvidedConstructor(a0 : System.String, a1 : System.String) = (3036, GetStringFunc("etIncorrectProvidedConstructor",",,,%s,,,%s,,,") a0 a1) /// A direct reference to the generated type '%s' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = '. This indicates that a type provider adds generated types to your assembly. - /// (Originally from ..\FSComp.txt:1168) + /// (Originally from ..\FSComp.txt:1170) static member etDirectReferenceToGeneratedTypeNotAllowed(a0 : System.String) = (3039, GetStringFunc("etDirectReferenceToGeneratedTypeNotAllowed",",,,%s,,,") a0) /// Expected provided type with path '%s' but provided type has path '%s' - /// (Originally from ..\FSComp.txt:1169) + /// (Originally from ..\FSComp.txt:1171) static member etProvidedTypeHasUnexpectedPath(a0 : System.String, a1 : System.String) = (3041, GetStringFunc("etProvidedTypeHasUnexpectedPath",",,,%s,,,%s,,,") a0 a1) /// Unexpected 'null' return value from provided type '%s' member '%s' - /// (Originally from ..\FSComp.txt:1170) + /// (Originally from ..\FSComp.txt:1172) static member etUnexpectedNullFromProvidedTypeMember(a0 : System.String, a1 : System.String) = (3042, GetStringFunc("etUnexpectedNullFromProvidedTypeMember",",,,%s,,,%s,,,") a0 a1) /// Unexpected exception from member '%s' of provided type '%s' member '%s': %s - /// (Originally from ..\FSComp.txt:1171) + /// (Originally from ..\FSComp.txt:1173) static member etUnexpectedExceptionFromProvidedMemberMember(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3043, GetStringFunc("etUnexpectedExceptionFromProvidedMemberMember",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// Nested provided types do not take static arguments or generic parameters - /// (Originally from ..\FSComp.txt:1172) + /// (Originally from ..\FSComp.txt:1174) static member etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters() = (3044, GetStringFunc("etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters",",,,") ) /// Invalid static argument to provided type. Expected an argument of kind '%s'. - /// (Originally from ..\FSComp.txt:1173) + /// (Originally from ..\FSComp.txt:1175) static member etInvalidStaticArgument(a0 : System.String) = (3045, GetStringFunc("etInvalidStaticArgument",",,,%s,,,") a0) /// An error occured applying the static arguments to a provided type - /// (Originally from ..\FSComp.txt:1174) + /// (Originally from ..\FSComp.txt:1176) static member etErrorApplyingStaticArgumentsToType() = (3046, GetStringFunc("etErrorApplyingStaticArgumentsToType",",,,") ) /// Unknown static argument kind '%s' when resolving a reference to a provided type or method '%s' - /// (Originally from ..\FSComp.txt:1175) + /// (Originally from ..\FSComp.txt:1177) static member etUnknownStaticArgumentKind(a0 : System.String, a1 : System.String) = (3047, GetStringFunc("etUnknownStaticArgumentKind",",,,%s,,,%s,,,") a0 a1) /// invalid namespace for provided type - /// (Originally from ..\FSComp.txt:1176) + /// (Originally from ..\FSComp.txt:1178) static member invalidNamespaceForProvidedType() = (GetStringFunc("invalidNamespaceForProvidedType",",,,") ) /// invalid full name for provided type - /// (Originally from ..\FSComp.txt:1177) + /// (Originally from ..\FSComp.txt:1179) static member invalidFullNameForProvidedType() = (GetStringFunc("invalidFullNameForProvidedType",",,,") ) /// The type provider returned 'null', which is not a valid return value from '%s' - /// (Originally from ..\FSComp.txt:1179) + /// (Originally from ..\FSComp.txt:1181) static member etProviderReturnedNull(a0 : System.String) = (3051, GetStringFunc("etProviderReturnedNull",",,,%s,,,") a0) /// The type provider constructor has thrown an exception: %s - /// (Originally from ..\FSComp.txt:1180) + /// (Originally from ..\FSComp.txt:1182) static member etTypeProviderConstructorException(a0 : System.String) = (3053, GetStringFunc("etTypeProviderConstructorException",",,,%s,,,") a0) /// Type provider '%s' returned null from GetInvokerExpression. - /// (Originally from ..\FSComp.txt:1181) + /// (Originally from ..\FSComp.txt:1183) static member etNullProvidedExpression(a0 : System.String) = (3056, GetStringFunc("etNullProvidedExpression",",,,%s,,,") a0) /// The type provider '%s' returned an invalid type from 'ApplyStaticArguments'. A type with name '%s' was expected, but a type with name '%s' was returned. - /// (Originally from ..\FSComp.txt:1182) + /// (Originally from ..\FSComp.txt:1184) static member etProvidedAppliedTypeHadWrongName(a0 : System.String, a1 : System.String, a2 : System.String) = (3057, GetStringFunc("etProvidedAppliedTypeHadWrongName",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type provider '%s' returned an invalid method from 'ApplyStaticArgumentsForMethod'. A method with name '%s' was expected, but a method with name '%s' was returned. - /// (Originally from ..\FSComp.txt:1183) + /// (Originally from ..\FSComp.txt:1185) static member etProvidedAppliedMethodHadWrongName(a0 : System.String, a1 : System.String, a2 : System.String) = (3058, GetStringFunc("etProvidedAppliedMethodHadWrongName",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// This type test or downcast will erase the provided type '%s' to the type '%s' - /// (Originally from ..\FSComp.txt:1184) + /// (Originally from ..\FSComp.txt:1186) static member tcTypeTestLossy(a0 : System.String, a1 : System.String) = (3060, GetStringFunc("tcTypeTestLossy",",,,%s,,,%s,,,") a0 a1) /// This downcast will erase the provided type '%s' to the type '%s'. - /// (Originally from ..\FSComp.txt:1185) + /// (Originally from ..\FSComp.txt:1187) static member tcTypeCastErased(a0 : System.String, a1 : System.String) = (3061, GetStringFunc("tcTypeCastErased",",,,%s,,,%s,,,") a0 a1) /// This type test with a provided type '%s' is not allowed because this provided type will be erased to '%s' at runtime. - /// (Originally from ..\FSComp.txt:1186) + /// (Originally from ..\FSComp.txt:1188) static member tcTypeTestErased(a0 : System.String, a1 : System.String) = (3062, GetStringFunc("tcTypeTestErased",",,,%s,,,%s,,,") a0 a1) /// Cannot inherit from erased provided type - /// (Originally from ..\FSComp.txt:1187) + /// (Originally from ..\FSComp.txt:1189) static member tcCannotInheritFromErasedType() = (3063, GetStringFunc("tcCannotInheritFromErasedType",",,,") ) /// Assembly '%s' hase TypeProviderAssembly attribute with invalid value '%s'. The value should be a valid assembly name - /// (Originally from ..\FSComp.txt:1188) + /// (Originally from ..\FSComp.txt:1190) static member etInvalidTypeProviderAssemblyName(a0 : System.String, a1 : System.String) = (3065, GetStringFunc("etInvalidTypeProviderAssemblyName",",,,%s,,,%s,,,") a0 a1) /// Invalid member name. Members may not have name '.ctor' or '.cctor' - /// (Originally from ..\FSComp.txt:1189) + /// (Originally from ..\FSComp.txt:1191) static member tcInvalidMemberNameCtor() = (3066, GetStringFunc("tcInvalidMemberNameCtor",",,,") ) /// The function or member '%s' is used in a way that requires further type annotations at its definition to ensure consistency of inferred types. The inferred signature is '%s'. - /// (Originally from ..\FSComp.txt:1190) + /// (Originally from ..\FSComp.txt:1192) static member tcInferredGenericTypeGivesRiseToInconsistency(a0 : System.String, a1 : System.String) = (3068, GetStringFunc("tcInferredGenericTypeGivesRiseToInconsistency",",,,%s,,,%s,,,") a0 a1) /// The number of type arguments did not match: '%d' given, '%d' expected. This may be related to a previously reported error. - /// (Originally from ..\FSComp.txt:1191) + /// (Originally from ..\FSComp.txt:1193) static member tcInvalidTypeArgumentCount(a0 : System.Int32, a1 : System.Int32) = (3069, GetStringFunc("tcInvalidTypeArgumentCount",",,,%d,,,%d,,,") a0 a1) /// Cannot override inherited member '%s' because it is sealed - /// (Originally from ..\FSComp.txt:1192) + /// (Originally from ..\FSComp.txt:1194) static member tcCannotOverrideSealedMethod(a0 : System.String) = (3070, GetStringFunc("tcCannotOverrideSealedMethod",",,,%s,,,") a0) /// The type provider '%s' reported an error in the context of provided type '%s', member '%s'. The error: %s - /// (Originally from ..\FSComp.txt:1193) + /// (Originally from ..\FSComp.txt:1195) static member etProviderErrorWithContext(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3071, GetStringFunc("etProviderErrorWithContext",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// An exception occurred when accessing the '%s' of a provided type: %s - /// (Originally from ..\FSComp.txt:1194) + /// (Originally from ..\FSComp.txt:1196) static member etProvidedTypeWithNameException(a0 : System.String, a1 : System.String) = (3072, GetStringFunc("etProvidedTypeWithNameException",",,,%s,,,%s,,,") a0 a1) /// The '%s' of a provided type was null or empty. - /// (Originally from ..\FSComp.txt:1195) + /// (Originally from ..\FSComp.txt:1197) static member etProvidedTypeWithNullOrEmptyName(a0 : System.String) = (3073, GetStringFunc("etProvidedTypeWithNullOrEmptyName",",,,%s,,,") a0) /// Character '%s' is not allowed in provided type name '%s' - /// (Originally from ..\FSComp.txt:1196) + /// (Originally from ..\FSComp.txt:1198) static member etIllegalCharactersInTypeName(a0 : System.String, a1 : System.String) = (3075, GetStringFunc("etIllegalCharactersInTypeName",",,,%s,,,%s,,,") a0 a1) /// In queries, '%s' must use a simple pattern - /// (Originally from ..\FSComp.txt:1197) + /// (Originally from ..\FSComp.txt:1199) static member tcJoinMustUseSimplePattern(a0 : System.String) = (3077, GetStringFunc("tcJoinMustUseSimplePattern",",,,%s,,,") a0) /// A custom query operation for '%s' is required but not specified - /// (Originally from ..\FSComp.txt:1198) + /// (Originally from ..\FSComp.txt:1200) static member tcMissingCustomOperation(a0 : System.String) = (3078, GetStringFunc("tcMissingCustomOperation",",,,%s,,,") a0) /// Named static arguments must come after all unnamed static arguments - /// (Originally from ..\FSComp.txt:1199) + /// (Originally from ..\FSComp.txt:1201) static member etBadUnnamedStaticArgs() = (3080, GetStringFunc("etBadUnnamedStaticArgs",",,,") ) /// The static parameter '%s' of the provided type or method '%s' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '%s<%s=...>'. - /// (Originally from ..\FSComp.txt:1200) + /// (Originally from ..\FSComp.txt:1202) static member etStaticParameterRequiresAValue(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3081, GetStringFunc("etStaticParameterRequiresAValue",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// No static parameter exists with name '%s' - /// (Originally from ..\FSComp.txt:1201) + /// (Originally from ..\FSComp.txt:1203) static member etNoStaticParameterWithName(a0 : System.String) = (3082, GetStringFunc("etNoStaticParameterWithName",",,,%s,,,") a0) /// The static parameter '%s' has already been given a value - /// (Originally from ..\FSComp.txt:1202) + /// (Originally from ..\FSComp.txt:1204) static member etStaticParameterAlreadyHasValue(a0 : System.String) = (3083, GetStringFunc("etStaticParameterAlreadyHasValue",",,,%s,,,") a0) /// Multiple static parameters exist with name '%s' - /// (Originally from ..\FSComp.txt:1203) + /// (Originally from ..\FSComp.txt:1205) static member etMultipleStaticParameterWithName(a0 : System.String) = (3084, GetStringFunc("etMultipleStaticParameterWithName",",,,%s,,,") a0) /// A custom operation may not be used in conjunction with a non-value or recursive 'let' binding in another part of this computation expression - /// (Originally from ..\FSComp.txt:1204) + /// (Originally from ..\FSComp.txt:1206) static member tcCustomOperationMayNotBeUsedInConjunctionWithNonSimpleLetBindings() = (3085, GetStringFunc("tcCustomOperationMayNotBeUsedInConjunctionWithNonSimpleLetBindings",",,,") ) /// A custom operation may not be used in conjunction with 'use', 'try/with', 'try/finally', 'if/then/else' or 'match' operators within this computation expression - /// (Originally from ..\FSComp.txt:1205) + /// (Originally from ..\FSComp.txt:1207) static member tcCustomOperationMayNotBeUsedHere() = (3086, GetStringFunc("tcCustomOperationMayNotBeUsedHere",",,,") ) /// The custom operation '%s' refers to a method which is overloaded. The implementations of custom operations may not be overloaded. - /// (Originally from ..\FSComp.txt:1206) + /// (Originally from ..\FSComp.txt:1208) static member tcCustomOperationMayNotBeOverloaded(a0 : System.String) = (3087, GetStringFunc("tcCustomOperationMayNotBeOverloaded",",,,%s,,,") a0) /// An if/then/else expression may not be used within queries. Consider using either an if/then expression, or use a sequence expression instead. - /// (Originally from ..\FSComp.txt:1207) + /// (Originally from ..\FSComp.txt:1209) static member tcIfThenElseMayNotBeUsedWithinQueries() = (3090, GetStringFunc("tcIfThenElseMayNotBeUsedWithinQueries",",,,") ) /// Invalid argument to 'methodhandleof' during codegen - /// (Originally from ..\FSComp.txt:1208) + /// (Originally from ..\FSComp.txt:1210) static member ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen() = (3091, GetStringFunc("ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen",",,,") ) /// A reference to a provided type was missing a value for the static parameter '%s'. You may need to recompile one or more referenced assemblies. - /// (Originally from ..\FSComp.txt:1209) + /// (Originally from ..\FSComp.txt:1211) static member etProvidedTypeReferenceMissingArgument(a0 : System.String) = (3092, GetStringFunc("etProvidedTypeReferenceMissingArgument",",,,%s,,,") a0) /// A reference to a provided type had an invalid value '%s' for a static parameter. You may need to recompile one or more referenced assemblies. - /// (Originally from ..\FSComp.txt:1210) + /// (Originally from ..\FSComp.txt:1212) static member etProvidedTypeReferenceInvalidText(a0 : System.String) = (3093, GetStringFunc("etProvidedTypeReferenceInvalidText",",,,%s,,,") a0) /// '%s' is not used correctly. This is a custom operation in this query or computation expression. - /// (Originally from ..\FSComp.txt:1211) + /// (Originally from ..\FSComp.txt:1213) static member tcCustomOperationNotUsedCorrectly(a0 : System.String) = (3095, GetStringFunc("tcCustomOperationNotUsedCorrectly",",,,%s,,,") a0) /// '%s' is not used correctly. Usage: %s. This is a custom operation in this query or computation expression. - /// (Originally from ..\FSComp.txt:1212) + /// (Originally from ..\FSComp.txt:1214) static member tcCustomOperationNotUsedCorrectly2(a0 : System.String, a1 : System.String) = (3095, GetStringFunc("tcCustomOperationNotUsedCorrectly2",",,,%s,,,%s,,,") a0 a1) /// %s var in collection %s (outerKey = innerKey). Note that parentheses are required after '%s' - /// (Originally from ..\FSComp.txt:1213) + /// (Originally from ..\FSComp.txt:1215) static member customOperationTextLikeJoin(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("customOperationTextLikeJoin",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s var in collection %s (outerKey = innerKey) into group. Note that parentheses are required after '%s' - /// (Originally from ..\FSComp.txt:1214) + /// (Originally from ..\FSComp.txt:1216) static member customOperationTextLikeGroupJoin(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("customOperationTextLikeGroupJoin",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s var in collection - /// (Originally from ..\FSComp.txt:1215) + /// (Originally from ..\FSComp.txt:1217) static member customOperationTextLikeZip(a0 : System.String) = (GetStringFunc("customOperationTextLikeZip",",,,%s,,,") a0) /// '%s' must be followed by a variable name. Usage: %s. - /// (Originally from ..\FSComp.txt:1216) + /// (Originally from ..\FSComp.txt:1218) static member tcBinaryOperatorRequiresVariable(a0 : System.String, a1 : System.String) = (3096, GetStringFunc("tcBinaryOperatorRequiresVariable",",,,%s,,,%s,,,") a0 a1) /// Incorrect syntax for '%s'. Usage: %s. - /// (Originally from ..\FSComp.txt:1217) + /// (Originally from ..\FSComp.txt:1219) static member tcOperatorIncorrectSyntax(a0 : System.String, a1 : System.String) = (3097, GetStringFunc("tcOperatorIncorrectSyntax",",,,%s,,,%s,,,") a0 a1) /// '%s' must come after a 'for' selection clause and be followed by the rest of the query. Syntax: ... %s ... - /// (Originally from ..\FSComp.txt:1218) + /// (Originally from ..\FSComp.txt:1220) static member tcBinaryOperatorRequiresBody(a0 : System.String, a1 : System.String) = (3098, GetStringFunc("tcBinaryOperatorRequiresBody",",,,%s,,,%s,,,") a0 a1) /// '%s' is used with an incorrect number of arguments. This is a custom operation in this query or computation expression. Expected %d argument(s), but given %d. - /// (Originally from ..\FSComp.txt:1219) + /// (Originally from ..\FSComp.txt:1221) static member tcCustomOperationHasIncorrectArgCount(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3099, GetStringFunc("tcCustomOperationHasIncorrectArgCount",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Expected an expression after this point - /// (Originally from ..\FSComp.txt:1220) + /// (Originally from ..\FSComp.txt:1222) static member parsExpectedExpressionAfterToken() = (3100, GetStringFunc("parsExpectedExpressionAfterToken",",,,") ) /// Expected a type after this point - /// (Originally from ..\FSComp.txt:1221) + /// (Originally from ..\FSComp.txt:1223) static member parsExpectedTypeAfterToken() = (3101, GetStringFunc("parsExpectedTypeAfterToken",",,,") ) /// Unmatched '[<'. Expected closing '>]' - /// (Originally from ..\FSComp.txt:1222) + /// (Originally from ..\FSComp.txt:1224) static member parsUnmatchedLBrackLess() = (3102, GetStringFunc("parsUnmatchedLBrackLess",",,,") ) /// Unexpected end of input in 'match' expression. Expected 'match with | -> | -> ...'. - /// (Originally from ..\FSComp.txt:1223) + /// (Originally from ..\FSComp.txt:1225) static member parsUnexpectedEndOfFileMatch() = (3103, GetStringFunc("parsUnexpectedEndOfFileMatch",",,,") ) /// Unexpected end of input in 'try' expression. Expected 'try with ' or 'try finally '. - /// (Originally from ..\FSComp.txt:1224) + /// (Originally from ..\FSComp.txt:1226) static member parsUnexpectedEndOfFileTry() = (3104, GetStringFunc("parsUnexpectedEndOfFileTry",",,,") ) /// Unexpected end of input in 'while' expression. Expected 'while do '. - /// (Originally from ..\FSComp.txt:1225) + /// (Originally from ..\FSComp.txt:1227) static member parsUnexpectedEndOfFileWhile() = (3105, GetStringFunc("parsUnexpectedEndOfFileWhile",",,,") ) /// Unexpected end of input in 'for' expression. Expected 'for in do '. - /// (Originally from ..\FSComp.txt:1226) + /// (Originally from ..\FSComp.txt:1228) static member parsUnexpectedEndOfFileFor() = (3106, GetStringFunc("parsUnexpectedEndOfFileFor",",,,") ) /// Unexpected end of input in 'match' or 'try' expression - /// (Originally from ..\FSComp.txt:1227) + /// (Originally from ..\FSComp.txt:1229) static member parsUnexpectedEndOfFileWith() = (3107, GetStringFunc("parsUnexpectedEndOfFileWith",",,,") ) /// Unexpected end of input in 'then' branch of conditional expression. Expected 'if then ' or 'if then else '. - /// (Originally from ..\FSComp.txt:1228) + /// (Originally from ..\FSComp.txt:1230) static member parsUnexpectedEndOfFileThen() = (3108, GetStringFunc("parsUnexpectedEndOfFileThen",",,,") ) /// Unexpected end of input in 'else' branch of conditional expression. Expected 'if then ' or 'if then else '. - /// (Originally from ..\FSComp.txt:1229) + /// (Originally from ..\FSComp.txt:1231) static member parsUnexpectedEndOfFileElse() = (3109, GetStringFunc("parsUnexpectedEndOfFileElse",",,,") ) /// Unexpected end of input in body of lambda expression. Expected 'fun ... -> '. - /// (Originally from ..\FSComp.txt:1230) + /// (Originally from ..\FSComp.txt:1232) static member parsUnexpectedEndOfFileFunBody() = (3110, GetStringFunc("parsUnexpectedEndOfFileFunBody",",,,") ) /// Unexpected end of input in type arguments - /// (Originally from ..\FSComp.txt:1231) + /// (Originally from ..\FSComp.txt:1233) static member parsUnexpectedEndOfFileTypeArgs() = (3111, GetStringFunc("parsUnexpectedEndOfFileTypeArgs",",,,") ) /// Unexpected end of input in type signature - /// (Originally from ..\FSComp.txt:1232) + /// (Originally from ..\FSComp.txt:1234) static member parsUnexpectedEndOfFileTypeSignature() = (3112, GetStringFunc("parsUnexpectedEndOfFileTypeSignature",",,,") ) /// Unexpected end of input in type definition - /// (Originally from ..\FSComp.txt:1233) + /// (Originally from ..\FSComp.txt:1235) static member parsUnexpectedEndOfFileTypeDefinition() = (3113, GetStringFunc("parsUnexpectedEndOfFileTypeDefinition",",,,") ) /// Unexpected end of input in object members - /// (Originally from ..\FSComp.txt:1234) + /// (Originally from ..\FSComp.txt:1236) static member parsUnexpectedEndOfFileObjectMembers() = (3114, GetStringFunc("parsUnexpectedEndOfFileObjectMembers",",,,") ) /// Unexpected end of input in value, function or member definition - /// (Originally from ..\FSComp.txt:1235) + /// (Originally from ..\FSComp.txt:1237) static member parsUnexpectedEndOfFileDefinition() = (3115, GetStringFunc("parsUnexpectedEndOfFileDefinition",",,,") ) /// Unexpected end of input in expression - /// (Originally from ..\FSComp.txt:1236) + /// (Originally from ..\FSComp.txt:1238) static member parsUnexpectedEndOfFileExpression() = (3116, GetStringFunc("parsUnexpectedEndOfFileExpression",",,,") ) /// Unexpected end of type. Expected a name after this point. - /// (Originally from ..\FSComp.txt:1237) + /// (Originally from ..\FSComp.txt:1239) static member parsExpectedNameAfterToken() = (3117, GetStringFunc("parsExpectedNameAfterToken",",,,") ) /// Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. - /// (Originally from ..\FSComp.txt:1238) + /// (Originally from ..\FSComp.txt:1240) static member parsUnmatchedLet() = (3118, GetStringFunc("parsUnmatchedLet",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let!' keyword. - /// (Originally from ..\FSComp.txt:1239) + /// (Originally from ..\FSComp.txt:1241) static member parsUnmatchedLetBang() = (3119, GetStringFunc("parsUnmatchedLetBang",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use!' keyword. - /// (Originally from ..\FSComp.txt:1240) + /// (Originally from ..\FSComp.txt:1242) static member parsUnmatchedUseBang() = (3120, GetStringFunc("parsUnmatchedUseBang",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use' keyword. - /// (Originally from ..\FSComp.txt:1241) + /// (Originally from ..\FSComp.txt:1243) static member parsUnmatchedUse() = (3121, GetStringFunc("parsUnmatchedUse",",,,") ) /// Missing 'do' in 'while' expression. Expected 'while do '. - /// (Originally from ..\FSComp.txt:1242) + /// (Originally from ..\FSComp.txt:1244) static member parsWhileDoExpected() = (3122, GetStringFunc("parsWhileDoExpected",",,,") ) /// Missing 'do' in 'for' expression. Expected 'for in do '. - /// (Originally from ..\FSComp.txt:1243) + /// (Originally from ..\FSComp.txt:1245) static member parsForDoExpected() = (3123, GetStringFunc("parsForDoExpected",",,,") ) /// Invalid join relation in '%s'. Expected 'expr expr', where is =, =?, ?= or ?=?. - /// (Originally from ..\FSComp.txt:1244) + /// (Originally from ..\FSComp.txt:1246) static member tcInvalidRelationInJoin(a0 : System.String) = (3125, GetStringFunc("tcInvalidRelationInJoin",",,,%s,,,") a0) /// Calls - /// (Originally from ..\FSComp.txt:1245) + /// (Originally from ..\FSComp.txt:1247) static member typeInfoCallsWord() = (GetStringFunc("typeInfoCallsWord",",,,") ) /// Invalid number of generic arguments to type '%s' in provided type. Expected '%d' arguments, given '%d'. - /// (Originally from ..\FSComp.txt:1246) + /// (Originally from ..\FSComp.txt:1248) static member impInvalidNumberOfGenericArguments(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3126, GetStringFunc("impInvalidNumberOfGenericArguments",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Invalid value '%s' for unit-of-measure parameter '%s' - /// (Originally from ..\FSComp.txt:1247) + /// (Originally from ..\FSComp.txt:1249) static member impInvalidMeasureArgument1(a0 : System.String, a1 : System.String) = (3127, GetStringFunc("impInvalidMeasureArgument1",",,,%s,,,%s,,,") a0 a1) /// Invalid value unit-of-measure parameter '%s' - /// (Originally from ..\FSComp.txt:1248) + /// (Originally from ..\FSComp.txt:1250) static member impInvalidMeasureArgument2(a0 : System.String) = (3127, GetStringFunc("impInvalidMeasureArgument2",",,,%s,,,") a0) /// Property '%s' on provided type '%s' is neither readable nor writable as it has CanRead=false and CanWrite=false - /// (Originally from ..\FSComp.txt:1249) + /// (Originally from ..\FSComp.txt:1251) static member etPropertyNeedsCanWriteOrCanRead(a0 : System.String, a1 : System.String) = (3128, GetStringFunc("etPropertyNeedsCanWriteOrCanRead",",,,%s,,,%s,,,") a0 a1) /// A use of 'into' must be followed by the remainder of the computation - /// (Originally from ..\FSComp.txt:1250) + /// (Originally from ..\FSComp.txt:1252) static member tcIntoNeedsRestOfQuery() = (3129, GetStringFunc("tcIntoNeedsRestOfQuery",",,,") ) /// The operator '%s' does not accept the use of 'into' - /// (Originally from ..\FSComp.txt:1251) + /// (Originally from ..\FSComp.txt:1253) static member tcOperatorDoesntAcceptInto(a0 : System.String) = (3130, GetStringFunc("tcOperatorDoesntAcceptInto",",,,%s,,,") a0) /// The definition of the custom operator '%s' does not use a valid combination of attribute flags - /// (Originally from ..\FSComp.txt:1252) + /// (Originally from ..\FSComp.txt:1254) static member tcCustomOperationInvalid(a0 : System.String) = (3131, GetStringFunc("tcCustomOperationInvalid",",,,%s,,,") a0) /// This type definition may not have the 'CLIMutable' attribute. Only record types may have this attribute. - /// (Originally from ..\FSComp.txt:1253) + /// (Originally from ..\FSComp.txt:1255) static member tcThisTypeMayNotHaveACLIMutableAttribute() = (3132, GetStringFunc("tcThisTypeMayNotHaveACLIMutableAttribute",",,,") ) /// 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ..\FSComp.txt:1254) + /// (Originally from ..\FSComp.txt:1256) static member tcAutoPropertyRequiresImplicitConstructionSequence() = (3133, GetStringFunc("tcAutoPropertyRequiresImplicitConstructionSequence",",,,") ) /// Property definitions may not be declared mutable. To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - /// (Originally from ..\FSComp.txt:1255) + /// (Originally from ..\FSComp.txt:1257) static member parsMutableOnAutoPropertyShouldBeGetSet() = (3134, GetStringFunc("parsMutableOnAutoPropertyShouldBeGetSet",",,,") ) /// To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - /// (Originally from ..\FSComp.txt:1256) + /// (Originally from ..\FSComp.txt:1258) static member parsMutableOnAutoPropertyShouldBeGetSetNotJustSet() = (3135, GetStringFunc("parsMutableOnAutoPropertyShouldBeGetSetNotJustSet",",,,") ) /// Type '%s' is illegal because in byref, T cannot contain byref types. - /// (Originally from ..\FSComp.txt:1257) + /// (Originally from ..\FSComp.txt:1259) static member chkNoByrefsOfByrefs(a0 : System.String) = (3136, GetStringFunc("chkNoByrefsOfByrefs",",,,%s,,,") a0) /// F# supports array ranks between 1 and 32. The value %d is not allowed. - /// (Originally from ..\FSComp.txt:1258) + /// (Originally from ..\FSComp.txt:1260) static member tastopsMaxArrayThirtyTwo(a0 : System.Int32) = (3138, GetStringFunc("tastopsMaxArrayThirtyTwo",",,,%d,,,") a0) /// In queries, use the form 'for x in n .. m do ...' for ranging over integers - /// (Originally from ..\FSComp.txt:1259) + /// (Originally from ..\FSComp.txt:1261) static member tcNoIntegerForLoopInQuery() = (3139, GetStringFunc("tcNoIntegerForLoopInQuery",",,,") ) /// 'while' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1260) + /// (Originally from ..\FSComp.txt:1262) static member tcNoWhileInQuery() = (3140, GetStringFunc("tcNoWhileInQuery",",,,") ) /// 'try/finally' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1261) + /// (Originally from ..\FSComp.txt:1263) static member tcNoTryFinallyInQuery() = (3141, GetStringFunc("tcNoTryFinallyInQuery",",,,") ) /// 'use' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1262) + /// (Originally from ..\FSComp.txt:1264) static member tcUseMayNotBeUsedInQueries() = (3142, GetStringFunc("tcUseMayNotBeUsedInQueries",",,,") ) /// 'let!', 'use!' and 'do!' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1263) + /// (Originally from ..\FSComp.txt:1265) static member tcBindMayNotBeUsedInQueries() = (3143, GetStringFunc("tcBindMayNotBeUsedInQueries",",,,") ) /// 'return' and 'return!' may not be used in queries - /// (Originally from ..\FSComp.txt:1264) + /// (Originally from ..\FSComp.txt:1266) static member tcReturnMayNotBeUsedInQueries() = (3144, GetStringFunc("tcReturnMayNotBeUsedInQueries",",,,") ) /// This is not a known query operator. Query operators are identifiers such as 'select', 'where', 'sortBy', 'thenBy', 'groupBy', 'groupValBy', 'join', 'groupJoin', 'sumBy' and 'averageBy', defined using corresponding methods on the 'QueryBuilder' type. - /// (Originally from ..\FSComp.txt:1265) + /// (Originally from ..\FSComp.txt:1267) static member tcUnrecognizedQueryOperator() = (3145, GetStringFunc("tcUnrecognizedQueryOperator",",,,") ) /// 'try/with' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1266) + /// (Originally from ..\FSComp.txt:1268) static member tcTryWithMayNotBeUsedInQueries() = (3146, GetStringFunc("tcTryWithMayNotBeUsedInQueries",",,,") ) /// This 'let' definition may not be used in a query. Only simple value definitions may be used in queries. - /// (Originally from ..\FSComp.txt:1267) + /// (Originally from ..\FSComp.txt:1269) static member tcNonSimpleLetBindingInQuery() = (3147, GetStringFunc("tcNonSimpleLetBindingInQuery",",,,") ) /// Too many static parameters. Expected at most %d parameters, but got %d unnamed and %d named parameters. - /// (Originally from ..\FSComp.txt:1268) + /// (Originally from ..\FSComp.txt:1270) static member etTooManyStaticParameters(a0 : System.Int32, a1 : System.Int32, a2 : System.Int32) = (3148, GetStringFunc("etTooManyStaticParameters",",,,%d,,,%d,,,%d,,,") a0 a1 a2) /// Invalid provided literal value '%s' - /// (Originally from ..\FSComp.txt:1269) + /// (Originally from ..\FSComp.txt:1271) static member infosInvalidProvidedLiteralValue(a0 : System.String) = (3149, GetStringFunc("infosInvalidProvidedLiteralValue",",,,%s,,,") a0) /// The 'anycpu32bitpreferred' platform can only be used with EXE targets. You must use 'anycpu' instead. - /// (Originally from ..\FSComp.txt:1270) + /// (Originally from ..\FSComp.txt:1272) static member invalidPlatformTarget() = (3150, GetStringFunc("invalidPlatformTarget",",,,") ) /// This member, function or value declaration may not be declared 'inline' - /// (Originally from ..\FSComp.txt:1271) + /// (Originally from ..\FSComp.txt:1273) static member tcThisValueMayNotBeInlined() = (3151, GetStringFunc("tcThisValueMayNotBeInlined",",,,") ) /// The provider '%s' returned a non-generated type '%s' in the context of a set of generated types. Consider adjusting the type provider to only return generated types. - /// (Originally from ..\FSComp.txt:1272) + /// (Originally from ..\FSComp.txt:1274) static member etErasedTypeUsedInGeneration(a0 : System.String, a1 : System.String) = (3152, GetStringFunc("etErasedTypeUsedInGeneration",",,,%s,,,%s,,,") a0 a1) /// Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)' - /// (Originally from ..\FSComp.txt:1273) + /// (Originally from ..\FSComp.txt:1275) static member tcUnrecognizedQueryBinaryOperator() = (3153, GetStringFunc("tcUnrecognizedQueryBinaryOperator",",,,") ) /// A quotation may not involve an assignment to or taking the address of a captured local variable - /// (Originally from ..\FSComp.txt:1274) + /// (Originally from ..\FSComp.txt:1276) static member crefNoSetOfHole() = (3155, GetStringFunc("crefNoSetOfHole",",,,") ) /// + 1 overload - /// (Originally from ..\FSComp.txt:1275) + /// (Originally from ..\FSComp.txt:1277) static member nicePrintOtherOverloads1() = (GetStringFunc("nicePrintOtherOverloads1",",,,") ) /// + %d overloads - /// (Originally from ..\FSComp.txt:1276) + /// (Originally from ..\FSComp.txt:1278) static member nicePrintOtherOverloadsN(a0 : System.Int32) = (GetStringFunc("nicePrintOtherOverloadsN",",,,%d,,,") a0) /// Erased to - /// (Originally from ..\FSComp.txt:1277) + /// (Originally from ..\FSComp.txt:1279) static member erasedTo() = (GetStringFunc("erasedTo",",,,") ) /// Unexpected token '%s' or incomplete expression - /// (Originally from ..\FSComp.txt:1278) + /// (Originally from ..\FSComp.txt:1280) static member parsUnfinishedExpression(a0 : System.String) = (3156, GetStringFunc("parsUnfinishedExpression",",,,%s,,,") a0) /// Cannot find code target for this attribute, possibly because the code after the attribute is incomplete. - /// (Originally from ..\FSComp.txt:1279) + /// (Originally from ..\FSComp.txt:1281) static member parsAttributeOnIncompleteCode() = (3158, GetStringFunc("parsAttributeOnIncompleteCode",",,,") ) /// Type name cannot be empty. - /// (Originally from ..\FSComp.txt:1280) + /// (Originally from ..\FSComp.txt:1282) static member parsTypeNameCannotBeEmpty() = (3159, GetStringFunc("parsTypeNameCannotBeEmpty",",,,") ) /// Problem reading assembly '%s': %s - /// (Originally from ..\FSComp.txt:1281) + /// (Originally from ..\FSComp.txt:1283) static member buildProblemReadingAssembly(a0 : System.String, a1 : System.String) = (3160, GetStringFunc("buildProblemReadingAssembly",",,,%s,,,%s,,,") a0 a1) /// Invalid provided field. Provided fields of erased provided types must be literals. - /// (Originally from ..\FSComp.txt:1282) + /// (Originally from ..\FSComp.txt:1284) static member tcTPFieldMustBeLiteral() = (3161, GetStringFunc("tcTPFieldMustBeLiteral",",,,") ) /// (loading description...) - /// (Originally from ..\FSComp.txt:1283) + /// (Originally from ..\FSComp.txt:1285) static member loadingDescription() = (GetStringFunc("loadingDescription",",,,") ) /// (description unavailable...) - /// (Originally from ..\FSComp.txt:1284) + /// (Originally from ..\FSComp.txt:1286) static member descriptionUnavailable() = (GetStringFunc("descriptionUnavailable",",,,") ) /// A type variable has been constrained by multiple different class types. A type variable may only have one class constraint. - /// (Originally from ..\FSComp.txt:1285) + /// (Originally from ..\FSComp.txt:1287) static member chkTyparMultipleClassConstraints() = (3162, GetStringFunc("chkTyparMultipleClassConstraints",",,,") ) /// 'match' expressions may not be used in queries - /// (Originally from ..\FSComp.txt:1286) + /// (Originally from ..\FSComp.txt:1288) static member tcMatchMayNotBeUsedWithQuery() = (3163, GetStringFunc("tcMatchMayNotBeUsedWithQuery",",,,") ) /// Infix operator member '%s' has %d initial argument(s). Expected a tuple of 3 arguments - /// (Originally from ..\FSComp.txt:1287) + /// (Originally from ..\FSComp.txt:1289) static member memberOperatorDefinitionWithNonTripleArgument(a0 : System.String, a1 : System.Int32) = (3164, GetStringFunc("memberOperatorDefinitionWithNonTripleArgument",",,,%s,,,%d,,,") a0 a1) /// The operator '%s' cannot be resolved. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - /// (Originally from ..\FSComp.txt:1288) + /// (Originally from ..\FSComp.txt:1290) static member cannotResolveNullableOperators(a0 : System.String) = (3165, GetStringFunc("cannotResolveNullableOperators",",,,%s,,,") a0) /// '%s' must be followed by 'in'. Usage: %s. - /// (Originally from ..\FSComp.txt:1289) + /// (Originally from ..\FSComp.txt:1291) static member tcOperatorRequiresIn(a0 : System.String, a1 : System.String) = (3167, GetStringFunc("tcOperatorRequiresIn",",,,%s,,,%s,,,") a0 a1) /// Neither 'member val' nor 'override val' definitions are permitted in object expressions. - /// (Originally from ..\FSComp.txt:1290) + /// (Originally from ..\FSComp.txt:1292) static member parsIllegalMemberVarInObjectImplementation() = (3168, GetStringFunc("parsIllegalMemberVarInObjectImplementation",",,,") ) /// Copy-and-update record expressions must include at least one field. - /// (Originally from ..\FSComp.txt:1291) + /// (Originally from ..\FSComp.txt:1293) static member tcEmptyCopyAndUpdateRecordInvalid() = (3169, GetStringFunc("tcEmptyCopyAndUpdateRecordInvalid",",,,") ) /// '_' cannot be used as field name - /// (Originally from ..\FSComp.txt:1292) + /// (Originally from ..\FSComp.txt:1294) static member parsUnderscoreInvalidFieldName() = (3170, GetStringFunc("parsUnderscoreInvalidFieldName",",,,") ) /// The provided types generated by this use of a type provider may not be used from other F# assemblies and should be marked internal or private. Consider using 'type internal TypeName = ...' or 'type private TypeName = ...'. - /// (Originally from ..\FSComp.txt:1293) + /// (Originally from ..\FSComp.txt:1295) static member tcGeneratedTypesShouldBeInternalOrPrivate() = (3171, GetStringFunc("tcGeneratedTypesShouldBeInternalOrPrivate",",,,") ) /// A property's getter and setter must have the same type. Property '%s' has getter of type '%s' but setter of type '%s'. - /// (Originally from ..\FSComp.txt:1294) + /// (Originally from ..\FSComp.txt:1296) static member chkGetterAndSetterHaveSamePropertyType(a0 : System.String, a1 : System.String, a2 : System.String) = (3172, GetStringFunc("chkGetterAndSetterHaveSamePropertyType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Array method '%s' is supplied by the runtime and cannot be directly used in code. For operations with array elements consider using family of GetArray/SetArray functions from LanguagePrimitives.IntrinsicFunctions module. - /// (Originally from ..\FSComp.txt:1295) + /// (Originally from ..\FSComp.txt:1297) static member tcRuntimeSuppliedMethodCannotBeUsedInUserCode(a0 : System.String) = (3173, GetStringFunc("tcRuntimeSuppliedMethodCannotBeUsedInUserCode",",,,%s,,,") a0) /// Union case/exception '%s' does not have field named '%s'. - /// (Originally from ..\FSComp.txt:1296) + /// (Originally from ..\FSComp.txt:1298) static member tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(a0 : System.String, a1 : System.String) = (3174, GetStringFunc("tcUnionCaseConstructorDoesNotHaveFieldWithGivenName",",,,%s,,,%s,,,") a0 a1) /// Union case/exception field '%s' cannot be used more than once. - /// (Originally from ..\FSComp.txt:1297) + /// (Originally from ..\FSComp.txt:1299) static member tcUnionCaseFieldCannotBeUsedMoreThanOnce(a0 : System.String) = (3175, GetStringFunc("tcUnionCaseFieldCannotBeUsedMoreThanOnce",",,,%s,,,") a0) /// Named field '%s' is used more than once. - /// (Originally from ..\FSComp.txt:1298) + /// (Originally from ..\FSComp.txt:1300) static member tcFieldNameIsUsedModeThanOnce(a0 : System.String) = (3176, GetStringFunc("tcFieldNameIsUsedModeThanOnce",",,,%s,,,") a0) /// Named field '%s' conflicts with autogenerated name for anonymous field. - /// (Originally from ..\FSComp.txt:1299) + /// (Originally from ..\FSComp.txt:1301) static member tcFieldNameConflictsWithGeneratedNameForAnonymousField(a0 : System.String) = (3176, GetStringFunc("tcFieldNameConflictsWithGeneratedNameForAnonymousField",",,,%s,,,") a0) /// This literal expression or attribute argument results in an arithmetic overflow. - /// (Originally from ..\FSComp.txt:1300) + /// (Originally from ..\FSComp.txt:1302) static member tastConstantExpressionOverflow() = (3177, GetStringFunc("tastConstantExpressionOverflow",",,,") ) /// This is not valid literal expression. The [] attribute will be ignored. - /// (Originally from ..\FSComp.txt:1301) + /// (Originally from ..\FSComp.txt:1303) static member tcIllegalStructTypeForConstantExpression() = (3178, GetStringFunc("tcIllegalStructTypeForConstantExpression",",,,") ) /// System.Runtime.InteropServices assembly is required to use UnknownWrapper\DispatchWrapper classes. - /// (Originally from ..\FSComp.txt:1302) + /// (Originally from ..\FSComp.txt:1304) static member fscSystemRuntimeInteropServicesIsRequired() = (3179, GetStringFunc("fscSystemRuntimeInteropServicesIsRequired",",,,") ) /// The mutable local '%s' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed. - /// (Originally from ..\FSComp.txt:1303) + /// (Originally from ..\FSComp.txt:1305) static member abImplicitHeapAllocation(a0 : System.String) = (3180, GetStringFunc("abImplicitHeapAllocation",",,,%s,,,") a0) /// A type provider implemented GetStaticParametersForMethod, but ApplyStaticArgumentsForMethod was not implemented or invalid - /// (Originally from ..\FSComp.txt:1304) + /// (Originally from ..\FSComp.txt:1306) static member estApplyStaticArgumentsForMethodNotImplemented() = (GetStringFunc("estApplyStaticArgumentsForMethodNotImplemented",",,,") ) /// An error occured applying the static arguments to a provided method - /// (Originally from ..\FSComp.txt:1305) + /// (Originally from ..\FSComp.txt:1307) static member etErrorApplyingStaticArgumentsToMethod() = (3181, GetStringFunc("etErrorApplyingStaticArgumentsToMethod",",,,") ) /// Unexpected character '%s' in preprocessor expression - /// (Originally from ..\FSComp.txt:1306) + /// (Originally from ..\FSComp.txt:1308) static member pplexUnexpectedChar(a0 : System.String) = (3182, GetStringFunc("pplexUnexpectedChar",",,,%s,,,") a0) /// Unexpected token '%s' in preprocessor expression - /// (Originally from ..\FSComp.txt:1307) + /// (Originally from ..\FSComp.txt:1309) static member ppparsUnexpectedToken(a0 : System.String) = (3183, GetStringFunc("ppparsUnexpectedToken",",,,%s,,,") a0) /// Incomplete preprocessor expression - /// (Originally from ..\FSComp.txt:1308) + /// (Originally from ..\FSComp.txt:1310) static member ppparsIncompleteExpression() = (3184, GetStringFunc("ppparsIncompleteExpression",",,,") ) /// Missing token '%s' in preprocessor expression - /// (Originally from ..\FSComp.txt:1309) + /// (Originally from ..\FSComp.txt:1311) static member ppparsMissingToken(a0 : System.String) = (3185, GetStringFunc("ppparsMissingToken",",,,%s,,,") a0) /// An error occurred while reading the F# metadata node at position %d in table '%s' of assembly '%s'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using. - /// (Originally from ..\FSComp.txt:1310) + /// (Originally from ..\FSComp.txt:1312) static member pickleMissingDefinition(a0 : System.Int32, a1 : System.String, a2 : System.String) = (3186, GetStringFunc("pickleMissingDefinition",",,,%d,,,%s,,,%s,,,") a0 a1 a2) /// Type inference caused the type variable %s to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic. - /// (Originally from ..\FSComp.txt:1311) + /// (Originally from ..\FSComp.txt:1313) static member checkNotSufficientlyGenericBecauseOfScope(a0 : System.String) = (3187, GetStringFunc("checkNotSufficientlyGenericBecauseOfScope",",,,%s,,,") a0) /// Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic. - /// (Originally from ..\FSComp.txt:1312) + /// (Originally from ..\FSComp.txt:1314) static member checkNotSufficientlyGenericBecauseOfScopeAnon() = (3188, GetStringFunc("checkNotSufficientlyGenericBecauseOfScopeAnon",",,,") ) /// Redundant arguments are being ignored in function '%s'. Expected %d but got %d arguments. - /// (Originally from ..\FSComp.txt:1313) + /// (Originally from ..\FSComp.txt:1315) static member checkRaiseFamilyFunctionArgumentCount(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3189, GetStringFunc("checkRaiseFamilyFunctionArgumentCount",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Lowercase literal '%s' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns. - /// (Originally from ..\FSComp.txt:1314) + /// (Originally from ..\FSComp.txt:1316) static member checkLowercaseLiteralBindingInPattern(a0 : System.String) = (3190, GetStringFunc("checkLowercaseLiteralBindingInPattern",",,,%s,,,") a0) /// This literal pattern does not take arguments - /// (Originally from ..\FSComp.txt:1315) + /// (Originally from ..\FSComp.txt:1317) static member tcLiteralDoesNotTakeArguments() = (3191, GetStringFunc("tcLiteralDoesNotTakeArguments",",,,") ) /// Constructors are not permitted as extension members - they must be defined as part of the original definition of the type - /// (Originally from ..\FSComp.txt:1316) + /// (Originally from ..\FSComp.txt:1318) static member tcConstructorsIllegalInAugmentation() = (3192, GetStringFunc("tcConstructorsIllegalInAugmentation",",,,") ) /// Invalid response file '%s' ( '%s' ) - /// (Originally from ..\FSComp.txt:1317) + /// (Originally from ..\FSComp.txt:1319) static member optsInvalidResponseFile(a0 : System.String, a1 : System.String) = (3193, GetStringFunc("optsInvalidResponseFile",",,,%s,,,%s,,,") a0 a1) /// Response file '%s' not found in '%s' - /// (Originally from ..\FSComp.txt:1318) + /// (Originally from ..\FSComp.txt:1320) static member optsResponseFileNotFound(a0 : System.String, a1 : System.String) = (3194, GetStringFunc("optsResponseFileNotFound",",,,%s,,,%s,,,") a0 a1) /// Response file name '%s' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long - /// (Originally from ..\FSComp.txt:1319) + /// (Originally from ..\FSComp.txt:1321) static member optsResponseFileNameInvalid(a0 : System.String) = (3195, GetStringFunc("optsResponseFileNameInvalid",",,,%s,,,") a0) /// Cannot find FSharp.Core.dll in compiler's directory - /// (Originally from ..\FSComp.txt:1320) + /// (Originally from ..\FSComp.txt:1322) static member fsharpCoreNotFoundToBeCopied() = (3196, GetStringFunc("fsharpCoreNotFoundToBeCopied",",,,") ) /// One tuple type is a struct tuple, the other is a reference tuple - /// (Originally from ..\FSComp.txt:1321) + /// (Originally from ..\FSComp.txt:1323) static member tcTupleStructMismatch() = (GetStringFunc("tcTupleStructMismatch",",,,") ) /// This provided method requires static parameters - /// (Originally from ..\FSComp.txt:1322) + /// (Originally from ..\FSComp.txt:1324) static member etMissingStaticArgumentsToMethod() = (3197, GetStringFunc("etMissingStaticArgumentsToMethod",",,,") ) /// The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using 'upcast' instead of 'downcast'. - /// (Originally from ..\FSComp.txt:1323) + /// (Originally from ..\FSComp.txt:1325) static member considerUpcast(a0 : System.String, a1 : System.String) = (3198, GetStringFunc("considerUpcast",",,,%s,,,%s,,,") a0 a1) /// The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator. - /// (Originally from ..\FSComp.txt:1324) + /// (Originally from ..\FSComp.txt:1326) static member considerUpcastOperator(a0 : System.String, a1 : System.String) = (3198, GetStringFunc("considerUpcastOperator",",,,%s,,,%s,,,") a0 a1) /// The 'rec' on this module is implied by an outer 'rec' declaration and is being ignored - /// (Originally from ..\FSComp.txt:1325) + /// (Originally from ..\FSComp.txt:1327) static member tcRecImplied() = (3199, GetStringFunc("tcRecImplied",",,,") ) /// In a recursive declaration group, 'open' declarations must come first in each module - /// (Originally from ..\FSComp.txt:1326) + /// (Originally from ..\FSComp.txt:1328) static member tcOpenFirstInMutRec() = (3200, GetStringFunc("tcOpenFirstInMutRec",",,,") ) /// In a recursive declaration group, module abbreviations must come after all 'open' declarations and before other declarations - /// (Originally from ..\FSComp.txt:1327) + /// (Originally from ..\FSComp.txt:1329) static member tcModuleAbbrevFirstInMutRec() = (3201, GetStringFunc("tcModuleAbbrevFirstInMutRec",",,,") ) /// This declaration is not supported in recursive declaration groups - /// (Originally from ..\FSComp.txt:1328) + /// (Originally from ..\FSComp.txt:1330) static member tcUnsupportedMutRecDecl() = (3202, GetStringFunc("tcUnsupportedMutRecDecl",",,,") ) /// Invalid use of 'rec' keyword - /// (Originally from ..\FSComp.txt:1329) + /// (Originally from ..\FSComp.txt:1331) static member parsInvalidUseOfRec() = (3203, GetStringFunc("parsInvalidUseOfRec",",,,") ) /// If a union type has more than one case and is a struct, then all fields within the union type must be given unique names. - /// (Originally from ..\FSComp.txt:1330) + /// (Originally from ..\FSComp.txt:1332) static member tcStructUnionMultiCaseDistinctFields() = (3204, GetStringFunc("tcStructUnionMultiCaseDistinctFields",",,,") ) /// The CallerMemberNameAttribute applied to parameter '%s' will have no effect. It is overridden by the CallerFilePathAttribute. - /// (Originally from ..\FSComp.txt:1331) + /// (Originally from ..\FSComp.txt:1333) static member CallerMemberNameIsOverriden(a0 : System.String) = (3206, GetStringFunc("CallerMemberNameIsOverriden",",,,%s,,,") a0) /// Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' - /// (Originally from ..\FSComp.txt:1332) + /// (Originally from ..\FSComp.txt:1334) static member tcFixedNotAllowed() = (3207, GetStringFunc("tcFixedNotAllowed",",,,") ) /// Could not find method System.Runtime.CompilerServices.OffsetToStringData in references when building 'fixed' expression. - /// (Originally from ..\FSComp.txt:1333) + /// (Originally from ..\FSComp.txt:1335) static member tcCouldNotFindOffsetToStringData() = (3208, GetStringFunc("tcCouldNotFindOffsetToStringData",",,,") ) /// The address of the variable '%s' cannot be used at this point. A method or function may not return the address of this local value. - /// (Originally from ..\FSComp.txt:1334) + /// (Originally from ..\FSComp.txt:1336) static member chkNoByrefReturnOfLocal(a0 : System.String) = (3209, GetStringFunc("chkNoByrefReturnOfLocal",",,,%s,,,") a0) /// %s is an active pattern and cannot be treated as a discriminated union case with named fields. - /// (Originally from ..\FSComp.txt:1335) + /// (Originally from ..\FSComp.txt:1337) static member tcNamedActivePattern(a0 : System.String) = (3210, GetStringFunc("tcNamedActivePattern",",,,%s,,,") a0) /// The default value does not have the same type as the argument. The DefaultParameterValue attribute and any Optional attribute will be ignored. Note: 'null' needs to be annotated with the correct type, e.g. 'DefaultParameterValue(null:obj)'. - /// (Originally from ..\FSComp.txt:1336) + /// (Originally from ..\FSComp.txt:1338) static member DefaultParameterValueNotAppropriateForArgument() = (3211, GetStringFunc("DefaultParameterValueNotAppropriateForArgument",",,,") ) /// The system type '%s' was required but no referenced system DLL contained this type - /// (Originally from ..\FSComp.txt:1337) + /// (Originally from ..\FSComp.txt:1339) static member tcGlobalsSystemTypeNotFound(a0 : System.String) = (GetStringFunc("tcGlobalsSystemTypeNotFound",",,,%s,,,") a0) /// The member '%s' matches multiple overloads of the same method.\nPlease restrict it to one of the following:%s. - /// (Originally from ..\FSComp.txt:1338) + /// (Originally from ..\FSComp.txt:1340) static member typrelMemberHasMultiplePossibleDispatchSlots(a0 : System.String, a1 : System.String) = (3213, GetStringFunc("typrelMemberHasMultiplePossibleDispatchSlots",",,,%s,,,%s,,,") a0 a1) /// Method or object constructor '%s' is not static - /// (Originally from ..\FSComp.txt:1339) + /// (Originally from ..\FSComp.txt:1341) static member methodIsNotStatic(a0 : System.String) = (3214, GetStringFunc("methodIsNotStatic",",,,%s,,,") a0) /// Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? - /// (Originally from ..\FSComp.txt:1340) + /// (Originally from ..\FSComp.txt:1342) static member parsUnexpectedSymbolEqualsInsteadOfIn() = (3215, GetStringFunc("parsUnexpectedSymbolEqualsInsteadOfIn",",,,") ) + /// Two anonymous record types are from different assemblies '%s' and '%s' + /// (Originally from ..\FSComp.txt:1343) + static member tcAnonRecdCcuMismatch(a0 : System.String, a1 : System.String) = (GetStringFunc("tcAnonRecdCcuMismatch",",,,%s,,,%s,,,") a0 a1) + /// One anonymous record type is assembly-bound to '%s' (syntax 'new {| ... |}'), the other is assembly-neutral (syntax '{| ... |}') + /// (Originally from ..\FSComp.txt:1344) + static member tcAnonRecdFieldNameMismatch(a0 : System.String, a1 : System.String) = (GetStringFunc("tcAnonRecdFieldNameMismatch",",,,%s,,,%s,,,") a0 a1) /// Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. - /// (Originally from ..\FSComp.txt:1341) + /// (Originally from ..\FSComp.txt:1346) static member keywordDescriptionAbstract() = (GetStringFunc("keywordDescriptionAbstract",",,,") ) /// Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters. - /// (Originally from ..\FSComp.txt:1342) + /// (Originally from ..\FSComp.txt:1347) static member keyworkDescriptionAnd() = (GetStringFunc("keyworkDescriptionAnd",",,,") ) /// Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. - /// (Originally from ..\FSComp.txt:1343) + /// (Originally from ..\FSComp.txt:1348) static member keywordDescriptionAs() = (GetStringFunc("keywordDescriptionAs",",,,") ) /// Used to verify code during debugging. - /// (Originally from ..\FSComp.txt:1344) + /// (Originally from ..\FSComp.txt:1349) static member keywordDescriptionAssert() = (GetStringFunc("keywordDescriptionAssert",",,,") ) /// Used as the name of the base class object. - /// (Originally from ..\FSComp.txt:1345) + /// (Originally from ..\FSComp.txt:1350) static member keywordDescriptionBase() = (GetStringFunc("keywordDescriptionBase",",,,") ) /// In verbose syntax, indicates the start of a code block. - /// (Originally from ..\FSComp.txt:1346) + /// (Originally from ..\FSComp.txt:1351) static member keywordDescriptionBegin() = (GetStringFunc("keywordDescriptionBegin",",,,") ) /// In verbose syntax, indicates the start of a class definition. - /// (Originally from ..\FSComp.txt:1347) + /// (Originally from ..\FSComp.txt:1352) static member keywordDescriptionClass() = (GetStringFunc("keywordDescriptionClass",",,,") ) /// Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. - /// (Originally from ..\FSComp.txt:1348) + /// (Originally from ..\FSComp.txt:1353) static member keywordDescriptionDefault() = (GetStringFunc("keywordDescriptionDefault",",,,") ) /// Used to declare a delegate. - /// (Originally from ..\FSComp.txt:1349) + /// (Originally from ..\FSComp.txt:1354) static member keywordDescriptionDelegate() = (GetStringFunc("keywordDescriptionDelegate",",,,") ) /// Used in looping constructs or to execute imperative code. - /// (Originally from ..\FSComp.txt:1350) + /// (Originally from ..\FSComp.txt:1355) static member keywordDescriptionDo() = (GetStringFunc("keywordDescriptionDo",",,,") ) /// In verbose syntax, indicates the end of a block of code in a looping expression. - /// (Originally from ..\FSComp.txt:1351) + /// (Originally from ..\FSComp.txt:1356) static member keywordDescriptionDone() = (GetStringFunc("keywordDescriptionDone",",,,") ) /// Used to convert to a type that is lower in the inheritance chain. - /// (Originally from ..\FSComp.txt:1352) + /// (Originally from ..\FSComp.txt:1357) static member keywordDescriptionDowncast() = (GetStringFunc("keywordDescriptionDowncast",",,,") ) /// In a for expression, used when counting in reverse. - /// (Originally from ..\FSComp.txt:1353) + /// (Originally from ..\FSComp.txt:1358) static member keywordDescriptionDownto() = (GetStringFunc("keywordDescriptionDownto",",,,") ) /// Used in conditional branching. A short form of else if. - /// (Originally from ..\FSComp.txt:1354) + /// (Originally from ..\FSComp.txt:1359) static member keywordDescriptionElif() = (GetStringFunc("keywordDescriptionElif",",,,") ) /// Used in conditional branching. - /// (Originally from ..\FSComp.txt:1355) + /// (Originally from ..\FSComp.txt:1360) static member keywordDescriptionElse() = (GetStringFunc("keywordDescriptionElse",",,,") ) /// In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. - /// (Originally from ..\FSComp.txt:1356) + /// (Originally from ..\FSComp.txt:1361) static member keywordDescriptionEnd() = (GetStringFunc("keywordDescriptionEnd",",,,") ) /// Used to declare an exception type. - /// (Originally from ..\FSComp.txt:1357) + /// (Originally from ..\FSComp.txt:1362) static member keywordDescriptionException() = (GetStringFunc("keywordDescriptionException",",,,") ) /// Indicates that a declared program element is defined in another binary or assembly. - /// (Originally from ..\FSComp.txt:1358) + /// (Originally from ..\FSComp.txt:1363) static member keywordDescriptionExtern() = (GetStringFunc("keywordDescriptionExtern",",,,") ) /// Used as a Boolean literal. - /// (Originally from ..\FSComp.txt:1359) + /// (Originally from ..\FSComp.txt:1364) static member keywordDescriptionTrueFalse() = (GetStringFunc("keywordDescriptionTrueFalse",",,,") ) /// Used together with try to introduce a block of code that executes regardless of whether an exception occurs. - /// (Originally from ..\FSComp.txt:1360) + /// (Originally from ..\FSComp.txt:1365) static member keywordDescriptionFinally() = (GetStringFunc("keywordDescriptionFinally",",,,") ) /// Used in looping constructs. - /// (Originally from ..\FSComp.txt:1361) + /// (Originally from ..\FSComp.txt:1366) static member keywordDescriptionFor() = (GetStringFunc("keywordDescriptionFor",",,,") ) /// Used in lambda expressions, also known as anonymous functions. - /// (Originally from ..\FSComp.txt:1362) + /// (Originally from ..\FSComp.txt:1367) static member keywordDescriptionFun() = (GetStringFunc("keywordDescriptionFun",",,,") ) /// Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. - /// (Originally from ..\FSComp.txt:1363) + /// (Originally from ..\FSComp.txt:1368) static member keywordDescriptionFunction() = (GetStringFunc("keywordDescriptionFunction",",,,") ) /// Used to reference the top-level .NET namespace. - /// (Originally from ..\FSComp.txt:1364) + /// (Originally from ..\FSComp.txt:1369) static member keywordDescriptionGlobal() = (GetStringFunc("keywordDescriptionGlobal",",,,") ) /// Used in conditional branching constructs. - /// (Originally from ..\FSComp.txt:1365) + /// (Originally from ..\FSComp.txt:1370) static member keywordDescriptionIf() = (GetStringFunc("keywordDescriptionIf",",,,") ) /// Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. - /// (Originally from ..\FSComp.txt:1366) + /// (Originally from ..\FSComp.txt:1371) static member keywordDescriptionIn() = (GetStringFunc("keywordDescriptionIn",",,,") ) /// Used to specify a base class or base interface. - /// (Originally from ..\FSComp.txt:1367) + /// (Originally from ..\FSComp.txt:1372) static member keywordDescriptionInherit() = (GetStringFunc("keywordDescriptionInherit",",,,") ) /// Used to indicate a function that should be integrated directly into the caller's code. - /// (Originally from ..\FSComp.txt:1368) + /// (Originally from ..\FSComp.txt:1373) static member keywordDescriptionInline() = (GetStringFunc("keywordDescriptionInline",",,,") ) /// Used to declare and implement interfaces. - /// (Originally from ..\FSComp.txt:1369) + /// (Originally from ..\FSComp.txt:1374) static member keywordDescriptionInterface() = (GetStringFunc("keywordDescriptionInterface",",,,") ) /// Used to specify that a member is visible inside an assembly but not outside it. - /// (Originally from ..\FSComp.txt:1370) + /// (Originally from ..\FSComp.txt:1375) static member keywordDescriptionInternal() = (GetStringFunc("keywordDescriptionInternal",",,,") ) /// Used to specify a computation that is to be performed only when a result is needed. - /// (Originally from ..\FSComp.txt:1371) + /// (Originally from ..\FSComp.txt:1376) static member keywordDescriptionLazy() = (GetStringFunc("keywordDescriptionLazy",",,,") ) /// Used to associate, or bind, a name to a value or function. - /// (Originally from ..\FSComp.txt:1372) + /// (Originally from ..\FSComp.txt:1377) static member keywordDescriptionLet() = (GetStringFunc("keywordDescriptionLet",",,,") ) /// Used in asynchronous workflows to bind a name to the result of an asynchronous computation, or, in other computation expressions, used to bind a name to a result, which is of the computation type. - /// (Originally from ..\FSComp.txt:1373) + /// (Originally from ..\FSComp.txt:1378) static member keywordDescriptionLetBang() = (GetStringFunc("keywordDescriptionLetBang",",,,") ) /// Used to branch by comparing a value to a pattern. - /// (Originally from ..\FSComp.txt:1374) + /// (Originally from ..\FSComp.txt:1379) static member keywordDescriptionMatch() = (GetStringFunc("keywordDescriptionMatch",",,,") ) /// Used to declare a property or method in an object type. - /// (Originally from ..\FSComp.txt:1375) + /// (Originally from ..\FSComp.txt:1380) static member keywordDescriptionMember() = (GetStringFunc("keywordDescriptionMember",",,,") ) /// Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. - /// (Originally from ..\FSComp.txt:1376) + /// (Originally from ..\FSComp.txt:1381) static member keywordDescriptionModule() = (GetStringFunc("keywordDescriptionModule",",,,") ) /// Used to declare a variable, that is, a value that can be changed. - /// (Originally from ..\FSComp.txt:1377) + /// (Originally from ..\FSComp.txt:1382) static member keywordDescriptionMutable() = (GetStringFunc("keywordDescriptionMutable",",,,") ) /// Used to associate a name with a group of related types and modules, to logically separate it from other code. - /// (Originally from ..\FSComp.txt:1378) + /// (Originally from ..\FSComp.txt:1383) static member keywordDescriptionNamespace() = (GetStringFunc("keywordDescriptionNamespace",",,,") ) /// Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. - /// (Originally from ..\FSComp.txt:1379) + /// (Originally from ..\FSComp.txt:1384) static member keywordDescriptionNew() = (GetStringFunc("keywordDescriptionNew",",,,") ) /// Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - /// (Originally from ..\FSComp.txt:1380) + /// (Originally from ..\FSComp.txt:1385) static member keywordDescriptionNot() = (GetStringFunc("keywordDescriptionNot",",,,") ) /// Indicates the absence of an object. Also used in generic parameter constraints. - /// (Originally from ..\FSComp.txt:1381) + /// (Originally from ..\FSComp.txt:1386) static member keywordDescriptionNull() = (GetStringFunc("keywordDescriptionNull",",,,") ) /// Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. - /// (Originally from ..\FSComp.txt:1382) + /// (Originally from ..\FSComp.txt:1387) static member keywordDescriptionOf() = (GetStringFunc("keywordDescriptionOf",",,,") ) /// Used to make the contents of a namespace or module available without qualification. - /// (Originally from ..\FSComp.txt:1383) + /// (Originally from ..\FSComp.txt:1388) static member keywordDescriptionOpen() = (GetStringFunc("keywordDescriptionOpen",",,,") ) /// Used with Boolean conditions as a Boolean or operator. Equivalent to ||. Also used in member constraints. - /// (Originally from ..\FSComp.txt:1384) + /// (Originally from ..\FSComp.txt:1389) static member keywordDescriptionOr() = (GetStringFunc("keywordDescriptionOr",",,,") ) /// Used to implement a version of an abstract or virtual method that differs from the base version. - /// (Originally from ..\FSComp.txt:1385) + /// (Originally from ..\FSComp.txt:1390) static member keywordDescriptionOverride() = (GetStringFunc("keywordDescriptionOverride",",,,") ) /// Restricts access to a member to code in the same type or module. - /// (Originally from ..\FSComp.txt:1386) + /// (Originally from ..\FSComp.txt:1391) static member keywordDescriptionPrivate() = (GetStringFunc("keywordDescriptionPrivate",",,,") ) /// Allows access to a member from outside the type. - /// (Originally from ..\FSComp.txt:1387) + /// (Originally from ..\FSComp.txt:1392) static member keywordDescriptionPublic() = (GetStringFunc("keywordDescriptionPublic",",,,") ) /// Used to indicate that a function is recursive. - /// (Originally from ..\FSComp.txt:1388) + /// (Originally from ..\FSComp.txt:1393) static member keywordDescriptionRec() = (GetStringFunc("keywordDescriptionRec",",,,") ) /// Used to indicate a value to provide as the result of a computation expression. - /// (Originally from ..\FSComp.txt:1389) + /// (Originally from ..\FSComp.txt:1394) static member keywordDescriptionReturn() = (GetStringFunc("keywordDescriptionReturn",",,,") ) /// Used to indicate a computation expression that, when evaluated, provides the result of the containing computation expression. - /// (Originally from ..\FSComp.txt:1390) + /// (Originally from ..\FSComp.txt:1395) static member keywordDescriptionReturnBang() = (GetStringFunc("keywordDescriptionReturnBang",",,,") ) /// Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. - /// (Originally from ..\FSComp.txt:1391) + /// (Originally from ..\FSComp.txt:1396) static member keywordDescriptionSelect() = (GetStringFunc("keywordDescriptionSelect",",,,") ) /// Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. - /// (Originally from ..\FSComp.txt:1392) + /// (Originally from ..\FSComp.txt:1397) static member keywordDescriptionStatic() = (GetStringFunc("keywordDescriptionStatic",",,,") ) /// Used to declare a structure type. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. - /// (Originally from ..\FSComp.txt:1393) + /// (Originally from ..\FSComp.txt:1398) static member keywordDescriptionStruct() = (GetStringFunc("keywordDescriptionStruct",",,,") ) /// Used in conditional expressions. Also used to perform side effects after object construction. - /// (Originally from ..\FSComp.txt:1394) + /// (Originally from ..\FSComp.txt:1399) static member keywordDescriptionThen() = (GetStringFunc("keywordDescriptionThen",",,,") ) /// Used in for loops to indicate a range. - /// (Originally from ..\FSComp.txt:1395) + /// (Originally from ..\FSComp.txt:1400) static member keywordDescriptionTo() = (GetStringFunc("keywordDescriptionTo",",,,") ) /// Used to introduce a block of code that might generate an exception. Used together with with or finally. - /// (Originally from ..\FSComp.txt:1396) + /// (Originally from ..\FSComp.txt:1401) static member keywordDescriptionTry() = (GetStringFunc("keywordDescriptionTry",",,,") ) /// Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. - /// (Originally from ..\FSComp.txt:1397) + /// (Originally from ..\FSComp.txt:1402) static member keywordDescriptionType() = (GetStringFunc("keywordDescriptionType",",,,") ) /// Used to convert to a type that is higher in the inheritance chain. - /// (Originally from ..\FSComp.txt:1398) + /// (Originally from ..\FSComp.txt:1403) static member keywordDescriptionUpcast() = (GetStringFunc("keywordDescriptionUpcast",",,,") ) /// Used instead of let for values that require Dispose to be called to free resources. - /// (Originally from ..\FSComp.txt:1399) + /// (Originally from ..\FSComp.txt:1404) static member keywordDescriptionUse() = (GetStringFunc("keywordDescriptionUse",",,,") ) /// Used instead of let! in asynchronous workflows and other computation expressions for values that require Dispose to be called to free resources. - /// (Originally from ..\FSComp.txt:1400) + /// (Originally from ..\FSComp.txt:1405) static member keywordDescriptionUseBang() = (GetStringFunc("keywordDescriptionUseBang",",,,") ) /// Used in a signature to indicate a value, or in a type to declare a member, in limited situations. - /// (Originally from ..\FSComp.txt:1401) + /// (Originally from ..\FSComp.txt:1406) static member keywordDescriptionVal() = (GetStringFunc("keywordDescriptionVal",",,,") ) /// Indicates the .NET void type. Used when interoperating with other .NET languages. - /// (Originally from ..\FSComp.txt:1402) + /// (Originally from ..\FSComp.txt:1407) static member keywordDescriptionVoid() = (GetStringFunc("keywordDescriptionVoid",",,,") ) /// Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. - /// (Originally from ..\FSComp.txt:1403) + /// (Originally from ..\FSComp.txt:1408) static member keywordDescriptionWhen() = (GetStringFunc("keywordDescriptionWhen",",,,") ) /// Introduces a looping construct. - /// (Originally from ..\FSComp.txt:1404) + /// (Originally from ..\FSComp.txt:1409) static member keywordDescriptionWhile() = (GetStringFunc("keywordDescriptionWhile",",,,") ) /// Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. - /// (Originally from ..\FSComp.txt:1405) + /// (Originally from ..\FSComp.txt:1410) static member keywordDescriptionWith() = (GetStringFunc("keywordDescriptionWith",",,,") ) /// Used in a sequence expression to produce a value for a sequence. - /// (Originally from ..\FSComp.txt:1406) + /// (Originally from ..\FSComp.txt:1411) static member keywordDescriptionYield() = (GetStringFunc("keywordDescriptionYield",",,,") ) /// Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. - /// (Originally from ..\FSComp.txt:1407) + /// (Originally from ..\FSComp.txt:1412) static member keywordDescriptionYieldBang() = (GetStringFunc("keywordDescriptionYieldBang",",,,") ) /// In function types, delimits arguments and return values. Yields an expression (in sequence expressions); equivalent to the yield keyword. Used in match expressions - /// (Originally from ..\FSComp.txt:1408) + /// (Originally from ..\FSComp.txt:1413) static member keywordDescriptionRightArrow() = (GetStringFunc("keywordDescriptionRightArrow",",,,") ) /// Assigns a value to a variable. - /// (Originally from ..\FSComp.txt:1409) + /// (Originally from ..\FSComp.txt:1414) static member keywordDescriptionLeftArrow() = (GetStringFunc("keywordDescriptionLeftArrow",",,,") ) /// Converts a type to type that is higher in the hierarchy. - /// (Originally from ..\FSComp.txt:1410) + /// (Originally from ..\FSComp.txt:1415) static member keywordDescriptionCast() = (GetStringFunc("keywordDescriptionCast",",,,") ) /// Converts a type to a type that is lower in the hierarchy. - /// (Originally from ..\FSComp.txt:1411) + /// (Originally from ..\FSComp.txt:1416) static member keywordDescriptionDynamicCast() = (GetStringFunc("keywordDescriptionDynamicCast",",,,") ) /// Delimits a typed code quotation. - /// (Originally from ..\FSComp.txt:1412) + /// (Originally from ..\FSComp.txt:1417) static member keywordDescriptionTypedQuotation() = (GetStringFunc("keywordDescriptionTypedQuotation",",,,") ) /// Delimits a untyped code quotation. - /// (Originally from ..\FSComp.txt:1413) + /// (Originally from ..\FSComp.txt:1418) static member keywordDescriptionUntypedQuotation() = (GetStringFunc("keywordDescriptionUntypedQuotation",",,,") ) /// %s '%s' not found in assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ..\FSComp.txt:1414) + /// (Originally from ..\FSComp.txt:1419) static member itemNotFoundDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String) = (3216, GetStringFunc("itemNotFoundDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s '%s' not found in type '%s' from assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ..\FSComp.txt:1415) + /// (Originally from ..\FSComp.txt:1420) static member itemNotFoundInTypeDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3216, GetStringFunc("itemNotFoundInTypeDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// is - /// (Originally from ..\FSComp.txt:1416) + /// (Originally from ..\FSComp.txt:1421) static member descriptionWordIs() = (GetStringFunc("descriptionWordIs",",,,") ) /// This value is not a function and cannot be applied. - /// (Originally from ..\FSComp.txt:1417) + /// (Originally from ..\FSComp.txt:1422) static member notAFunction() = (GetStringFunc("notAFunction",",,,") ) /// This value is not a function and cannot be applied. Did you intend to access the indexer via %s.[index] instead? - /// (Originally from ..\FSComp.txt:1418) + /// (Originally from ..\FSComp.txt:1423) static member notAFunctionButMaybeIndexerWithName(a0 : System.String) = (GetStringFunc("notAFunctionButMaybeIndexerWithName",",,,%s,,,") a0) /// This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead? - /// (Originally from ..\FSComp.txt:1419) + /// (Originally from ..\FSComp.txt:1424) static member notAFunctionButMaybeIndexer() = (GetStringFunc("notAFunctionButMaybeIndexer",",,,") ) /// - /// (Originally from ..\FSComp.txt:1420) + /// (Originally from ..\FSComp.txt:1425) static member notAFunctionButMaybeIndexerErrorCode() = (3217, GetStringFunc("notAFunctionButMaybeIndexerErrorCode",",,,") ) /// This value is not a function and cannot be applied. Did you forget to terminate a declaration? - /// (Originally from ..\FSComp.txt:1421) + /// (Originally from ..\FSComp.txt:1426) static member notAFunctionButMaybeDeclaration() = (GetStringFunc("notAFunctionButMaybeDeclaration",",,,") ) /// The argument names in the signature '%s' and implementation '%s' do not match. The argument name from the signature file will be used. This may cause problems when debugging or profiling. - /// (Originally from ..\FSComp.txt:1422) + /// (Originally from ..\FSComp.txt:1427) static member ArgumentsInSigAndImplMismatch(a0 : System.String, a1 : System.String) = (3218, GetStringFunc("ArgumentsInSigAndImplMismatch",",,,%s,,,%s,,,") a0 a1) /// An error occurred while reading the F# metadata of assembly '%s'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct. - /// (Originally from ..\FSComp.txt:1423) + /// (Originally from ..\FSComp.txt:1428) static member pickleUnexpectedNonZero(a0 : System.String) = (3219, GetStringFunc("pickleUnexpectedNonZero",",,,%s,,,") a0) /// This method or property is not normally used from F# code, use an explicit tuple pattern for deconstruction instead. - /// (Originally from ..\FSComp.txt:1424) + /// (Originally from ..\FSComp.txt:1429) static member tcTupleMemberNotNormallyUsed() = (3220, GetStringFunc("tcTupleMemberNotNormallyUsed",",,,") ) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'. - /// (Originally from ..\FSComp.txt:1425) + /// (Originally from ..\FSComp.txt:1430) static member implicitlyDiscardedInSequenceExpression(a0 : System.String) = (3221, GetStringFunc("implicitlyDiscardedInSequenceExpression",",,,%s,,,") a0) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. - /// (Originally from ..\FSComp.txt:1426) + /// (Originally from ..\FSComp.txt:1431) static member implicitlyDiscardedSequenceInSequenceExpression(a0 : System.String) = (3222, GetStringFunc("implicitlyDiscardedSequenceInSequenceExpression",",,,%s,,,") a0) + /// Invalid anonymous record expression + /// (Originally from ..\FSComp.txt:1432) + static member parsInvalidAnonRecdExpr() = (3223, GetStringFunc("parsInvalidAnonRecdExpr",",,,") ) + /// Invalid anonymous record type + /// (Originally from ..\FSComp.txt:1433) + static member parsInvalidAnonRecdType() = (3224, GetStringFunc("parsInvalidAnonRecdType",",,,") ) /// Call this method once to validate that all known resources are valid; throws if not static member RunStartupValidation() = @@ -4747,6 +4765,7 @@ type internal SR private() = ignore(GetString("parsUnmatched")) ignore(GetString("parsUnmatchedBracketBar")) ignore(GetString("parsUnmatchedBrace")) + ignore(GetString("parsUnmatchedBraceBar")) ignore(GetString("parsFieldBinding")) ignore(GetString("parsMemberIllegalInObjectImplementation")) ignore(GetString("parsMissingFunctionBody")) @@ -5219,6 +5238,7 @@ type internal SR private() = ignore(GetString("typeInfoExtension")) ignore(GetString("typeInfoCustomOperation")) ignore(GetString("typeInfoArgument")) + ignore(GetString("typeInfoAnonRecdField")) ignore(GetString("typeInfoPatternVariable")) ignore(GetString("typeInfoNamespace")) ignore(GetString("typeInfoModule")) @@ -5620,6 +5640,8 @@ type internal SR private() = ignore(GetString("typrelMemberHasMultiplePossibleDispatchSlots")) ignore(GetString("methodIsNotStatic")) ignore(GetString("parsUnexpectedSymbolEqualsInsteadOfIn")) + ignore(GetString("tcAnonRecdCcuMismatch")) + ignore(GetString("tcAnonRecdFieldNameMismatch")) ignore(GetString("keywordDescriptionAbstract")) ignore(GetString("keyworkDescriptionAnd")) ignore(GetString("keywordDescriptionAs")) @@ -5706,4 +5728,6 @@ type internal SR private() = ignore(GetString("tcTupleMemberNotNormallyUsed")) ignore(GetString("implicitlyDiscardedInSequenceExpression")) ignore(GetString("implicitlyDiscardedSequenceInSequenceExpression")) + ignore(GetString("parsInvalidAnonRecdExpr")) + ignore(GetString("parsInvalidAnonRecdType")) () diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index 98d1c657bae..2e1d0938ce4 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -1117,7 +1117,7 @@ The member or object constructor '{0}' is not {1} - The member or object constructor '{0}' is not {1}. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from within inner lambda expressions, object expressions or computation expressions (such as async { }). If {0} is a protected member, consider creating a member in this type that calls it. + The member or object constructor '{0}' is not {1}. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions. {0} is not a static method @@ -1431,6 +1431,9 @@ Unmatched '{{' + + Unmatched '{{|' + Field bindings must have the form 'id = expr;' @@ -2847,6 +2850,9 @@ argument + + anonymous record field + patvar @@ -4050,6 +4056,12 @@ Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? + + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. @@ -4309,4 +4321,10 @@ This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. + + Invalid anonymous record expression + + + Invalid anonymous record type + \ No newline at end of file diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 069dba4859e..86789db080e 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -959,12 +959,12 @@ let OutputPhasedErrorR (os:StringBuilder) (err:PhasedDiagnostic) = | Parser.TOKEN_RPAREN | Parser.TOKEN_RPAREN_COMING_SOON | Parser.TOKEN_RPAREN_IS_HERE -> getErrorString("Parser.TOKEN.RPAREN") | Parser.TOKEN_LQUOTE -> getErrorString("Parser.TOKEN.LQUOTE") | Parser.TOKEN_LBRACK -> getErrorString("Parser.TOKEN.LBRACK") + | Parser.TOKEN_LBRACE_BAR -> getErrorString("Parser.TOKEN.LBRACE.BAR") | Parser.TOKEN_LBRACK_BAR -> getErrorString("Parser.TOKEN.LBRACK.BAR") | Parser.TOKEN_LBRACK_LESS -> getErrorString("Parser.TOKEN.LBRACK.LESS") | Parser.TOKEN_LBRACE -> getErrorString("Parser.TOKEN.LBRACE") - | Parser.TOKEN_LBRACE_LESS-> getErrorString("Parser.TOKEN.LBRACE.LESS") | Parser.TOKEN_BAR_RBRACK -> getErrorString("Parser.TOKEN.BAR.RBRACK") - | Parser.TOKEN_GREATER_RBRACE -> getErrorString("Parser.TOKEN.GREATER.RBRACE") + | Parser.TOKEN_BAR_RBRACE -> getErrorString("Parser.TOKEN.BAR.RBRACE") | Parser.TOKEN_GREATER_RBRACK -> getErrorString("Parser.TOKEN.GREATER.RBRACK") | Parser.TOKEN_RQUOTE_DOT _ | Parser.TOKEN_RQUOTE -> getErrorString("Parser.TOKEN.RQUOTE") @@ -1094,7 +1094,7 @@ let OutputPhasedErrorR (os:StringBuilder) (err:PhasedDiagnostic) = (* Merge a bunch of expression non terminals *) let (|NONTERM_Category_Expr|_|) = function | Parser.NONTERM_argExpr|Parser.NONTERM_minusExpr|Parser.NONTERM_parenExpr|Parser.NONTERM_atomicExpr - | Parser.NONTERM_appExpr|Parser.NONTERM_tupleExpr|Parser.NONTERM_declExpr|Parser.NONTERM_braceExpr + | Parser.NONTERM_appExpr|Parser.NONTERM_tupleExpr|Parser.NONTERM_declExpr|Parser.NONTERM_braceExpr|Parser.NONTERM_braceBarExpr | Parser.NONTERM_typedSeqExprBlock | Parser.NONTERM_interactiveExpr -> Some() | _ -> None diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index b1b690c6a85..ca16d3465bc 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -221,6 +221,7 @@ let rec occursCheck g un ty = match stripTyEqns g ty with | TType_ucase(_, l) | TType_app (_, l) + | TType_anon(_, l) | TType_tuple (_, l) -> List.exists (occursCheck g un) l | TType_fun (d, r) -> occursCheck g un d || occursCheck g un r | TType_var r -> typarEq un r @@ -293,6 +294,7 @@ type TraitConstraintSolution = | TTraitBuiltIn | TTraitSolved of MethInfo * TypeInst | TTraitSolvedRecdProp of RecdFieldInfo * bool + | TTraitSolvedAnonRecdProp of AnonRecdTypeInfo * TypeInst * int let BakedInTraitConstraintNames = [ "op_Division" ; "op_Multiply"; "op_Addition" @@ -557,6 +559,7 @@ let rec SimplifyMeasuresInType g resultFirst ((generalizable, generalized) as pa match stripTyparEqns ty with | TType_ucase(_, l) | TType_app (_, l) + | TType_anon (_,l) | TType_tuple (_, l) -> SimplifyMeasuresInTypes g param l | TType_fun (d, r) -> if resultFirst then SimplifyMeasuresInTypes g param [r;d] else SimplifyMeasuresInTypes g param [d;r] @@ -594,6 +597,7 @@ let rec GetMeasureVarGcdInType v ty = match stripTyparEqns ty with | TType_ucase(_, l) | TType_app (_, l) + | TType_anon (_,l) | TType_tuple (_, l) -> GetMeasureVarGcdInTypes v l | TType_fun (d, r) -> GcdRational (GetMeasureVarGcdInType v d) (GetMeasureVarGcdInType v r) @@ -757,6 +761,14 @@ and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty ))) +and SolveAnonInfoEqualsAnonInfo (csenv:ConstraintSolverEnv) m2 (anonInfo1: AnonRecdTypeInfo) (anonInfo2: AnonRecdTypeInfo) = + if evalTupInfoIsStruct anonInfo1.TupInfo <> evalTupInfoIsStruct anonInfo2.TupInfo then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m,m2)) else + (match anonInfo1.Assembly, anonInfo2.Assembly with + | ccu1, ccu2 -> if not (ccuEq ccu1 ccu2) then ErrorD (ConstraintSolverError(FSComp.SR.tcAnonRecdCcuMismatch(ccu1.AssemblyName, ccu2.AssemblyName), csenv.m,m2)) else ResultD () + ) ++ (fun () -> + if not (anonInfo1.SortedNames = anonInfo2.SortedNames) then ErrorD (ConstraintSolverError(FSComp.SR.tcAnonRecdFieldNameMismatch(sprintf "%A" (Array.toList anonInfo1.SortedNames), sprintf "%A" (Array.toList anonInfo2.SortedNames)), csenv.m,m2)) else + ResultD ()) + /// Add the constraint "ty1 = ty2" to the constraint problem. /// Propagate all effects of adding this constraint, e.g. to solve type variables and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace) (cxsln:(TraitConstraintInfo * TraitConstraintSln) option) ty1 ty2 = @@ -797,6 +809,9 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace | TType_tuple (tupInfo1, l1) , TType_tuple (tupInfo2, l2) -> if evalTupInfoIsStruct tupInfo1 <> evalTupInfoIsStruct tupInfo2 then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m, m2)) else SolveTypEqualsTypEqns csenv ndeep m2 trace None l1 l2 + | TType_anon (anonInfo1, l1),TType_anon (anonInfo2, l2) -> + SolveAnonInfoEqualsAnonInfo csenv m2 anonInfo1 anonInfo2 ++ (fun () -> + SolveTypEqualsTypEqns csenv ndeep m2 trace None l1 l2) | TType_fun (d1, r1) , TType_fun (d2, r2) -> SolveFunTypEqn csenv ndeep m2 trace None d1 d2 r1 r2 | TType_measure ms1 , TType_measure ms2 -> UnifyMeasures csenv trace ms1 ms2 | TType_forall(tps1, rty1), TType_forall(tps2, rty2) -> @@ -859,6 +874,9 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra | TType_tuple (tupInfo1, l1) , TType_tuple (tupInfo2, l2) -> if evalTupInfoIsStruct tupInfo1 <> evalTupInfoIsStruct tupInfo2 then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m, m2)) else SolveTypEqualsTypEqns 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 () -> + SolveTypEqualsTypEqns csenv ndeep m2 trace cxsln l1 l2) (* nb. can unify since no variance *) | TType_fun (d1, r1) , TType_fun (d2, r2) -> SolveFunTypEqn 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 @@ -1232,9 +1250,24 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p else None + let anonRecdPropSearch = + let isGetProp = nm.StartsWith "get_" + if isGetProp && memFlags.IsInstance then + let propName = nm.[4..] + let props = + tys |> List.choose (fun ty -> + match NameResolution.TryFindAnonRecdFieldOfType g ty propName with + | Some (NameResolution.Item.AnonRecdField(anonInfo, tinst, i, _)) -> Some (anonInfo, tinst, i) + | _ -> None) + match props with + | [ prop ] -> Some prop + | _ -> None + else + None + // Now check if there are no feasible solutions at all - match minfos, recdPropSearch with - | [], None when not (tys |> List.exists (isAnyParTy g)) -> + match minfos, recdPropSearch, anonRecdPropSearch with + | [], None, None when not (tys |> List.exists (isAnyParTy g)) -> if tys |> List.exists (isFunTy g) then ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenFunction(DecompileOpName nm), m, m2)) elif tys |> List.exists (isAnyTupleTy g) then @@ -1276,13 +1309,20 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p let methOverloadResult, errors = trace.CollectThenUndoOrCommit (fun (a, _) -> Option.isSome a) (fun trace -> ResolveOverloading csenv (WithTrace trace) nm ndeep (Some traitInfo) (0, 0) AccessibleFromEverywhere calledMethGroup false (Some rty)) - match recdPropSearch, methOverloadResult with - | Some (rfinfo, isSetProp), None -> + match anonRecdPropSearch, recdPropSearch, methOverloadResult with + | Some (anonInfo, tinst, i), None, None -> + // OK, the constraint is solved by a record property. Assert that the return types match. + let rty2 = List.item i tinst + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty rty2 ++ (fun () -> + ResultD (TTraitSolvedAnonRecdProp(anonInfo, tinst, i))) + + | None, Some (rfinfo, isSetProp), None -> // OK, the constraint is solved by a record property. Assert that the return types match. let rty2 = if isSetProp then g.unit_ty else rfinfo.FieldType SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty rty2 ++ (fun () -> ResultD (TTraitSolvedRecdProp(rfinfo, isSetProp))) - | None, Some (calledMeth:CalledMeth<_>) -> + + | None, None, Some (calledMeth:CalledMeth<_>) -> // OK, the constraint is solved. let minfo = calledMeth.Method @@ -1329,8 +1369,13 @@ and RecordMemberConstraintSolution css m trace traitInfo res = TransactMemberConstraintSolution traitInfo trace BuiltInSln; ResultD true - | TTraitSolvedRecdProp (rfinfo, isSetProp) -> - let sln = MemberConstraintSolutionOfRecdFieldInfo rfinfo isSetProp + | TTraitSolvedRecdProp (rfinfo, isSet) -> + let sln = FSRecdFieldSln(rfinfo.TypeInst,rfinfo.RecdFieldRef,isSet) + TransactMemberConstraintSolution traitInfo trace sln; + ResultD true + + | TTraitSolvedAnonRecdProp (anonInfo, tinst, i) -> + let sln = FSAnonRecdFieldSln(anonInfo, tinst, i) TransactMemberConstraintSolution traitInfo trace sln; ResultD true @@ -1375,9 +1420,6 @@ and MemberConstraintSolutionOfMethInfo css m minfo minst = #endif -and MemberConstraintSolutionOfRecdFieldInfo rfinfo isSet = - FSRecdFieldSln(rfinfo.TypeInst, rfinfo.RecdFieldRef, isSet) - /// Write into the reference cell stored in the TAST and add to the undo trace if necessary and TransactMemberConstraintSolution traitInfo (trace:OptionalTrace) sln = let prev = traitInfo.Solution @@ -2606,7 +2648,7 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait SolveMemberConstraint csenv true true 0 m NoTrace traitInfo ++ (fun _res -> let sln = match traitInfo.Solution with - | None -> Choice4Of4() + | None -> Choice5Of5() | Some sln -> match sln with | ILMethSln(origTy, extOpt, mref, minst) -> @@ -2619,17 +2661,19 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait | Some ilActualTypeRef -> let actualTyconRef = Import.ImportILTypeRef amap m ilActualTypeRef MethInfo.CreateILExtensionMeth(amap, m, origTy, actualTyconRef, None, mdef) - Choice1Of4 (ilMethInfo, minst) + Choice1Of5 (ilMethInfo, minst) | FSMethSln(typ, vref, minst) -> - Choice1Of4 (FSMeth(g, typ, vref, None), minst) + Choice1Of5 (FSMeth(g, typ, vref, None), minst) | FSRecdFieldSln(tinst, rfref, isSetProp) -> - Choice2Of4 (tinst, rfref, isSetProp) + Choice2Of5 (tinst, rfref, isSetProp) + | FSAnonRecdFieldSln(anonInfo, tinst, i) -> + Choice3Of5 (anonInfo, tinst, i) | BuiltInSln -> - Choice4Of4 () + Choice5Of5 () | ClosedExprSln expr -> - Choice3Of4 expr + Choice4Of5 expr match sln with - | Choice1Of4(minfo, methArgTys) -> + | 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 @@ -2660,7 +2704,7 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait else ResultD (Some (MakeMethInfoCall amap m minfo methArgTys argExprs )) - | Choice2Of4 (tinst, rfref, isSet) -> + | Choice2Of5 (tinst, rfref, isSet) -> let res = match isSet, rfref.RecdField.IsStatic, argExprs.Length with | true, true, 1 -> @@ -2683,8 +2727,16 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait Some (mkRecdFieldGet g (argExprs.[0], rfref, tinst, m)) | _ -> None ResultD res - | Choice3Of4 expr -> ResultD (Some (MakeApplicationAndBetaReduce g (expr, tyOfExpr g expr, [], argExprs, m))) - | Choice4Of4 () -> ResultD None) + | Choice3Of5 (anonInfo, tinst, i) -> + let res = + let tupInfo = anonInfo.TupInfo + if evalTupInfoIsStruct tupInfo && isByrefTy g (tyOfExpr g argExprs.[0]) then + Some (mkAnonRecdFieldGetViaExprAddr (anonInfo, argExprs.[0], tinst, i, m)) + else + Some (mkAnonRecdFieldGet g (anonInfo, argExprs.[0], tinst, i, m)) + ResultD res + | Choice4Of5 expr -> ResultD (Some (MakeApplicationAndBetaReduce g (expr, tyOfExpr g expr, [], argExprs, m))) + | Choice5Of5 () -> ResultD None) let ChooseTyparSolutionAndSolve css denv tp = diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index f09efb42d99..a212f7def0b 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -440,6 +440,7 @@ parsParenFormIsForML,"In F# code you may use 'expr.[expr]'. A type annotation ma 602,parsUnmatched,"Unmatched '%s'" 603,parsUnmatchedBracketBar,"Unmatched '[|'" 604,parsUnmatchedBrace,"Unmatched '{{'" +605,parsUnmatchedBraceBar,"Unmatched '{{|'" 609,parsFieldBinding,"Field bindings must have the form 'id = expr;'" 610,parsMemberIllegalInObjectImplementation,"This member is not permitted in an object implementation" 611,parsMissingFunctionBody,"Missing function body" @@ -922,6 +923,7 @@ typeInfoProperty,"property" typeInfoExtension,"extension" typeInfoCustomOperation,"custom operation" typeInfoArgument,"argument" +typeInfoAnonRecdField,"anonymous record field" typeInfoPatternVariable,"patvar" typeInfoNamespace,"namespace" typeInfoModule,"module" @@ -1338,6 +1340,8 @@ tcGlobalsSystemTypeNotFound,"The system type '%s' was required but no referenced 3213,typrelMemberHasMultiplePossibleDispatchSlots,"The member '%s' matches multiple overloads of the same method.\nPlease restrict it to one of the following:%s." 3214,methodIsNotStatic,"Method or object constructor '%s' is not static" 3215,parsUnexpectedSymbolEqualsInsteadOfIn,"Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead?" +tcAnonRecdCcuMismatch,"Two anonymous record types are from different assemblies '%s' and '%s'" +tcAnonRecdFieldNameMismatch,"Two anonymous record types have mismatched sets of field names '%s' and '%s'" keywordDescriptionAbstract,"Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation." keyworkDescriptionAnd,"Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters." keywordDescriptionAs,"Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match." @@ -1423,4 +1427,6 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3219,pickleUnexpectedNonZero,"An error occurred while reading the F# metadata of assembly '%s'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct." 3220,tcTupleMemberNotNormallyUsed,"This method or property is not normally used from F# code, use an explicit tuple pattern for deconstruction instead." 3221,implicitlyDiscardedInSequenceExpression,"This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'." -3222,implicitlyDiscardedSequenceInSequenceExpression,"This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'." \ No newline at end of file +3222,implicitlyDiscardedSequenceInSequenceExpression,"This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'." +3223,parsInvalidAnonRecdExpr,"Invalid anonymous record expression" +3224,parsInvalidAnonRecdType,"Invalid anonymous record type" diff --git a/src/fsharp/FSStrings.resx b/src/fsharp/FSStrings.resx index eb8a8f975cf..48e26fceda4 100644 --- a/src/fsharp/FSStrings.resx +++ b/src/fsharp/FSStrings.resx @@ -396,6 +396,9 @@ symbol '[' + + symbol '{|' + symbol '[|' @@ -411,6 +414,9 @@ symbol '|]' + + symbol '|}' + symbol '>}' diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index f207262e930..1efe5e0e05c 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -1,9 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -//------------------------------------------------------------------------- -// Find unsolved, uninstantiated type variables -//------------------------------------------------------------------------- +/// Find unsolved, uninstantiated type variables module internal Microsoft.FSharp.Compiler.FindUnsolved open Microsoft.FSharp.Compiler @@ -16,24 +14,24 @@ open Microsoft.FSharp.Compiler.TypeRelations type env = Nix +/// The environment and collector type cenv = { g: TcGlobals amap: Import.ImportMap denv: DisplayEnv mutable unsolved: Typars } +/// Walk types, collecting type variables let accTy cenv _env ty = - (freeInType CollectTyparsNoCaching (tryNormalizeMeasureInType cenv.g ty)).FreeTypars |> Zset.iter (fun tp -> - if (tp.Rigidity <> TyparRigidity.Rigid) then - cenv.unsolved <- tp :: cenv.unsolved) + let normalizedTy = tryNormalizeMeasureInType cenv.g ty + (freeInType CollectTyparsNoCaching normalizedTy).FreeTypars |> Zset.iter (fun tp -> + if (tp.Rigidity <> TyparRigidity.Rigid) then + cenv.unsolved <- tp :: cenv.unsolved) let accTypeInst cenv env tyargs = - tyargs |> List.iter (accTy cenv env) + tyargs |> List.iter (accTy cenv env) -//-------------------------------------------------------------------------- -// walk exprs etc -//-------------------------------------------------------------------------- - +/// Walk expressions, collecting type variables let rec accExpr (cenv:cenv) (env:env) expr = let expr = stripExpr expr match expr with @@ -62,7 +60,6 @@ let rec accExpr (cenv:cenv) (env:env) expr = accTypeInst cenv env tyargs accExpr cenv env f accExprs cenv env argsl - // REVIEW: fold the next two cases together | Expr.Lambda(_,_ctorThisValOpt,_baseValOpt,argvs,_body,m,rty) -> let topValInfo = ValReprInfo ([],[argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)],ValReprInfo.unnamedRetVal) let ty = mkMultiLambdaTy m argvs rty @@ -136,6 +133,7 @@ and accLambdas cenv env topValInfo e ety = accExpr cenv env e and accExprs cenv env exprs = exprs |> List.iter (accExpr cenv env) + and accTargets cenv env m ty targets = Array.iter (accTarget cenv env m ty) targets and accTarget cenv env _m _ty (TTarget(_vs,e,_)) = accExpr cenv env e @@ -192,10 +190,6 @@ and accBind cenv env (bind:Binding) = and accBinds cenv env xs = xs |> List.iter (accBind cenv env) -//-------------------------------------------------------------------------- -// check tycons -//-------------------------------------------------------------------------- - let accTyconRecdField cenv env _tycon (rfield:RecdField) = accAttribs cenv env rfield.PropertyAttribs accAttribs cenv env rfield.FieldAttribs @@ -208,14 +202,9 @@ let accTycon cenv env (tycon:Tycon) = tycon.UnionCasesAsList |> List.iter (fun uc -> accAttribs cenv env uc.Attribs uc.RecdFields |> List.iter (accTyconRecdField cenv env tycon)) - let accTycons cenv env tycons = List.iter (accTycon cenv env) tycons -//-------------------------------------------------------------------------- -// check modules -//-------------------------------------------------------------------------- - let rec accModuleOrNamespaceExpr cenv env x = match x with | ModuleOrNamespaceExprWithSig(_mty,def,_m) -> accModuleOrNamespaceDef cenv env def @@ -231,7 +220,9 @@ and accModuleOrNamespaceDef cenv env x = | TMDefDo(e,_m) -> accExpr cenv env e | TMAbstract(def) -> accModuleOrNamespaceExpr cenv env def | TMDefs(defs) -> accModuleOrNamespaceDefs cenv env defs + and accModuleOrNamespaceBinds cenv env xs = List.iter (accModuleOrNamespaceBind cenv env) xs + and accModuleOrNamespaceBind cenv env x = match x with | ModuleOrNamespaceBinding.Binding bind -> accBind cenv env bind diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 704a92f7600..f5cee3ca886 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -373,7 +373,7 @@ type PtrsOK = | PtrTypesNotOK let rec GenTypeArgAux amap m tyenv tyarg = - GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK tyarg + GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesNotOK tyarg and GenTypeArgsAux amap m tyenv tyargs = List.map (GenTypeArgAux amap m tyenv) (DropErasedTyargs tyargs) @@ -385,13 +385,15 @@ and GenTyAppAux amap m tyenv repr tinst = let ty = IL.instILType ilTypeInst ty ty | CompiledTypeRepr.ILAsmNamed (tref, boxity, ilTypeOpt) -> - match ilTypeOpt with - | None -> - let ilTypeInst = GenTypeArgsAux amap m tyenv tinst - mkILTy boxity (mkILTySpec (tref,ilTypeInst)) - | Some ilType -> - ilType // monomorphic types include a cached ilType to avoid reallocation of an ILType node + GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst +and GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst = + match ilTypeOpt with + | None -> + let ilTypeInst = GenTypeArgsAux amap m tyenv tinst + mkILTy boxity (mkILTySpec (tref,ilTypeInst)) + | Some ilType -> + ilType // monomorphic types include a cached ilType to avoid reallocation of an ILType node and GenNamedTyAppAux (amap:ImportMap) m tyenv ptrsOK tcref tinst = let g = amap.g @@ -404,12 +406,12 @@ and GenNamedTyAppAux (amap:ImportMap) m tyenv ptrsOK tcref tinst = match tcref.TypeReprInfo with // Generate the base type, because that is always the representation of the erased type, unless the assembly is being injected | TProvidedTypeExtensionPoint info when info.IsErased -> - GenTypeAux amap m tyenv VoidNotOK ptrsOK (info.BaseTypeForErased (m,g.obj_ty)) + GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK (info.BaseTypeForErased (m,g.obj_ty)) | _ -> #endif GenTyAppAux amap m tyenv (GenTyconRef tcref) tinst -and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = +and GenTypeAuxAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = let g = amap.g #if DEBUG voidCheck m g voidOK ty @@ -418,16 +420,20 @@ and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = #endif match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m tyenv ptrsOK tcref tinst - | TType_tuple (tupInfo, args) -> GenTypeAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) + | TType_tuple (tupInfo, args) -> GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) | TType_fun (dty, returnTy) -> EraseClosures.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m tyenv dty) (GenTypeArgAux amap m tyenv returnTy) + | TType_anon (anonInfo, tinst) -> + let tref = anonInfo.ILTypeRef + let boxity = if evalAnonInfoIsStruct anonInfo then ILBoxity.AsValue else ILBoxity.AsObject + GenILTyAppAux amap m tyenv (tref, boxity, None) tinst | TType_ucase (ucref, args) -> - let cuspec,idx = GenUnionCaseSpec amap m tyenv ucref args + let cuspec,idx = GenUnionCaseSpecAux amap m tyenv ucref args EraseUnions.GetILTypeForAlternative cuspec idx | TType_forall (tps, tau) -> let tps = DropErasedTypars tps - if tps.IsEmpty then GenTypeAux amap m tyenv VoidNotOK ptrsOK tau + if tps.IsEmpty then GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK tau else EraseClosures.mkILTyFuncTy g.ilxPubCloEnv | TType_var tp -> mkILTyvarTy tyenv.[tp,m] | TType_measure _ -> g.ilg.typ_Int32 @@ -439,7 +445,7 @@ and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = and GenUnionCaseRef (amap: ImportMap) m tyenv i (fspecs:RecdField array) = let g = amap.g fspecs |> Array.mapi (fun j fspec -> - let ilFieldDef = IL.mkILInstanceField(fspec.Name,GenType amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) + let ilFieldDef = IL.mkILInstanceField(fspec.Name,GenTypeAux amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) IlxUnionField { ilFieldDef with // These properties on the "field" of an alternative end up going on a property generated by cu_erase.fs @@ -482,47 +488,26 @@ and ComputeUnionHasHelpers g (tcref : TyconRef) = | _ -> AllHelpers (* not hiddenRepr *) -and GenUnionSpec amap m tyenv tcref tyargs = +and GenUnionSpecAux amap m tyenv tcref tyargs = let curef = GenUnionRef amap m tcref - let tinst = GenTypeArgs amap m tyenv tyargs + let tinst = GenTypeArgsAux amap m tyenv tyargs IlxUnionSpec(curef,tinst) -and GenUnionCaseSpec amap m tyenv (ucref:UnionCaseRef) tyargs = - let cuspec = GenUnionSpec amap m tyenv ucref.TyconRef tyargs +and GenUnionCaseSpecAux amap m tyenv (ucref:UnionCaseRef) tyargs = + let cuspec = GenUnionSpecAux amap m tyenv ucref.TyconRef tyargs cuspec, ucref.Index -and GenType amap m tyenv ty = - GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK ty - - -and GenTypes amap m tyenv tys = List.map (GenType amap m tyenv) tys -and GenTypePermitVoid amap m tyenv ty = (GenTypeAux amap m tyenv VoidOK PtrTypesNotOK ty) -and GenTypesPermitVoid amap m tyenv tys = List.map (GenTypePermitVoid amap m tyenv) tys - -and GenTyApp amap m tyenv repr tyargs = GenTyAppAux amap m tyenv repr tyargs -and GenNamedTyApp amap m tyenv tcref tinst = GenNamedTyAppAux amap m tyenv PtrTypesNotOK tcref tinst - /// IL void types are only generated for return types -and GenReturnType amap m tyenv returnTyOpt = +and GenReturnTypeAux amap m tyenv returnTyOpt = match returnTyOpt with | None -> ILType.Void - | Some returnTy -> GenTypeAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) - -and GenParamType amap m tyenv ty = - ty |> GenTypeAux amap m tyenv VoidNotOK PtrTypesOK - -and GenParamTypes amap m tyenv tys = - tys |> List.map (GenTypeAux amap m tyenv VoidNotOK PtrTypesOK) - -and GenTypeArgs amap m tyenv tyargs = GenTypeArgsAux amap m tyenv tyargs - -let GenericParamHasConstraint (gp: ILGenericParameterDef) = - gp.Constraints.Length <> 0 || - gp.Variance <> NonVariant || - gp.HasReferenceTypeConstraint || - gp.HasNotNullableValueTypeConstraint || - gp.HasDefaultConstructorConstraint + | Some returnTy -> GenTypeAuxAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) +and GenTypeAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesNotOK ty +and GenTypesAux amap m tyenv tys = List.map (GenTypeAux amap m tyenv) tys +and GenParamTypeAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesOK ty +and GenParamTypesAux amap m tyenv tys = tys |> List.map (GenParamTypeAux amap m tyenv) +and GenTypePermitVoidAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidOK PtrTypesNotOK ty // Static fields generally go in a private InitializationCodeAndBackingFields section. This is to ensure all static // fields are initialized only in their class constructors (we generate one primary @@ -549,12 +534,9 @@ let GenFieldSpecForStaticField (isInteractive, g, ilContainerTy, vspec:Val, nm, let GenRecdFieldRef m cenv tyenv (rfref:RecdFieldRef) tyargs = let tyenvinner = TypeReprEnv.ForTycon rfref.Tycon - mkILFieldSpecInTy(GenTyApp cenv.amap m tyenv rfref.TyconRef.CompiledRepresentation tyargs, + mkILFieldSpecInTy(GenTyAppAux cenv.amap m tyenv rfref.TyconRef.CompiledRepresentation tyargs, ComputeFieldName rfref.Tycon rfref.RecdField, - GenType cenv.amap m tyenvinner rfref.RecdField.FormalType) - -let GenExnType amap m tyenv (ecref:TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] - + GenTypeAux cenv.amap m tyenvinner rfref.RecdField.FormalType) //-------------------------------------------------------------------------- // Closure summaries @@ -595,663 +577,827 @@ type IlxClosureInfo = //-------------------------------------------------------------------------- -// Representation of term declarations = Environments for compiling expressions. +// Generate debugging marks //-------------------------------------------------------------------------- - -[] -type ValStorage = - /// Indicates the value is always null - | Null - /// Indicates the value is stored in a static field. - | StaticField of ILFieldSpec * ValRef * (*hasLiteralAttr:*)bool * ILType * string * ILType * ILMethodRef * ILMethodRef * OptionalShadowLocal - /// Indicates the value is "stored" as a property that recomputes it each time it is referenced. Used for simple constants that do not cause initialization triggers - | StaticProperty of ILMethodSpec * OptionalShadowLocal - /// Indicates the value is "stored" as a IL static method (in a "main" class for a F# - /// compilation unit, or as a member) according to its inferred or specified arity. - | Method of ValReprInfo * ValRef * ILMethodSpec * Range.range * ArgReprInfo list * ArgReprInfo - /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" - | Env of ILType * int * ILFieldSpec * NamedLocalIlxClosureInfo ref option - /// Indicates that the value is an argument of a method being generated - | Arg of int - /// Indicates that the value is stored in local of the method being generated. NamedLocalIlxClosureInfo is normally empty. - /// It is non-empty for 'local type functions', see comments on definition of NamedLocalIlxClosureInfo. - | Local of int * NamedLocalIlxClosureInfo ref option +let GenILSourceMarker (g: TcGlobals) (m:range) = + ILSourceMarker.Create(document=g.memoize_file m.FileIndex, + line=m.StartLine, + /// NOTE: .NET && VS measure first column as column 1 + column= m.StartColumn+1, + endLine= m.EndLine, + endColumn=m.EndColumn+1) -and OptionalShadowLocal = - | NoShadowLocal - | ShadowLocal of ValStorage +let GenPossibleILSourceMarker cenv m = + if cenv.opts.generateDebugSymbols then + Some (GenILSourceMarker cenv.g m ) + else + None -/// The representation of a NamedLocalClosure is based on a cloinfo. However we can't generate a cloinfo until we've -/// decided the representations of other items in the recursive set. Hence we use two phases to decide representations in -/// a recursive set. Yuck. -and NamedLocalIlxClosureInfo = - | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) - | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo - -and ModuleStorage = - { Vals: Lazy> - SubModules: Lazy> } +//-------------------------------------------------------------------------- +// Helpers for merging property definitions +//-------------------------------------------------------------------------- -/// BranchCallItems are those where 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. -and BranchCallItem = - | BranchCallClosure of ArityInfo - | BranchCallMethod of - // Argument counts for compiled form of F# method or value - ArityInfo * - // Arg infos for compiled form of F# method or value - (TType * ArgReprInfo) list list * - // Typars for F# method or value - Tast.Typars * - // Typars for F# method or value - int * - // num obj args - int - -and Mark = - | Mark of ILCodeLabel (* places we can branch to *) - member x.CodeLabel = (let (Mark(lab)) = x in lab) +let HashRangeSorted (ht: IDictionary<_, (int * _)>) = + [ for KeyValue(_k,v) in ht -> v ] |> List.sortBy fst |> List.map snd -and IlxGenEnv = - { tyenv: TypeReprEnv - someTypeInThisAssembly: ILType - isFinalFile: bool - /// Where to place the stuff we're currently generating - cloc: CompileLocation - /// Hiding information down the signature chain, used to compute what's public to the assembly - sigToImplRemapInfo: (Remap * SignatureHidingInfo) list - /// All values in scope - valsInScope: ValMap> - /// For optimizing direct tail recursion to a loop - mark says where to branch to. Length is 0 or 1. - /// REVIEW: generalize to arbitrary nested local loops?? - innerVals: (ValRef * (BranchCallItem * Mark)) list - /// Full list of enclosing bound values. First non-compiler-generated element is used to help give nice names for closures and other expressions. - letBoundVars: ValRef list - /// The set of IL local variable indexes currently in use by lexically scoped variables, to allow reuse on different branches. - /// Really an integer set. - liveLocals: IntMap - /// Are we under the scope of a try, catch or finally? If so we can't tailcall. SEH = structured exception handling - withinSEH: bool } +let MergeOptions m o1 o2 = + match o1,o2 with + | Some x, None | None, Some x -> Some x + | None, None -> None + | Some x, Some _ -> +#if DEBUG + // This warning fires on some code that also triggers this warning: + // warning(Error("The implementation of a specified generic interface required a method implementation not fully supported by F# Interactive. In the unlikely event that the resulting class fails to load then compile the interface type into a statically-compiled DLL and reference it using '#r'",m)) + // The code is OK so we don't print this. + errorR(InternalError("MergeOptions: two values given",m)) +#else + ignore m +#endif + Some x -let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } -let EnvForTypars tps eenv = {eenv with tyenv = TypeReprEnv.ForTypars tps } -let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add typars} +let MergePropertyPair m (pd: ILPropertyDef) pdef = + {pd with GetMethod=MergeOptions m pd.GetMethod pdef.GetMethod + SetMethod=MergeOptions m pd.SetMethod pdef.SetMethod} -let AddSignatureRemapInfo _msg (rpi, mhi) eenv = - { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi,mhi) :: eenv.sigToImplRemapInfo } - -//-------------------------------------------------------------------------- -// Print eenv -//-------------------------------------------------------------------------- +type PropKey = PropKey of string * ILTypes * ILThisConvention -let OutputStorage (pps: TextWriter) s = - match s with - | StaticField _ -> pps.Write "(top)" - | StaticProperty _ -> pps.Write "(top)" - | Method _ -> pps.Write "(top)" - | Local _ -> pps.Write "(local)" - | Arg _ -> pps.Write "(arg)" - | Env _ -> pps.Write "(env)" - | Null -> pps.Write "(null)" +let AddPropertyDefToHash (m:range) (ht:Dictionary) (pdef: ILPropertyDef) = + let nm = PropKey(pdef.Name, pdef.Args, pdef.CallingConv) + if ht.ContainsKey nm then + let idx,pd = ht.[nm] + ht.[nm] <- (idx, MergePropertyPair m pd pdef) + else + ht.[nm] <- (ht.Count, pdef) + + +/// Merge a whole group of properties all at once +let MergePropertyDefs m ilPropertyDefs = + let ht = new Dictionary<_,_>(3,HashIdentity.Structural) + ilPropertyDefs |> List.iter (AddPropertyDefToHash m ht) + HashRangeSorted ht //-------------------------------------------------------------------------- -// Augment eenv with values +// Buffers for compiling modules. The entire assembly gets compiled via an AssemblyBuilder //-------------------------------------------------------------------------- -let AddStorageForVal (g: TcGlobals) (v,s) eenv = - let eenv = { eenv with valsInScope = eenv.valsInScope.Add v s } - // If we're compiling fslib then also bind the value as a non-local path to - // allow us to resolve the compiler-non-local-references that arise from env.fs - // - // Do this by generating a fake "looking from the outside in" non-local value reference for - // v, dereferencing it to find the corresponding signature Val, and adding an entry for the signature val. - // - // A similar code path exists in ilxgen.fs for the tables of "optimization data" for values - if g.compilingFslib then - // Passing an empty remap is sufficient for FSharp.Core.dll because it turns out the remapped type signature can - // still be resolved. - match tryRescopeVal g.fslibCcu Remap.Empty v with - | None -> eenv - | Some vref -> - match vref.TryDeref with - | VNone -> - //let msg = sprintf "could not dereference external value reference to something in FSharp.Core.dll during code generation, v.MangledName = '%s', v.Range = %s" v.MangledName (stringOfRange v.Range) - //System.Diagnostics.Debug.Assert(false, msg) - eenv - | VSome gv -> - { eenv with valsInScope = eenv.valsInScope.Add gv s } - else - eenv +/// Information collected imperatively for each type definition +type TypeDefBuilder(tdef, tdefDiscards) = + let gmethods = new ResizeArray(0) + let gfields = new ResizeArray(0) + let gproperties : Dictionary = new Dictionary<_,_>(3,HashIdentity.Structural) + let gevents = new ResizeArray(0) + let gnested = new TypeDefsBuilder() + + member b.Close() = + { tdef with + Methods = mkILMethods (tdef.Methods.AsList @ ResizeArray.toList gmethods) + Fields = mkILFields (tdef.Fields.AsList @ ResizeArray.toList gfields) + Properties = mkILProperties (tdef.Properties.AsList @ HashRangeSorted gproperties ) + Events = mkILEvents (tdef.Events.AsList @ ResizeArray.toList gevents) + NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } -let AddStorageForLocalVals g vals eenv = List.foldBack (fun (v,s) acc -> AddStorageForVal g (v,notlazy s) acc) vals eenv -//-------------------------------------------------------------------------- -// Lookup eenv -//-------------------------------------------------------------------------- - -open Microsoft.FSharp.Compiler.AbstractIL -open Microsoft.FSharp.Compiler.AbstractIL.Internal -open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library + member b.AddEventDef(edef) = gevents.Add edef + member b.AddFieldDef(ilFieldDef) = gfields.Add ilFieldDef + member b.AddMethodDef(ilMethodDef) = + let discard = + match tdefDiscards with + | Some (mdefDiscard, _) -> mdefDiscard ilMethodDef + | None -> false + if not discard then + gmethods.Add ilMethodDef + member b.NestedTypeDefs = gnested + member b.GetCurrentFields() = gfields |> Seq.readonly -let StorageForVal m v eenv = - let v = - try eenv.valsInScope.[v] - with :? KeyNotFoundException -> - assert false - errorR(Error(FSComp.SR.ilUndefinedValue(showL(vspecAtBindL v)),m)) - notlazy (Arg 668(* random value for post-hoc diagnostic analysis on generated tree *) ) - v.Force() + /// Merge Get and Set property nodes, which we generate independently for F# code + /// when we come across their corresponding methods. + member b.AddOrMergePropertyDef(pdef,m) = + let discard = + match tdefDiscards with + | Some (_, pdefDiscard) -> pdefDiscard pdef + | None -> false + if not discard then + AddPropertyDefToHash m gproperties pdef -let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv + member b.PrependInstructionsToSpecificMethodDef(cond,instrs,tag) = + match ResizeArray.tryFindIndex cond gmethods with + | Some idx -> gmethods.[idx] <- prependInstrsToMethod instrs gmethods.[idx] + | None -> gmethods.Add(mkILClassCtor (mkMethodBody (false,[],1,nonBranchingInstrsToCode instrs,tag))) -//-------------------------------------------------------------------------- -// Imported modules and the environment -// -// How a top level value is represented depends on its type. 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. -//-------------------------------------------------------------------------- -let IsValRefIsDllImport g (vref:ValRef) = - vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute +and TypeDefsBuilder() = + let tdefs : Internal.Utilities.Collections.HashMultiMap = HashMultiMap(0, HashIdentity.Structural) + let mutable countDown = System.Int32.MaxValue -let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = - let m = vref.Range - let tps,curriedArgInfos,returnTy,retInfo = - assert(vref.ValReprInfo.IsSome) - GetTopValTypeInCompiledForm g (Option.get vref.ValReprInfo) vref.Type m - let tyenvUnderTypars = TypeReprEnv.ForTypars tps - let flatArgInfos = List.concat curriedArgInfos - let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) - let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) - let parentTcref = vref.TopValDeclaringEntity - let parentTypars = parentTcref.TyparsNoRange - let numParentTypars = parentTypars.Length - if tps.Length < numParentTypars then error(InternalError("CodeGen check: type checking did not ensure that this method is sufficiently generic", m)) - let ctps,mtps = List.chop numParentTypars tps - let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref + member b.Close() = + //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. + // Ideally it shouldn't matter which order we use. + // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. + + [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do + let tdef = b.Close() + // Skip the type if it is empty + if not eliminateIfEmpty + || not tdef.NestedTypes.AsList.IsEmpty + || not tdef.Fields.AsList.IsEmpty + || not tdef.Events.AsList.IsEmpty + || not tdef.Properties.AsList.IsEmpty + || not tdef.Methods.AsList.IsEmpty then + yield tdef ] - let ilActualRetTy = - let ilRetTy = GenReturnType amap m tyenvUnderTypars returnTy - if isCtor || cctor then ILType.Void else ilRetTy - let ilTy = GenType amap m tyenvUnderTypars (mkAppTy parentTcref (List.map mkTyparTy ctps)) - if isCompiledAsInstance || isCtor then - // Find the 'this' argument type if any - let thisTy,flatArgInfos = - if isCtor then (GetFSharpViewOfReturnType g returnTy),flatArgInfos - else - match flatArgInfos with - | [] -> error(InternalError("This instance method '" + vref.LogicalName + "' has no arguments", m)) - | (h,_):: t -> h,t + member b.FindTypeDefBuilder(nm) = + try tdefs.[nm] |> snd |> fst + with :? KeyNotFoundException -> failwith ("FindTypeDefBuilder: " + nm + " not found") - let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy - let thisArgTys = argsOfAppTy g thisTy - if ctps.Length <> thisArgTys.Length then - warning(InternalError(sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #ctps = %d, #mtps = %d, #thisArgTys = %d" numParentTypars ctps.Length mtps.Length thisArgTys.Length,m)) - else - List.iter2 - (fun gtp ty2 -> - if not (typeEquiv g (mkTyparTy gtp) ty2) then - warning(InternalError("CodeGen check: type checking did not quantify the correct type variables for this method: generalization list contained " + gtp.Name + "#" + string gtp.Stamp + " and list from 'this' pointer contained " + (showL(typeL ty2)), m))) - ctps - thisArgTys - let methodArgTys,paramInfos = List.unzip flatArgInfos - let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys - let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) - let mspec = mkILInstanceMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - - mspec,ctps,mtps,paramInfos,retInfo - else - let methodArgTys,paramInfos = List.unzip flatArgInfos - let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys - let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) - let mspec = mkILStaticMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - - mspec,ctps,mtps,paramInfos,retInfo + member b.FindNestedTypeDefsBuilder(path) = + List.fold (fun (acc:TypeDefsBuilder) x -> acc.FindTypeDefBuilder(x).NestedTypeDefs) b path -// Generate the ILFieldSpec for a top-level value + member b.FindNestedTypeDefBuilder(tref:ILTypeRef) = + b.FindNestedTypeDefsBuilder(tref.Enclosing).FindTypeDefBuilder(tref.Name) -let ComputeFieldSpecForVal(optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, g, ilTyForProperty, vspec:Val, nm, m, cloc, ilTy, ilGetterMethRef) = - assert vspec.IsCompiledAsTopLevel - let generate() = GenFieldSpecForStaticField (isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy) - match optIntraAssemblyInfo with - | None -> generate() - | Some intraAssemblyInfo -> - if vspec.IsMutable && vspec.IsCompiledAsTopLevel && isStructTy g vspec.Type then - let ok, res = intraAssemblyInfo.StaticFieldInfo.TryGetValue ilGetterMethRef - if ok then - res - else - let res = generate() - intraAssemblyInfo.StaticFieldInfo.[ilGetterMethRef] <- res - res - else - generate() + member b.AddTypeDef(tdef:ILTypeDef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + let idx = if addAtEnd then (countDown <- countDown - 1; countDown) else tdefs.Count + tdefs.Add (tdef.Name, (idx, (new TypeDefBuilder(tdef, tdefDiscards), eliminateIfEmpty))) +type AnonTypeGenerationTable() = + let dict = Dictionary(HashIdentity.Structural) + member __.Table = dict -let IsValCompiledAsMethod g (v:Val) = - match v.ValReprInfo with - | None -> false - | Some topValInfo -> - not (isUnitTy g v.Type && not v.IsMemberOrModuleBinding && not v.IsMutable) && - not v.IsCompiledAsStaticPropertyWithoutField && - match GetTopValTypeInFSharpForm g topValInfo v.Type v.Range with - | [],[],_,_ when not v.IsMember -> false - | _ -> true +/// Assembly generation buffers +type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf = + // The Abstract IL table of types + let gtdefs= new TypeDefsBuilder() + // The definitions of top level values, as quotations. + let mutable reflectedDefinitions : Dictionary = Dictionary(HashIdentity.Reference) + let mutable extraBindingsToGenerate = [] -// This called via 2 routes. -// (a) ComputeAndAddStorageForLocalTopVal -// (b) ComputeStorageForNonLocalTopVal -// -/// This function decides the storage for the val. -/// The decision is based on arityInfo. -let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, optShadowLocal, vref:ValRef, cloc) = + // A memoization table for generating value types for big constant arrays + let rawDataValueTypeGenerator = + new MemoizationTable<(CompileLocation * int) , ILTypeSpec> + ((fun (cloc,size) -> + let name = CompilerGeneratedName ("T" + string(newUnique()) + "_" + string size + "Bytes") // Type names ending ...$T_37Bytes + let vtdef = mkRawDataValueTypeDef cenv.g.iltyp_ValueType (name,size,0us) + let vtref = NestedTypeRefForCompLoc cloc vtdef.Name + let vtspec = mkILTySpec(vtref,[]) + let vtdef = vtdef.WithAccess(ComputeTypeAccess vtref true) + mgbuf.AddTypeDef(vtref, vtdef, false, true, None) + vtspec), + keyComparer=HashIdentity.Structural) - if isUnitTy g vref.Type && not vref.IsMemberOrModuleBinding && not vref.IsMutable then - Null - else - let topValInfo = - match vref.ValReprInfo with - | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref),vref.Range)) - | Some a -> a + let generateAnonType genToStringMethod (isStruct, ilTypeRef, nms) = - let m = vref.Range - let nm = vref.CompiledName - - if vref.Deref.IsCompiledAsStaticPropertyWithoutField then - let nm = "get_"+nm - let tyenvUnderTypars = TypeReprEnv.ForTypars [] - let ilRetTy = GenType amap m tyenvUnderTypars vref.Type - let typ = mkILTyForCompLoc cloc - let mspec = mkILStaticMethSpecInTy (typ, nm, [], ilRetTy, []) - - StaticProperty (mspec, optShadowLocal) - else + let flds = [ for (i,nm) in Array.indexed nms -> (nm, nm + "@", ILType.TypeVar (uint16 i)) ] + // Note that this alternative below would give the same names as C#, but the generated + // comparison/equality doesn't know about these names. + //let flds = [ for (i,nm) in Array.indexed nms -> (nm, "<" + nm + ">" + "i__Field", ILType.TypeVar (uint16 i)) ] + + let ilGenericParams = + [ for nm in nms -> + { Name = sprintf "<%s>j__TPar" nm + Constraints = [] + Variance=NonVariant + CustomAttrs = emptyILCustomAttrs + HasReferenceTypeConstraint=false + HasNotNullableValueTypeConstraint=false + HasDefaultConstructorConstraint= false } ] + + let ilTy = mkILFormalNamedTy (if isStruct then ILBoxity.AsValue else ILBoxity.AsObject) ilTypeRef ilGenericParams - // Determine when a static field is required. - // - // REVIEW: This call to GetTopValTypeInFSharpForm is only needed to determine if this is a (type) function or a value - // We should just look at the arity - match GetTopValTypeInFSharpForm g topValInfo vref.Type vref.Range with - | [],[], returnTy,_ when not vref.IsMember -> - // Mutable and literal static fields must have stable names and live in the "public" location - // See notes on GenFieldSpecForStaticField above. - let vspec = vref.Deref - let ilTy = GenType amap m TypeReprEnv.Empty returnTy (* TypeReprEnv.Empty ok: not a field in a generic class *) - let ilTyForProperty = mkILTyForCompLoc cloc - let attribs = vspec.Attribs - let hasLiteralAttr = HasFSharpAttribute g g.attrib_LiteralAttribute attribs + // Generate the IL fields + let ilFieldDefs = + mkILFields + [ for (_, fldName, fldTy) in flds -> + let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) + { fdef with CustomAttrs = mkILCustomAttrs [ cenv.g.DebuggerBrowsableNeverAttribute ] } ] + + // Generate property definitions for the fields compiled as properties + let ilProperties = + mkILProperties + [ for (i,(propName, _fldName, fldTy)) in List.indexed flds -> + { Name = propName + Attributes = PropertyAttributes.None + SetMethod = None + GetMethod = Some(mkILMethRef(ilTypeRef,ILCallingConv.Instance,"get_" + propName,0,[],fldTy )) + CallingConv = ILCallingConv.Instance.ThisConv + Type = fldTy + Init = None + Args = [] + CustomAttrs = mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i ] } ] + + let ilMethods = + [ for (propName, fldName, fldTy) in flds -> + mkLdfldMethodDef ("get_" + propName,ILMemberAccess.Public,false,ilTy,fldName,fldTy) + yield! genToStringMethod ilTy ] - let ilTypeRefForProperty = ilTyForProperty.TypeRef - let ilGetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "get_"+nm, 0, [], ilTy) - let ilSetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "set_"+nm, 0, [ilTy], ILType.Void) + let ilBaseTy = (if isStruct then cenv.g.iltyp_ValueType else cenv.g.ilg.typ_Object) + + let ilCtorDef = mkILSimpleStorageCtorWithParamNames(None, (if isStruct then None else Some ilBaseTy.TypeSpec), ilTy, [], flds, ILMemberAccess.Public) + let ilCtorRef = mkRefToILMethod(ilTypeRef, ilCtorDef) + let ilMethodRefs = [| for mdef in ilMethods -> mkRefToILMethod(ilTypeRef, mdef) |] + + if ilTypeRef.Scope.IsLocalRef then + + // Create a tycon that looks exactly like a record definition, to help drive the generation of equality/comparison code + let m = range0 + let tps = + [ for nm in nms -> + let stp = Typar(mkSynId m ("T"+nm),TyparStaticReq.NoStaticReq,true) + NewTypar (TyparKind.Type, TyparRigidity.WarnIfNotRigid,stp,false,TyparDynamicReq.Yes,[],true,true) ] + + let tycon = + let lmtyp = MaybeLazy.Strict (NewEmptyModuleOrNamespaceType ModuleOrType) + let cpath = CompPath(ilTypeRef.Scope,[]) + NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) + + if isStruct then + tycon.SetIsStructRecordOrUnion(true) + + tycon.entity_tycon_repr <- + TRecdRepr (MakeRecdFieldsTable + [ for (tp, (propName, _fldName, _fldTy)) in (List.zip tps flds) -> + NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false ]) + + let tcref = mkLocalTyconRef tycon + let _,typ = generalizeTyconRef tcref + let tcaug = tcref.TypeContents + + tcaug.tcaug_interfaces <- + [ (cenv.g.mk_IStructuralComparable_ty,true,m) + (cenv.g.mk_IComparable_ty,true,m) + (mkAppTy cenv.g.system_GenericIComparable_tcref [typ],true,m) + (cenv.g.mk_IStructuralEquatable_ty,true,m) + (mkAppTy cenv.g.system_GenericIEquatable_tcref [typ],true,m) ] + + let vspec1,vspec2 = AugmentWithHashCompare.MakeValsForEqualsAugmentation cenv.g tcref + let evspec1,evspec2,evspec3 = AugmentWithHashCompare.MakeValsForEqualityWithComparerAugmentation cenv.g tcref + let cvspec1,cvspec2 = AugmentWithHashCompare.MakeValsForCompareAugmentation cenv.g tcref + let cvspec3 = AugmentWithHashCompare.MakeValsForCompareWithComparerAugmentation cenv.g tcref + + tcaug.SetCompare (mkLocalValRef cvspec1, mkLocalValRef cvspec2) + tcaug.SetCompareWith (mkLocalValRef cvspec3) + tcaug.SetEquals (mkLocalValRef vspec1, mkLocalValRef vspec2) + tcaug.SetHashAndEqualsWith (mkLocalValRef evspec1, mkLocalValRef evspec2, mkLocalValRef evspec3) + + // Build the ILTypeDef. We don't rely on the normal record generation process because we want very specific field names + + let ilTypeDefAttribs = mkILCustomAttrs [ cenv.g.CompilerGeneratedAttribute; mkCompilationMappingAttr cenv.g (int SourceConstructFlags.RecordType) ] + + let ilInterfaceTys = [ for (ity,_,_) in tcaug.tcaug_interfaces -> GenTypeAux cenv.amap m (TypeReprEnv.ForTypars tps) ity ] + + let ilTypeDef = + mkILGenericClass (ilTypeRef.Name, ILTypeDefAccess.Public, ilGenericParams, ilBaseTy, ilInterfaceTys, + mkILMethods (ilCtorDef :: ilMethods), ilFieldDefs, emptyILTypeDefs, + ilProperties, mkILEvents [], ilTypeDefAttribs, + ILTypeInit.BeforeField) + - let fspec = ComputeFieldSpecForVal(optIntraAssemblyInfo, isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy, ilGetterMethRef) + let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) - StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, nm, ilTy, ilGetterMethRef, ilSetterMethRef, optShadowLocal) - - | _ -> - match vref.MemberInfo with - | Some memberInfo when not vref.IsExtensionMember -> - let mspec,_,_,paramInfos,retInfo = GetMethodSpecForMemberVal amap g memberInfo vref - Method (topValInfo, vref, mspec, m, paramInfos, retInfo) - | _ -> - let (tps, curriedArgInfos, returnTy, retInfo) = GetTopValTypeInCompiledForm g topValInfo vref.Type m - let tyenvUnderTypars = TypeReprEnv.ForTypars tps - let (methodArgTys,paramInfos) = curriedArgInfos |> List.concat |> List.unzip - let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys - let ilRetTy = GenReturnType amap m tyenvUnderTypars returnTy - let ilLocTy = mkILTyForCompLoc cloc - let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy tps) - let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) - Method (topValInfo, vref, mspec, m, paramInfos, retInfo) + let ilTypeDef = { ilTypeDef with MethodImpls=mkILMethodImpls [] } + + mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) + + let extraBindings = + [ yield! AugmentWithHashCompare.MakeBindingsForCompareAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForEqualsAugmentation cenv.g tycon ] -let ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyFieldTable, isInteractive, optShadowLocal) cloc (v:Val) eenv = - let storage = ComputeStorageForTopVal (amap, g, Some intraAssemblyFieldTable, isInteractive, optShadowLocal, mkLocalValRef v, cloc) - AddStorageForVal g (v,notlazy storage) eenv + let optimizedExtraBindings = extraBindings |> List.map (fun (TBind(a,b,c)) -> TBind(a,cenv.optimizeDuringCodeGen b,c)) -let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = - match v.ValReprInfo with - | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName,v.Range)) - | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) + extraBindingsToGenerate <- optimizedExtraBindings @ extraBindingsToGenerate -let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = - let acc = - (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> - ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) + (ilCtorRef,ilMethodRefs,ilTy) - let acc = - (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> - AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc modref v)) acc) - acc + let mutable explicitEntryPointInfo : ILTypeRef option = None -let ComputeStorageForExternalCcu amap g eenv (ccu:CcuThunk) = - if not ccu.IsFSharp then eenv else - let cloc = CompLocForCcu ccu - let eenv = - List.foldBack - (fun smodul acc -> - let cloc = CompLocForSubModuleOrNamespace cloc smodul - let modref = mkNonLocalCcuRootEntityRef ccu smodul - ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc modref smodul) - ccu.RootModulesAndNamespaces - eenv - let eenv = - let eref = ERefNonLocalPreResolved ccu.Contents (mkNonLocalEntityRef ccu [| |]) - (eenv, ccu.Contents.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> - AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc eref v)) acc) - eenv + /// static init fields on script modules. + let mutable scriptInitFspecs : (ILFieldSpec * range) list = [] -let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty:ModuleOrNamespaceType) = - let eenv = List.fold (fun eenv submodul -> AddBindingsForLocalModuleType allocVal (CompLocForSubModuleOrNamespace cloc submodul) eenv submodul.ModuleOrNamespaceType) eenv mty.ModuleAndNamespaceDefinitions - let eenv = Seq.fold (fun eenv v -> allocVal cloc v eenv) eenv mty.AllValsAndMembers - eenv + member mgbuf.AddScriptInitFieldSpec(fieldSpec,range) = + scriptInitFspecs <- (fieldSpec,range) :: scriptInitFspecs + + /// This initializes the script in #load and fsc command-line order causing their + /// sideeffects 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) = + mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) + scriptInitFspecs |> List.iter IntializeCompiledScript + | None -> () -let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (ComputeStorageForExternalCcu amap g) eenv ccus + member mgbuf.GenerateRawDataValueType(cloc,size) = + // Byte array literals require a ValueType of size the required number of bytes. + // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. + // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. + let cloc = CompLocForPrivateImplementationDetails cloc + rawDataValueTypeGenerator.Apply((cloc,size)) -let AddBindingsForTycon allocVal (cloc:CompileLocation) (tycon:Tycon) eenv = - let unrealizedSlots = - if tycon.IsFSharpObjectModelTycon - then tycon.FSharpObjectModelTypeInfo.fsobjmodel_vslots - else [] - (eenv,unrealizedSlots) ||> List.fold (fun eenv vref -> allocVal cloc vref.Deref eenv) + member mgbuf.GenerateAnonType(genToStringMethod, anonInfo:AnonRecdTypeInfo) = + let isStruct = evalAnonInfoIsStruct anonInfo + let key = anonInfo.Stamp + match anonTypeTable.Table.TryGetValue key with + | true, res -> res + | _ -> + let info = generateAnonType genToStringMethod (isStruct,anonInfo.ILTypeRef,anonInfo.SortedNames) + anonTypeTable.Table.[key] <- info + info -let rec AddBindingsForModuleDefs allocVal (cloc:CompileLocation) eenv mdefs = - List.fold (AddBindingsForModuleDef allocVal cloc) eenv mdefs + member mgbuf.LookupAnonType(anonInfo:AnonRecdTypeInfo) = + match anonTypeTable.Table.TryGetValue anonInfo.Stamp with + | true, res -> res + | _ -> failwithf "the anonymous record %A has not been generated in the pre-phase of generating this module" anonInfo.ILTypeRef -and AddBindingsForModuleDef allocVal cloc eenv x = - match x with - | TMDefRec(_isRec,tycons,mbinds,_) -> - (* Virtual don't have 'let' bindings and must be added to the environment *) - let eenv = List.foldBack (AddBindingsForTycon allocVal cloc) tycons eenv - let eenv = List.foldBack (AddBindingsForModule allocVal cloc) mbinds eenv - eenv - | TMDefLet(bind,_) -> - allocVal cloc bind.Var eenv - | TMDefDo _ -> - eenv - | TMAbstract(ModuleOrNamespaceExprWithSig(mtyp,_,_)) -> - AddBindingsForLocalModuleType allocVal cloc eenv mtyp - | TMDefs(mdefs) -> - AddBindingsForModuleDefs allocVal cloc eenv mdefs + member mgbuf.GrabExtraBindingsToGenerate() = + let result = extraBindingsToGenerate + extraBindingsToGenerate <- [] + result -and AddBindingsForModule allocVal cloc x eenv = - match x with - | ModuleOrNamespaceBinding.Binding bind -> - allocVal cloc bind.Var eenv - | ModuleOrNamespaceBinding.Module (mspec, mdef) -> - let cloc = - if mspec.IsNamespace then cloc - else CompLocForFixedModule cloc.clocQualifiedNameOfFile cloc.clocTopImplQualifiedName mspec - - AddBindingsForModuleDef allocVal cloc eenv mdef + member mgbuf.AddTypeDef(tref:ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) -and AddBindingsForModuleTopVals _g allocVal _cloc eenv vs = - List.foldBack allocVal vs eenv + member mgbuf.GetCurrentFields(tref:ILTypeRef) = + gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() + member mgbuf.AddReflectedDefinition(vspec : Tast.Val,expr) = + // preserve order by storing index of item + let n = reflectedDefinitions.Count + reflectedDefinitions.Add(vspec, (vspec.CompiledName, n, expr)) + + member mgbuf.ReplaceNameOfReflectedDefinition(vspec, newName) = + match reflectedDefinitions.TryGetValue vspec with + | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) + | _ -> () -// Put the partial results for a generated fragment (i.e. a part of a CCU generated by FSI) -// into the stored results for the whole CCU. -// isIncrementalFragment = true --> "typed input" -// isIncrementalFragment = false --> "#load" -let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, typedImplFiles) = - let cloc = CompLocForFragment fragName ccu - let allocVal = ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyInfo, true, NoShadowLocal) - (eenv, typedImplFiles) ||> List.fold (fun eenv (TImplFile(qname,_,mexpr,_,_)) -> - let cloc = { cloc with clocTopImplQualifiedName = qname.Text } - if isIncrementalFragment then - match mexpr with - | ModuleOrNamespaceExprWithSig(_,mdef,_) -> AddBindingsForModuleDef allocVal cloc eenv mdef - (* | ModuleOrNamespaceExprWithSig(mtyp,_,m) -> error(Error("don't expect inner defs to have a constraint",m)) *) - else - AddBindingsForLocalModuleType allocVal cloc eenv mexpr.Type) + member mgbuf.AddMethodDef(tref:ILTypeRef,ilMethodDef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) + if ilMethodDef.IsEntryPoint then + explicitEntryPointInfo <- Some(tref) + + member mgbuf.AddExplicitInitToSpecificMethodDef(cond,tref,fspec,sourceOpt,feefee,seqpt) = + // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field + // Doing both a store and load keeps FxCop happier because it thinks the field is useful + let instrs = + [ yield! (if condition "NO_ADD_FEEFEE_TO_CCTORS" then [] elif condition "ADD_SEQPT_TO_CCTORS" then seqpt else feefee) // mark start of hidden code + yield mkLdcInt32 0 + yield mkNormalStsfld fspec + yield mkNormalLdsfld fspec + yield AI_pop] + gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond,instrs,sourceOpt) + + member mgbuf.AddEventDef(tref,edef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) + member mgbuf.AddFieldDef(tref,ilFieldDef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) + + member mgbuf.AddOrMergePropertyDef(tref,pdef,m) = + gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef,m) + + member mgbuf.Close() = + // old implementation adds new element to the head of list so result was accumulated in reversed order + let orderedReflectedDefinitions = + [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name,vspec), expr)] + |> List.sortBy (fst >> (~-)) // invert the result to get 'order-by-descending' behavior (items in list are 0..* so we don't need to worry about int.MinValue) + |> List.map snd + gtdefs.Close(), orderedReflectedDefinitions + member mgbuf.cenv = cenv + member mgbuf.GetExplicitEntryPointInfo() = explicitEntryPointInfo + +/// Type generators which walk the types first to make sure all anonymous types are generated +let GenType cenv m tyenv ty = GenTypeAux cenv.amap m tyenv ty +let GenTypes cenv m tyenv tys = GenTypesAux cenv.amap m tyenv tys +let GenUnionCaseSpec cenv m tyenv c tyargs = GenUnionCaseSpecAux cenv.amap m tyenv c tyargs +let GenUnionSpec cenv m tyenv tcref tyargs = GenUnionSpecAux cenv.amap m tyenv tcref tyargs +let GenTypePermitVoid cenv m tyenv ty = GenTypeAuxAux cenv.amap m tyenv VoidOK PtrTypesNotOK ty +let GenTypesPermitVoid cenv m tyenv tys = List.map (GenTypePermitVoid cenv m tyenv) tys +let GenTyApp cenv m tyenv repr tyargs = GenTyAppAux cenv.amap m tyenv repr tyargs +let GenNamedTyApp cenv m tyenv tcref tinst = GenNamedTyAppAux cenv.amap m tyenv PtrTypesNotOK tcref tinst +let GenReturnType cenv m tyenv returnTyOpt = GenReturnTypeAux cenv.amap m tyenv returnTyOpt +let GenParamType cenv m tyenv ty = GenParamTypeAux cenv.amap m tyenv ty +let GenParamTypes cenv m tyenv tys = GenParamTypesAux cenv.amap m tyenv tys +let GenTypeArgs cenv m tyenv tyargs = GenTypeArgsAux cenv.amap m tyenv tyargs +let GenExnType amap m tyenv (ecref:TyconRef) = GenTyAppAux amap m tyenv ecref.CompiledRepresentation [] + //-------------------------------------------------------------------------- -// Generate debugging marks +// Representation of term declarations = Environments for compiling expressions. //-------------------------------------------------------------------------- -let GenILSourceMarker (g: TcGlobals) (m:range) = - ILSourceMarker.Create(document=g.memoize_file m.FileIndex, - line=m.StartLine, - /// NOTE: .NET && VS measure first column as column 1 - column= m.StartColumn+1, - endLine= m.EndLine, - endColumn=m.EndColumn+1) + +[] +type ValStorage = + /// Indicates the value is always null + | Null + /// Indicates the value is stored in a static field. + | StaticField of ILFieldSpec * ValRef * (*hasLiteralAttr:*)bool * ILType * string * ILType * ILMethodRef * ILMethodRef * OptionalShadowLocal + /// Indicates the value is "stored" as a property that recomputes it each time it is referenced. Used for simple constants that do not cause initialization triggers + | StaticProperty of ILMethodSpec * OptionalShadowLocal + /// Indicates the value is "stored" as a IL static method (in a "main" class for a F# + /// compilation unit, or as a member) according to its inferred or specified arity. + | Method of ValReprInfo * ValRef * ILMethodSpec * Range.range * ArgReprInfo list * ArgReprInfo + /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" + | Env of ILType * int * ILFieldSpec * NamedLocalIlxClosureInfo ref option + /// Indicates that the value is an argument of a method being generated + | Arg of int + /// Indicates that the value is stored in local of the method being generated. NamedLocalIlxClosureInfo is normally empty. + /// It is non-empty for 'local type functions', see comments on definition of NamedLocalIlxClosureInfo. + | Local of int * NamedLocalIlxClosureInfo ref option -let GenPossibleILSourceMarker cenv m = - if cenv.opts.generateDebugSymbols then - Some (GenILSourceMarker cenv.g m ) - else - None +and OptionalShadowLocal = + | NoShadowLocal + | ShadowLocal of ValStorage -//-------------------------------------------------------------------------- -// Helpers for merging property definitions -//-------------------------------------------------------------------------- +/// The representation of a NamedLocalClosure is based on a cloinfo. However we can't generate a cloinfo until we've +/// decided the representations of other items in the recursive set. Hence we use two phases to decide representations in +/// a recursive set. Yuck. +and NamedLocalIlxClosureInfo = + | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) + | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo + +and ModuleStorage = + { Vals: Lazy> + SubModules: Lazy> } -let HashRangeSorted (ht: IDictionary<_, (int * _)>) = - [ for KeyValue(_k,v) in ht -> v ] |> List.sortBy fst |> List.map snd +/// BranchCallItems are those where 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. +and BranchCallItem = + | BranchCallClosure of ArityInfo + | BranchCallMethod of + // Argument counts for compiled form of F# method or value + ArityInfo * + // Arg infos for compiled form of F# method or value + (TType * ArgReprInfo) list list * + // Typars for F# method or value + Tast.Typars * + // Typars for F# method or value + int * + // num obj args + int + +and Mark = + | Mark of ILCodeLabel (* places we can branch to *) + member x.CodeLabel = (let (Mark(lab)) = x in lab) -let MergeOptions m o1 o2 = - match o1,o2 with - | Some x, None | None, Some x -> Some x - | None, None -> None - | Some x, Some _ -> -#if DEBUG - // This warning fires on some code that also triggers this warning: - // warning(Error("The implementation of a specified generic interface required a method implementation not fully supported by F# Interactive. In the unlikely event that the resulting class fails to load then compile the interface type into a statically-compiled DLL and reference it using '#r'",m)) - // The code is OK so we don't print this. - errorR(InternalError("MergeOptions: two values given",m)) -#else - ignore m -#endif - Some x +and IlxGenEnv = + { tyenv: TypeReprEnv + someTypeInThisAssembly: ILType + isFinalFile: bool + /// Where to place the stuff we're currently generating + cloc: CompileLocation + /// Hiding information down the signature chain, used to compute what's public to the assembly + sigToImplRemapInfo: (Remap * SignatureHidingInfo) list + /// All values in scope + valsInScope: ValMap> + /// For optimizing direct tail recursion to a loop - mark says where to branch to. Length is 0 or 1. + /// REVIEW: generalize to arbitrary nested local loops?? + innerVals: (ValRef * (BranchCallItem * Mark)) list + /// Full list of enclosing bound values. First non-compiler-generated element is used to help give nice names for closures and other expressions. + letBoundVars: ValRef list + /// The set of IL local variable indexes currently in use by lexically scoped variables, to allow reuse on different branches. + /// Really an integer set. + liveLocals: IntMap + /// Are we under the scope of a try, catch or finally? If so we can't tailcall. SEH = structured exception handling + withinSEH: bool } -let MergePropertyPair m (pd: ILPropertyDef) pdef = - {pd with GetMethod=MergeOptions m pd.GetMethod pdef.GetMethod - SetMethod=MergeOptions m pd.SetMethod pdef.SetMethod} +let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } +let EnvForTypars tps eenv = {eenv with tyenv = TypeReprEnv.ForTypars tps } +let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add typars} -type PropKey = PropKey of string * ILTypes * ILThisConvention +let AddSignatureRemapInfo _msg (rpi, mhi) eenv = + { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi,mhi) :: eenv.sigToImplRemapInfo } + +//-------------------------------------------------------------------------- +// Print eenv +//-------------------------------------------------------------------------- -let AddPropertyDefToHash (m:range) (ht:Dictionary) (pdef: ILPropertyDef) = - let nm = PropKey(pdef.Name, pdef.Args, pdef.CallingConv) - if ht.ContainsKey nm then - let idx,pd = ht.[nm] - ht.[nm] <- (idx, MergePropertyPair m pd pdef) +let OutputStorage (pps: TextWriter) s = + match s with + | StaticField _ -> pps.Write "(top)" + | StaticProperty _ -> pps.Write "(top)" + | Method _ -> pps.Write "(top)" + | Local _ -> pps.Write "(local)" + | Arg _ -> pps.Write "(arg)" + | Env _ -> pps.Write "(env)" + | Null -> pps.Write "(null)" + +//-------------------------------------------------------------------------- +// Augment eenv with values +//-------------------------------------------------------------------------- + +let AddStorageForVal (g: TcGlobals) (v,s) eenv = + let eenv = { eenv with valsInScope = eenv.valsInScope.Add v s } + // If we're compiling fslib then also bind the value as a non-local path to + // allow us to resolve the compiler-non-local-references that arise from env.fs + // + // Do this by generating a fake "looking from the outside in" non-local value reference for + // v, dereferencing it to find the corresponding signature Val, and adding an entry for the signature val. + // + // A similar code path exists in ilxgen.fs for the tables of "optimization data" for values + if g.compilingFslib then + // Passing an empty remap is sufficient for FSharp.Core.dll because it turns out the remapped type signature can + // still be resolved. + match tryRescopeVal g.fslibCcu Remap.Empty v with + | None -> eenv + | Some vref -> + match vref.TryDeref with + | VNone -> + //let msg = sprintf "could not dereference external value reference to something in FSharp.Core.dll during code generation, v.MangledName = '%s', v.Range = %s" v.MangledName (stringOfRange v.Range) + //System.Diagnostics.Debug.Assert(false, msg) + eenv + | VSome gv -> + { eenv with valsInScope = eenv.valsInScope.Add gv s } else - ht.[nm] <- (ht.Count, pdef) - + eenv -/// Merge a whole group of properties all at once -let MergePropertyDefs m ilPropertyDefs = - let ht = new Dictionary<_,_>(3,HashIdentity.Structural) - ilPropertyDefs |> List.iter (AddPropertyDefToHash m ht) - HashRangeSorted ht +let AddStorageForLocalVals g vals eenv = List.foldBack (fun (v,s) acc -> AddStorageForVal g (v,notlazy s) acc) vals eenv //-------------------------------------------------------------------------- -// Buffers for compiling modules. The entire assembly gets compiled via an AssemblyBuilder +// Lookup eenv //-------------------------------------------------------------------------- + +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -/// Information collected imperatively for each type definition -type TypeDefBuilder(tdef, tdefDiscards) = - let gmethods = new ResizeArray(0) - let gfields = new ResizeArray(0) - let gproperties : Dictionary = new Dictionary<_,_>(3,HashIdentity.Structural) - let gevents = new ResizeArray(0) - let gnested = new TypeDefsBuilder() - - member b.Close() = - { tdef with - Methods = mkILMethods (tdef.Methods.AsList @ ResizeArray.toList gmethods) - Fields = mkILFields (tdef.Fields.AsList @ ResizeArray.toList gfields) - Properties = mkILProperties (tdef.Properties.AsList @ HashRangeSorted gproperties ) - Events = mkILEvents (tdef.Events.AsList @ ResizeArray.toList gevents) - NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } +let StorageForVal m v eenv = + let v = + try eenv.valsInScope.[v] + with :? KeyNotFoundException -> + assert false + errorR(Error(FSComp.SR.ilUndefinedValue(showL(vspecAtBindL v)),m)) + notlazy (Arg 668(* random value for post-hoc diagnostic analysis on generated tree *) ) + v.Force() +let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv - member b.AddEventDef(edef) = gevents.Add edef - member b.AddFieldDef(ilFieldDef) = gfields.Add ilFieldDef - member b.AddMethodDef(ilMethodDef) = - let discard = - match tdefDiscards with - | Some (mdefDiscard, _) -> mdefDiscard ilMethodDef - | None -> false - if not discard then - gmethods.Add ilMethodDef - member b.NestedTypeDefs = gnested - member b.GetCurrentFields() = gfields |> Seq.readonly +//-------------------------------------------------------------------------- +// Imported modules and the environment +// +// How a top level value is represented depends on its type. 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. +//-------------------------------------------------------------------------- - /// Merge Get and Set property nodes, which we generate independently for F# code - /// when we come across their corresponding methods. - member b.AddOrMergePropertyDef(pdef,m) = - let discard = - match tdefDiscards with - | Some (_, pdefDiscard) -> pdefDiscard pdef - | None -> false - if not discard then - AddPropertyDefToHash m gproperties pdef +let IsValRefIsDllImport g (vref:ValRef) = + vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute - member b.PrependInstructionsToSpecificMethodDef(cond,instrs,tag) = - match ResizeArray.tryFindIndex cond gmethods with - | Some idx -> gmethods.[idx] <- prependInstrsToMethod instrs gmethods.[idx] - | None -> gmethods.Add(mkILClassCtor (mkMethodBody (false,[],1,nonBranchingInstrsToCode instrs,tag))) +let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = + let m = vref.Range + let tps,curriedArgInfos,returnTy,retInfo = + assert(vref.ValReprInfo.IsSome) + GetTopValTypeInCompiledForm g (Option.get vref.ValReprInfo) vref.Type m + let tyenvUnderTypars = TypeReprEnv.ForTypars tps + let flatArgInfos = List.concat curriedArgInfos + let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) + let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) + let parentTcref = vref.TopValDeclaringEntity + let parentTypars = parentTcref.TyparsNoRange + let numParentTypars = parentTypars.Length + if tps.Length < numParentTypars then error(InternalError("CodeGen check: type checking did not ensure that this method is sufficiently generic", m)) + let ctps,mtps = List.chop numParentTypars tps + let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref + let ilActualRetTy = + let ilRetTy = GenReturnTypeAux amap m tyenvUnderTypars returnTy + if isCtor || cctor then ILType.Void else ilRetTy -and TypeDefsBuilder() = - let tdefs : Internal.Utilities.Collections.HashMultiMap = HashMultiMap(0, HashIdentity.Structural) - let mutable countDown = System.Int32.MaxValue + let ilTy = GenTypeAux amap m tyenvUnderTypars (mkAppTy parentTcref (List.map mkTyparTy ctps)) - member b.Close() = - //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. - // Ideally it shouldn't matter which order we use. - // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. + if isCompiledAsInstance || isCtor then + // Find the 'this' argument type if any + let thisTy,flatArgInfos = + if isCtor then (GetFSharpViewOfReturnType g returnTy),flatArgInfos + else + match flatArgInfos with + | [] -> error(InternalError("This instance method '" + vref.LogicalName + "' has no arguments", m)) + | (h,_):: t -> h,t + + let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy + let thisArgTys = argsOfAppTy g thisTy + if ctps.Length <> thisArgTys.Length then + warning(InternalError(sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #ctps = %d, #mtps = %d, #thisArgTys = %d" numParentTypars ctps.Length mtps.Length thisArgTys.Length,m)) + else + List.iter2 + (fun gtp ty2 -> + if not (typeEquiv g (mkTyparTy gtp) ty2) then + warning(InternalError("CodeGen check: type checking did not quantify the correct type variables for this method: generalization list contained " + gtp.Name + "#" + string gtp.Stamp + " and list from 'this' pointer contained " + (showL(typeL ty2)), m))) + ctps + thisArgTys + let methodArgTys,paramInfos = List.unzip flatArgInfos + let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys + let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy mtps) + let mspec = mkILInstanceMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do - let tdef = b.Close() - // Skip the type if it is empty - if not eliminateIfEmpty - || not tdef.NestedTypes.AsList.IsEmpty - || not tdef.Fields.AsList.IsEmpty - || not tdef.Events.AsList.IsEmpty - || not tdef.Properties.AsList.IsEmpty - || not tdef.Methods.AsList.IsEmpty then - yield tdef ] + mspec,ctps,mtps,paramInfos,retInfo + else + let methodArgTys,paramInfos = List.unzip flatArgInfos + let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys + let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy mtps) + let mspec = mkILStaticMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) + + mspec,ctps,mtps,paramInfos,retInfo + +// Generate the ILFieldSpec for a top-level value + +let ComputeFieldSpecForVal(optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, g, ilTyForProperty, vspec:Val, nm, m, cloc, ilTy, ilGetterMethRef) = + assert vspec.IsCompiledAsTopLevel + let generate() = GenFieldSpecForStaticField (isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy) + match optIntraAssemblyInfo with + | None -> generate() + | Some intraAssemblyInfo -> + if vspec.IsMutable && vspec.IsCompiledAsTopLevel && isStructTy g vspec.Type then + let ok, res = intraAssemblyInfo.StaticFieldInfo.TryGetValue ilGetterMethRef + if ok then + res + else + let res = generate() + intraAssemblyInfo.StaticFieldInfo.[ilGetterMethRef] <- res + res + else + generate() + +let IsValCompiledAsMethod g (v:Val) = + match v.ValReprInfo with + | None -> false + | Some topValInfo -> + not (isUnitTy g v.Type && not v.IsMemberOrModuleBinding && not v.IsMutable) && + not v.IsCompiledAsStaticPropertyWithoutField && + match GetTopValTypeInFSharpForm g topValInfo v.Type v.Range with + | [],[],_,_ when not v.IsMember -> false + | _ -> true + +// This called via 2 routes. +// (a) ComputeAndAddStorageForLocalTopVal +// (b) ComputeStorageForNonLocalTopVal +// +/// This function decides the storage for the val. +/// The decision is based on arityInfo. +let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, optShadowLocal, vref:ValRef, cloc) = + + if isUnitTy g vref.Type && not vref.IsMemberOrModuleBinding && not vref.IsMutable then + Null + else + let topValInfo = + match vref.ValReprInfo with + | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref),vref.Range)) + | Some a -> a + + let m = vref.Range + let nm = vref.CompiledName - member b.FindTypeDefBuilder(nm) = - try tdefs.[nm] |> snd |> fst - with :? KeyNotFoundException -> failwith ("FindTypeDefBuilder: " + nm + " not found") + if vref.Deref.IsCompiledAsStaticPropertyWithoutField then + let nm = "get_"+nm + let tyenvUnderTypars = TypeReprEnv.ForTypars [] + let ilRetTy = GenTypeAux amap m tyenvUnderTypars vref.Type + let typ = mkILTyForCompLoc cloc + let mspec = mkILStaticMethSpecInTy (typ, nm, [], ilRetTy, []) + + StaticProperty (mspec, optShadowLocal) + else - member b.FindNestedTypeDefsBuilder(path) = - List.fold (fun (acc:TypeDefsBuilder) x -> acc.FindTypeDefBuilder(x).NestedTypeDefs) b path + // Determine when a static field is required. + // + // REVIEW: This call to GetTopValTypeInFSharpForm is only needed to determine if this is a (type) function or a value + // We should just look at the arity + match GetTopValTypeInFSharpForm g topValInfo vref.Type vref.Range with + | [],[], returnTy,_ when not vref.IsMember -> + // Mutable and literal static fields must have stable names and live in the "public" location + // See notes on GenFieldSpecForStaticField above. + let vspec = vref.Deref + let ilTy = GenTypeAux amap m TypeReprEnv.Empty returnTy (* TypeReprEnv.Empty ok: not a field in a generic class *) + let ilTyForProperty = mkILTyForCompLoc cloc + let attribs = vspec.Attribs + let hasLiteralAttr = HasFSharpAttribute g g.attrib_LiteralAttribute attribs - member b.FindNestedTypeDefBuilder(tref:ILTypeRef) = - b.FindNestedTypeDefsBuilder(tref.Enclosing).FindTypeDefBuilder(tref.Name) + let ilTypeRefForProperty = ilTyForProperty.TypeRef + let ilGetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "get_"+nm, 0, [], ilTy) + let ilSetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "set_"+nm, 0, [ilTy], ILType.Void) - member b.AddTypeDef(tdef:ILTypeDef, eliminateIfEmpty, addAtEnd, tdefDiscards) = - let idx = if addAtEnd then (countDown <- countDown - 1; countDown) else tdefs.Count - tdefs.Add (tdef.Name, (idx, (new TypeDefBuilder(tdef, tdefDiscards), eliminateIfEmpty))) + let fspec = ComputeFieldSpecForVal(optIntraAssemblyInfo, isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy, ilGetterMethRef) -/// Assembly generation buffers -type AssemblyBuilder(cenv:cenv) as mgbuf = - // The Abstract IL table of types - let gtdefs= new TypeDefsBuilder() - // The definitions of top level values, as quotations. - let mutable reflectedDefinitions : System.Collections.Generic.Dictionary = System.Collections.Generic.Dictionary(HashIdentity.Reference) - // A memoization table for generating value types for big constant arrays - let vtgenerator= - new MemoizationTable<(CompileLocation * int) , ILTypeSpec> - ((fun (cloc,size) -> - let name = CompilerGeneratedName ("T" + string(newUnique()) + "_" + string size + "Bytes") // Type names ending ...$T_37Bytes - let vtdef = mkRawDataValueTypeDef cenv.g.iltyp_ValueType (name,size,0us) - let vtref = NestedTypeRefForCompLoc cloc vtdef.Name - let vtspec = mkILTySpec(vtref,[]) - let vtdef = vtdef.WithAccess(ComputeTypeAccess vtref true) - mgbuf.AddTypeDef(vtref, vtdef, false, true, None) - vtspec), - keyComparer=HashIdentity.Structural) + StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, nm, ilTy, ilGetterMethRef, ilSetterMethRef, optShadowLocal) + + | _ -> + match vref.MemberInfo with + | Some memberInfo when not vref.IsExtensionMember -> + let mspec,_,_,paramInfos,retInfo = GetMethodSpecForMemberVal amap g memberInfo vref + Method (topValInfo, vref, mspec, m, paramInfos, retInfo) + | _ -> + let (tps, curriedArgInfos, returnTy, retInfo) = GetTopValTypeInCompiledForm g topValInfo vref.Type m + let tyenvUnderTypars = TypeReprEnv.ForTypars tps + let (methodArgTys,paramInfos) = curriedArgInfos |> List.concat |> List.unzip + let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys + let ilRetTy = GenReturnTypeAux amap m tyenvUnderTypars returnTy + let ilLocTy = mkILTyForCompLoc cloc + let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy tps) + let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) + Method (topValInfo, vref, mspec, m, paramInfos, retInfo) - let mutable explicitEntryPointInfo : ILTypeRef option = None +let ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyFieldTable, isInteractive, optShadowLocal) cloc (v:Val) eenv = + let storage = ComputeStorageForTopVal (amap, g, Some intraAssemblyFieldTable, isInteractive, optShadowLocal, mkLocalValRef v, cloc) + AddStorageForVal g (v,notlazy storage) eenv - /// static init fields on script modules. - let mutable scriptInitFspecs : (ILFieldSpec * range) list = [] - - member mgbuf.AddScriptInitFieldSpec(fieldSpec,range) = - scriptInitFspecs <- (fieldSpec,range) :: scriptInitFspecs - - /// This initializes the script in #load and fsc command-line order causing their - /// sideeffects 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) = - mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) - scriptInitFspecs |> List.iter IntializeCompiledScript - | None -> () +let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = + match v.ValReprInfo with + | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName,v.Range)) + | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) - +let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = + let acc = + (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> + ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) - member mgbuf.GenerateRawDataValueType(cloc,size) = - // Byte array literals require a ValueType of size the required number of bytes. - // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. - // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. - let cloc = CompLocForPrivateImplementationDetails cloc - vtgenerator.Apply((cloc,size)) + let acc = + (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> + AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc modref v)) acc) + acc - member mgbuf.AddTypeDef(tref:ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = - gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) +let ComputeStorageForExternalCcu amap g eenv (ccu:CcuThunk) = + if not ccu.IsFSharp then eenv else + let cloc = CompLocForCcu ccu + let eenv = + List.foldBack + (fun smodul acc -> + let cloc = CompLocForSubModuleOrNamespace cloc smodul + let modref = mkNonLocalCcuRootEntityRef ccu smodul + ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc modref smodul) + ccu.RootModulesAndNamespaces + eenv + let eenv = + let eref = ERefNonLocalPreResolved ccu.Contents (mkNonLocalEntityRef ccu [| |]) + (eenv, ccu.Contents.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> + AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc eref v)) acc) + eenv + +let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty:ModuleOrNamespaceType) = + let eenv = List.fold (fun eenv submodul -> AddBindingsForLocalModuleType allocVal (CompLocForSubModuleOrNamespace cloc submodul) eenv submodul.ModuleOrNamespaceType) eenv mty.ModuleAndNamespaceDefinitions + let eenv = Seq.fold (fun eenv v -> allocVal cloc v eenv) eenv mty.AllValsAndMembers + eenv - member mgbuf.GetCurrentFields(tref:ILTypeRef) = - gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() +let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (ComputeStorageForExternalCcu amap g) eenv ccus - member mgbuf.AddReflectedDefinition(vspec : Tast.Val,expr) = - // preserve order by storing index of item - let n = reflectedDefinitions.Count - reflectedDefinitions.Add(vspec, (vspec.CompiledName, n, expr)) - - member mgbuf.ReplaceNameOfReflectedDefinition(vspec, newName) = - match reflectedDefinitions.TryGetValue vspec with - | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) - | _ -> () +let AddBindingsForTycon allocVal (cloc:CompileLocation) (tycon:Tycon) eenv = + let unrealizedSlots = + if tycon.IsFSharpObjectModelTycon + then tycon.FSharpObjectModelTypeInfo.fsobjmodel_vslots + else [] + (eenv,unrealizedSlots) ||> List.fold (fun eenv vref -> allocVal cloc vref.Deref eenv) - member mgbuf.AddMethodDef(tref:ILTypeRef,ilMethodDef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) - if ilMethodDef.IsEntryPoint then - explicitEntryPointInfo <- Some(tref) +let rec AddBindingsForModuleDefs allocVal (cloc:CompileLocation) eenv mdefs = + List.fold (AddBindingsForModuleDef allocVal cloc) eenv mdefs - member mgbuf.AddExplicitInitToSpecificMethodDef(cond,tref,fspec,sourceOpt,feefee,seqpt) = - // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field - // Doing both a store and load keeps FxCop happier because it thinks the field is useful - let instrs = - [ yield! (if condition "NO_ADD_FEEFEE_TO_CCTORS" then [] elif condition "ADD_SEQPT_TO_CCTORS" then seqpt else feefee) // mark start of hidden code - yield mkLdcInt32 0 - yield mkNormalStsfld fspec - yield mkNormalLdsfld fspec - yield AI_pop] - gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond,instrs,sourceOpt) +and AddBindingsForModuleDef allocVal cloc eenv x = + match x with + | TMDefRec(_isRec,tycons,mbinds,_) -> + (* Virtual don't have 'let' bindings and must be added to the environment *) + let eenv = List.foldBack (AddBindingsForTycon allocVal cloc) tycons eenv + let eenv = List.foldBack (AddBindingsForModule allocVal cloc) mbinds eenv + eenv + | TMDefLet(bind,_) -> + allocVal cloc bind.Var eenv + | TMDefDo _ -> + eenv + | TMAbstract(ModuleOrNamespaceExprWithSig(mtyp,_,_)) -> + AddBindingsForLocalModuleType allocVal cloc eenv mtyp + | TMDefs(mdefs) -> + AddBindingsForModuleDefs allocVal cloc eenv mdefs - member mgbuf.AddEventDef(tref,edef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) +and AddBindingsForModule allocVal cloc x eenv = + match x with + | ModuleOrNamespaceBinding.Binding bind -> + allocVal cloc bind.Var eenv + | ModuleOrNamespaceBinding.Module (mspec, mdef) -> + let cloc = + if mspec.IsNamespace then cloc + else CompLocForFixedModule cloc.clocQualifiedNameOfFile cloc.clocTopImplQualifiedName mspec + + AddBindingsForModuleDef allocVal cloc eenv mdef - member mgbuf.AddFieldDef(tref,ilFieldDef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) +and AddBindingsForModuleTopVals _g allocVal _cloc eenv vs = + List.foldBack allocVal vs eenv - member mgbuf.AddOrMergePropertyDef(tref,pdef,m) = - gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef,m) - member mgbuf.Close() = - // old implementation adds new element to the head of list so result was accumulated in reversed order - let orderedReflectedDefinitions = - [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name,vspec), expr)] - |> List.sortBy (fst >> (~-)) // invert the result to get 'order-by-descending' behavior (items in list are 0..* so we don't need to worry about int.MinValue) - |> List.map snd - gtdefs.Close(), orderedReflectedDefinitions - member mgbuf.cenv = cenv - member mgbuf.GetExplicitEntryPointInfo() = explicitEntryPointInfo +// Put the partial results for a generated fragment (i.e. a part of a CCU generated by FSI) +// into the stored results for the whole CCU. +// isIncrementalFragment = true --> "typed input" +// isIncrementalFragment = false --> "#load" +let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, typedImplFiles) = + let cloc = CompLocForFragment fragName ccu + let allocVal = ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyInfo, true, NoShadowLocal) + (eenv, typedImplFiles) ||> List.fold (fun eenv (TImplFile(qname, _, mexpr, _, _, _)) -> + let cloc = { cloc with clocTopImplQualifiedName = qname.Text } + if isIncrementalFragment then + match mexpr with + | ModuleOrNamespaceExprWithSig(_,mdef,_) -> AddBindingsForModuleDef allocVal cloc eenv mdef + (* | ModuleOrNamespaceExprWithSig(mtyp,_,m) -> error(Error("don't expect inner defs to have a constraint",m)) *) + else + AddBindingsForLocalModuleType allocVal cloc eenv mexpr.Type) - /// Record the types of the things on the evaluation stack. /// Used for the few times we have to flush the IL evaluation stack and to compute maxStack. @@ -1270,11 +1416,7 @@ let FeeFeeInstr (cenv:cenv) doc = endColumn = 0)) /// Buffers for IL code generation -type CodeGenBuffer(m:range, - mgbuf: AssemblyBuilder, - methodName, - alreadyUsedArgs:int, - alreadyUsedLocals:int) = +type CodeGenBuffer(m:range, mgbuf: AssemblyBuilder, methodName, alreadyUsedArgs:int, alreadyUsedLocals:int) = let locals = new ResizeArray<((string * (Mark * Mark)) list * ILType * bool)>(10) let codebuf = new ResizeArray(200) @@ -1870,13 +2012,17 @@ let rec GenExpr (cenv:cenv) (cgbuf:CodeGenBuffer) eenv sp expr sequel = | Expr.Val(v,_,m) -> GenGetVal cenv cgbuf eenv (v,m) sequel | Expr.Op(op,tyargs,args,m) -> - begin match op,args,tyargs with + match op,args,tyargs with | TOp.ExnConstr(c),_,_ -> GenAllocExn cenv cgbuf eenv (c,args,m) sequel | TOp.UnionCase(c),_,_ -> GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel | TOp.Recd(isCtor,tycon),_,_ -> GenAllocRecd cenv cgbuf eenv isCtor (tycon,tyargs,args,m) sequel + | TOp.AnonRecd(anonInfo),_,_ -> + GenAllocAnonRecd cenv cgbuf eenv (anonInfo,tyargs,args,m) sequel + | TOp.AnonRecdGet (anonInfo,n),[e],_ -> + GenGetAnonRecdField cenv cgbuf eenv (anonInfo,e,tyargs,n,m) sequel | TOp.TupleFieldGet (tupInfo,n),[e],_ -> GenGetTupleField cenv cgbuf eenv (tupInfo,e,tyargs,n,m) sequel | TOp.ExnFieldGet(ecref,n),[e],_ -> @@ -1956,7 +2102,6 @@ let rec GenExpr (cenv:cenv) (cgbuf:CodeGenBuffer) eenv sp expr sequel = cgbuf.SetMarkToHere (Mark label) GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel | _ -> error(InternalError("Unexpected operator node expression",expr.Range)) - end | Expr.StaticOptimization(constraints,e2,e3,m) -> GenStaticOptimization cenv cgbuf eenv (constraints,e2,e3,m) sequel | Expr.Obj(_,typ,_,_,[meth],[],m) when isDelegateTy cenv.g typ -> @@ -2059,7 +2204,7 @@ and GenSequel cenv cloc cgbuf sequel = //-------------------------------------------------------------------------- and GenConstant cenv cgbuf eenv (c,m,ty) sequel = - let ilTy = GenType cenv.amap m eenv.tyenv ty + let ilTy = GenType cenv m eenv.tyenv ty // Check if we need to generate the value at all match sequelAfterDiscard sequel with | None -> @@ -2101,7 +2246,7 @@ and GenConstant cenv cgbuf eenv (c,m,ty) sequel = and GenUnitTy cenv eenv m = match cenv.ilUnitTy with | None -> - let res = GenType cenv.amap m eenv.tyenv cenv.g.unit_ty + let res = GenType cenv m eenv.tyenv cenv.g.unit_ty cenv.ilUnitTy <- Some res res | Some res -> res @@ -2123,7 +2268,7 @@ and GenAllocTuple cenv cgbuf eenv (tupInfo, args,argtys,m) sequel = let tupInfo = evalTupInfoIsStruct tupInfo let tcref, tys, args, newm = mkCompiledTuple cenv.g tupInfo (argtys,args,m) - let typ = GenNamedTyApp cenv.amap newm eenv.tyenv tcref tys + let typ = GenNamedTyApp cenv newm eenv.tyenv tcref tys let ntyvars = if (tys.Length - 1) < goodTupleFields then (tys.Length - 1) else goodTupleFields let formalTyvars = [ for n in 0 .. ntyvars do yield mkILTyvarTy (uint16 n) ] @@ -2141,14 +2286,14 @@ and GenGetTupleField cenv cgbuf eenv (tupInfo,e,tys,n,m) sequel = if ar <= 0 then failwith "getCompiledTupleItem" elif ar < maxTuple then let tcr' = mkCompiledTupleTyconRef g tupInfo ar - let typ = GenNamedTyApp cenv.amap m eenv.tyenv tcr' tys + let typ = GenNamedTyApp cenv m eenv.tyenv tcr' tys mkGetTupleItemN g m n typ tupInfo e tys.[n] else let tysA,tysB = List.splitAfter (goodTupleFields) tys let tyB = mkCompiledTupleTy g tupInfo tysB let tys' = tysA@[tyB] let tcr' = mkCompiledTupleTyconRef g tupInfo (List.length tys') - let typ' = GenNamedTyApp cenv.amap m eenv.tyenv tcr' tys' + let typ' = GenNamedTyApp cenv m eenv.tyenv tcr' tys' let n' = (min n goodTupleFields) let elast = mkGetTupleItemN g m n' typ' tupInfo e tys'.[n'] if n < goodTupleFields then @@ -2161,7 +2306,7 @@ and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = GenExprs cenv cgbuf eenv args let typ = GenExnType cenv.amap m eenv.tyenv c let flds = recdFieldsOfExnDefRef c - let argtys = flds |> List.map (fun rfld -> GenType cenv.amap m eenv.tyenv rfld.FormalType) + let argtys = flds |> List.map (fun rfld -> GenType cenv m eenv.tyenv rfld.FormalType) let mspec = mkILCtorMethSpecForTy (typ, argtys) CG.EmitInstr cgbuf (pop args.Length) (Push [typ]) @@ -2170,12 +2315,12 @@ and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = GenExprs cenv cgbuf eenv args - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv c tyargs + let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv c tyargs CG.EmitInstrs cgbuf (pop args.Length) (Push [cuspec.DeclaringType]) (EraseUnions.mkNewData cenv.g.ilg (cuspec, idx)) GenSequel cenv eenv.cloc cgbuf sequel and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = - let typ = GenNamedTyApp cenv.amap m eenv.tyenv tcref argtys + let typ = GenNamedTyApp cenv m eenv.tyenv tcref argtys // Filter out fields with default initialization let relevantFields = @@ -2198,12 +2343,30 @@ and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = let tyenvinner = TypeReprEnv.ForTyconRef tcref CG.EmitInstr cgbuf (pop args.Length) (Push [typ]) (mkNormalNewobj - (mkILCtorMethSpecForTy (typ,relevantFields |> List.map (fun f -> GenType cenv.amap m tyenvinner f.FormalType) ))) + (mkILCtorMethSpecForTy (typ,relevantFields |> List.map (fun f -> GenType cenv m tyenvinner f.FormalType) ))) GenSequel cenv eenv.cloc cgbuf sequel +and GenAllocAnonRecd cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, tyargs, args, m) sequel = + let anonCtor, _anonMethods, anonType = cgbuf.mgbuf.LookupAnonType(anonInfo) + let boxity = anonType.Boxity + GenExprs cenv cgbuf eenv args + let ilTypeArgs = GenTypeArgs cenv m eenv.tyenv tyargs + let anonTypeWithInst = mkILTy boxity (mkILTySpec(anonType.TypeSpec.TypeRef,ilTypeArgs)) + CG.EmitInstr cgbuf (pop args.Length) (Push [anonTypeWithInst]) (mkNormalNewobj (mkILMethSpec(anonCtor,boxity,ilTypeArgs,[]))) + GenSequel cenv eenv.cloc cgbuf sequel + +and GenGetAnonRecdField cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, e, tyargs, n, m) sequel = + let _anonCtor, anonMethods, anonType = cgbuf.mgbuf.LookupAnonType(anonInfo) + let boxity = anonType.Boxity + let ilTypeArgs = GenTypeArgs cenv m eenv.tyenv tyargs + let anonMethod = anonMethods.[n] + let anonFieldType = ilTypeArgs.[n] + GenExpr cenv cgbuf eenv SPSuppress e Continue + CG.EmitInstr cgbuf (pop 1) (Push [anonFieldType]) (mkNormalCall (mkILMethSpec(anonMethod,boxity,ilTypeArgs,[]))) + GenSequel cenv eenv.cloc cgbuf sequel and GenNewArraySimple cenv cgbuf eenv (elems,elemTy,m) sequel = - let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy + let ilElemTy = GenType cenv m eenv.tyenv elemTy let ilArrTy = mkILArr1DTy ilElemTy CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4,ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional,ilElemTy) ] @@ -2240,7 +2403,7 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list,elemTy,m) sequel = | _ -> (function _ -> false), (fun _ _ -> failwith "unreachable") if elems' |> Array.forall (function Expr.Const(c,_,_) -> test c | _ -> false) then - let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy + let ilElemTy = GenType cenv m eenv.tyenv elemTy GenConstArray cenv cgbuf eenv ilElemTy elems' (fun buf -> function Expr.Const(c,_,_) -> write buf c | _ -> failwith "unreachable") GenSequel cenv eenv.cloc cgbuf sequel @@ -2255,7 +2418,7 @@ and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = begin if (isInterfaceTy cenv.g tgty) then ( GenExpr cenv cgbuf eenv SPSuppress e Continue - let ilToTy = GenType cenv.amap m eenv.tyenv tgty + let ilToTy = GenType cenv 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. CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] @@ -2267,15 +2430,15 @@ and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = else GenExpr cenv cgbuf eenv SPSuppress e Continue if not (isObjTy cenv.g srcty) then - let ilFromTy = GenType cenv.amap m eenv.tyenv srcty + let ilFromTy = GenType cenv m eenv.tyenv srcty CG.EmitInstrs cgbuf (pop 1) (Push [cenv.g.ilg.typ_Object]) [ I_box ilFromTy ] if not (isObjTy cenv.g tgty) then - let ilToTy = GenType cenv.amap m eenv.tyenv tgty + let ilToTy = GenType cenv m eenv.tyenv tgty CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] GenSequel cenv eenv.cloc cgbuf sequel and GenReraise cenv cgbuf eenv (rtnty,m) sequel = - let ilReturnTy = GenType cenv.amap m eenv.tyenv rtnty + let ilReturnTy = GenType cenv m eenv.tyenv rtnty CG.EmitInstrs cgbuf (pop 0) Push0 [I_rethrow] // [See comment related to I_throw]. // Rethrow does not return. Required to push dummy value on the stack. @@ -2290,7 +2453,7 @@ and GenGetExnField cenv cgbuf eenv (e,ecref,fieldNum,m) sequel = CG.EmitInstrs cgbuf (pop 0) Push0 [ I_castclass typ] let fld = List.item fieldNum exnc.TrueInstanceFieldsAsList - let ftyp = GenType cenv.amap m eenv.tyenv fld.FormalType + let ftyp = GenType cenv m eenv.tyenv fld.FormalType let mspec = mkILNonGenericInstanceMethSpecInTy (typ,"get_" + fld.Name, [], ftyp) CG.EmitInstr cgbuf (pop 1) (Push [ftyp]) (mkNormalCall mspec) @@ -2303,7 +2466,7 @@ and GenSetExnField cenv cgbuf eenv (e,ecref,fieldNum,e2,m) sequel = let typ = GenExnType cenv.amap m eenv.tyenv ecref CG.EmitInstrs cgbuf (pop 0) Push0 [ I_castclass typ ] let fld = List.item fieldNum exnc.TrueInstanceFieldsAsList - let ftyp = GenType cenv.amap m eenv.tyenv fld.FormalType + let ftyp = GenType cenv m eenv.tyenv fld.FormalType let ilFieldName = ComputeFieldName exnc fld GenExpr cenv cgbuf eenv SPSuppress e2 Continue CG.EmitInstr cgbuf (pop 2) Push0 (mkNormalStfld(mkILFieldSpecInTy (typ,ilFieldName,ftyp))) @@ -2321,7 +2484,7 @@ and UnionCodeGen (cgbuf: CodeGenBuffer) = and GenUnionCaseProof cenv cgbuf eenv (e,ucref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs let fty = EraseUnions.GetILTypeForAlternative cuspec idx let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef EraseUnions.emitCastData cenv.g.ilg (UnionCodeGen cgbuf) (false,avoidHelpers,cuspec,idx) @@ -2332,7 +2495,7 @@ and GenGetUnionCaseField cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = assert (ucref.Tycon.IsStructOrEnumTycon || isProvenUnionCaseTy (tyOfExpr cenv.g e)) GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs let fty = actualTypOfIlxUnionField cuspec idx n let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef CG.EmitInstrs cgbuf (pop 1) (Push [fty]) (EraseUnions.mkLdData (avoidHelpers, cuspec, idx, n)) @@ -2342,7 +2505,7 @@ and GenGetUnionCaseFieldAddr cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = assert (ucref.Tycon.IsStructOrEnumTycon || isProvenUnionCaseTy (tyOfExpr cenv.g e)) GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs let fty = actualTypOfIlxUnionField cuspec idx n let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref fty]) (EraseUnions.mkLdDataAddr (avoidHelpers, cuspec, idx, n)) @@ -2350,7 +2513,7 @@ and GenGetUnionCaseFieldAddr cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = and GenGetUnionCaseTag cenv cgbuf eenv (e,tcref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec = GenUnionSpec cenv.amap m eenv.tyenv tcref tyargs + let cuspec = GenUnionSpec cenv m eenv.tyenv tcref tyargs let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib tcref EraseUnions.emitLdDataTag cenv.g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec) CG.EmitInstrs cgbuf (pop 1) (Push [cenv.g.ilg.typ_Int32]) [ ] // push/pop to match the line above @@ -2358,7 +2521,7 @@ and GenGetUnionCaseTag cenv cgbuf eenv (e,tcref,tyargs,m) sequel = and GenSetUnionCaseField cenv cgbuf eenv (e,ucref,tyargs,n,e2,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef EraseUnions.emitCastData cenv.g.ilg (UnionCodeGen cgbuf) (false,avoidHelpers,cuspec,idx) CG.EmitInstrs cgbuf (pop 1) (Push [cuspec.DeclaringType]) [ ] // push/pop to match the line above @@ -2591,7 +2754,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let actualRetTy = applyTys cenv.g vref.Type (tyargs,nowArgs) let _,curriedArgInfos,returnTy,_ = GetTopValTypeInCompiledForm cenv.g topValInfo vref.Type m - let ilTyArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs + let ilTyArgs = GenTypeArgs cenv m eenv.tyenv tyargs // For instance method calls chop off some type arguments, which are already @@ -2636,7 +2799,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let callInstr = match valUseFlags with | PossibleConstrainedCall ty -> - let ilThisTy = GenType cenv.amap m eenv.tyenv ty + let ilThisTy = GenType cenv m eenv.tyenv ty I_callconstraint ( isTailCall, ilThisTy,mspec,None) | _ -> if newobj then I_newobj (mspec, None) @@ -2655,7 +2818,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = (eenv,laterArgs) ||> List.mapFold (fun eenv laterArg -> // Only save arguments that have effects if Optimizer.ExprHasEffect cenv.g laterArg then - let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv.amap m eenv.tyenv + let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv m eenv.tyenv let loc,eenv = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("arg",m), ilTy, false) scopeMarks GenExpr cenv cgbuf eenv SPSuppress laterArg Continue EmitSetLocal cgbuf loc @@ -2665,7 +2828,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let nargs = mspec.FormalArgTypes.Length CG.EmitInstr cgbuf (pop (nargs + (if mspec.CallingConv.IsStatic || newobj then 0 else 1))) - (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv.amap m eenv.tyenv actualRetTy)])) callInstr + (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv m eenv.tyenv actualRetTy)])) callInstr // For isSuperInit, load the 'this' pointer as the pretend 'result' of the operation. It will be popped again in most cases if isSuperInit then CG.EmitInstrs cgbuf (pop 0) (Push [mspec.DeclaringType]) [ mkLdarg0 ] @@ -2718,12 +2881,12 @@ and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv typ cloinfo tyargs let ilContractClassTyargs = cloinfo.localTypeFuncContractFreeTypars |> List.map mkTyparTy - |> GenTypeArgs cenv.amap m eenv.tyenv + |> GenTypeArgs cenv m eenv.tyenv - let ilTyArgs = tyargs |> GenTypeArgs cenv.amap m eenv.tyenv + let ilTyArgs = tyargs |> GenTypeArgs cenv m eenv.tyenv let _,(ilContractMethTyargs: ILGenericParameterDefs),(ilContractCloTySpec:ILTypeSpec),ilContractFormalRetTy = - GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo + GenNamedLocalTypeFuncContractInfo cenv cgbuf.mgbuf eenv m cloinfo let ilContractTy = mkILBoxedTy ilContractCloTySpec.TypeRef ilContractClassTyargs @@ -2735,7 +2898,7 @@ and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv typ cloinfo tyargs let actualRetTy = applyTys cenv.g typ (tyargs,[]) let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilContractTy, "DirectInvoke", [], ilContractFormalRetTy, ilTyArgs) - let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy + let ilActualRetTy = GenType cenv m eenv.tyenv actualRetTy CountCallFuncInstructions() CG.EmitInstr cgbuf (pop 1) (Push [ilActualRetTy]) (mkNormalCallvirt ilDirectInvokeMethSpec) actualRetTy @@ -2765,16 +2928,16 @@ and GenIndirectCall cenv cgbuf eenv (functy,tyargs,args,m) sequel = List.fold (fun (formalFuncTyp,sofar) _ -> let dty,rty = destFunTy cenv.g formalFuncTyp - (rty,(fun acc -> sofar (Apps_app(GenType cenv.amap m feenv dty,acc))))) + (rty,(fun acc -> sofar (Apps_app(GenType cenv m feenv dty,acc))))) (formalFuncTyp,id) args - let ilxRetApps = Apps_done (GenType cenv.amap m feenv formalRetTy) + let ilxRetApps = Apps_done (GenType cenv m feenv formalRetTy) - List.foldBack (fun tyarg acc -> Apps_tyapp(GenType cenv.amap m eenv.tyenv tyarg,acc)) tyargs (appBuilder ilxRetApps) + List.foldBack (fun tyarg acc -> Apps_tyapp(GenType cenv m eenv.tyenv tyarg,acc)) tyargs (appBuilder ilxRetApps) let actualRetTy = applyTys cenv.g functy (tyargs, args) - let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy + let ilActualRetTy = GenType cenv m eenv.tyenv actualRetTy // Check if any byrefs are involved to make sure we don't tailcall let hasByrefArg = @@ -2811,7 +2974,7 @@ and GenTry cenv cgbuf eenv scopeMarks (e1,m,resty,spTry) = let endTryMark = CG.GenerateDelayMark cgbuf "endTryMark" let afterHandler = CG.GenerateDelayMark cgbuf "afterHandler" let eenvinner = {eenvinner with withinSEH = true} - let ilResultTy = GenType cenv.amap m eenvinner.tyenv resty + let ilResultTy = GenType cenv m eenvinner.tyenv resty let whereToSave,eenvinner = AllocLocal cenv cgbuf eenvinner true (ilxgenGlobalNng.FreshCompilerGeneratedName ("tryres",m),ilResultTy, false) (startTryMark,endTryMark) // Generate the body of the try. In the normal case (SequencePointAtTry) we generate a sequence point @@ -3086,8 +3249,8 @@ and GenSequential cenv cgbuf eenv spIn (e1,e2,specialSeqFlag,spSeq,_m) sequel = //-------------------------------------------------------------------------- and GenAsmCode cenv cgbuf eenv (il,tyargs,args,returnTys,m) sequel = - let ilTyArgs = GenTypesPermitVoid cenv.amap m eenv.tyenv tyargs - let ilReturnTys = GenTypesPermitVoid cenv.amap m eenv.tyenv returnTys + let ilTyArgs = GenTypesPermitVoid cenv m eenv.tyenv tyargs + let ilReturnTys = GenTypesPermitVoid cenv m eenv.tyenv returnTys let ilAfterInst = il |> List.filter (function AI_nop -> false | _ -> true) |> List.map (fun i -> @@ -3256,7 +3419,7 @@ and GenQuotation cenv cgbuf eenv (ast,conv,m,ety) sequel = let someTypeInModuleExpr = mkTypeOfExpr cenv m eenv.someTypeInThisAssembly let rawTy = mkRawQuotedExprTy cenv.g - let spliceTypeExprs = List.map (GenType cenv.amap m eenv.tyenv >> (mkTypeOfExpr cenv m)) spliceTypes + let spliceTypeExprs = List.map (GenType cenv m eenv.tyenv >> (mkTypeOfExpr cenv m)) spliceTypes let bytesExpr = Expr.Op(TOp.Bytes(astSerializedBytes),[],[],m) @@ -3298,9 +3461,9 @@ and GenILCall cenv cgbuf eenv (virt,valu,newobj,valUseFlags,isDllImport,ilMethRe let makesNoCriticalTailcalls = (newobj || not virt) // Don't tailcall for 'newobj', or 'call' to IL code let tail = CanTailcall(valu,ccallInfo,eenv.withinSEH,hasByrefArg,mustGenerateUnitAfterCall,isDllImport,false,makesNoCriticalTailcalls,sequel) - let ilEnclArgTys = GenTypeArgs cenv.amap m eenv.tyenv enclArgTys - let ilMethArgTys = GenTypeArgs cenv.amap m eenv.tyenv methArgTys - let ilReturnTys = GenTypes cenv.amap m eenv.tyenv returnTys + let ilEnclArgTys = GenTypeArgs cenv m eenv.tyenv enclArgTys + let ilMethArgTys = GenTypeArgs cenv m eenv.tyenv methArgTys + let ilReturnTys = GenTypes cenv m eenv.tyenv returnTys let ilMethSpec = mkILMethSpec (ilMethRef,boxity,ilEnclArgTys,ilMethArgTys) let useICallVirt = virt || useCallVirt cenv boxity ilMethSpec isBaseCall @@ -3313,7 +3476,7 @@ and GenILCall cenv cgbuf eenv (virt,valu,newobj,valUseFlags,isDllImport,ilMethRe else match ccallInfo with | Some objArgTy -> - let ilObjArgTy = GenType cenv.amap m eenv.tyenv objArgTy + let ilObjArgTy = GenType cenv m eenv.tyenv objArgTy [ I_callconstraint(tail,ilObjArgTy,ilMethSpec,None) ] | None -> if useICallVirt then [ I_callvirt(tail,ilMethSpec,None) ] @@ -3377,19 +3540,19 @@ and GenGetValAddr cenv cgbuf eenv (v: ValRef, m) sequel = and GenGetByref cenv cgbuf eenv (v:ValRef,m) sequel = GenGetLocalVRef cenv cgbuf eenv m v None - let ilty = GenType cenv.amap m eenv.tyenv (destByrefTy cenv.g v.Type) + let ilty = GenType cenv m eenv.tyenv (destByrefTy cenv.g v.Type) CG.EmitInstrs cgbuf (pop 1) (Push [ilty]) [ mkNormalLdobj ilty ] GenSequel cenv eenv.cloc cgbuf sequel and GenSetByref cenv cgbuf eenv (v:ValRef,e,m) sequel = GenGetLocalVRef cenv cgbuf eenv m v None GenExpr cenv cgbuf eenv SPSuppress e Continue - let ilty = GenType cenv.amap m eenv.tyenv (destByrefTy cenv.g v.Type) + let ilty = GenType cenv m eenv.tyenv (destByrefTy cenv.g v.Type) CG.EmitInstrs cgbuf (pop 2) Push0 [ mkNormalStobj ilty ] GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel and GenDefaultValue cenv cgbuf eenv (ty,m) = - let ilTy = GenType cenv.amap m eenv.tyenv ty + let ilTy = GenType cenv m eenv.tyenv ty if isRefTy cenv.g ty then CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) AI_ldnull else @@ -3411,7 +3574,7 @@ and GenDefaultValue cenv cgbuf eenv (ty,m) = | Some tcref when (tyconRefEq cenv.g cenv.g.system_Double_tcref tcref) -> CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) (iLdcDouble 0.0) | _ -> - let ilTy = GenType cenv.amap m eenv.tyenv ty + let ilTy = GenType cenv m eenv.tyenv ty LocalScope "ilzero" cgbuf (fun scopeMarks -> let locIdx, _ = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("default",m), ilTy, false) scopeMarks // "initobj" (Generated by EmitInitLocal) doesn't work on byref types @@ -3427,8 +3590,8 @@ and GenDefaultValue cenv cgbuf eenv (ty,m) = // Generate generic parameters //-------------------------------------------------------------------------- -and GenGenericParam cenv eenv (tp:Typar) = - let subTypeConstraints = tp.Constraints |> List.choose (function | TyparConstraint.CoercesTo(ty,_) -> Some(ty) | _ -> None) |> List.map (GenTypeAux cenv.amap tp.Range eenv.tyenv VoidNotOK PtrTypesNotOK) +and GenGenericParam cenv mgbuf eenv (tp:Typar) = + let subTypeConstraints = tp.Constraints |> List.choose (function | TyparConstraint.CoercesTo(ty,_) -> Some(ty) | _ -> None) |> List.map (GenTypeAuxAux cenv.amap tp.Range eenv.tyenv VoidNotOK PtrTypesNotOK) let refTypeConstraint = tp.Constraints |> List.exists (function TyparConstraint.IsReferenceType _ -> true | TyparConstraint.SupportsNull _ -> true | _ -> false) let notNullableValueTypeConstraint = tp.Constraints |> List.exists (function TyparConstraint.IsNonNullableStruct _ -> true | _ -> false) let defaultConstructorConstraint = tp.Constraints |> List.exists (function TyparConstraint.RequiresDefaultConstructor _ -> true | _ -> false) @@ -3455,7 +3618,7 @@ and GenGenericParam cenv eenv (tp:Typar) = Constraints = subTypeConstraints Variance=NonVariant - CustomAttrs = mkILCustomAttrs (GenAttrs cenv eenv tp.Attribs) + CustomAttrs = mkILCustomAttrs (GenAttrs cenv mgbuf eenv tp.Attribs) HasReferenceTypeConstraint=refTypeConstraint HasNotNullableValueTypeConstraint=notNullableValueTypeConstraint HasDefaultConstructorConstraint= defaultConstructorConstraint } @@ -3465,44 +3628,44 @@ and GenGenericParam cenv eenv (tp:Typar) = //-------------------------------------------------------------------------- /// Generates the data used for parameters at definitions of abstract method slots such as interface methods or override methods. -and GenSlotParam m cenv eenv (TSlotParam(nm,ty,inFlag,outFlag,optionalFlag,attribs)) : ILParameter = +and GenSlotParam m cenv mgbuf eenv (TSlotParam(nm,ty,inFlag,outFlag,optionalFlag,attribs)) : ILParameter = let inFlag2,outFlag2,optionalFlag2,defaultParamValue,paramMarshal2,attribs = GenParamAttribs cenv attribs { Name=nm - Type= GenParamType cenv.amap m eenv.tyenv ty + Type= GenParamType cenv m eenv.tyenv ty Default=defaultParamValue Marshal=paramMarshal2 IsIn=inFlag || inFlag2 IsOut=outFlag || outFlag2 IsOptional=optionalFlag || optionalFlag2 - CustomAttrs= mkILCustomAttrs (GenAttrs cenv eenv attribs) } + CustomAttrs= mkILCustomAttrs (GenAttrs cenv mgbuf eenv attribs) } -and GenFormalSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy)) = +and GenFormalSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy)) = let paraml = List.concat paraml - let ilTy = GenType cenv.amap m eenv.tyenv typ + let ilTy = GenType cenv m eenv.tyenv typ let eenvForSlotSig = EnvForTypars (ctps @ mtps) eenv - let ilParams = paraml |> List.map (GenSlotParam m cenv eenvForSlotSig) - let ilRetTy = GenReturnType cenv.amap m eenvForSlotSig.tyenv returnTy + let ilParams = paraml |> List.map (GenSlotParam m cenv mgbuf eenvForSlotSig) + let ilRetTy = GenReturnType cenv m eenvForSlotSig.tyenv returnTy let ilRet = mkILReturn ilRetTy ilTy, ilParams, ilRet and instSlotParam inst (TSlotParam(nm,ty,inFlag,fl2,fl3,attrs)) = TSlotParam(nm,instType inst ty,inFlag,fl2,fl3,attrs) -and GenActualSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,ilSlotRetTy)) methTyparsOfOverridingMethod (methodParams: Val list) = +and GenActualSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,ilSlotRetTy)) methTyparsOfOverridingMethod (methodParams: Val list) = let ilSlotParams = List.concat ilSlotParams let instForSlotSig = mkTyparInst (ctps@mtps) (argsOfAppTy cenv.g typ @ generalizeTypars methTyparsOfOverridingMethod) - let ilParams = ilSlotParams |> List.map (instSlotParam instForSlotSig >> GenSlotParam m cenv eenv) + let ilParams = ilSlotParams |> List.map (instSlotParam instForSlotSig >> GenSlotParam m cenv mgbuf eenv) // Use the better names if available let ilParams = if ilParams.Length = methodParams.Length then (ilParams, methodParams) ||> List.map2 (fun p pv -> { p with Name = Some (nameOfVal pv) }) else ilParams - let ilRetTy = GenReturnType cenv.amap m eenv.tyenv (Option.map (instType instForSlotSig) ilSlotRetTy) + let ilRetTy = GenReturnType cenv m eenv.tyenv (Option.map (instType instForSlotSig) ilSlotRetTy) let iLRet = mkILReturn ilRetTy ilParams,iLRet and GenNameOfOverridingMethod cenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,enclTypOfOverridenMethod,_,_,_,_))) = if useMethodImpl then qualifiedMangledNameOfTyconRef (tcrefOfAppTy cenv.g enclTypOfOverridenMethod) nameOfOverridenMethod else nameOfOverridenMethod -and GenMethodImpl cenv eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,_,_,_,_,_) as slotsig)) m = - let ilOverrideTy,ilOverrideParams,ilOverrideRet = GenFormalSlotsig m cenv eenv slotsig +and GenMethodImpl cenv mgbuf eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,_,_,_,_,_) as slotsig)) m = + let ilOverrideTy,ilOverrideParams,ilOverrideRet = GenFormalSlotsig m cenv mgbuf eenv slotsig let nameOfOverridingMethod = GenNameOfOverridingMethod cenv (useMethodImpl,slotsig) nameOfOverridingMethod, @@ -3510,8 +3673,8 @@ and GenMethodImpl cenv eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,_,_,_ let ilOverrideTyRef = ilOverrideTy.TypeRef let ilOverrideMethRef = mkILMethRef(ilOverrideTyRef, ILCallingConv.Instance, nameOfOverridenMethod, List.length (DropErasedTypars methTyparsOfOverridingMethod), (typesOfILParams ilOverrideParams), ilOverrideRet.Type) let eenvForOverrideBy = AddTyparsToEnv methTyparsOfOverridingMethod eenv - let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv eenvForOverrideBy slotsig methTyparsOfOverridingMethod [] - let ilOverrideMethGenericParams = GenGenericParams cenv eenvForOverrideBy methTyparsOfOverridingMethod + let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv mgbuf eenvForOverrideBy slotsig methTyparsOfOverridingMethod [] + let ilOverrideMethGenericParams = GenGenericParams cenv mgbuf eenvForOverrideBy methTyparsOfOverridingMethod let ilOverrideMethGenericArgs = mkILFormalGenericArgs 0 ilOverrideMethGenericParams let ilOverrideBy = mkILInstanceMethSpecInTy(ilTyForOverriding, nameOfOverridingMethod, typesOfILParams ilParamsOfOverridingMethod, ilReturnOfOverridingMethod.Type, ilOverrideMethGenericArgs) { Overrides = OverridesSpec(ilOverrideMethRef,ilOverrideTy) @@ -3542,20 +3705,20 @@ and GenObjectMethod cenv eenvinner (cgbuf:CodeGenBuffer) useMethodImpl tmethod = let eenvUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner let methodParams = List.concat methodParams let methodParamsNonSelf = match methodParams with [] -> [] | _::t -> t // drop the 'this' arg when computing better argument names for IL parameters - let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv eenvUnderTypars slotsig methTyparsOfOverridingMethod methodParamsNonSelf - let ilAttribs = GenAttrs cenv eenvinner attribs + let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv cgbuf.mgbuf eenvUnderTypars slotsig methTyparsOfOverridingMethod methodParamsNonSelf + let ilAttribs = GenAttrs cenv cgbuf.mgbuf eenvinner attribs // Args are stored starting at #1 let eenvForMeth = AddStorageForLocalVals cenv.g (methodParams |> List.mapi (fun i v -> (v,Arg i))) eenvUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,[],nameOfOverridenMethod,eenvForMeth,0,0,methodBodyExpr,(if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) - let nameOfOverridingMethod,methodImplGenerator = GenMethodImpl cenv eenvinner (useMethodImpl,slotsig) methodBodyExpr.Range + let nameOfOverridingMethod,methodImplGenerator = GenMethodImpl cenv cgbuf.mgbuf eenvinner (useMethodImpl,slotsig) methodBodyExpr.Range let mdef = mkILGenericVirtualMethod (nameOfOverridingMethod, ILMemberAccess.Public, - GenGenericParams cenv eenvUnderTypars methTyparsOfOverridingMethod, + GenGenericParams cenv cgbuf.mgbuf eenvUnderTypars methTyparsOfOverridingMethod, ilParamsOfOverridingMethod, ilReturnOfOverridingMethod, MethodBody.IL ilMethodBody) @@ -3566,7 +3729,7 @@ and GenObjectMethod cenv eenvinner (cgbuf:CodeGenBuffer) useMethodImpl tmethod = [(useMethodImpl,methodImplGenerator,methTyparsOfOverridingMethod),mdef] and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overrides,interfaceImpls,m) sequel = - let cloinfo,_,eenvinner = GetIlxClosureInfo cenv m false None eenvouter expr + let cloinfo,_,eenvinner = GetIlxClosureInfo cenv cgbuf.mgbuf m false None eenvouter expr let cloAttribs = cloinfo.cloAttribs let cloFreeVars = cloinfo.cloFreeVars @@ -3585,7 +3748,6 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overri let eenvinner = bindBaseOrThisVarOpt cenv eenvinner baseValOpt let ilCtorBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,[],cloName,eenvinner,1,0,basecall,discardAndReturnVoid) - let genMethodAndOptionalMethodImpl tmethod useMethodImpl = [ for ((useMethodImpl,methodImplGeneratorFunction,methTyparsOfOverridingMethod),mdef) in GenObjectMethod cenv eenvinner cgbuf useMethodImpl tmethod do let mimpl = (if useMethodImpl then Some(methodImplGeneratorFunction (ilTyForOverriding,methTyparsOfOverridingMethod)) else None) @@ -3601,9 +3763,9 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overri let mimpls = mimpls |> List.choose id // choose the ones that actually have method impls - let interfaceTys = interfaceImpls |> List.map (fst >> GenType cenv.amap m eenvinner.tyenv) + let interfaceTys = interfaceImpls |> List.map (fst >> GenType cenv m eenvinner.tyenv) - let attrs = GenAttrs cenv eenvinner cloAttribs + let attrs = GenAttrs cenv cgbuf.mgbuf eenvinner cloAttribs let super = (if isInterfaceTy cenv.g baseType then cenv.g.ilg.typ_Object else ilCloRetTy) let interfaceTys = interfaceTys @ (if isInterfaceTy cenv.g baseType then [ilCloRetTy] else []) let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef,ilCloGenericFormals,attrs,ilCloFreeVars,ilCloLambdas,ilCtorBody,mdefs,mimpls,super,interfaceTys) @@ -3625,16 +3787,16 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V // Get the free variables. Make a lambda to pretend that the 'nextEnumeratorValRef' is bound (it is an argument to GenerateNext) let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilCloTypeRef:ILTypeRef,ilCloFreeVars,eenvinner) = - GetIlxClosureFreeVars cenv m None eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, cenv.g.int32_ty)) + GetIlxClosureFreeVars cenv cgbuf.mgbuf m None eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, cenv.g.int32_ty)) - let ilCloSeqElemTy = GenType cenv.amap m eenvinner.tyenv seqElemTy + let ilCloSeqElemTy = GenType cenv m eenvinner.tyenv seqElemTy let cloRetTy = mkSeqTy cenv.g seqElemTy - let ilCloRetTyInner = GenType cenv.amap m eenvinner.tyenv cloRetTy - let ilCloRetTyOuter = GenType cenv.amap m eenvouter.tyenv cloRetTy - let ilCloEnumeratorTy = GenType cenv.amap m eenvinner.tyenv (mkIEnumeratorTy cenv.g seqElemTy) - let ilCloEnumerableTy = GenType cenv.amap m eenvinner.tyenv (mkSeqTy cenv.g seqElemTy) - let ilCloBaseTy = GenType cenv.amap m eenvinner.tyenv (mkAppTy cenv.g.seq_base_tcr [seqElemTy]) - let ilCloGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars + let ilCloRetTyInner = GenType cenv m eenvinner.tyenv cloRetTy + let ilCloRetTyOuter = GenType cenv m eenvouter.tyenv cloRetTy + let ilCloEnumeratorTy = GenType cenv m eenvinner.tyenv (mkIEnumeratorTy cenv.g seqElemTy) + let ilCloEnumerableTy = GenType cenv m eenvinner.tyenv (mkSeqTy cenv.g seqElemTy) + let ilCloBaseTy = GenType cenv m eenvinner.tyenv (mkAppTy cenv.g.seq_base_tcr [seqElemTy]) + let ilCloGenericParams = GenGenericParams cenv cgbuf.mgbuf eenvinner cloFreeTyvars // Create a new closure class with a single "MoveNext" method that implements the iterator. let ilCloTyInner = mkILFormalBoxedTy ilCloTypeRef ilCloGenericParams @@ -3648,12 +3810,6 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V CodeGenMethod cenv cgbuf.mgbuf ([],"GetFreshEnumerator",eenvinner,1,0, (fun cgbuf eenv -> for fv in cloFreeVars do -(* TODO: Emit CompareExchange - if (System.Threading.Interlocked.CompareExchange(&__state, 1, 0) = 0) then - (x :> IEnumerator<'T>) - else - ... -*) /// State variables always get zero-initialized if stateVarsSet.Contains fv then GenDefaultValue cenv cgbuf eenv (fv.Type,m) @@ -3689,7 +3845,7 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V let ilCtorBody = mkILSimpleStorageCtor(None, Some ilCloBaseTy.TypeSpec, ilCloTyInner, [], [], ILMemberAccess.Assembly).MethodBody - let attrs = GenAttrs cenv eenvinner cloAttribs + let attrs = GenAttrs cenv cgbuf.mgbuf eenvinner cloAttribs let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef,ilCloGenericParams,attrs,ilCloFreeVars,ilCloLambdas,ilCtorBody,[generateNextMethod;closeMethod;checkCloseMethod;lastGeneratedMethod;getFreshMethod],[],ilCloBaseTy,[]) for cloTypeDef in cloTypeDefs do cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) @@ -3735,7 +3891,7 @@ and GenClosureTypeDefs cenv (tref:ILTypeRef, ilGenParams, attrs, ilCloFreeVars, let tdefs = EraseClosures.convIlxClosureDef cenv.g.ilxPubCloEnv tref.Enclosing td cloInfo tdefs -and GenGenericParams cenv eenv tps = tps |> DropErasedTypars |> List.map (GenGenericParam cenv eenv) +and GenGenericParams cenv mgbuf eenv tps = tps |> DropErasedTypars |> List.map (GenGenericParam cenv mgbuf eenv) and GenGenericArgs m (tyenv:TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c,m])) /// Generate the closure class for a function @@ -3744,19 +3900,20 @@ and GenLambdaClosure cenv (cgbuf:CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Expr.Lambda (_,_,_,_,_,m,_) | Expr.TyLambda(_,_,_,m,_) -> - let cloinfo,body,eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenv expr + let cloinfo,body,eenvinner = GetIlxClosureInfo cenv cgbuf.mgbuf m isLocalTypeFunc selfv eenv expr let entryPointInfo = match selfv with | Some v -> [(v, BranchCallClosure (cloinfo.cloArityInfo))] | _ -> [] + let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,entryPointInfo,cloinfo.cloName,eenvinner,1,0,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 (ilContractGenericParams,ilContractMethTyargs,ilContractTySpec:ILTypeSpec,ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv cgbuf.mgbuf eenv m cloinfo let ilContractTypeRef = ilContractTySpec.TypeRef let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams let ilContractCtor = mkILNonGenericEmptyCtor None cenv.g.ilg.typ_Object @@ -3806,7 +3963,7 @@ and GenLambda cenv cgbuf eenv isLocalTypeFunc selfv expr sequel = GenSequel cenv eenv.cloc cgbuf sequel and GenTypeOfVal cenv eenv (v:Val) = - GenType cenv.amap v.Range eenv.tyenv v.Type + GenType cenv v.Range eenv.tyenv v.Type and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = match StorageForVal m fv eenvouter with @@ -3816,9 +3973,9 @@ and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = // Check for things that should never make it into the free variable set. Only do this in debug for performance reasons | (StaticField _ | StaticProperty _ | Method _ | Null) -> error(InternalError("GenFreevar: compiler error: unexpected unrealized value",fv.Range)) #endif - | _ -> GenType cenv.amap m tyenvinner fv.Type + | _ -> GenType cenv m tyenvinner fv.Type -and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = +and GetIlxClosureFreeVars cenv mgbuf m selfv eenvouter takenNames expr = // Choose a base name for the closure let basename = @@ -3882,7 +4039,7 @@ and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = let eenvinner = eenvouter |> EnvForTypars cloFreeTyvars let ilCloTyInner = - let ilCloGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars + let ilCloGenericParams = GenGenericParams cenv mgbuf eenvinner cloFreeTyvars mkILFormalBoxedTy ilCloTypeRef ilCloGenericParams // If generating a named closure, add the closure itself as a var, available via "arg0" . @@ -3913,7 +4070,7 @@ and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,cloFreeTyvars,cloFreeVars,ilCloTypeRef,Array.ofList ilCloFreeVars,eenvinner) -and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = +and GetIlxClosureInfo cenv mgbuf m isLocalTypeFunc selfv eenvouter expr = let returnTy = match expr with | Expr.Lambda (_,_,_,_,_,_,returnTy) | Expr.TyLambda(_,_,_,_,returnTy) -> returnTy @@ -3939,7 +4096,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let takenNames = vs |> List.map (fun v -> v.CompiledName) // Get the free variables and the information about the closure, add the free variables to the environment - let (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,_,cloFreeVars,ilCloTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr + let (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,_,cloFreeVars,ilCloTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv mgbuf m selfv eenvouter takenNames expr // Put the type and value arguments into the environment let rec getClosureArgs eenv ntmargs tvsl (vs:Val list) = @@ -3947,7 +4104,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = | tvs :: rest, _ -> let eenv = AddTyparsToEnv tvs eenv let l,eenv = getClosureArgs eenv ntmargs rest vs - let lambdas = (tvs, l) ||> List.foldBack (fun tv sofar -> Lambdas_forall(GenGenericParam cenv eenv tv,sofar)) + let lambdas = (tvs, l) ||> List.foldBack (fun tv sofar -> Lambdas_forall(GenGenericParam cenv mgbuf eenv tv,sofar)) lambdas,eenv | [], v :: rest -> let nm = v.CompiledName @@ -3957,7 +4114,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let lambdas = Lambdas_lambda (mkILParamNamed(nm,GenTypeOfVal cenv eenv v),l) lambdas,eenv | _ -> - let returnTy' = GenType cenv.amap m eenv.tyenv returnTy + let returnTy' = GenType cenv m eenv.tyenv returnTy Lambdas_return returnTy', eenv // start at arg number 1 as "this" pointer holds the current closure @@ -3967,7 +4124,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let narginfo = vs |> List.map (fun _ -> 1) // Generate the ILX view of the lambdas - let ilReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy + let ilReturnTy = GenType cenv m eenvinner.tyenv returnTy // The general shape is: // {LAM . expr }[free-typars] : overall-type[contract-typars] @@ -4006,9 +4163,9 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = // function values. /// Compute the contract if it is a local type function - let ilContractGenericParams = GenGenericParams cenv eenvinner cloContractFreeTyvars + let ilContractGenericParams = GenGenericParams cenv mgbuf eenvinner cloContractFreeTyvars let ilContractGenericActuals = GenGenericArgs m eenvouter.tyenv cloContractFreeTyvars - let ilInternalGenericParams = GenGenericParams cenv eenvinner cloInternalFreeTyvars + let ilInternalGenericParams = GenGenericParams cenv mgbuf eenvinner cloInternalFreeTyvars let ilInternalGenericActuals = GenGenericArgs m eenvouter.tyenv cloInternalFreeTyvars let ilCloGenericFormals = ilContractGenericParams @ ilInternalGenericParams @@ -4055,25 +4212,25 @@ and IsNamedLocalTypeFuncVal g (v:Val) expr = (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) /// Generate the information relevant to the contract portion of a named local type function -and GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo = +and GenNamedLocalTypeFuncContractInfo cenv mgbuf eenv m cloinfo = let ilCloTypeRef = cloinfo.cloSpec.TypeRef let ilContractTypeRef = ILTypeRef.Create(scope=ilCloTypeRef.Scope,enclosing=ilCloTypeRef.Enclosing,name=ilCloTypeRef.Name + "$contract") let eenvForContract = EnvForTypars cloinfo.localTypeFuncContractFreeTypars eenv - let ilContractGenericParams = GenGenericParams cenv eenv cloinfo.localTypeFuncContractFreeTypars + let ilContractGenericParams = GenGenericParams cenv mgbuf eenv cloinfo.localTypeFuncContractFreeTypars let tvs,contractRetTy = match cloinfo.cloExpr with | Expr.TyLambda(_,tvs,_,_,bty) -> tvs, bty | e -> [], tyOfExpr cenv.g e let eenvForContract = AddTyparsToEnv tvs eenvForContract - let ilContractMethTyargs = GenGenericParams cenv eenvForContract tvs - let ilContractFormalRetTy = GenType cenv.amap m eenvForContract.tyenv contractRetTy + let ilContractMethTyargs = GenGenericParams cenv mgbuf eenvForContract tvs + let ilContractFormalRetTy = GenType cenv m eenvForContract.tyenv contractRetTy ilContractGenericParams,ilContractMethTyargs,mkILTySpec(ilContractTypeRef,cloinfo.localTypeFuncILGenericArgs),ilContractFormalRetTy /// Generate a new delegate construction including a closure class if necessary. This is a lot like generating function closures /// and object expression closures, and most of the code is shared. and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delegateTy, _,_,_, _) as slotsig),_attribs,methTyparsOfOverridingMethod,tmvs,body,_),m) sequel = // Get the instantiation of the delegate type - let ilCtxtDelTy = GenType cenv.amap m eenvouter.tyenv delegateTy + let ilCtxtDelTy = GenType cenv m eenvouter.tyenv delegateTy let tmvs = List.concat tmvs // Yuck. TLBIMP.EXE generated APIs use UIntPtr for the delegate ctor. @@ -4095,8 +4252,8 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega // Work out the free type variables for the morphing thunk let takenNames = List.map nameOfVal tmvs - let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilDelegeeTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv m None eenvouter takenNames expr - let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars + let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilDelegeeTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv cgbuf.mgbuf m None eenvouter takenNames expr + let ilDelegeeGenericParams = GenGenericParams cenv cgbuf.mgbuf eenvinner cloFreeTyvars let ilDelegeeGenericActualsInner = mkILFormalGenericArgs 0 ilDelegeeGenericParams // Create a new closure class with a single "delegee" method that implements the delegate. @@ -4110,7 +4267,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega // The slot sig contains a formal instantiation. When creating delegates we're only // interested in the actual instantiation since we don't have to emit a method impl. - let ilDelegeeParams,ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs + let ilDelegeeParams,ilDelegeeRet = GenActualSlotsig m cenv cgbuf.mgbuf envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs let envForDelegeeMeth = AddStorageForLocalVals cenv.g (List.mapi (fun i v -> (v,Arg (i+numthis))) tmvs) envForDelegeeUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,[],delegeeMethName,envForDelegeeMeth,1,0,body,(if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) @@ -4124,7 +4281,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega let ilCtorBody = delegeeCtorMeth.MethodBody let ilCloLambdas = Lambdas_return ilCtxtDelTy - let ilAttribs = GenAttrs cenv eenvinner cloAttribs + let ilAttribs = GenAttrs cenv cgbuf.mgbuf eenvinner cloAttribs let cloTypeDefs = GenClosureTypeDefs cenv (ilDelegeeTypeRef,ilDelegeeGenericParams,ilAttribs,ilCloFreeVars,ilCloLambdas,ilCtorBody,[delegeeInvokeMeth],[],cenv.g.ilg.typ_Object,[]) for cloTypeDef in cloTypeDefs do cgbuf.mgbuf.AddTypeDef(ilDelegeeTypeRef, cloTypeDef, false, false, None) @@ -4190,7 +4347,7 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // The others (e.g. Continue, LeaveFilter and CmpThenBrOrContinue) can't be done at the end of each branch. We must create a join point. | _ -> - let pushed = GenType cenv.amap m eenv.tyenv ty + let pushed = GenType cenv m eenv.tyenv ty let stackAfterJoin = (pushed :: (cgbuf.GetCurrentStack())) let afterJoin = CG.GenerateDelayMark cgbuf (pos + "_join") // go to the join point @@ -4392,7 +4549,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau match defaultTargetOpt with | None -> rest.Head.CaseTree | Some tg -> tg - let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs + let cuspec = GenUnionSpec cenv m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib c.TyconRef GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [cenv.g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel @@ -4417,7 +4574,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau GenExpr cenv cgbuf eenv SPSuppress e Continue let srcTy = tyOfExpr cenv.g e if isTyparTy cenv.g srcTy then - let ilFromTy = GenType cenv.amap m eenv.tyenv srcTy + let ilFromTy = GenType cenv m eenv.tyenv srcTy CG.EmitInstr cgbuf (pop 1) (Push [cenv.g.ilg.typ_Object]) (I_box ilFromTy) BI_brfalse | DecisionTreeTest.IsInst (_srcty,tgty) -> @@ -4431,7 +4588,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase",switchm)) | DecisionTreeTest.UnionCase (hdc,tyargs) -> GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec = GenUnionSpec cenv.amap m eenv.tyenv hdc.TyconRef tyargs + let cuspec = GenUnionSpec cenv m eenv.tyenv hdc.TyconRef tyargs let dests = if cases.Length <> caseLabels.Length then failwith "internal error: DecisionTreeTest.UnionCase" (cases , caseLabels) ||> List.map2 (fun case label -> @@ -4567,7 +4724,7 @@ and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec:IlxClosureSpec,e,ilField:ILFieldS GenExpr cenv cgbuf eenv SPSuppress e2 Continue CG.EmitInstrs cgbuf (pop 2) Push0 [ mkNormalStfld (mkILFieldSpec(ilField.FieldRef,ilxCloSpec.ILType)) ] -and GenLetRecBindings cenv cgbuf eenv (allBinds: Bindings,m) = +and GenLetRecBindings cenv (cgbuf:CodeGenBuffer) eenv (allBinds: Bindings,m) = // Fix up recursion for non-toplevel recursive bindings let bindsPossiblyRequiringFixup = allBinds |> List.filter (fun b -> @@ -4584,7 +4741,7 @@ and GenLetRecBindings cenv cgbuf eenv (allBinds: Bindings,m) = | Expr.Lambda _ | Expr.TyLambda _ | Expr.Obj _ -> let isLocalTypeFunc = Option.isSome selfv && (IsNamedLocalTypeFuncVal cenv.g (Option.get selfv) e) let selfv = (match e with Expr.Obj _ -> None | _ when isLocalTypeFunc -> None | _ -> Option.map mkLocalValRef selfv) - let clo,_,eenvclo = GetIlxClosureInfo cenv m isLocalTypeFunc selfv {eenv with letBoundVars=(mkLocalValRef boundv)::eenv.letBoundVars} e + let clo,_,eenvclo = GetIlxClosureInfo cenv cgbuf.mgbuf m isLocalTypeFunc selfv {eenv with letBoundVars=(mkLocalValRef boundv)::eenv.letBoundVars} e clo.cloFreeVars |> List.iter (fun fv -> if Zset.contains fv forwardReferenceSet then match StorageForVal m fv eenvclo with @@ -4695,11 +4852,11 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec,rhsExpr,_)) sta let tps,ctorThisValOpt,baseValOpt,vsl,body',bodyty = IteratedAdjustArityOfLambda cenv.g cenv.amap topValInfo rhsExpr let methodVars = List.concat vsl CommitStartScope cgbuf startScopeMarkOpt - GenMethodForBinding cenv cgbuf eenv (vspec,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body', bodyty) + GenMethodForBinding cenv cgbuf.mgbuf eenv (vspec,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body', bodyty) | StaticProperty (ilGetterMethSpec, optShadowLocal) -> - let ilAttribs = GenAttrs cenv eenv vspec.Attribs + let ilAttribs = GenAttrs cenv cgbuf.mgbuf eenv vspec.Attribs let ilTy = ilGetterMethSpec.FormalReturnType let ilPropDef = { Name = PrettyNaming.ChopPropertyName ilGetterMethSpec.Name @@ -4753,9 +4910,9 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec,rhsExpr,_)) sta if not hasLiteralAttr then vspec.Attribs |> List.filter (fun (Attrib(_,_,_,_,_,targets,_)) -> canTarget(targets, System.AttributeTargets.Field)) - |> GenAttrs cenv eenv // backing field only gets attributes that target fields + |> GenAttrs cenv cgbuf.mgbuf eenv // backing field only gets attributes that target fields else - GenAttrs cenv eenv vspec.Attribs // literals have no property, so preserve all the attributes on the field itself + GenAttrs cenv cgbuf.mgbuf eenv vspec.Attribs // literals have no property, so preserve all the attributes on the field itself let ilFieldDef = { ilFieldDef with @@ -4774,7 +4931,7 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec,rhsExpr,_)) sta let ilAttribs = vspec.Attribs |> List.filter (fun (Attrib(_,_,_,_,_,targets,_)) -> canTarget(targets, System.AttributeTargets.Property)) - |> GenAttrs cenv eenv // property only gets attributes that target properties + |> GenAttrs cenv cgbuf.mgbuf eenv // property only gets attributes that target properties let ilPropDef = { Name=ilPropName Attributes = PropertyAttributes.None @@ -4963,7 +5120,7 @@ and GenParamAttribs cenv attribs = let Marshal,attribs = GenMarshal cenv attribs inFlag,outFlag,optionalFlag,defaultValue,Marshal,attribs -and GenParams cenv eenv (mspec:ILMethodSpec) (attribs:ArgReprInfo list) (implValsOpt: Val list option) = +and GenParams cenv mgbuf eenv (mspec:ILMethodSpec) (attribs:ArgReprInfo list) (implValsOpt: Val list option) = let ilArgTys = mspec.FormalArgTypes let argInfosAndTypes = if List.length attribs = List.length ilArgTys then List.zip ilArgTys attribs @@ -5002,16 +5159,16 @@ and GenParams cenv eenv (mspec:ILMethodSpec) (attribs:ArgReprInfo list) (implVal IsIn=inFlag IsOut=outFlag IsOptional=optionalFlag - CustomAttrs= mkILCustomAttrs (GenAttrs cenv eenv attribs) } + CustomAttrs= mkILCustomAttrs (GenAttrs cenv mgbuf eenv attribs) } param, takenNames) |> fst -and GenReturnInfo cenv eenv ilRetTy (retInfo : ArgReprInfo) : ILReturn = +and GenReturnInfo cenv mgbuf eenv ilRetTy (retInfo : ArgReprInfo) : ILReturn = let marshal,attrs = GenMarshal cenv retInfo.Attribs { Type=ilRetTy Marshal=marshal - CustomAttrs= mkILCustomAttrs (GenAttrs cenv eenv attrs) } + CustomAttrs= mkILCustomAttrs (GenAttrs cenv mgbuf eenv attrs) } and GenPropertyForMethodDef compileAsInstance tref mdef (v:Val) (memberInfo:ValMemberInfo) ilArgTys ilPropTy ilAttrs compiledName = let name = match compiledName with | Some n -> n | _ -> v.PropertyName in (* chop "get_" *) @@ -5029,7 +5186,7 @@ and GenPropertyForMethodDef compileAsInstance tref mdef (v:Val) (memberInfo:ValM and GenEventForProperty cenv eenvForMeth (mspec:ILMethodSpec) (v:Val) ilAttrsThatGoOnPrimaryItem m returnTy = let evname = v.PropertyName let delegateTy = Infos.FindDelegateTypeOfPropertyEvent cenv.g cenv.amap evname m returnTy - let ilDelegateTy = GenType cenv.amap m eenvForMeth.tyenv delegateTy + let ilDelegateTy = GenType cenv m eenvForMeth.tyenv delegateTy let ilThisTy = mspec.DeclaringType let addMethRef = mkILMethRef (ilThisTy.TypeRef,mspec.CallingConv,"add_" + evname,0,[ilDelegateTy],ILType.Void) let removeMethRef = mkILMethRef (ilThisTy.TypeRef,mspec.CallingConv,"remove_" + evname,0,[ilDelegateTy],ILType.Void) @@ -5100,7 +5257,7 @@ and ComputeMethodImplAttribs cenv (_v:Val) attrs = hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningImplFlag, hasAggressiveInliningImplFlag, attrs and GenMethodForBinding - cenv cgbuf eenv + cenv mgbuf eenv (v:Val,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body, returnTy) = @@ -5164,7 +5321,7 @@ and GenMethodForBinding // This is the main code generation for most methods false, - MethodBody.IL(CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,tailCallInfo, mspec.Name, eenvForMeth, 0, 0, bodyExpr, sequel)), + MethodBody.IL(CodeGenMethodForExpr cenv mgbuf (SPAlways,tailCallInfo, mspec.Name, eenvForMeth, 0, 0, bodyExpr, sequel)), false // Do not generate DllImport attributes into the code - they are implicit from the P/Invoke @@ -5186,7 +5343,7 @@ and GenMethodForBinding let securityAttributes,attrs = attrs |> List.partition (fun a -> IsSecurityAttribute cenv.g cenv.amap cenv.casApplied a m) - let permissionSets = CreatePermissionSets cenv.g cenv.amap eenv securityAttributes + let permissionSets = CreatePermissionSets cenv mgbuf eenv securityAttributes let secDecls = if List.isEmpty securityAttributes then emptyILSecurityDecls else mkILSecurityDecls permissionSets @@ -5194,12 +5351,12 @@ and GenMethodForBinding let ilAttrsCompilerGenerated = if v.IsCompilerGenerated then [ cenv.g.CompilerGeneratedAttribute ] else [] let ilAttrsThatGoOnPrimaryItem = - [ yield! GenAttrs cenv eenv attrs + [ yield! GenAttrs cenv mgbuf eenv attrs yield! GenCompilationArgumentCountsAttr cenv v ] - let ilTypars = GenGenericParams cenv eenvUnderMethLambdaTypars tps - let ilParams = GenParams cenv eenv mspec paramInfos (Some(nonUnitNonSelfMethodVars)) - let ilReturn = GenReturnInfo cenv eenv mspec.FormalReturnType retInfo + let ilTypars = GenGenericParams cenv mgbuf eenvUnderMethLambdaTypars tps + let ilParams = GenParams cenv mgbuf eenv mspec paramInfos (Some(nonUnitNonSelfMethodVars)) + let ilReturn = GenReturnInfo cenv mgbuf eenv mspec.FormalReturnType retInfo let methName = mspec.Name let tref = mspec.MethodRef.DeclaringTypeRef @@ -5225,7 +5382,7 @@ and GenMethodForBinding else mdef CountMethodDef() - cgbuf.mgbuf.AddMethodDef(tref,mdef) + mgbuf.AddMethodDef(tref,mdef) match v.MemberInfo with @@ -5262,7 +5419,7 @@ and GenMethodForBinding let mdef = List.fold (fun mdef f -> f mdef) mdef flagFixups // fixup can potentially change name of reflected definition that was already recorded - patch it if necessary - cgbuf.mgbuf.ReplaceNameOfReflectedDefinition(v, mdef.Name) + mgbuf.ReplaceNameOfReflectedDefinition(v, mdef.Name) mdef else mkILGenericNonVirtualMethod (v.CompiledName,access,ilMethTypars,ilParams,ilReturn,ilMethodBody) @@ -5289,20 +5446,20 @@ and GenMethodForBinding // Emit the pseudo-property as an event, but not if its a private method impl if mdef.Access <> ILMemberAccess.Private then let edef = GenEventForProperty cenv eenvForMeth mspec v ilAttrsThatGoOnPrimaryItem m returnTy - cgbuf.mgbuf.AddEventDef(tref,edef) + mgbuf.AddEventDef(tref,edef) // The method def is dropped on the floor here else // Emit the property, but not if its a private method impl if mdef.Access <> ILMemberAccess.Private then let vtyp = ReturnTypeOfPropertyVal cenv.g v - let ilPropTy = GenType cenv.amap m eenvUnderMethTypeTypars.tyenv vtyp - let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv.amap m eenvUnderMethTypeTypars.tyenv + let ilPropTy = GenType cenv m eenvUnderMethTypeTypars.tyenv vtyp + let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv m eenvUnderMethTypeTypars.tyenv let ilPropDef = GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrsThatGoOnPrimaryItem) compiledName - cgbuf.mgbuf.AddOrMergePropertyDef(tref,ilPropDef,m) + mgbuf.AddOrMergePropertyDef(tref,ilPropDef,m) // Add the special name flag for all properties - let mdef = { mdef.WithSpecialName with CustomAttrs= mkILCustomAttrs ((GenAttrs cenv eenv attrsAppliedToGetterOrSetter) @ sourceNameAttribs @ ilAttrsCompilerGenerated) } + let mdef = { mdef.WithSpecialName with CustomAttrs= mkILCustomAttrs ((GenAttrs cenv mgbuf eenv attrsAppliedToGetterOrSetter) @ sourceNameAttribs @ ilAttrsCompilerGenerated) } EmitTheMethodDef mdef | _ -> let mdef = { mdef with CustomAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated) } @@ -5316,7 +5473,7 @@ and GenMethodForBinding match v.MemberInfo with | Some memberInfo when v.IsExtensionMember -> match memberInfo.MemberFlags.MemberKind with - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv eenv attrsAppliedToGetterOrSetter + | (MemberKind.PropertySet | MemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv mgbuf eenv attrsAppliedToGetterOrSetter | _ -> ilAttrsThatGoOnPrimaryItem | _ -> ilAttrsThatGoOnPrimaryItem @@ -5374,7 +5531,7 @@ and GenSetVal cenv cgbuf eenv (vref,e,m) sequel = and GenGetValRefAndSequel cenv cgbuf eenv m (v:ValRef) fetchSequel = let ty = v.Type - GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) (StorageForValRef m v eenv) fetchSequel + GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv m eenv.tyenv ty) (StorageForValRef m v eenv) fetchSequel and GenGetVal cenv cgbuf eenv (v:ValRef,m) sequel = GenGetValRefAndSequel cenv cgbuf eenv m v None @@ -5531,7 +5688,7 @@ and AllocLocalVal cenv cgbuf v eenv repr scopeMarks = let eenvinner = {eenv with letBoundVars=(mkLocalValRef v)::eenv.letBoundVars} - let cloinfo,_,_ = GetIlxClosureInfo cenv v.Range true None eenvinner (Option.get repr) + let cloinfo,_,_ = GetIlxClosureInfo cenv cgbuf.mgbuf v.Range true None eenvinner (Option.get repr) cloinfo let idx,eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName, cenv.g.ilg.typ_Object, false) scopeMarks @@ -5621,7 +5778,8 @@ and EmitRestoreStack cgbuf (savedStack,savedStackLocals) = //GenAttr: custom attribute generation //------------------------------------------------------------------------- -and GenAttribArg amap g eenv x (ilArgTy:ILType) = +and GenAttribArg cenv mgbuf eenv x (ilArgTy:ILType) = + let g = cenv.g match x,ilArgTy with @@ -5662,31 +5820,31 @@ and GenAttribArg amap g eenv x (ilArgTy:ILType) = // Detect '[| ... |]' nodes | Expr.Op(TOp.Array,[elemTy],args,m),_ -> - let ilElemTy = GenType amap m eenv.tyenv elemTy - ILAttribElem.Array (ilElemTy, List.map (fun arg -> GenAttribArg amap g eenv arg ilElemTy) args) + let ilElemTy = GenType cenv m eenv.tyenv elemTy + ILAttribElem.Array (ilElemTy, List.map (fun arg -> GenAttribArg cenv mgbuf eenv arg ilElemTy) args) // Detect 'typeof' calls | TypeOfExpr g ty, _ -> - ILAttribElem.Type (Some (GenType amap x.Range eenv.tyenv ty)) + ILAttribElem.Type (Some (GenType cenv x.Range eenv.tyenv ty)) // Detect 'typedefof' calls | TypeDefOfExpr g ty, _ -> - ILAttribElem.TypeRef (Some (GenType amap x.Range eenv.tyenv ty).TypeRef) + ILAttribElem.TypeRef (Some (GenType cenv x.Range eenv.tyenv ty).TypeRef) // Ignore upcasts | Expr.Op(TOp.Coerce,_,[arg2],_),_ -> - GenAttribArg amap g eenv arg2 ilArgTy + GenAttribArg cenv mgbuf eenv arg2 ilArgTy // Detect explicit enum values | EnumExpr g arg1, _ -> - GenAttribArg amap g eenv arg1 ilArgTy + GenAttribArg cenv mgbuf eenv arg1 ilArgTy // Detect bitwise or of attribute flags: one case of constant folding (a more general treatment is needed) | AttribBitwiseOrExpr g (arg1,arg2),_ -> - let v1 = GenAttribArg amap g eenv arg1 ilArgTy - let v2 = GenAttribArg amap g eenv arg2 ilArgTy + let v1 = GenAttribArg cenv mgbuf eenv arg1 ilArgTy + let v2 = GenAttribArg cenv mgbuf eenv arg2 ilArgTy match v1,v2 with | ILAttribElem.SByte i1, ILAttribElem.SByte i2 -> ILAttribElem.SByte (i1 ||| i2) | ILAttribElem.Int16 i1, ILAttribElem.Int16 i2-> ILAttribElem.Int16 (i1 ||| i2) @@ -5703,24 +5861,25 @@ and GenAttribArg amap g eenv x (ilArgTy:ILType) = error (InternalError ("invalid custom attribute value (not a constant): " + showL (exprL x),x.Range)) -and GenAttr amap g eenv (Attrib(_,k,args,props,_,_,_)) = +and GenAttr cenv mgbuf eenv (Attrib(_,k,args,props,_,_,_)) = + let g = cenv.g let props = props |> List.map (fun (AttribNamedArg(s,ty,fld,AttribExpr(_,expr))) -> let m = expr.Range - let ilTy = GenType amap m eenv.tyenv ty - let cval = GenAttribArg amap g eenv expr ilTy + let ilTy = GenType cenv m eenv.tyenv ty + let cval = GenAttribArg cenv mgbuf eenv expr ilTy (s,ilTy,fld,cval)) let mspec = match k with | ILAttrib(mref) -> mkILMethSpec(mref,AsObject,[],[]) | FSAttrib(vref) -> assert(vref.IsMember) - let mspec,_,_,_,_ = GetMethodSpecForMemberVal amap g (Option.get vref.MemberInfo) vref + let mspec,_,_,_,_ = GetMethodSpecForMemberVal cenv.amap g (Option.get vref.MemberInfo) vref mspec - let ilArgs = List.map2 (fun (AttribExpr(_,vexpr)) ty -> GenAttribArg amap g eenv vexpr ty) args mspec.FormalArgTypes + let ilArgs = List.map2 (fun (AttribExpr(_,vexpr)) ty -> GenAttribArg cenv mgbuf eenv vexpr ty) args mspec.FormalArgTypes mkILCustomAttribMethRef g.ilg (mspec,ilArgs, props) -and GenAttrs cenv eenv attrs = List.map (GenAttr cenv.amap cenv.g eenv) attrs +and GenAttrs cenv mgbuf eenv attrs = List.map (GenAttr cenv mgbuf eenv) attrs and GenCompilationArgumentCountsAttr cenv (v:Val) = [ match v.ValReprInfo with @@ -5732,18 +5891,18 @@ and GenCompilationArgumentCountsAttr cenv (v:Val) = () ] // Create a permission set for a list of security attributes -and CreatePermissionSets g amap eenv (securityAttributes : Attrib list) = +and CreatePermissionSets cenv mgbuf eenv (securityAttributes : Attrib list) = [for ((Attrib(tcref,_,actions,_,_,_,_)) as attr) in securityAttributes do let action = match actions with | [AttribInt32Arg act] -> act | _ -> failwith "internal error: unrecognized security action" let secaction = (List.assoc action (Lazy.force ILSecurityActionRevMap)) let tref = tcref.CompiledRepresentationForNamedType - let ilattr = GenAttr amap g eenv attr + let ilattr = GenAttr cenv mgbuf eenv attr let _, ilNamedArgs = - match TryDecodeILAttribute g tref (mkILCustomAttrs [ilattr]) with + match TryDecodeILAttribute cenv.g tref (mkILCustomAttrs [ilattr]) with | Some(ae,na) -> ae, na | _ -> [],[] let setArgs = ilNamedArgs |> List.map (fun (n,ilt,_,ilae) -> (n,ilt,ilae)) - yield IL.mkPermissionSet g.ilg (secaction, [(tref, setArgs)])] + yield IL.mkPermissionSet cenv.g.ilg (secaction, [(tref, setArgs)])] //-------------------------------------------------------------------------- // Generate the set of modules for an assembly, and the declarations in each module @@ -5762,7 +5921,7 @@ and GenTypeDefForCompLoc (cenv, eenv, mgbuf: AssemblyBuilder, cloc, hidden, attr emptyILProperties, emptyILEvents, mkILCustomAttrs - (GenAttrs cenv eenv attribs @ + (GenAttrs cenv mgbuf eenv attribs @ (if List.contains tref.Name [TypeNameForImplicitMainMethod cloc; TypeNameForInitClass cloc; TypeNameForPrivateImplementationDetails cloc] then [ ] else [mkCompilationMappingAttr cenv.g (int SourceConstructFlags.Module)])), @@ -5849,7 +6008,14 @@ and GenModuleBinding cenv (cgbuf:CodeGenBuffer) (qname:QualifiedNameOfFile) lazy /// Generate the namespace fragments in a single file -and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplicitEntryPoint, isScript), optimizeDuringCodeGen) = +and GenTopImpl cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplicitEntryPoint, isScript, anonRecdTypes), optimizeDuringCodeGen) = + + let m = qname.Range + + // Generate all the anonymous record types mentioned anywhere in this module + for anonInfo in anonRecdTypes.Values do + mgbuf.GenerateAnonType((fun ilThisTy -> GenToStringMethod cenv eenv ilThisTy m), anonInfo) |> ignore + let eenv = {eenv with cloc = { eenv.cloc with clocTopImplQualifiedName = qname.Text } } cenv.optimizeDuringCodeGen <- optimizeDuringCodeGen @@ -5879,7 +6045,6 @@ and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplic let lazyInitInfo = new ResizeArray ILInstr list -> ILInstr list -> unit>() // codegen .cctor/main for outer module - let m = qname.Range let clocCcu = CompLocForCcu cenv.viewCcu // This method name is only used internally in ilxgen.fs to aid debugging @@ -5905,8 +6070,6 @@ and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplic // Library file (mainInfoOpt = None) : optional .cctor if topCode has initialization effect // Final file, explicit entry point (mainInfoOpt = Some _, GetExplicitEntryPointInfo() = Some) : main + optional .cctor if topCode has initialization effect // Final file, implicit entry point (mainInfoOpt = Some _, GetExplicitEntryPointInfo() = None) : main + initialize + optional .cctor calling initialize - - let doesSomething = CheckCodeDoesSomething topCode.Code // Make a FEEFEE instruction to mark hidden code regions @@ -5946,7 +6109,7 @@ and GenTopImpl cenv mgbuf mainInfoOpt eenv (TImplFile(qname, _, mexpr, hasExplic // } | None -> - let ilAttrs = mkILCustomAttrs (GenAttrs cenv eenv mainInfo) + let ilAttrs = mkILCustomAttrs (GenAttrs cenv mgbuf eenv mainInfo) if not cenv.opts.isInteractive && not doesSomething then let errorM = m.EndRange warning (Error(FSComp.SR.ilMainModuleEmpty(), errorM)) @@ -6033,7 +6196,7 @@ and GenFieldInit m c = | ConstToILFieldInit fieldInit -> fieldInit | _ -> error(Error(FSComp.SR.ilTypeCannotBeUsedForLiteralField(),m)) -and GenAbstractBinding cenv eenv tref (vref:ValRef) = +and GenAbstractBinding cenv mgbuf eenv tref (vref:ValRef) = assert(vref.IsMember) let m = vref.Range let memberInfo = Option.get vref.MemberInfo @@ -6041,14 +6204,14 @@ and GenAbstractBinding cenv eenv tref (vref:ValRef) = let hasPreserveSigImplFlag,hasSynchronizedImplFlag,hasNoInliningFlag,hasAggressiveInliningImplFlag,attribs = ComputeMethodImplAttribs cenv vref.Deref attribs if memberInfo.MemberFlags.IsDispatchSlot && not memberInfo.IsImplemented then let ilAttrs = - [ yield! GenAttrs cenv eenv attribs + [ yield! GenAttrs cenv mgbuf eenv attribs yield! GenCompilationArgumentCountsAttr cenv vref.Deref ] let mspec,ctps,mtps,argInfos,retInfo = GetMethodSpecForMemberVal cenv.amap cenv.g memberInfo vref let eenvForMeth = EnvForTypars (ctps@mtps) eenv - let ilMethTypars = GenGenericParams cenv eenvForMeth mtps - let ilReturn = GenReturnInfo cenv eenvForMeth mspec.FormalReturnType retInfo - let ilParams = GenParams cenv eenvForMeth mspec argInfos None + let ilMethTypars = GenGenericParams cenv mgbuf eenvForMeth mtps + let ilReturn = GenReturnInfo cenv mgbuf eenvForMeth mspec.FormalReturnType retInfo + let ilParams = GenParams cenv mgbuf eenvForMeth mspec argInfos None let compileAsInstance = ValRefIsCompiledAsInstanceMember cenv.g vref let mdef = mkILGenericVirtualMethod (vref.CompiledName,ILMemberAccess.Public,ilMethTypars,ilParams,ilReturn,MethodBody.Abstract) @@ -6076,8 +6239,8 @@ and GenAbstractBinding cenv eenv tref (vref:ValRef) = [],[],[edef] else let ilPropDef = - let ilPropTy = GenType cenv.amap m eenvForMeth.tyenv vtyp - let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv.amap m eenvForMeth.tyenv + let ilPropTy = GenType cenv m eenvForMeth.tyenv vtyp + let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv m eenvForMeth.tyenv GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrs) None let mdef = mdef.WithSpecialName [mdef], [ilPropDef],[] @@ -6085,12 +6248,11 @@ and GenAbstractBinding cenv eenv tref (vref:ValRef) = else [],[],[] -and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = - let genToString ilThisTy = - [ - match (eenv.valsInScope.TryFind cenv.g.sprintf_vref.Deref, - eenv.valsInScope.TryFind cenv.g.new_format_vref.Deref) with - | Some(Lazy(Method(_,_,sprintfMethSpec,_,_,_))), Some(Lazy(Method(_,_,newFormatMethSpec,_,_,_))) -> +/// Generate a ToString method that calls 'sprintf "%A"' +and GenToStringMethod cenv eenv ilThisTy m = + [ match (eenv.valsInScope.TryFind cenv.g.sprintf_vref.Deref, + eenv.valsInScope.TryFind cenv.g.new_format_vref.Deref) with + | Some(Lazy(Method(_,_,sprintfMethSpec,_,_,_))), Some(Lazy(Method(_,_,newFormatMethSpec,_,_,_))) -> // The type returned by the 'sprintf' call let funcTy = EraseClosures.mkILFuncTy cenv.g.ilxPubCloEnv ilThisTy cenv.g.ilg.typ_String // Give the instantiation of the printf format object, i.e. a Format`5 object compatible with StringFormat @@ -6123,9 +6285,9 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = None)) let mdef = { ilMethodDef with CustomAttrs = mkILCustomAttrs [ cenv.g.CompilerGeneratedAttribute ] } yield mdef - | None,_ -> () - | _,None -> () - | _ -> ()] + | _ -> () ] + +and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let tcref = mkLocalTyconRef tycon if tycon.IsTypeAbbrev then () else match tycon.TypeReprInfo with @@ -6139,10 +6301,10 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let eenvinner = ReplaceTyenv (TypeReprEnv.ForTycon tycon) eenv let thisTy = generalizedTyconRef tcref - let ilThisTy = GenType cenv.amap m eenvinner.tyenv thisTy + let ilThisTy = GenType cenv m eenvinner.tyenv thisTy let tref = ilThisTy.TypeRef - let ilGenParams = GenGenericParams cenv eenvinner tycon.TyparsNoRange - let ilIntfTys = tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m eenvinner.tyenv) + let ilGenParams = GenGenericParams cenv mgbuf eenvinner tycon.TyparsNoRange + let ilIntfTys = tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv m eenvinner.tyenv) let ilTypeName = tref.Name let hidden = IsHiddenTycon eenv.sigToImplRemapInfo tycon @@ -6177,7 +6339,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = // REVIEW: this should be based off tcaug_adhoc_list, which is in declaration order tycon.MembersOfFSharpTyconSorted |> List.sortWith (fun v1 v2 -> rangeOrder.Compare(v1.DefinitionRange,v2.DefinitionRange)) - |> List.map (GenAbstractBinding cenv eenv tref) + |> List.map (GenAbstractBinding cenv mgbuf eenv tref) |> List.unzip3 |> mapTriple (List.concat, List.concat, List.concat) @@ -6207,7 +6369,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let useMethodImpl = true let eenvUnderTypars = EnvForTypars memberParentTypars eenv - let _,methodImplGenerator = GenMethodImpl cenv eenvUnderTypars (useMethodImpl,slotsig) m + let _,methodImplGenerator = GenMethodImpl cenv mgbuf eenvUnderTypars (useMethodImpl,slotsig) m if useMethodImpl then yield methodImplGenerator (ilThisTy,memberMethodTypars) @@ -6237,11 +6399,11 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let generateDebugProxies = (not (tyconRefEq cenv.g tcref cenv.g.unit_tcr_canon) && not (HasFSharpAttribute cenv.g cenv.g.attrib_DebuggerTypeProxyAttribute tycon.Attribs)) - let permissionSets = CreatePermissionSets cenv.g cenv.amap eenv securityAttrs + let permissionSets = CreatePermissionSets cenv mgbuf eenv securityAttrs let secDecls = if List.isEmpty securityAttrs then emptyILSecurityDecls else mkILSecurityDecls permissionSets let ilDebugDisplayAttributes = - [ yield! GenAttrs cenv eenv debugDisplayAttrs + [ yield! GenAttrs cenv mgbuf eenv debugDisplayAttrs if generateDebugDisplayAttribute then yield cenv.g.mkDebuggerDisplayAttribute ("{" + debugDisplayMethodName + "(),nq}") ] @@ -6250,7 +6412,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = [ yield! defaultMemberAttrs yield! normalAttrs |> List.filter (IsMatchingFSharpAttribute cenv.g cenv.g.attrib_StructLayoutAttribute >> not) - |> GenAttrs cenv eenv + |> GenAttrs cenv mgbuf eenv yield! ilDebugDisplayAttributes ] let reprAccess = ComputeMemberAccess hiddenRepr @@ -6293,7 +6455,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = ((fspec.IsCompilerGenerated && not tycon.IsEnumTycon) || hiddenRepr || IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) - let ilType = GenType cenv.amap m eenvinner.tyenv fspec.FormalType + let ilType = GenType cenv m eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec yield (useGenuineField, ilFieldName, fspec.IsMutable, fspec.IsStatic, fspec.PropertyAttribs, ilType, isPropHidden, fspec) ] @@ -6351,7 +6513,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = LiteralValue = literalValue Offset = ilFieldOffset Marshal = ilFieldMarshal - CustomAttrs = mkILCustomAttrs (GenAttrs cenv eenv fattribs @ extraAttribs) } + CustomAttrs = mkILCustomAttrs (GenAttrs cenv mgbuf eenv fattribs @ extraAttribs) } let fdef = fdef.WithAccess(access) .WithStatic(isStatic) @@ -6372,7 +6534,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let ilCallingConv = if isStatic then ILCallingConv.Static else ILCallingConv.Instance let ilPropName = fspec.Name let ilHasSetter = isCLIMutable || isFSharpMutable - let ilFieldAttrs = GenAttrs cenv eenv propAttribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i] + let ilFieldAttrs = GenAttrs cenv mgbuf eenv propAttribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i] yield { Name = ilPropName Attributes = PropertyAttributes.None @@ -6490,7 +6652,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = yield mkILSimpleStorageCtor(None, Some cenv.g.ilg.typ_Object.TypeSpec, ilThisTy, [], [], reprAccess) if not (tycon.HasMember cenv.g "ToString" []) then - yield! genToString ilThisTy + yield! GenToStringMethod cenv eenv ilThisTy m | TFSharpObjectRepr r when tycon.IsFSharpDelegateTycon -> // Build all the methods that go with a delegate type @@ -6504,13 +6666,12 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = match paraml with | [[tsp]] when isUnitTy cenv.g tsp.Type -> [] (* suppress unit arg *) | paraml -> paraml - GenActualSlotsig m cenv eenvinner (TSlotSig(nm,typ,ctps,mtps,paraml,returnTy)) [] [] - for ilMethodDef in mkILDelegateMethods reprAccess cenv.g.ilg (cenv.g.iltyp_AsyncCallback, cenv.g.iltyp_IAsyncResult) (p,r) do - yield ilMethodDef + GenActualSlotsig m cenv mgbuf eenvinner (TSlotSig(nm,typ,ctps,mtps,paraml,returnTy)) [] [] + yield! mkILDelegateMethods reprAccess cenv.g.ilg (cenv.g.iltyp_AsyncCallback, cenv.g.iltyp_IAsyncResult) (p,r) | _ -> () | TUnionRepr _ when not (tycon.HasMember cenv.g "ToString" []) -> - yield! genToString ilThisTy + yield! GenToStringMethod cenv eenv ilThisTy m | _ -> () ] let ilMethods = methodDefs @ augmentOverrideMethodDefs @ abstractMethodDefs @@ -6529,7 +6690,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = | TRecdRepr _ | TFSharpObjectRepr _ as tyconRepr -> let super = superOfTycon cenv.g tycon - let ilBaseTy = GenType cenv.amap m eenvinner.tyenv super + let ilBaseTy = GenType cenv m eenvinner.tyenv super // Build a basic type definition let isObjectType = (match tyconRepr with TFSharpObjectRepr _ -> true | _ -> false) @@ -6637,7 +6798,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = tycon.UnionCasesArray |> Array.mapi (fun i ucspec -> { altName=ucspec.CompiledName altFields=GenUnionCaseRef cenv.amap m eenvinner.tyenv i ucspec.RecdFieldsArray - altCustomAttrs= mkILCustomAttrs (GenAttrs cenv eenv ucspec.Attribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.UnionCase) i]) }) + altCustomAttrs= mkILCustomAttrs (GenAttrs cenv mgbuf eenv ucspec.Attribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.UnionCase) i]) }) let cuinfo = { cudReprAccess=reprAccess cudNullPermitted=IsUnionTypeWithNullAsTrueValue cenv.g tycon @@ -6732,7 +6893,7 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = let ilMethodDefsForProperties,ilFieldDefs,ilPropertyDefs,fieldNamesAndTypes = [ for i,fld in markup fspecs do let ilPropName = fld.Name - let ilPropType = GenType cenv.amap m eenv.tyenv fld.FormalType + let ilPropType = GenType cenv m eenv.tyenv fld.FormalType let ilMethName = "get_" + fld.Name let ilFieldName = ComputeFieldName exnc fld let ilMethodDef = mkLdfldMethodDef (ilMethName,reprAccess,false,ilThisTy,ilFieldName,ilPropType) @@ -6746,7 +6907,7 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = Type = ilPropType Init = None Args = [] - CustomAttrs=mkILCustomAttrs (GenAttrs cenv eenv fld.PropertyAttribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i]) } + CustomAttrs=mkILCustomAttrs (GenAttrs cenv mgbuf eenv fld.PropertyAttribs @ [mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i]) } yield (ilMethodDef,ilFieldDef,ilPropDef,(ilPropName,ilFieldName,ilPropType)) ] |> List.unzip4 @@ -6811,7 +6972,7 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = let ilTypeName = tref.Name - let interfaces = exnc.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m eenv.tyenv) + let interfaces = exnc.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv m eenv.tyenv) let tdef = mkILGenericClass (ilTypeName,access,[],cenv.g.iltyp_Exception, @@ -6831,7 +6992,26 @@ let CodegenAssembly cenv eenv mgbuf fileImpls = if not (isNil fileImpls) then let a,b = List.frontAndBack fileImpls let eenv = List.fold (GenTopImpl cenv mgbuf None) eenv a - let _eenv = GenTopImpl cenv mgbuf cenv.opts.mainMethodInfo eenv b + let eenv = GenTopImpl cenv mgbuf cenv.opts.mainMethodInfo eenv b + + // Some constructs generate residue types and bindings. Generate these now. They don't result in any + // top-level initialization code. + begin + let extraBindings = mgbuf.GrabExtraBindingsToGenerate() + //printfn "#extraBindings = %d" extraBindings.Length + if extraBindings.Length > 0 then + let mexpr = TMDefs [ for b in extraBindings -> TMDefLet(b,range0) ] + let _emptyTopInstrs,_emptyTopCode = + CodeGenMethod cenv mgbuf ([],"unused",eenv,0,0, (fun cgbuf eenv -> + let lazyInitInfo = ResizeArray() + let qname = QualifiedNameOfFile(mkSynId range0 "unused") + LocalScope "module" cgbuf (fun scopeMarks -> + let eenv = AddBindingsForModuleDef (fun cloc v -> AllocTopValWithinExpr cenv cgbuf cloc scopeMarks v) eenv.cloc eenv mexpr + GenModuleDef cenv cgbuf qname lazyInitInfo eenv mexpr)),range0) + //printfn "#_emptyTopInstrs = %d" _emptyTopInstrs.Length + () + end + mgbuf.AddInitializeScriptsInOrderToEntryPoint() //------------------------------------------------------------------------- @@ -6856,15 +7036,17 @@ type IlxGenResults = { ilTypeDefs: ILTypeDef list ilAssemAttrs : ILAttribute list ilNetModuleAttrs: ILAttribute list + topAssemblyAttrs : Attribs + permissionSets : ILPermission list quotationResourceInfo: (ILTypeRef list * byte[]) list } -let GenerateCode (cenv, eenv, TypedAssemblyAfterOptimization fileImpls, assemAttribs, moduleAttribs) = +let GenerateCode (cenv, anonTypeTable, eenv, TypedAssemblyAfterOptimization fileImpls, assemAttribs, moduleAttribs) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.IlxGen // Generate the implementations into the mgbuf - let mgbuf= new AssemblyBuilder(cenv) + let mgbuf = new AssemblyBuilder(cenv, anonTypeTable) let eenv = { eenv with cloc = CompLocForFragment cenv.opts.fragName cenv.viewCcu } // Generate the PrivateImplementationDetails type @@ -6873,10 +7055,11 @@ let GenerateCode (cenv, eenv, TypedAssemblyAfterOptimization fileImpls, assemAtt // Generate the whole assembly CodegenAssembly cenv eenv mgbuf fileImpls - let ilAssemAttrs = GenAttrs cenv eenv assemAttribs + let ilAssemAttrs = GenAttrs cenv mgbuf eenv assemAttribs let tdefs,reflectedDefinitions = mgbuf.Close() + // Generate the quotations let quotationResourceInfo = match reflectedDefinitions with @@ -6911,11 +7094,18 @@ let GenerateCode (cenv, eenv, TypedAssemblyAfterOptimization fileImpls, assemAtt [ (referencedTypeDefs, defnsResourceBytes) ] - let ilNetModuleAttrs = GenAttrs cenv eenv moduleAttribs + let ilNetModuleAttrs = GenAttrs cenv mgbuf eenv moduleAttribs + + let casApplied = new Dictionary() + let securityAttrs, topAssemblyAttrs = assemAttribs |> List.partition (fun a -> TypeChecker.IsSecurityAttribute cenv.g cenv.amap casApplied a rangeStartup) + // remove any security attributes from the top-level assembly attribute list + let permissionSets = CreatePermissionSets cenv mgbuf eenv securityAttrs { ilTypeDefs= tdefs ilAssemAttrs = ilAssemAttrs ilNetModuleAttrs = ilNetModuleAttrs + topAssemblyAttrs = topAssemblyAttrs + permissionSets = permissionSets quotationResourceInfo = quotationResourceInfo } @@ -6954,7 +7144,7 @@ let LookupGeneratedValue (amap:ImportMap) (ctxt: ExecutionContext) eenv (v:Val) try // Convert the v.Type into a System.Type according to ilxgen and ilreflect. let objTyp = - let ilTy = GenType amap v.Range TypeReprEnv.Empty v.Type (* TypeReprEnv.Empty ok, not expecting typars *) + let ilTy = GenTypeAux amap v.Range TypeReprEnv.Empty v.Type (* TypeReprEnv.Empty ok, not expecting typars *) ctxt.LookupType ilTy // Lookup the compiled v value (as an object). match StorageForVal v.Range v eenv with @@ -7015,37 +7205,13 @@ let ClearGeneratedValue (ctxt: ExecutionContext) (_g:TcGlobals) eenv (v:Val) = #endif () -(* -let LookupGeneratedInfo (ctxt: ExecutionContext) (g:TcGlobals) eenv (v:Val) = - try - match StorageForVal v.Range v eenv with - | StaticField (fspec, _, hasLiteralAttr, ilContainerTy, _, _, ilGetterMethRef, _, _) -> - let staticTyp = ctxt.LookupTypeRef ilContainerTy.TypeRef - if hasLiteralAttr then - Some (staticTyp.GetField(fspec.Name) :> MemberInfo) - else - Some (staticTyp.GetMethod(ilGetterMethRef.Name,[||]) :> MemberInfo) - | Null -> None - | Local _ -> None - | Method _ -> None - | Arg _ -> None - | Env _ -> None - with - e -> -#if DEBUG - printf "ilxGen.lookupGenertedInfo for v=%s caught exception:\n%A\n\n" v.LogicalName e -#endif - None - - -*) - /// The published API from the ILX code generator type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal : ConstraintSolver.TcValF, ccu: Tast.CcuThunk) = // The incremental state held by the ILX code generator let mutable ilxGenEnv = GetEmptyIlxGenEnv tcGlobals.ilg ccu + let anonTypeTable = AnonTypeGenerationTable() let intraAssemblyInfo = { StaticFieldInfo = new Dictionary<_,_>(HashIdentity.Structural) } let casApplied = new Dictionary() @@ -7070,7 +7236,7 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal : Constra intraAssemblyInfo = intraAssemblyInfo opts = codeGenOpts optimizeDuringCodeGen = (fun x -> x) } - GenerateCode (cenv, ilxGenEnv, typedAssembly, assemAttribs, moduleAttribs) + GenerateCode (cenv, anonTypeTable, ilxGenEnv, typedAssembly, assemAttribs, moduleAttribs) /// Invert the compilation of the given value and clear the storage of the value member __.ClearGeneratedValue (ctxt, v) = ClearGeneratedValue ctxt tcGlobals ilxGenEnv v @@ -7078,5 +7244,4 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal : Constra /// Invert the compilation of the given value and return its current dynamic value and its compiled System.Type member __.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v - /// Create the CAS permission sets for an assembly fragment - member __.CreatePermissionSets attribs = CreatePermissionSets tcGlobals amap ilxGenEnv attribs + diff --git a/src/fsharp/IlxGen.fsi b/src/fsharp/IlxGen.fsi index f3db0386983..8ff68fd3ebb 100644 --- a/src/fsharp/IlxGen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -44,6 +44,10 @@ type public IlxGenResults = ilAssemAttrs : ILAttribute list /// The generated IL/ILX .NET module attributes ilNetModuleAttrs : ILAttribute list + /// The attributes for the assembly in F# form + topAssemblyAttrs : Attribs + /// The security attributes to attach to the assembly + permissionSets : ILPermission list /// The generated IL/ILX resources associated with F# quotations quotationResourceInfo : (ILTypeRef list * byte[]) list } @@ -70,9 +74,6 @@ type public IlxAssemblyGenerator = /// Generate ILX code for an assembly fragment member GenerateCode : IlxGenOptions * TypedAssemblyAfterOptimization * Attribs * Attribs -> IlxGenResults - /// Create the CAS permission sets for an assembly fragment - member CreatePermissionSets : Attrib list -> ILPermission list - /// Invert the compilation of the given value and clear the storage of the value member ClearGeneratedValue : ExecutionContext * Val -> unit diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index f8fc1354494..091f56acd69 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -1281,9 +1281,9 @@ module Pass4_RewriteAssembly = let rhs,z = TransModuleDef penv z rhs ModuleOrNamespaceBinding.Module(nm,rhs),z - let TransImplFile penv z (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)) = + let TransImplFile penv z (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes)) = let moduleExpr,z = TransModuleExpr penv z moduleExpr - (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)),z + (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes)),z //------------------------------------------------------------------------- // pass5: copyExpr diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index c933a847bbb..8d92b6edb64 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -342,7 +342,7 @@ let rec isSeqBlockElementContinuator token = // ... // ), <------- NOTE RPAREN HERE // Shortcut.CtrlO) - | END | AND | WITH | THEN | RPAREN | RBRACE | RBRACK | BAR_RBRACK | RQUOTE _ -> true + | END | AND | WITH | THEN | RPAREN | RBRACE | BAR_RBRACE | RBRACK | BAR_RBRACK | RQUOTE _ -> true // The following arise during reprocessing of the inserted tokens when we hit a DONE | ORIGHT_BLOCK_END | OBLOCKEND | ODECLEND -> true @@ -370,7 +370,7 @@ let isAtomicExprEndToken token = | UINT8 _ | UINT16 _ | UINT32 _ | UINT64 _ | UNATIVEINT _ | DECIMAL _ | BIGNUM _ | STRING _ | BYTEARRAY _ | CHAR _ | IEEE32 _ | IEEE64 _ - | RPAREN | RBRACK | RBRACE | BAR_RBRACK | END + | RPAREN | RBRACK | RBRACE | BAR_RBRACE | BAR_RBRACK | END | NULL | FALSE | TRUE | UNDERSCORE -> true | _ -> false @@ -381,6 +381,7 @@ let parenTokensBalance t1 t2 = match t1,t2 with | (LPAREN,RPAREN) | (LBRACE,RBRACE) + | (LBRACE_BAR,BAR_RBRACE) | (LBRACK,RBRACK) | (INTERFACE,END) | (CLASS,END) @@ -749,8 +750,8 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // 'if ... else [' limited by 'if' // 'if ... else [|' limited by 'if' | _,(CtxtParen ((SIG | STRUCT | BEGIN),_) :: CtxtSeqBlock _ :: (CtxtModuleBody (_,false) as limitCtxt) :: _) - | _,(CtxtParen ((BEGIN | LPAREN | LBRACK | LBRACE | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: CtxtThen _ :: (CtxtIf _ as limitCtxt) :: _) - | _,(CtxtParen ((BEGIN | LPAREN | LBRACK | LBRACE | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: CtxtElse _ :: (CtxtIf _ as limitCtxt) :: _) + | _,(CtxtParen ((BEGIN | LPAREN | LBRACK | LBRACE | LBRACE_BAR | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: CtxtThen _ :: (CtxtIf _ as limitCtxt) :: _) + | _,(CtxtParen ((BEGIN | LPAREN | LBRACK | LBRACE | LBRACE_BAR | LBRACK_BAR | LBRACK_LESS) ,_) :: CtxtSeqBlock _ :: CtxtElse _ :: (CtxtIf _ as limitCtxt) :: _) // 'f ... (' in seqblock limited by 'f' // 'f ... {' in seqblock limited by 'f' NOTE: this is covered by the more generous case above @@ -914,10 +915,15 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // fx // fx // f x>x + // f<{| C : int |}>x // fx // fx | DEFAULT | COLON | COLON_GREATER | STRUCT | NULL | DELEGATE | AND | WHEN | DOT_DOT + | NEW + | LBRACE_BAR + | SEMICOLON + | BAR_RBRACE | INFIX_AT_HAT_OP "^" | INFIX_AT_HAT_OP "^-" | INFIX_STAR_DIV_MOD_OP "/" @@ -1163,6 +1169,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | RPAREN | GREATER true | RBRACE + | BAR_RBRACE | RBRACK | BAR_RBRACK | WITH @@ -1201,7 +1208,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, while not offsideStack.IsEmpty && (not(nextOuterMostInterestingContextIsNamespaceOrModule(offsideStack))) && (match offsideStack.Head with // open-parens of sorts - | CtxtParen((LPAREN|LBRACK|LBRACE|LBRACK_BAR),_) -> true + | CtxtParen((LPAREN|LBRACK|LBRACE|LBRACE_BAR|LBRACK_BAR),_) -> true // seq blocks | CtxtSeqBlock _ -> true // vanillas @@ -1294,9 +1301,9 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, hwTokenFetch(useBlockRule) // Balancing rule. Encountering a ')' or '}' balances with a '(' or '{', even if not offside - | ((END | RPAREN | RBRACE | RBRACK | BAR_RBRACK | RQUOTE _ | GREATER true) as t2), (CtxtParen (t1,_) :: _) + | ((END | RPAREN | RBRACE | BAR_RBRACE | RBRACK | BAR_RBRACK | RQUOTE _ | GREATER true) as t2), (CtxtParen (t1,_) :: _) when parenTokensBalance t1 t2 -> - if debug then dprintf "RPAREN/RBRACE/RBRACK/BAR_RBRACK/RQUOTE/END at %a terminates CtxtParen()\n" outputPos tokenStartPos + if debug then dprintf "RPAREN/RBRACE/BAR_RBRACE/RBRACK/BAR_RBRACK/RQUOTE/END at %a terminates CtxtParen()\n" outputPos tokenStartPos popCtxt() // Queue a dummy token at this position to check if any closing rules apply delayToken(tokenTup.UseLocation(ODUMMY(token))) @@ -1813,7 +1820,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, returnToken tokenLexbufState token // '(' tokens are balanced with ')' tokens and also introduce a CtxtSeqBlock - | (BEGIN | LPAREN | SIG | LBRACE | LBRACK | LBRACK_BAR | LQUOTE _ | LESS true), _ -> + | (BEGIN | LPAREN | SIG | LBRACE | LBRACE_BAR | LBRACK | LBRACK_BAR | LQUOTE _ | LESS true), _ -> if debug then dprintf "LPAREN etc., pushes CtxtParen, pushing CtxtSeqBlock, tokenStartPos = %a\n" outputPos tokenStartPos pushCtxt tokenTup (CtxtParen (token,tokenStartPos)) pushCtxtSeqBlock(false,NoAddBlockEnd) @@ -1839,7 +1846,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // comprehension/match | (CtxtWhile _ | CtxtFor _ | CtxtWhen _ | CtxtMatchClauses _ | CtxtFun _) :: _ -> true // comprehension - | (CtxtSeqBlock _ :: CtxtParen ((LBRACK | LBRACE | LBRACK_BAR), _) :: _) -> true + | (CtxtSeqBlock _ :: CtxtParen ((LBRACK | LBRACE | LBRACE_BAR | LBRACK_BAR), _) :: _) -> true // comprehension | (CtxtSeqBlock _ :: (CtxtDo _ | CtxtWhile _ | CtxtFor _ | CtxtWhen _ | CtxtMatchClauses _ | CtxtTry _ | CtxtThen _ | CtxtElse _) :: _) -> true | _ -> false) -> diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 2715b65e27d..a62d489cb1e 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -155,6 +155,9 @@ type Item = /// Represents the resolution of a name to an F# record field. | RecdField of RecdFieldInfo + /// Represents the resolution of a name to a field of an anonymous record type. + | AnonRecdField of AnonRecdTypeInfo * TTypes * int * range + // The following are never in the items table but are valid results of binding // an identifier in different circumstances. @@ -226,6 +229,7 @@ type Item = | Item.UnionCase(uinfo,_) -> DecompileOpName uinfo.UnionCase.DisplayName | Item.ExnCase tcref -> tcref.LogicalName | Item.RecdField rfinfo -> DecompileOpName rfinfo.RecdField.Name + | Item.AnonRecdField (anonInfo, _tys, i, _m) -> anonInfo.SortedNames.[i] | Item.NewDef id -> id.idText | Item.ILField finfo -> finfo.FieldName | Item.Event einfo -> einfo.EventName @@ -1389,6 +1393,8 @@ let ItemsAreEffectivelyEqual g orig other = | (Item.ArgName (id,_, _), ValUse vref) | (ValUse vref, Item.ArgName (id, _, _)) -> ((id.idRange = vref.DefinitionRange || id.idRange = vref.SigRange) && id.idText = vref.DisplayName) + | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> Tastops.anonInfoEquiv anon1 anon2 && i1 = i2 + | ILFieldUse f1, ILFieldUse f2 -> ILFieldInfo.ILFieldInfosUseIdenticalDefinitions f1 f2 @@ -1637,6 +1643,7 @@ let CheckAllTyparsInferrable amap m item = | Item.UnionCase _ | Item.ExnCase _ | Item.RecdField _ + | Item.AnonRecdField _ | Item.NewDef _ | Item.ILField _ | Item.Event _ @@ -2000,6 +2007,15 @@ let TryFindUnionCaseOfType g typ nm = else None +/// Try to find a union case of a type, with the given name +let TryFindAnonRecdFieldOfType g typ nm = + match tryDestAnonRecdTy g typ with + | Some (anonInfo, tys) -> + match anonInfo.SortedIds |> Array.tryFindIndex (fun x -> x.idText = nm) with + | Some i -> Some (Item.AnonRecdField(anonInfo, tys, i, anonInfo.SortedIds.[i].idRange)) + | None -> None + | None -> None + let CoreDisplayName(pinfo:PropInfo) = match pinfo with | FSProp(_,_,_,Some set) -> set.CoreDisplayName @@ -2060,7 +2076,18 @@ let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo | Some ucase -> OneResult (success(resInfo,Item.UnionCase(ucase,false),rest)) | None -> - let isLookUpExpr = lookupKind = LookupKind.Expr + + let anonRecdSearch = + match lookupKind with + | LookupKind.Expr -> TryFindAnonRecdFieldOfType g typ nm + | _ -> None + + match anonRecdSearch with + | Some item -> + OneResult (success(resInfo, item, rest)) + | None -> + + let isLookUpExpr = (lookupKind = LookupKind.Expr) match TryFindIntrinsicNamedItemOfType ncenv.InfoReader (nm,ad) findFlag m typ with | Some (PropertyItem psets) when isLookUpExpr -> let pinfos = psets |> ExcludeHiddenOfPropInfos g ncenv.amap m @@ -2073,6 +2100,7 @@ let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo match DecodeFSharpEvent (pinfos@extensionPropInfos) ad g ncenv m with | Some x -> success [resInfo, x, rest] | None -> raze (UndefinedName (depth,FSComp.SR.undefinedNameFieldConstructorOrMember, id,NoSuggestions)) + | Some(MethodItem msets) when isLookUpExpr -> let minfos = msets |> ExcludeHiddenOfMethInfos g ncenv.amap m @@ -2080,13 +2108,16 @@ let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo let extensionMethInfos = ExtensionMethInfosOfTypeInScope ncenv.InfoReader nenv optFilter m typ success [resInfo,Item.MakeMethGroup (nm,minfos@extensionMethInfos),rest] + | Some (ILFieldItem (finfo:: _)) when (match lookupKind with LookupKind.Expr | LookupKind.Pattern -> true | _ -> false) -> success [resInfo,Item.ILField finfo,rest] | Some (EventItem (einfo :: _)) when isLookUpExpr -> success [resInfo,Item.Event einfo,rest] + | Some (RecdFieldItem (rfinfo)) when (match lookupKind with LookupKind.Expr | LookupKind.RecdField | LookupKind.Pattern -> true | _ -> false) -> success [resInfo,Item.RecdField(rfinfo),rest] + | _ -> let pinfos = ExtensionPropInfosOfTypeInScope ncenv.InfoReader nenv (optFilter, ad) m typ @@ -3633,10 +3664,20 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv (completionTargets: Reso let nm = h.LogicalName partitionl t (NameMultiMap.add nm h acc) + let anonFields = + if statics then [] + else + match tryDestAnonRecdTy g typ with + | Some (anonInfo, tys) -> + [ for (i,id) in Array.indexed anonInfo.SortedIds do + yield Item.AnonRecdField(anonInfo, tys, i, id.idRange) ] + | _ -> [] + // Build the results ucinfos @ List.map Item.RecdField rfinfos @ pinfoItems @ + anonFields @ List.map Item.ILField finfos @ List.map Item.Event einfos @ List.map (ItemOfTy g) nestedTypes @ @@ -3674,6 +3715,12 @@ let rec ResolvePartialLongIdentInType (ncenv: NameResolver) nenv isApplicableMet |> List.filter (IsPropInfoAccessible g amap m ad) |> List.collect (fun pinfo -> (FullTypeOfPinfo pinfo) |> ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad false rest)) @ + (if statics then [] + else + match TryFindAnonRecdFieldOfType g typ id with + | Some (Item.AnonRecdField(_anonInfo, tys, i, _)) -> ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad false rest tys.[i] + | _ -> []) @ + // e.g. .. (ncenv.InfoReader.GetEventInfosOfType(Some id,ad,m,typ) |> List.collect (PropTypOfEventInfo ncenv.InfoReader m ad >> ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad false rest)) @ @@ -4133,6 +4180,13 @@ let ResolveCompletionsInTypeForItem (ncenv: NameResolver) nenv m ad statics typ if statics then yield! typ |> GetNestedTypesOfType (ad, ncenv, None, TypeNameResolutionStaticArgsInfo.Indefinite, false, m) |> List.map (ItemOfTy g) | _ -> + if not statics then + match tryDestAnonRecdTy g typ with + | Some (anonInfo, tys) -> + for (i,id) in Array.indexed anonInfo.SortedIds do + yield Item.AnonRecdField(anonInfo, tys, i, id.idRange) + | _ -> () + let pinfosIncludingUnseen = AllPropInfosOfTypeInScope ncenv.InfoReader nenv (None,ad) PreferOverrides m typ |> List.filter (fun x -> @@ -4301,6 +4355,12 @@ let rec ResolvePartialLongIdentInTypeForItem (ncenv: NameResolver) nenv m ad sta for pinfo in pinfos do yield! (fullTypeOfPinfo pinfo) |> ResolvePartialLongIdentInTypeForItem ncenv nenv m ad false rest item + match TryFindAnonRecdFieldOfType g typ id with + | Some (Item.AnonRecdField(_anonInfo, tys, i, _)) -> + let tyinfo = tys.[i] + yield! ResolvePartialLongIdentInTypeForItem ncenv nenv m ad false rest item tyinfo + | _ -> () + // e.g. .. for einfo in ncenv.InfoReader.GetEventInfosOfType(Some id, ad, m, typ) do let tyinfo = PropTypOfEventInfo ncenv.InfoReader m ad einfo diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index 859009e3645..0b092954f50 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -64,6 +64,9 @@ type Item = /// Represents the resolution of a name to an F# record field. | RecdField of RecdFieldInfo + /// Represents the resolution of a name to a field of an anonymous record type. + | AnonRecdField of AnonRecdTypeInfo * TTypes * int * range + // The following are never in the items table but are valid results of binding // an identifier in different circumstances. @@ -169,6 +172,9 @@ type BulkAdd = Yes | No /// Lookup patterns in name resolution environment val internal TryFindPatternByName : string -> NameResolutionEnv -> Item option +/// Find a field in anonymous record type +val internal TryFindAnonRecdFieldOfType : TcGlobals -> TType -> string -> Item option + /// Add extra items to the environment for Visual Studio, e.g. static members val internal AddFakeNamedValRefToNameEnv : string -> NameResolutionEnv -> ValRef -> NameResolutionEnv diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index d3116650608..aa20fba4d05 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -33,6 +33,7 @@ module internal PrintUtilities = let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle let braceL x = leftL Literals.leftBrace ^^ x ^^ rightL Literals.rightBrace + let braceBarL x = leftL Literals.leftBraceBar ^^ x ^^ rightL Literals.rightBraceBar let comment str = wordL (tagText (sprintf "(* %s *)" str)) @@ -921,6 +922,14 @@ module private PrintTypes = | TType_ucase (UCRef(tc,_),args) -> layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec tc.IsPrefixDisplay args + // Layout a tuple type + | TType_anon (anonInfo,tys) -> + let core = sepListL (wordL (tagPunctuation ";")) (List.map2 (fun nm ty -> wordL (tagField nm) ^^ wordL (tagPunctuation ":") ^^ layoutTypeWithInfoAndPrec denv env prec ty) (Array.toList anonInfo.SortedNames) tys) + if evalAnonInfoIsStruct anonInfo then + WordL.keywordStruct --- braceBarL core + else + braceBarL core + // Layout a tuple type | TType_tuple (tupInfo,t) -> if evalTupInfoIsStruct tupInfo then diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 7ce763fede8..fe8052fc2b0 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -156,17 +156,20 @@ let braceL x = leftL (tagText "{") ^^ x ^^ rightL (tagText "}") let seqL xL xs = Seq.fold (fun z x -> z @@ xL x) emptyL xs let namemapL xL xmap = NameMap.foldBack (fun nm x z -> xL nm x @@ z) xmap emptyL -let rec exprValueInfoL g = function - | ConstValue (x, ty) -> NicePrint.layoutConst g ty x - | UnknownValue -> wordL (tagText "?") - | SizeValue (_, vinfo) -> exprValueInfoL g vinfo - | ValValue (vr, vinfo) -> bracketL ((valRefL vr ^^ wordL (tagText "alias")) --- exprValueInfoL g vinfo) - | TupleValue vinfos -> bracketL (exprValueInfosL g vinfos) - | RecdValue (_, vinfos) -> braceL (exprValueInfosL g vinfos) - | UnionCaseValue (ucr, vinfos) -> unionCaseRefL ucr ^^ bracketL (exprValueInfosL g vinfos) - | CurriedLambdaValue(_lambdaId, _arities, _bsize, expr', _ety) -> wordL (tagText "lam") ++ exprL expr' (* (sprintf "lam(size=%d)" bsize) *) - | ConstExprValue (_size, x) -> exprL x +let rec exprValueInfoL g exprVal = + match exprVal with + | ConstValue (x, ty) -> NicePrint.layoutConst g ty x + | UnknownValue -> wordL (tagText "?") + | SizeValue (_, vinfo) -> exprValueInfoL g vinfo + | ValValue (vr, vinfo) -> bracketL ((valRefL vr ^^ wordL (tagText "alias")) --- exprValueInfoL g vinfo) + | TupleValue vinfos -> bracketL (exprValueInfosL g vinfos) + | RecdValue (_, vinfos) -> braceL (exprValueInfosL g vinfos) + | UnionCaseValue (ucr, vinfos) -> unionCaseRefL ucr ^^ bracketL (exprValueInfosL g vinfos) + | CurriedLambdaValue(_lambdaId, _arities, _bsize, expr', _ety) -> wordL (tagText "lam") ++ exprL expr' (* (sprintf "lam(size=%d)" bsize) *) + | ConstExprValue (_size, x) -> exprL x + and exprValueInfosL g vinfos = commaListL (List.map (exprValueInfoL g) (Array.toList vinfos)) + and moduleInfoL g (x:LazyModuleInfo) = let x = x.Force() braceL ((wordL (tagText "Modules: ") @@ (x.ModuleOrNamespaceInfos |> namemapL (fun nm x -> wordL (tagText nm) ^^ moduleInfoL g x) ) ) @@ -1258,6 +1261,7 @@ and BindingHasEffect g bind = bind.Expr |> ExprHasEffect g and OpHasEffect g op = match op with | TOp.Tuple _ -> false + | TOp.AnonRecd _ -> false | TOp.Recd (ctor, tcref) -> match ctor with | RecdExprIsObjInit -> true @@ -1272,6 +1276,7 @@ and OpHasEffect g op = | TOp.TupleFieldGet(_) -> false | TOp.ExnFieldGet(ecref, n) -> isExnFieldMutable ecref n | TOp.RefAddrGet -> false + | TOp.AnonRecdGet _ -> true (* conservative *) | TOp.ValFieldGet rfref -> rfref.RecdField.IsMutable || (TryFindTyconRefBoolAttribute g Range.range0 g.attrib_AllowNullLiteralAttribute rfref.TyconRef = Some(true)) | TOp.ValFieldGetAddr rfref -> rfref.RecdField.IsMutable (* data is immutable, so taking address is ok *) | TOp.UnionCaseFieldGetAddr _ -> false (* data is immutable, so taking address is ok *) @@ -1857,7 +1862,12 @@ and OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos valu = | TOp.Tuple tupInfo -> let isStruct = evalTupInfoIsStruct tupInfo if isStruct then 0, valu - else 1, MakeValueInfoForTuple (Array.ofList argValues) + else 1,MakeValueInfoForTuple (Array.ofList argValues) + | TOp.AnonRecd anonInfo -> + let isStruct = evalAnonInfoIsStruct anonInfo + if isStruct then 0, valu + else 1, valu + | TOp.AnonRecdGet _ | TOp.ValFieldGet _ | TOp.TupleFieldGet _ | TOp.UnionCaseFieldGet _ @@ -3154,7 +3164,7 @@ and OptimizeModuleDefs cenv (env, bindInfosColl) defs = let defs, minfos = List.unzip defs (defs, UnionOptimizationInfos minfos), (env, bindInfosColl) -and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty, _, _) as mexpr), hasExplicitEntryPoint, isScript)) = +and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty, _, _) as mexpr), hasExplicitEntryPoint, isScript, anonRecdTypes)) = let env, mexpr', minfo = match mexpr with // FSI: FSI compiles everything as if you're typing incrementally into one module @@ -3173,7 +3183,7 @@ and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qn let hidden = ComputeHidingInfoAtAssemblyBoundary mty hidden let minfo = AbstractLazyModulInfoByHiding true hidden minfo - env, TImplFile(qname, pragmas, mexpr', hasExplicitEntryPoint, isScript), minfo, hidden + env, TImplFile(qname, pragmas, mexpr', hasExplicitEntryPoint, isScript, anonRecdTypes), minfo, hidden //------------------------------------------------------------------------- // Entry point diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index c22fb3f4098..e741dc20eca 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -163,6 +163,7 @@ let SetArgVals env (vs: Val list) = type cenv = { boundVals: Dictionary // really a hash set mutable potentialUnboundUsesOfVals: StampMap + mutable anonRecdTypes: StampMap g: TcGlobals amap: Import.ImportMap /// For reading metadata @@ -200,7 +201,7 @@ let BindVals cenv env vs = List.iter (BindVal cenv env) vs // approx walk of type //-------------------------------------------------------------------------- -let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitAppTyOpt,visitTraitSolutionOpt, visitTyparOpt) as f) g env typ = +let rec CheckTypeDeep (cenv: cenv) ((visitTyp,visitTyconRefOpt,visitAppTyOpt,visitTraitSolutionOpt, visitTyparOpt) as f) g env typ = // We iterate the _solved_ constraints as well, to pick up any record of trait constraint solutions // This means we walk _all_ the constraints _everywhere_ in a type, including // those attached to _solved_ type variables. This is used by PostTypeCheckSemanticChecks to detect uses of @@ -225,22 +226,27 @@ let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitAppTyOpt,visitTraitSoluti match typ with | TType_forall (tps,body) -> let env = BindTypars g env tps - CheckTypeDeep f g env body - tps |> List.iter (fun tp -> tp.Constraints |> List.iter (CheckTypeConstraintDeep f g env)) + CheckTypeDeep cenv f g env body + tps |> List.iter (fun tp -> tp.Constraints |> List.iter (CheckTypeConstraintDeep cenv f g env)) | TType_measure _ -> () | TType_app (tcref,tinst) -> match visitTyconRefOpt with | Some visitTyconRef -> visitTyconRef tcref | None -> () - CheckTypesDeep f g env tinst + CheckTypesDeep cenv f g env tinst match visitAppTyOpt with | Some visitAppTy -> visitAppTy (tcref, tinst) | None -> () - - | TType_ucase (_,tinst) -> CheckTypesDeep f g env tinst - | TType_tuple (_,typs) -> CheckTypesDeep f g env typs - | TType_fun (s,t) -> CheckTypeDeep f g env s; CheckTypeDeep f g env t + | TType_anon (anonInfo,typs) -> + if not (cenv.anonRecdTypes.ContainsKey anonInfo.Stamp) then + cenv.anonRecdTypes <- cenv.anonRecdTypes.Add(anonInfo.Stamp, anonInfo) + CheckTypesDeep cenv f g env typs + + | TType_ucase (_,typs) + | TType_anon (_,typs) + | TType_tuple (_,typs) -> CheckTypesDeep cenv f g env typs + | TType_fun (s,t) -> CheckTypeDeep cenv f g env s; CheckTypeDeep cenv f g env t | TType_var tp -> if not tp.IsSolved then match visitTyparOpt with @@ -248,16 +254,16 @@ let rec CheckTypeDeep ((visitTyp,visitTyconRefOpt,visitAppTyOpt,visitTraitSoluti | Some visitTypar -> visitTypar (env,tp) -and CheckTypesDeep f g env tys = List.iter (CheckTypeDeep f g env) tys +and CheckTypesDeep cenv f g env tys = List.iter (CheckTypeDeep cenv f g env) tys -and CheckTypeConstraintDeep f g env x = +and CheckTypeConstraintDeep cenv f g env x = match x with - | TyparConstraint.CoercesTo(ty,_) -> CheckTypeDeep f g env ty - | TyparConstraint.MayResolveMember(traitInfo,_) -> CheckTraitInfoDeep f g env traitInfo - | TyparConstraint.DefaultsTo(_,ty,_) -> CheckTypeDeep f g env ty - | TyparConstraint.SimpleChoice(tys,_) -> CheckTypesDeep f g env tys - | TyparConstraint.IsEnum(uty,_) -> CheckTypeDeep f g env uty - | TyparConstraint.IsDelegate(aty,bty,_) -> CheckTypeDeep f g env aty; CheckTypeDeep f g env bty + | TyparConstraint.CoercesTo(ty,_) -> CheckTypeDeep cenv f g env ty + | TyparConstraint.MayResolveMember(traitInfo,_) -> CheckTraitInfoDeep cenv f g env traitInfo + | TyparConstraint.DefaultsTo(_,ty,_) -> CheckTypeDeep cenv f g env ty + | TyparConstraint.SimpleChoice(tys,_) -> CheckTypesDeep cenv f g env tys + | TyparConstraint.IsEnum(uty,_) -> CheckTypeDeep cenv f g env uty + | TyparConstraint.IsDelegate(aty,bty,_) -> CheckTypeDeep cenv f g env aty; CheckTypeDeep cenv f g env bty | TyparConstraint.SupportsComparison _ | TyparConstraint.SupportsEquality _ | TyparConstraint.SupportsNull _ @@ -265,10 +271,10 @@ and CheckTypeConstraintDeep f g env x = | TyparConstraint.IsUnmanaged _ | TyparConstraint.IsReferenceType _ | TyparConstraint.RequiresDefaultConstructor _ -> () -and CheckTraitInfoDeep ((_,_,_,visitTraitSolutionOpt,_) as f) g env (TTrait(typs,_,_,argtys,rty,soln)) = - CheckTypesDeep f g env typs - CheckTypesDeep f g env argtys - Option.iter (CheckTypeDeep f g env) rty +and CheckTraitInfoDeep cenv ((_,_,_,visitTraitSolutionOpt,_) as f) g env (TTrait(typs,_,_,argtys,rty,soln)) = + CheckTypesDeep cenv f g env typs + CheckTypesDeep cenv f g env argtys + Option.iter (CheckTypeDeep cenv f g env) rty match visitTraitSolutionOpt, !soln with | Some visitTraitSolution, Some sln -> visitTraitSolution sln | _ -> () @@ -278,7 +284,7 @@ and CheckTraitInfoDeep ((_,_,_,visitTraitSolutionOpt,_) as f) g env (TTrait(typs //-------------------------------------------------------------------------- let CheckForByrefLikeType cenv env typ check = - CheckTypeDeep (ignore, Some (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), None, None, None) cenv.g env typ + CheckTypeDeep cenv (ignore, Some (fun tcref -> if isByrefLikeTyconRef cenv.g tcref then check()), None, None, None) cenv.g env typ //-------------------------------------------------------------------------- @@ -353,7 +359,7 @@ let CheckTypeForAccess (cenv:cenv) env objName valAcc m ty = if isLessAccessible tyconAcc valAcc then errorR(Error(FSComp.SR.chkTypeLessAccessibleThanType(tcref.DisplayName, (objName())), m)) - CheckTypeDeep (visitType, None, None, None, None) cenv.g env ty + CheckTypeDeep cenv (visitType, None, None, None, None) cenv.g env ty let WarnOnWrongTypeForAccess (cenv:cenv) env objName valAcc m ty = if cenv.reportErrors then @@ -371,7 +377,7 @@ let WarnOnWrongTypeForAccess (cenv:cenv) env objName valAcc m ty = let warningText = errorText + System.Environment.NewLine + FSComp.SR.tcTypeAbbreviationsCheckedAtCompileTime() warning(AttributeChecking.ObsoleteWarning(warningText, m)) - CheckTypeDeep (visitType, None, None, None, None) cenv.g env ty + CheckTypeDeep cenv (visitType, None, None, None, None) cenv.g env ty //-------------------------------------------------------------------------- // check type instantiations @@ -402,7 +408,7 @@ let CheckType permitByrefs (cenv:cenv) env m ty = | Some tcref -> if isByrefLikeTyconRef cenv.g tcref then errorR(Error(FSComp.SR.chkNoByrefsOfByrefs(NicePrint.minimalStringOfType cenv.denv ty), m)) - CheckTypesDeep (visitType, None, None, None, None) cenv.g env tinst + CheckTypesDeep cenv (visitType, None, None, None, None) cenv.g env tinst let visitTraitSolution info = match info with @@ -413,7 +419,7 @@ let CheckType permitByrefs (cenv:cenv) env m ty = cenv.potentialUnboundUsesOfVals <- cenv.potentialUnboundUsesOfVals.Add(vref.Stamp,m) | _ -> () - CheckTypeDeep (ignore, Some visitTyconRef, Some visitAppTy, Some visitTraitSolution, Some visitTypar) cenv.g env ty + CheckTypeDeep cenv (ignore, Some visitTyconRef, Some visitAppTy, Some visitTraitSolution, Some visitTypar) cenv.g env ty /// Check types occurring in TAST (like CheckType) and additionally reject any byrefs. @@ -801,6 +807,7 @@ and CheckExprOp cenv env (op,tyargs,args,m) context expr = // Address-of operator generates byref, and context permits this. CheckExprsNoByrefs cenv env args + | TOp.AnonRecdGet _,_,[arg1] | TOp.TupleFieldGet _,_,[arg1] -> CheckTypeInstNoByrefs cenv env m tyargs CheckExprsPermitByrefs cenv env [arg1] (* Compiled pattern matches on immutable value structs come through here. *) @@ -1703,6 +1710,7 @@ let CheckTopImpl (g,amap,reportErrors,infoReader,internalsVisibleToPaths,viewCcu reportErrors=reportErrors boundVals= new Dictionary<_,_>(100, HashIdentity.Structural) potentialUnboundUsesOfVals=Map.empty + anonRecdTypes = StampMap.Empty usesQuotations=false infoReader=infoReader internalsVisibleToPaths=internalsVisibleToPaths @@ -1737,4 +1745,4 @@ let CheckTopImpl (g,amap,reportErrors,infoReader,internalsVisibleToPaths,viewCcu CheckAttribs cenv env extraAttribs if cenv.usesQuotations && QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat(cenv.g) = QuotationTranslator.QuotationSerializationFormat.FSharp_20_Plus then viewCcu.UsesFSharp20PlusQuotations <- true - cenv.entryPointGiven + cenv.entryPointGiven, cenv.anonRecdTypes diff --git a/src/fsharp/PostInferenceChecks.fsi b/src/fsharp/PostInferenceChecks.fsi index d918df258ac..bbb24c44abf 100644 --- a/src/fsharp/PostInferenceChecks.fsi +++ b/src/fsharp/PostInferenceChecks.fsi @@ -11,4 +11,6 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.TcGlobals val testFlagMemberBody : bool ref -val CheckTopImpl : TcGlobals * ImportMap * bool * InfoReader * CompilationPath list * CcuThunk * DisplayEnv * ModuleOrNamespaceExprWithSig * Attribs * (bool * bool) -> bool + +/// Perform the checks on the TAST for a file after type inference is complete. +val CheckTopImpl : TcGlobals * ImportMap * bool * InfoReader * CompilationPath list * CcuThunk * DisplayEnv * ModuleOrNamespaceExprWithSig * Attribs * (bool * bool) -> bool * StampMap diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index 7216a700158..da1b9813adf 100644 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -425,6 +425,20 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let argsR = ConvExprs cenv env args QP.mkRecdMk(rgtypR,tyargsR,argsR) + | TOp.AnonRecd anonInfo, _, _ -> + let tref = anonInfo.ILTypeRef + let rgtypR = ConvILTypeRef cenv tref + let tyargsR = ConvTypes cenv env m tyargs + let argsR = ConvExprs cenv env args + QP.mkRecdMk(rgtypR,tyargsR,argsR) + + | TOp.AnonRecdGet (anonInfo, n), _, _ -> + let tref = anonInfo.ILTypeRef + let rgtypR = ConvILTypeRef cenv tref + let tyargsR = ConvTypes cenv env m tyargs + let argsR = ConvExprs cenv env args + QP.mkRecdGet((rgtypR,anonInfo.SortedNames.[n]),tyargsR,argsR) + | TOp.UnionCaseFieldGet (ucref,n),tyargs,[e] -> ConvUnionFieldGet cenv env m ucref n tyargs e @@ -808,6 +822,10 @@ and ConvType cenv env m typ = | TType_fun(a,b) -> QP.mkFunTy(ConvType cenv env m a,ConvType cenv env m b) | TType_tuple(tupInfo,l) -> ConvType cenv env m (mkCompiledTupleTy cenv.g (evalTupInfoIsStruct tupInfo) l) + | TType_anon(anonInfo,tinst) -> + let tref = anonInfo.ILTypeRef + let tinstR = ConvTypes cenv env m tinst + QP.mkILNamedTy(ConvILTypeRefUnadjusted cenv m tref, tinstR) | TType_var(tp) -> QP.mkVarTy(ConvTyparRef cenv env m tp) | TType_forall(_spec,_ty) -> wfail(Error(FSComp.SR.crefNoInnerGenericsInQuotations(),m)) | _ -> wfail(Error (FSComp.SR.crefQuotationsCantContainThisType(),m)) diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index a5f59868f54..c69527bdbb6 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -177,6 +177,12 @@ let rec remapTypeAux (tyenv : Remap) (ty:TType) = | Some tcr' -> TType_ucase (UCRef(tcr', n), remapTypesAux tyenv tinst) | None -> TType_ucase (UCRef(tcr, n), remapTypesAux tyenv tinst) + | TType_anon (anonInfo, l) as ty -> + let tupInfo' = remapTupInfoAux tyenv anonInfo.TupInfo + let l' = remapTypesAux tyenv l + if anonInfo.TupInfo === tupInfo' && l === l' then ty else + TType_anon (AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo', anonInfo.SortedIds), l') + | TType_tuple (tupInfo, l) as ty -> let tupInfo' = remapTupInfoAux tyenv tupInfo let l' = remapTypesAux tyenv l @@ -258,6 +264,8 @@ and remapTraitAux tyenv (TTrait(typs, nm, mf, argtys, rty, slnCell)) = FSMethSln(remapTypeAux tyenv typ, remapValRef tyenv vref, remapTypesAux tyenv minst) | FSRecdFieldSln(tinst, rfref, isSet) -> FSRecdFieldSln(remapTypesAux tyenv tinst, remapRecdFieldRef tyenv.tyconRefRemap rfref, isSet) + | FSAnonRecdFieldSln(anonInfo, tinst, n) -> + FSAnonRecdFieldSln(anonInfo, remapTypesAux tyenv tinst, n) | BuiltInSln -> BuiltInSln | ClosedExprSln e -> @@ -682,6 +690,9 @@ let evalTupInfoIsStruct aexpr = match aexpr with | TupInfo.Const b -> b +let evalAnonInfoIsStruct (anonInfo: AnonRecdTypeInfo) = + evalTupInfoIsStruct anonInfo.TupInfo + /// This erases outermost occurrences of inference equations, type abbreviations, non-generated provided types /// and measureable types (float<_>). /// It also optionally erases all "compilation representations", i.e. function and @@ -732,6 +743,8 @@ let isForallTy g ty = ty |> stripTyEqns g |> (function TType_forall _ -> tru let isAnyTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple _ -> true | _ -> false) let isRefTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo, _) -> not (evalTupInfoIsStruct tupInfo) | _ -> false) let isStructTupleTy g ty = ty |> stripTyEqns g |> (function TType_tuple (tupInfo, _) -> evalTupInfoIsStruct tupInfo | _ -> false) +let isAnonRecdTy g ty = ty |> stripTyEqns g |> (function TType_anon _ -> true | _ -> false) +let isStructAnonRecdTy g ty = ty |> stripTyEqns g |> (function TType_anon (anonInfo, _) -> evalAnonInfoIsStruct anonInfo | _ -> false) let isUnionTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsUnionTycon | _ -> false) let isReprHiddenTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsHiddenReprTycon | _ -> false) let isFSharpObjModelTy g ty = ty |> stripTyEqns g |> (function TType_app(tcr, _) -> tcr.IsFSharpObjectModelTycon | _ -> false) @@ -754,6 +767,7 @@ let argsOfAppTy g ty = ty |> stripTyEqns g |> (function TType_app(_, tinst) -> let tryDestTyparTy g ty = ty |> stripTyEqns g |> (function TType_var v -> Some v | _ -> None) let tryDestFunTy g ty = ty |> stripTyEqns g |> (function TType_fun (tyv, tau) -> Some(tyv, tau) | _ -> None) let tryDestAppTy g ty = ty |> stripTyEqns g |> (function TType_app(tcref, _) -> Some tcref | _ -> None) +let tryDestAnonRecdTy g ty = ty |> stripTyEqns g |> (function TType_anon (anonInfo, tys) -> Some (anonInfo, tys) | _ -> None) let tryAnyParTy g ty = ty |> stripTyEqns g |> (function TType_var v -> Some v | TType_measure unt when isUnitParMeasure g unt -> Some(destUnitParMeasure g unt) | _ -> None) let (|AppTy|_|) g ty = ty |> stripTyEqns g |> (function TType_app(tcref, tinst) -> Some (tcref, tinst) | _ -> None) let (|RefTupleTy|_|) g ty = ty |> stripTyEqns g |> (function TType_tuple(tupInfo, tys) when not (evalTupInfoIsStruct tupInfo) -> Some tys | _ -> None) @@ -907,6 +921,9 @@ and typeAEquivAux erasureFlag g aenv ty1 ty2 = typesAEquivAux erasureFlag g aenv b1 b2 | TType_tuple (s1, l1), TType_tuple (s2, l2) -> structnessAEquiv s1 s2 && typesAEquivAux erasureFlag g aenv l1 l2 + | TType_anon (anonInfo1, l1), TType_anon (anonInfo2, l2) -> + anonInfoEquiv anonInfo1 anonInfo2 && + typesAEquivAux erasureFlag g aenv l1 l2 | TType_fun (dtys1, rty1), TType_fun (dtys2, rty2) -> typeAEquivAux erasureFlag g aenv dtys1 dtys2 && typeAEquivAux erasureFlag g aenv rty1 rty2 | TType_measure m1, TType_measure m2 -> @@ -915,6 +932,12 @@ and typeAEquivAux erasureFlag g aenv ty1 ty2 = | _ -> true | _ -> false + +and anonInfoEquiv (anonInfo1: AnonRecdTypeInfo) (anonInfo2: AnonRecdTypeInfo) = + ccuEq anonInfo1.Assembly anonInfo2.Assembly && + structnessAEquiv anonInfo1.TupInfo anonInfo2.TupInfo && + anonInfo1.SortedNames = anonInfo2.SortedNames + and structnessAEquiv un1 un2 = match un1, un2 with | TupInfo.Const b1, TupInfo.Const b2 -> (b1 = b2) @@ -961,7 +984,7 @@ let rec getErasedTypes g ty = getErasedTypes g rty | TType_var tp -> if tp.IsErased then [ty] else [] - | TType_app (_, b) | TType_ucase(_, b) | TType_tuple (_, b) -> + | TType_app (_, b) | TType_ucase(_, b) | TType_anon (_, b) | TType_tuple (_, b) -> List.foldBack (fun ty tys -> getErasedTypes g ty @ tys) b [] | TType_fun (dty, rty) -> getErasedTypes g dty @ getErasedTypes g rty @@ -1220,6 +1243,7 @@ let mkAsmExpr(code, tinst, args, rettys, m) = Expr.Op (TOp.ILAsm let mkUnionCaseExpr(uc, tinst, args, m) = Expr.Op (TOp.UnionCase uc, tinst, args, m) let mkExnExpr(uc, args, m) = Expr.Op (TOp.ExnConstr uc, [], args, m) let mkTupleFieldGetViaExprAddr(tupInfo, e, tinst, i, m) = Expr.Op (TOp.TupleFieldGet(tupInfo, i), tinst, [e], m) +let mkAnonRecdFieldGetViaExprAddr(anonInfo, e, tinst, i, m) = Expr.Op (TOp.AnonRecdGet(anonInfo, i), tinst, [e], m) let mkRecdFieldGetViaExprAddr(e, fref, tinst, m) = Expr.Op (TOp.ValFieldGet(fref), tinst, [e], m) let mkRecdFieldGetAddrViaExprAddr(e, fref, tinst, m) = Expr.Op (TOp.ValFieldGetAddr(fref), tinst, [e], m) @@ -1660,7 +1684,7 @@ let isStructTy g ty = | Some tcref -> let tycon = tcref.Deref tycon.IsStructRecordOrUnionTycon || tycon.IsStructOrEnumTycon - | _ -> false + | _ -> isStructAnonRecdTy g ty let isRefTy g ty = not (isStructOrEnumTyconTy g ty) && @@ -1938,6 +1962,8 @@ and accFreeInTraitSln opts sln acc = accFreeInType opts typ (accFreeValRefInTraitSln opts vref (accFreeInTypes opts minst acc)) + | FSAnonRecdFieldSln(_anonInfo, tinst, _n) -> + accFreeInTypes opts tinst acc | FSRecdFieldSln(tinst, _rfref, _isSet) -> accFreeInTypes opts tinst acc | BuiltInSln -> acc @@ -1964,6 +1990,7 @@ and accFreeTyparRef opts (tp:Typar) acc = and accFreeInType opts ty acc = match stripTyparEqns ty with | TType_tuple (tupInfo, l) -> accFreeInTypes opts l (accFreeInTupInfo opts tupInfo acc) + | TType_anon (anonInfo, l) -> accFreeInTypes opts l (accFreeInTupInfo opts anonInfo.TupInfo acc) | TType_app (tc, tinst) -> let acc = accFreeTycon opts tc acc match tinst with @@ -2047,6 +2074,9 @@ and accFreeTyparRefLeftToRight g cxFlag thruFlag acc (tp:Typar) = and accFreeInTypeLeftToRight g cxFlag thruFlag acc ty = if verbose then dprintf "--> accFreeInTypeLeftToRight \n" match (if thruFlag then stripTyEqns g ty else stripTyparEqns ty) with + | TType_anon (anonInfo, l) -> + let acc = accFreeInTupInfoLeftToRight g cxFlag thruFlag acc anonInfo.TupInfo + accFreeInTypesLeftToRight g cxFlag thruFlag acc l | TType_tuple (tupInfo, l) -> let acc = accFreeInTupInfoLeftToRight g cxFlag thruFlag acc tupInfo accFreeInTypesLeftToRight g cxFlag thruFlag acc l @@ -2439,8 +2469,9 @@ module SimplifyTypes = let z = f z typ match typ with | TType_forall (_, body) -> foldTypeButNotConstraints f z body - | TType_app (_, tinst) -> List.fold (foldTypeButNotConstraints f) z tinst - | TType_ucase (_, tinst) -> List.fold (foldTypeButNotConstraints f) z tinst + | TType_app (_, typs) + | TType_ucase (_, typs) + | TType_anon (_, typs) | TType_tuple (_, typs) -> List.fold (foldTypeButNotConstraints f) z typs | TType_fun (s, t) -> foldTypeButNotConstraints f (foldTypeButNotConstraints f z s) t | TType_var _ -> z @@ -3032,6 +3063,7 @@ module DebugPrint = begin let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle let braceL x = leftL Literals.leftBrace ^^ x ^^ rightL Literals.rightBrace + let braceBarL x = leftL Literals.leftBraceBar ^^ x ^^ rightL Literals.rightBraceBar let boolL = function true -> WordL.keywordTrue | false -> WordL.keywordFalse let intL (n:int) = wordL (tagNumericLiteral (string n )) @@ -3093,6 +3125,7 @@ module DebugPrint = begin let prefix = tcref.IsPrefixDisplay let tcL = layoutTyconRef tcref auxTyparsL env tcL prefix tinst + | TType_anon (anonInfo, typs) -> braceBarL (sepListL (wordL (tagText ";")) (List.map2 (fun nm ty -> wordL (tagField nm) --- auxTypeAtomL env ty) (Array.toList anonInfo.SortedNames) typs)) | TType_tuple (_tupInfo, typs) -> sepListL (wordL (tagText "*")) (List.map (auxTypeAtomL env) typs) |> wrap | TType_fun (f, x) -> ((auxTypeAtomL env f ^^ wordL (tagText "->")) --- auxTypeL env x) |> wrap | TType_var typar -> auxTyparWrapL env isAtomic typar @@ -3598,8 +3631,8 @@ module DebugPrint = begin let z = z --- sepL(tagText "`") --- (spaceListL (List.map atomL args)) z - and implFileL (TImplFile(_, _, e, _, _)) = - aboveListL [(wordL(tagText "top implementation ")) @@-- mexprL e] + and implFileL (TImplFile(_, _, mexpr, _, _, _)) = + aboveListL [(wordL(tagText "top implementation ")) @@-- mexprL mexpr] and mexprL x = match x with @@ -3690,7 +3723,7 @@ let wrapModuleOrNamespaceExprInNamespace (id :Ident) cpath mexpr = TMDefRec (false, [], [ModuleOrNamespaceBinding.Module(mspec, mexpr)], id.idRange) // cleanup: make this a property -let SigTypeOfImplFile (TImplFile(_, _, mexpr, _, _)) = mexpr.Type +let SigTypeOfImplFile (TImplFile(_, _, mexpr, _, _, _)) = mexpr.Type //-------------------------------------------------------------------------- // Data structures representing what gets hidden and what gets remapped (i.e. renamed or alpha-converted) @@ -4292,7 +4325,9 @@ and accFreeInOp opts op acc = | TOp.Goto _ | TOp.Label _ | TOp.Return | TOp.TupleFieldGet _ -> acc - | TOp.Tuple tupInfo -> accFreeTyvars opts accFreeInTupInfo tupInfo acc + | TOp.Tuple tupInfo -> accFreeTyvars opts accFreeInTupInfo tupInfo acc + | TOp.AnonRecd anonInfo + | TOp.AnonRecdGet (anonInfo, _) -> accFreeTyvars opts accFreeInTupInfo anonInfo.TupInfo acc | TOp.UnionCaseTagGet tr -> accUsedRecdOrUnionTyconRepr opts tr.Deref acc @@ -5261,6 +5296,9 @@ let mkAnyTupledTy (g:TcGlobals) tupInfo tys = | [h] -> h | _ -> TType_tuple(tupInfo, tys) +let mkAnyAnonRecdTy (_g:TcGlobals) anonInfo tys = + TType_anon(anonInfo, tys) + let mkRefTupledTy g tys = mkAnyTupledTy g tupInfoRef tys let mkRefTupledVarsTy g vs = mkRefTupledTy g (typesOfVals vs) @@ -5299,8 +5337,10 @@ let rec tyOfExpr g e = | TOp.ExnConstr _ -> g.exn_ty | TOp.Bytes _ -> mkByteArrayTy g | TOp.UInt16s _ -> mkArrayType g g.uint16_ty + | TOp.AnonRecdGet(_, i) -> List.item i tinst | TOp.TupleFieldGet(_, i) -> List.item i tinst | TOp.Tuple tupInfo -> mkAnyTupledTy g tupInfo tinst + | TOp.AnonRecd anonInfo -> mkAnyAnonRecdTy g anonInfo tinst | (TOp.For _ | TOp.While _) -> g.unit_ty | TOp.Array -> (match tinst with [ty] -> mkArrayType g ty | _ -> failwith "bad TOp.Array node") | (TOp.TryCatch _ | TOp.TryFinally _) -> (match tinst with [ty] -> ty | _ -> failwith "bad TOp_try node") @@ -5694,6 +5734,10 @@ let mkTupleFieldGet g (tupInfo, e, tinst, i, m) = let wrap, e' = mkExprAddrOfExpr g (evalTupInfoIsStruct tupInfo) false NeverMutates e None m wrap (mkTupleFieldGetViaExprAddr(tupInfo, e', tinst, i, m)) +let mkAnonRecdFieldGet g (anonInfo:AnonRecdTypeInfo, e, tinst, i, m) = + let wrap,e' = mkExprAddrOfExpr g (evalAnonInfoIsStruct anonInfo) false NeverMutates e None m + wrap (mkAnonRecdFieldGetViaExprAddr(anonInfo, e', tinst, i, m)) + let mkRecdFieldGet g (e, fref:RecdFieldRef, tinst, m) = assert (not (isByrefTy g (tyOfExpr g e))) let wrap, e' = mkExprAddrOfExpr g fref.Tycon.IsStructOrEnumTycon false NeverMutates e None m @@ -6006,6 +6050,9 @@ let mkRefTupled g m es tys = mkAnyTupled g m tupInfoRef es tys let mkRefTupledNoTypes g m args = mkRefTupled g m args (List.map (tyOfExpr g) args) let mkRefTupledVars g m vs = mkRefTupled g m (List.map (exprForVal m) vs) (typesOfVals vs) +let mkAnonRecd (_g:TcGlobals) m anonInfo es tys = Expr.Op (TOp.AnonRecd (anonInfo),tys,es,m) + + //-------------------------------------------------------------------------- // Permute expressions //-------------------------------------------------------------------------- @@ -6061,11 +6108,6 @@ let permuteExprList (sigma:int[]) (exprs: Expr list) (typ: TType list) (names:st let reorderedExprs = permute sigma (Array.ofList newExprs) binds, Array.toList reorderedExprs -//------------------------------------------------------------------------- -// Build record expressions... -//------------------------------------------------------------------------- - - /// Evaluate the expressions in the original order, but build a record with the results in field order /// Note some fields may be static. If this were not the case we could just use /// let sigma = Array.map #Index () @@ -7128,6 +7170,10 @@ let rec typeEnc g (gtpsType, gtpsMethod) ty = textOfPath (List.map DemangleGenericTypeName path) | _ -> assert(false); failwith "impossible" tyName + tyargsEnc g (gtpsType, gtpsMethod) tinst + + | TType_anon (anonInfo, tinst) -> + sprintf "%s%s" anonInfo.ILTypeRef.FullName (tyargsEnc g (gtpsType, gtpsMethod) tinst) + | TType_tuple (tupInfo, typs) -> if evalTupInfoIsStruct tupInfo then sprintf "System.ValueTuple%s"(tyargsEnc g (gtpsType, gtpsMethod) typs) @@ -7297,6 +7343,8 @@ let rec TypeHasDefaultValue g m ty = flds |> List.forall (actualTyOfRecdField (mkTyconRefInst tcref tinst) >> TypeHasDefaultValue g m) elif isStructTupleTy g ty then destStructTupleTy g ty |> List.forall (TypeHasDefaultValue g m) + elif isStructAnonRecdTy g ty then + tryDestAnonRecdTy g ty |> Option.get |> snd |> List.forall (TypeHasDefaultValue g m) else // All struct types defined in other .NET languages have a DefaultValue regardless of their // instantiation @@ -7309,6 +7357,9 @@ let (|SpecialComparableHeadType|_|) g ty = if isAnyTupleTy g ty then let _tupInfo, elemTys = destAnyTupleTy g ty Some elemTys + elif isAnonRecdTy g ty then + let _anonInfo, elemTys = tryDestAnonRecdTy g ty |> Option.get + Some elemTys else match ty with | AppTy g (tcref, tinst) -> diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index 9f23629b25e..2c839c645a1 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -181,6 +181,8 @@ val mkReraiseLibCall : TcGlobals -> TType -> range -> Expr //------------------------------------------------------------------------- val mkTupleFieldGet : TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGet : TcGlobals -> AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGetViaExprAddr : AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr val mkRecdFieldGetViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr val mkRecdFieldGetAddrViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr val mkStaticRecdFieldGet : RecdFieldRef * TypeInst * range -> Expr @@ -249,6 +251,7 @@ val mkGetTupleItemN : TcGlobals -> range -> int -> ILType -> bool -> Expr -> TTy /// Evaluate the TupInfo to work out if it is a struct or a ref. Currently this is very simple /// but TupInfo may later be used carry variables that infer structness. val evalTupInfoIsStruct : TupInfo -> bool +val evalAnonInfoIsStruct : AnonRecdTypeInfo -> bool /// If it is a tuple type, ensure it's outermost type is a .NET tuple type, otherwise leave unchanged val helpEnsureTypeHasMetadata : TcGlobals -> TType -> TType @@ -430,6 +433,8 @@ val isForallTy : TcGlobals -> TType -> bool val isAnyTupleTy : TcGlobals -> TType -> bool val isRefTupleTy : TcGlobals -> TType -> bool val isStructTupleTy : TcGlobals -> TType -> bool +val isStructAnonRecdTy : TcGlobals -> TType -> bool +val isAnonRecdTy : TcGlobals -> TType -> bool val isUnionTy : TcGlobals -> TType -> bool val isReprHiddenTy : TcGlobals -> TType -> bool val isFSharpObjModelTy : TcGlobals -> TType -> bool @@ -452,6 +457,7 @@ val tcrefOfAppTy : TcGlobals -> TType -> TyconRef val tryDestAppTy : TcGlobals -> TType -> TyconRef option val tryDestTyparTy : TcGlobals -> TType -> Typar option val tryDestFunTy : TcGlobals -> TType -> (TType * TType) option +val tryDestAnonRecdTy : TcGlobals -> TType -> (AnonRecdTypeInfo * TType list) option val argsOfAppTy : TcGlobals -> TType -> TypeInst val mkInstForAppTy : TcGlobals -> TType -> TyparInst @@ -577,6 +583,7 @@ val returnTypesAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TType op val returnTypesAEquiv : TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool val tcrefAEquiv : TcGlobals -> TypeEquivEnv -> TyconRef -> TyconRef -> bool val valLinkageAEquiv : TcGlobals -> TypeEquivEnv -> Val -> Val -> bool +val anonInfoEquiv : AnonRecdTypeInfo -> AnonRecdTypeInfo -> bool //------------------------------------------------------------------------- // Erasure of types wrt units-of-measure and type providers @@ -1408,7 +1415,6 @@ val isRefTupleExpr : Expr -> bool val tryDestRefTupleExpr : Expr -> Exprs val mkAnyTupledTy : TcGlobals -> TupInfo -> TType list -> TType - val mkAnyTupled : TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr val mkRefTupled : TcGlobals -> range -> Exprs -> TType list -> Expr val mkRefTupledNoTypes : TcGlobals -> range -> Exprs -> Expr @@ -1417,6 +1423,14 @@ val mkRefTupledVarsTy : TcGlobals -> Val list -> TType val mkRefTupledVars : TcGlobals -> range -> Val list -> Expr val mkMethodTy : TcGlobals -> TType list list -> TType -> TType + +//------------------------------------------------------------------------- +// Anonymous records +//------------------------------------------------------------------------- + +val mkAnyAnonRecdTy : TcGlobals -> AnonRecdTypeInfo -> TType list -> TType +val mkAnonRecd : TcGlobals -> range -> AnonRecdTypeInfo -> Exprs -> TType list -> Expr + //------------------------------------------------------------------------- // //------------------------------------------------------------------------- diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index 1726db26070..cb5476a424b 100755 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -113,9 +113,10 @@ type WriterState = { os: ByteBuffer oscope: CcuThunk occus: Table - otycons: NodeOutTable + oentities: NodeOutTable otypars: NodeOutTable ovals: NodeOutTable + oanoninfos: NodeOutTable ostrings: Table opubpaths: Table onlerefs: Table @@ -144,9 +145,10 @@ type ReaderState = { is: ByteStream iilscope: ILScopeRef iccus: InputTable - itycons: NodeInTable + ientities: NodeInTable itypars: NodeInTable ivals: NodeInTable + ianoninfos: NodeInTable istrings: InputTable ipubpaths: InputTable inlerefs: InputTable @@ -317,10 +319,13 @@ let u_used_space1 f st = let inline u_tup2 p1 p2 (st:ReaderState) = let a = p1 st in let b = p2 st in (a,b) + let inline u_tup3 p1 p2 p3 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in (a,b,c) + let inline u_tup4 p1 p2 p3 p4 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in (a,b,c,d) + let inline u_tup5 p1 p2 p3 p4 p5 (st:ReaderState) = let a = p1 st let b = p2 st @@ -328,32 +333,41 @@ let inline u_tup5 p1 p2 p3 p4 p5 (st:ReaderState) = let d = p4 st let e = p5 st (a,b,c,d,e) + let inline u_tup6 p1 p2 p3 p4 p5 p6 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in (a,b,c,d,e,f) + let inline u_tup7 p1 p2 p3 p4 p5 p6 p7 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in (a,b,c,d,e,f,x7) + let inline u_tup8 p1 p2 p3 p4 p5 p6 p7 p8 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in (a,b,c,d,e,f,x7,x8) + let inline u_tup9 p1 p2 p3 p4 p5 p6 p7 p8 p9 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in let x9 = p9 st in (a,b,c,d,e,f,x7,x8,x9) + let inline u_tup10 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in let x9 = p9 st in let x10 = p10 st in (a,b,c,d,e,f,x7,x8,x9,x10) + let inline u_tup11 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in let x9 = p9 st in let x10 = p10 st in let x11 = p11 st in (a,b,c,d,e,f,x7,x8,x9,x10,x11) + let inline u_tup12 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in let x9 = p9 st in let x10 = p10 st in let x11 = p11 st in let x12 = p12 st in (a,b,c,d,e,f,x7,x8,x9,x10,x11,x12) + let inline u_tup13 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in let x9 = p9 st in let x10 = p10 st in let x11 = p11 st in let x12 = p12 st in let x13 = p13 st in (a,b,c,d,e,f,x7,x8,x9,x10,x11,x12,x13) + let inline u_tup14 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 (st:ReaderState) = let a = p1 st in let b = p2 st in let c = p3 st in let d = p4 st in let e = p5 st in let f = p6 st in let x7 = p7 st in let x8 = p8 st in @@ -391,7 +405,7 @@ let inline u_tup17 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 (s // ctxt is for debugging let p_osgn_ref (_ctxt:string) (outMap : NodeOutTable<_,_>) x st = let idx = outMap.Table.FindOrAdd (outMap.NodeStamp x) - //if ((idx = 0) && outMap.Name = "otycons") then + //if ((idx = 0) && outMap.Name = "oentities") then // System.Diagnostics.Debug.Assert(false, sprintf "idx %d#%d in table %s has name '%s', was defined at '%s' and is referenced from context %s\n" idx (outMap.NodeStamp x) outMap.Name (outMap.NodeName x) (stringOfRange (outMap.GetRange x)) _ctxt) p_int idx st @@ -479,7 +493,7 @@ let private p_lazy_impl p v st = let fixupPos7 = st.os.Position prim_p_int32 0 st let idx1 = st.os.Position - let otyconsIdx1 = st.otycons.Size + let otyconsIdx1 = st.oentities.Size let otyparsIdx1 = st.otypars.Size let ovalsIdx1 = st.ovals.Size // Run the pickler @@ -488,7 +502,7 @@ let private p_lazy_impl p v st = let idx2 = st.os.Position st.os.FixupInt32 fixupPos1 (idx2-idx1) // Determine and fixup the ranges of OSGN nodes defined within the lazy portion - let otyconsIdx2 = st.otycons.Size + let otyconsIdx2 = st.oentities.Size let otyparsIdx2 = st.otypars.Size let ovalsIdx2 = st.ovals.Size st.os.FixupInt32 fixupPos2 otyconsIdx1 @@ -595,7 +609,7 @@ let u_lazy u st = lazy (let st = { st with is = st.is.CloneAndSeek idx1 } u st) /// Force the reading of the data as a "tripwire" for each of the OSGN thunks - for i = otyconsIdx1 to otyconsIdx2-1 do wire (st.itycons.Get(i)) res done + for i = otyconsIdx1 to otyconsIdx2-1 do wire (st.ientities.Get(i)) res done for i = ovalsIdx1 to ovalsIdx2-1 do wire (st.ivals.Get(i)) res done for i = otyparsIdx1 to otyparsIdx2-1 do wire (st.itypars.Get(i)) res done res @@ -688,21 +702,23 @@ let p_nleref x st = p_int (encode_nleref st.occus st.ostrings st.onlerefs st.osc let decode_simpletyp st _ccuTab _stringTab nlerefTab a = TType_app(ERefNonLocal (lookup_nleref st nlerefTab a),[]) let lookup_simpletyp st simpletypTab x = lookup_uniq st simpletypTab x let u_encoded_simpletyp st = u_int st +let u_encoded_anoninfo st = u_int st let u_simpletyp st = lookup_uniq st st.isimpletyps (u_int st) let encode_simpletyp ccuTab stringTab nlerefTab simpletypTab thisCcu a = encode_uniq simpletypTab (encode_nleref ccuTab stringTab nlerefTab thisCcu a) let p_encoded_simpletyp x st = p_int x st +let p_encoded_anoninfo x st = p_int x st let p_simpletyp x st = p_int (encode_simpletyp st.occus st.ostrings st.onlerefs st.osimpletyps st.oscope x) st -type sizes = int * int * int let pickleObjWithDanglingCcus inMem file g scope p x = - let ccuNameTab,(sizes: sizes),stringTab,pubpathTab,nlerefTab,simpletypTab,phase1bytes = + let ccuNameTab,(ntycons, ntypars, nvals, nanoninfos),stringTab,pubpathTab,nlerefTab,simpletypTab,phase1bytes = let st1 = { os = ByteBuffer.Create 100000 oscope=scope occus= Table<_>.Create "occus" - otycons=NodeOutTable<_,_>.Create((fun (tc:Tycon) -> tc.Stamp),(fun tc -> tc.LogicalName),(fun tc -> tc.Range),(fun osgn -> osgn),"otycons") + oentities=NodeOutTable<_,_>.Create((fun (tc:Tycon) -> tc.Stamp),(fun tc -> tc.LogicalName),(fun tc -> tc.Range),(fun osgn -> osgn),"otycons") otypars=NodeOutTable<_,_>.Create((fun (tp:Typar) -> tp.Stamp),(fun tp -> tp.DisplayName),(fun tp -> tp.Range),(fun osgn -> osgn),"otypars") ovals=NodeOutTable<_,_>.Create((fun (v:Val) -> v.Stamp),(fun v -> v.LogicalName),(fun v -> v.Range),(fun osgn -> osgn),"ovals") + oanoninfos=NodeOutTable<_,_>.Create((fun (v:AnonRecdTypeInfo) -> v.Stamp),(fun v -> string v.Stamp),(fun _ -> range0),id,"oanoninfos") ostrings=Table<_>.Create "ostrings" onlerefs=Table<_>.Create "onlerefs" opubpaths=Table<_>.Create "opubpaths" @@ -712,19 +728,21 @@ let pickleObjWithDanglingCcus inMem file g scope p x = oInMem=inMem } p x st1 let sizes = - st1.otycons.Size, + st1.oentities.Size, st1.otypars.Size, - st1.ovals.Size + st1.ovals.Size, + st1.oanoninfos.Size st1.occus, sizes, st1.ostrings, st1.opubpaths,st1.onlerefs, st1.osimpletyps, st1.os.Close() - let phase2data = (ccuNameTab.AsArray,sizes,stringTab.AsArray,pubpathTab.AsArray,nlerefTab.AsArray,simpletypTab.AsArray,phase1bytes) + let phase2bytes = let st2 = { os = ByteBuffer.Create 100000 oscope=scope occus= Table<_>.Create "occus (fake)" - otycons=NodeOutTable<_,_>.Create((fun (tc:Tycon) -> tc.Stamp),(fun tc -> tc.LogicalName),(fun tc -> tc.Range),(fun osgn -> osgn),"otycons") + oentities=NodeOutTable<_,_>.Create((fun (tc:Tycon) -> tc.Stamp),(fun tc -> tc.LogicalName),(fun tc -> tc.Range),(fun osgn -> osgn),"otycons") otypars=NodeOutTable<_,_>.Create((fun (tp:Typar) -> tp.Stamp),(fun tp -> tp.DisplayName),(fun tp -> tp.Range),(fun osgn -> osgn),"otypars") ovals=NodeOutTable<_,_>.Create((fun (v:Val) -> v.Stamp),(fun v -> v.LogicalName),(fun v -> v.Range),(fun osgn -> osgn),"ovals") + oanoninfos=NodeOutTable<_,_>.Create((fun (v:AnonRecdTypeInfo) -> v.Stamp),(fun v -> string v.Stamp),(fun _ -> range0),id,"oanoninfos") ostrings=Table<_>.Create "ostrings (fake)" opubpaths=Table<_>.Create "opubpaths (fake)" onlerefs=Table<_>.Create "onlerefs (fake)" @@ -732,15 +750,21 @@ let pickleObjWithDanglingCcus inMem file g scope p x = oglobals=g ofile=file oInMem=inMem } - p_tup7 - (p_array p_encoded_ccuref) - (p_tup3 p_int p_int p_int) - (p_array p_encoded_string) - (p_array p_encoded_pubpath) - (p_array p_encoded_nleref) - (p_array p_encoded_simpletyp) - p_bytes - phase2data st2 + p_array p_encoded_ccuref ccuNameTab.AsArray st2 + // Add a 4th integer indicated by a negative 1st integer + let z1 = if nanoninfos > 0 then -ntycons-1 else ntycons + p_int z1 st2 + p_tup2 p_int p_int (ntypars, nvals) st2 + if nanoninfos > 0 then + p_int nanoninfos st2 + p_tup5 + (p_array p_encoded_string) + (p_array p_encoded_pubpath) + (p_array p_encoded_nleref) + (p_array p_encoded_simpletyp) + p_bytes + (stringTab.AsArray,pubpathTab.AsArray,nlerefTab.AsArray,simpletypTab.AsArray,phase1bytes) + st2 st2.os.Close() phase2bytes @@ -756,39 +780,43 @@ let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef option) u (p { is = ByteStream.FromBytes (phase2bytes,0,phase2bytes.Length) iilscope= ilscope iccus= new_itbl "iccus (fake)" [| |] - itycons= NodeInTable<_,_>.Create (Tycon.NewUnlinked, (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itycons",0) + ientities= NodeInTable<_,_>.Create (Tycon.NewUnlinked, (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itycons",0) itypars= NodeInTable<_,_>.Create (Typar.NewUnlinked, (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itypars",0) ivals = NodeInTable<_,_>.Create (Val.NewUnlinked , (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"ivals",0) + ianoninfos=NodeInTable<_,_>.Create(AnonRecdTypeInfo.NewUnlinked, (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"ianoninfos",0); istrings = new_itbl "istrings (fake)" [| |] inlerefs = new_itbl "inlerefs (fake)" [| |] ipubpaths = new_itbl "ipubpaths (fake)" [| |] isimpletyps = new_itbl "isimpletyps (fake)" [| |] ifile=file iILModule = iILModule } - let phase2data = - u_tup7 - (u_array u_encoded_ccuref) - (u_tup3 u_int u_int u_int) - (u_array u_encoded_string) - (u_array u_encoded_pubpath) - (u_array u_encoded_nleref) - (u_array u_encoded_simpletyp) - u_bytes st2 - let ccuNameTab,sizes,stringTab,pubpathTab,nlerefTab,simpletypTab,phase1bytes = phase2data + let ccuNameTab = u_array u_encoded_ccuref st2 + let z1 = u_int st2 + let ntycons = if z1 < 0 then -z1-1 else z1 + let ntypars, nvals = u_tup2 u_int u_int st2 + let nanoninfos = if z1 < 0 then u_int st2 else 0 + let stringTab,pubpathTab,nlerefTab,simpletypTab,phase1bytes = + u_tup5 + (u_array u_encoded_string) + (u_array u_encoded_pubpath) + (u_array u_encoded_nleref) + (u_array u_encoded_simpletyp) + u_bytes + st2 let ccuTab = new_itbl "iccus" (Array.map (CcuThunk.CreateDelayed) ccuNameTab) let stringTab = new_itbl "istrings" (Array.map decode_string stringTab) let pubpathTab = new_itbl "ipubpaths" (Array.map (decode_pubpath st2 stringTab) pubpathTab) let nlerefTab = new_itbl "inlerefs" (Array.map (decode_nleref st2 ccuTab stringTab) nlerefTab) let simpletypTab = new_itbl "isimpletyps" (Array.map (decode_simpletyp st2 ccuTab stringTab nlerefTab) simpletypTab) - let ((ntycons,ntypars,nvals) : sizes) = sizes let data = let st1 = { is = ByteStream.FromBytes (phase1bytes,0,phase1bytes.Length) iccus= ccuTab iilscope= ilscope - itycons= NodeInTable<_,_>.Create(Tycon.NewUnlinked,(fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itycons",ntycons) + ientities= NodeInTable<_,_>.Create(Tycon.NewUnlinked,(fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itycons",ntycons) itypars= NodeInTable<_,_>.Create(Typar.NewUnlinked,(fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"itypars",ntypars) ivals= NodeInTable<_,_>.Create(Val.NewUnlinked ,(fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"ivals",nvals) + ianoninfos=NodeInTable<_,_>.Create(AnonRecdTypeInfo.NewUnlinked, (fun osgn tg -> osgn.Link tg),(fun osgn -> osgn.IsLinked),"ianoninfos",nanoninfos); istrings = stringTab ipubpaths = pubpathTab inlerefs = nlerefTab @@ -796,9 +824,8 @@ let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef option) u (p ifile=file iILModule = iILModule } let res = u st1 -#if LAZY_UNPICKLE -#else - check ilscope st1.itycons +#if !LAZY_UNPICKLE + check ilscope st1.ientities check ilscope st1.ivals check ilscope st1.itypars #endif @@ -808,7 +835,7 @@ let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef option) u (p //========================================================================= -// PART II *) +// PART II //========================================================================= //--------------------------------------------------------------------------- @@ -819,7 +846,9 @@ let p_ILPublicKey x st = match x with | PublicKey b -> p_byte 0 st; p_bytes b st | PublicKeyToken b -> p_byte 1 st; p_bytes b st + let p_ILVersion x st = p_tup4 p_uint16 p_uint16 p_uint16 p_uint16 x st + let p_ILModuleRef (x:ILModuleRef) st = p_tup3 p_string p_bool (p_option p_bytes) (x.Name,x.HasMetadata,x.Hash) st @@ -943,8 +972,11 @@ let rec u_ILType st = | 7 -> u_uint16 st |> mkILTyvarTy | 8 -> u_tup3 u_bool u_ILTypeRef u_ILType st |> ILType.Modified | _ -> ufailwith st "u_ILType" + and u_ILTypes st = u_list u_ILType st + and u_ILCallSig = u_wrap (fun (a,b,c) -> {CallingConv=a; ArgTypes=b; ReturnType=c}) (u_tup3 u_ILCallConv u_ILTypes u_ILType) + and u_ILTypeSpec st = let a,b = u_tup2 u_ILTypeRef u_ILTypes st in ILTypeSpec.Create(a,b) @@ -1240,7 +1272,7 @@ let p_local_item_ref ctxt tab st = p_osgn_ref ctxt tab st let p_tcref ctxt (x:EntityRef) st = match x with - | ERefLocal x -> p_byte 0 st; p_local_item_ref ctxt st.otycons x st + | ERefLocal x -> p_byte 0 st; p_local_item_ref ctxt st.oentities x st | ERefNonLocal x -> p_byte 1 st; p_nleref x st let p_ucref (UCRef(a,b)) st = p_tup2 (p_tcref "ucref") p_string (a,b) st @@ -1252,7 +1284,7 @@ let u_local_item_ref tab st = u_osgn_ref tab st let u_tcref st = let tag = u_byte st match tag with - | 0 -> u_local_item_ref st.itycons st |> ERefLocal + | 0 -> u_local_item_ref st.ientities st |> ERefLocal | 1 -> u_nleref st |> ERefNonLocal | _ -> ufailwith st "u_item_ref" @@ -1357,6 +1389,12 @@ let u_MemberFlags st = let fill_u_Expr_hole,u_expr_fwd = u_hole() let fill_p_Expr_hole,p_expr_fwd = p_hole() +let p_anonInfo_data (anonInfo: AnonRecdTypeInfo) st = + p_tup3 p_ccuref p_bool (p_array p_ident) (anonInfo.Assembly, evalTupInfoIsStruct anonInfo.TupInfo, anonInfo.SortedIds) st + +let p_anonInfo x st = + p_osgn_decl st.oanoninfos p_anonInfo_data x st + let p_trait_sln sln st = match sln with | ILMethSln(a,b,c,d) -> @@ -1369,10 +1407,20 @@ let p_trait_sln sln st = p_byte 3 st; p_expr_fwd expr st | FSRecdFieldSln(a,b,c) -> p_byte 4 st; p_tup3 p_typs p_rfref p_bool (a,b,c) st + | FSAnonRecdFieldSln(a, b, c) -> + p_byte 5 st; p_tup3 p_anonInfo p_typs p_int (a,b,c) st + let p_trait (TTrait(a,b,c,d,e,f)) st = p_tup6 p_typs p_string p_MemberFlags p_typs (p_option p_typ) (p_option p_trait_sln) (a,b,c,d,e,!f) st +let u_anonInfo_data st = + let (ccu, info, nms) = u_tup3 u_ccuref u_bool (u_array u_ident) st + AnonRecdTypeInfo.Create (ccu, TupInfo.Const info, nms) + +let u_anonInfo st = + u_osgn_decl st.ianoninfos u_anonInfo_data st + // We have to store trait solutions since they can occur in optimization data let u_trait_sln st = let tag = u_byte st @@ -1390,6 +1438,9 @@ let u_trait_sln st = | 4 -> let (a,b,c) = u_tup3 u_typs u_rfref u_bool st FSRecdFieldSln(a,b,c) + | 5 -> + let (a,b,c) = u_tup3 u_anonInfo u_typs u_int st + FSAnonRecdFieldSln(a, b, c) | _ -> ufailwith st "u_trait_sln" let u_trait st = @@ -1400,7 +1451,9 @@ let u_trait st = let p_rational q st = p_int32 (GetNumerator q) st; p_int32 (GetDenominator q) st let p_measure_con tcref st = p_byte 0 st; p_tcref "measure" tcref st + let p_measure_var v st = p_byte 3 st; p_tpref v st + let p_measure_one = p_byte 4 // Pickle a unit-of-measure variable or constructor @@ -1510,7 +1563,6 @@ let p_typar_spec_data (x:Typar) st = p_int64 p_typar_constraints p_xmldoc - (x.typar_id,x.typar_attribs,int64 x.typar_flags.PickledBits,x.typar_constraints,x.typar_xmldoc) st let p_typar_spec (x:Typar) st = @@ -1551,7 +1603,12 @@ let _ = fill_p_typ (fun ty st -> | TType_var r -> p_byte 4 st; p_tpref r st | TType_forall (tps,r) -> p_byte 5 st; p_tup2 p_typar_specs p_typ (tps,r) st | TType_measure unt -> p_byte 6 st; p_measure_expr unt st - | TType_ucase (uc,tinst) -> p_byte 7 st; p_tup2 p_ucref p_typs (uc,tinst) st) + | TType_ucase (uc,tinst) -> p_byte 7 st; p_tup2 p_ucref p_typs (uc,tinst) st + // p_byte 8 taken by TType_tuple above + | TType_anon (anonInfo, l) -> + p_byte 9 st + p_anonInfo anonInfo st + p_typs l st) let _ = fill_u_typ (fun st -> let tag = u_byte st @@ -1565,6 +1622,7 @@ let _ = fill_u_typ (fun st -> | 6 -> let unt = u_measure_expr st in TType_measure unt | 7 -> let uc = u_ucref st in let tinst = u_typs st in TType_ucase (uc,tinst) | 8 -> let l = u_typs st in TType_tuple (tupInfoStruct, l) + | 9 -> let anonInfo = u_anonInfo st in let l = u_typs st in TType_anon (anonInfo, l) | _ -> ufailwith st "u_typ") @@ -1683,7 +1741,7 @@ and p_exnc_repr x st = | TExnFresh x -> p_byte 2 st; p_rfield_table x st | TExnNone -> p_byte 3 st -and p_exnc_spec x st = p_tycon_spec x st +and p_exnc_spec x st = p_entity_spec x st and p_access (TAccess n) st = p_list p_cpath n st @@ -1755,7 +1813,7 @@ and p_tcaug p st = p.tcaug_abstract, space) st -and p_tycon_spec x st = p_osgn_decl st.otycons p_entity_spec_data x st +and p_entity_spec x st = p_osgn_decl st.oentities p_entity_spec_data x st and p_parentref x st = match x with @@ -1836,7 +1894,7 @@ and p_modul_typ (x: ModuleOrNamespaceType) st = p_tup3 p_istype (p_qlist p_Val) - (p_qlist p_tycon_spec) + (p_qlist p_entity_spec) (x.ModuleOrNamespaceKind,x.AllValsAndMembers,x.AllEntities) st @@ -1921,7 +1979,7 @@ and u_exnc_repr st = | 3 -> TExnNone | _ -> ufailwith st "u_exnc_repr" -and u_exnc_spec st = u_tycon_spec st +and u_exnc_spec st = u_entity_spec st and u_access st = match u_list u_cpath st with @@ -2033,8 +2091,8 @@ and u_tcaug st = tcaug_closed=true tcaug_abstract=g} -and u_tycon_spec st = - u_osgn_decl st.itycons u_entity_spec_data st +and u_entity_spec st = + u_osgn_decl st.ientities u_entity_spec_data st and u_parentref st = let tag = u_byte st @@ -2152,7 +2210,7 @@ and u_modul_typ st = u_tup3 u_istype (u_qlist u_Val) - (u_qlist u_tycon_spec) st + (u_qlist u_entity_spec) st ModuleOrNamespaceType(x1,x3,x5) @@ -2308,6 +2366,10 @@ and p_op x st = | TOp.UnionCaseFieldGetAddr (a,b) -> p_byte 28 st; p_tup2 p_ucref p_int (a,b) st // Note tag byte 29 is taken for struct tuples, see above // Note tag byte 30 is taken for struct tuples, see above + (* 29: TOp.Tuple when evalTupInfoIsStruct tupInfo = true *) + (* 30: TOp.TupleFieldGet when evalTupInfoIsStruct tupInfo = true *) + | TOp.AnonRecd info -> p_byte 31 st; p_anonInfo info st + | TOp.AnonRecdGet (info, n) -> p_byte 32 st; p_anonInfo info st; p_int n st | TOp.Goto _ | TOp.Label _ | TOp.Return -> failwith "unexpected backend construct in pickled TAST" and u_op st = @@ -2374,6 +2436,11 @@ and u_op st = | 29 -> TOp.Tuple tupInfoStruct | 30 -> let a = u_int st TOp.TupleFieldGet (tupInfoStruct, a) + | 31 -> let info = u_anonInfo st + TOp.AnonRecd (info) + | 32 -> let info = u_anonInfo st + let n = u_int st + TOp.AnonRecdGet (info, n) | _ -> ufailwith st "u_op" and p_expr expr st = @@ -2527,11 +2594,12 @@ let _ = fill_u_Vals (u_list u_Val) // Pickle/unpickle F# interface data //--------------------------------------------------------------------------- -let pickleModuleOrNamespace mspec st = p_tycon_spec mspec st +let pickleModuleOrNamespace mspec st = p_entity_spec mspec st + let pickleCcuInfo minfo st = p_tup4 pickleModuleOrNamespace p_string p_bool (p_space 3) (minfo.mspec, minfo.compileTimeWorkingDir, minfo.usesQuotations,()) st -let unpickleModuleOrNamespace st = u_tycon_spec st +let unpickleModuleOrNamespace st = u_entity_spec st let unpickleCcuInfo st = let a,b,c,_space = u_tup4 unpickleModuleOrNamespace u_string u_bool (u_space 3) st diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 6aa5ffa64a3..77fbb1daaf1 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -760,18 +760,46 @@ let UnifyRefTupleType contextInfo cenv denv m ty ps = AddCxTypeEqualsType contextInfo denv cenv.css m ty (TType_tuple (tupInfoRef, ptys)) ptys -/// Optimized unification routine that avoids creating new inference -/// variables unnecessarily -let UnifyStructTupleType contextInfo cenv denv m ty ps = - let ptys = - if isStructTupleTy cenv.g ty then - let ptys = destStructTupleTy cenv.g ty - if List.length ps = List.length ptys then ptys - else NewInferenceTypes ps - else NewInferenceTypes ps - AddCxTypeEqualsType contextInfo denv cenv.css m ty (TType_tuple (tupInfoStruct, ptys)) +/// Allow the inference of structness from the known type, e.g. +/// let (x : struct (int * int)) = (3,4) +let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExplicitStruct ps = + let tupInfo, ptys = + if isAnyTupleTy cenv.g knownTy then + let tupInfo, ptys = destAnyTupleTy cenv.g knownTy + let tupInfo = (if isExplicitStruct then TupInfo.Const isExplicitStruct else tupInfo) + let ptys = + if List.length ps = List.length ptys then ptys + else NewInferenceTypes ps + tupInfo, ptys + else + TupInfo.Const isExplicitStruct, NewInferenceTypes ps + let ty2 = TType_tuple (tupInfo, ptys) + AddCxTypeEqualsType contextInfo denv cenv.css m knownTy ty2 + tupInfo, ptys + +// Allow inference of assembly-affinity and structness from the known type - even from another assembly. This is a rule of +// the language design and allows effective cross-assembly use of anonymous types in some limited circumstances. +let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplicitStruct unsortedNames = + let anonInfo, ptys = + match tryDestAnonRecdTy cenv.g ty with + | Some (anonInfo, ptys) -> + // Note: use the assembly of the known type, not the current assembly + // Note: use the structness of the known type, unless explicit + // Note: use the names of our type, since they are always explicit + let tupInfo = (if isExplicitStruct then TupInfo.Const isExplicitStruct else anonInfo.TupInfo) + let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) + let ptys = + if List.length ptys = Array.length unsortedNames then ptys + else NewInferenceTypes (Array.toList anonInfo.SortedNames) + anonInfo, ptys + | None -> + // Note: no known anonymous record type - use our assembly + let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, TupInfo.Const isExplicitStruct, unsortedNames) + anonInfo, NewInferenceTypes (Array.toList anonInfo.SortedNames) + let ty2 = TType_anon (anonInfo, ptys) + AddCxTypeEqualsType contextInfo denv cenv.css m ty ty2 + anonInfo, ptys - ptys /// Optimized unification routine that avoids creating new inference /// variables unnecessarily @@ -3214,7 +3242,7 @@ let GetMethodArgs arg = let args = match arg with | SynExpr.Const (SynConst.Unit, _) -> [] - | SynExprParen(SynExpr.Tuple (args, _, _), _, _, _) | SynExpr.Tuple (args, _, _) -> args + | SynExprParen(SynExpr.Tuple (false, args, _, _), _, _, _) | SynExpr.Tuple (false, args, _, _) -> args | SynExprParen(arg, _, _, _) | arg -> [arg] let unnamedCallerArgs, namedCallerArgs = args |> List.takeUntil IsNamedArg @@ -3491,10 +3519,10 @@ let elimFastIntegerForLoop (spBind, id, start, dir, finish, innerExpr, m) = let (|ExprAsPat|_|) (f:SynExpr) = match f with | SingleIdent v1 | SynExprParen(SingleIdent v1, _, _, _) -> Some (mkSynPatVar None v1) - | SynExprParen(SynExpr.Tuple (elems, _, _), _, _, _) -> + | SynExprParen(SynExpr.Tuple (false, elems, _, _), _, _, _) -> let elems = elems |> List.map (|SingleIdent|_|) if elems |> List.forall (fun x -> x.IsSome) then - Some (SynPat.Tuple((elems |> List.map (fun x -> mkSynPatVar None x.Value)), f.Range)) + Some (SynPat.Tuple(false, (elems |> List.map (fun x -> mkSynPatVar None x.Value)), f.Range)) else None | _ -> None @@ -4576,21 +4604,34 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped match ltyp with | AppTy cenv.g (tcref, tinst) -> let tcref = ResolveTypeLongIdentInTyconRef cenv.tcSink cenv.nameResolver env.eNameResEnv (TypeNameResolutionInfo.ResolveToTypeRefs (TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length)) ad m tcref longId - TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args + TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args | _ -> error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), m)) - | SynType.Tuple(args, m) -> - let isMeasure = match optKind with Some TyparKind.Measure -> true | None -> List.exists (fun (isquot, _) -> isquot) args | _ -> false - if isMeasure then - let ms, tpenv = TcMeasuresAsTuple cenv newOk checkCxs occ env tpenv args m - TType_measure ms, tpenv + | SynType.Tuple(isStruct, args, m) -> + let tupInfo = TupInfo.Const isStruct + if isStruct then + let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m + TType_tuple(tupInfo,args'),tpenv else - let args', tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m - TType_tuple(tupInfoRef, args'), tpenv - - | SynType.StructTuple(args, m) -> - let args', tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m - TType_tuple(tupInfoStruct, args'), tpenv + let isMeasure = match optKind with Some TyparKind.Measure -> true | None -> List.exists (fun (isquot,_) -> isquot) args | _ -> false + if isMeasure then + let ms,tpenv = TcMeasuresAsTuple cenv newOk checkCxs occ env tpenv args m + TType_measure ms,tpenv + else + let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m + TType_tuple(tupInfo,args'),tpenv + + | SynType.AnonRecd(isStruct, args,m) -> + let tupInfo = TupInfo.Const isStruct + let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv (args |> List.map snd |> List.map (fun x -> (false,x))) m + let unsortedIds = args |> List.map fst |> List.toArray + let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, tupInfo, unsortedIds) + // Sort into canonical order + let sortedArgTys, sortedCheckedArgTys = List.zip args args' |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) |> List.map snd |> List.unzip + sortedArgTys |> List.iteri (fun i (x,_) -> + let item = Item.AnonRecdField(anonInfo, sortedCheckedArgTys, i, x.idRange) + CallNameResolutionSink cenv.tcSink (x.idRange,env.NameEnv,item,item,emptyTyparInst,ItemOccurence.UseInType,env.DisplayEnv,env.eAccessRights)) + TType_anon(anonInfo, sortedCheckedArgTys),tpenv | SynType.Fun(domainTy, resultTy, _) -> let domainTy', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv domainTy @@ -5265,10 +5306,10 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p SynExpr.DiscardAfterMissingQualificationAfterDot(e, unionRanges e.Range (List.last dotms)) else SynExpr.LongIdent(false, lidwd, None, m) List.fold (fun f x -> mkSynApp1 f (convSynPatToSynExpr x) m) e args - | SynPat.Tuple (args, m) -> SynExpr.Tuple(List.map convSynPatToSynExpr args, [], m) + | SynPat.Tuple (isStruct, args, m) -> SynExpr.Tuple(isStruct, List.map convSynPatToSynExpr args, [], m) | SynPat.Paren (p, _) -> convSynPatToSynExpr p - | SynPat.ArrayOrList (isArray, args, m) -> SynExpr.ArrayOrList(isArray, List.map convSynPatToSynExpr args, m) - | SynPat.QuoteExpr (e, _) -> e + | SynPat.ArrayOrList (isArray, args, m) -> SynExpr.ArrayOrList(isArray,List.map convSynPatToSynExpr args, m) + | SynPat.QuoteExpr (e,_) -> e | SynPat.Null m -> SynExpr.Null(m) | _ -> error(Error(FSComp.SR.tcInvalidArgForParameterizedPattern(), x.Range)) let activePatArgsAsSynExprs = List.map convSynPatToSynExpr activePatArgsAsSynPats @@ -5335,13 +5376,13 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args = List.ofArray result if result.Length = 1 then args - else [ SynPat.Tuple(args, m) ] + else [ SynPat.Tuple(false, args, m) ] let args = match args with | []-> [] // note: the next will always be parenthesized - | [SynPatErrorSkip(SynPat.Tuple (args, _)) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Tuple (args, _)), _))] when nargtys > 1 -> args + | [SynPatErrorSkip(SynPat.Tuple (false, args, _)) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Tuple (false, args, _)), _))] when nargtys > 1 -> args // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern | [SynPatErrorSkip(SynPat.Wild _ as e) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Wild _ as e), _))] -> Array.toList (Array.create nargtys e) @@ -5405,17 +5446,10 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.QuoteExpr(_, m) -> error (Error(FSComp.SR.tcInvalidPattern(), m)) - | SynPat.Tuple (args, m) -> - let argtys = NewInferenceTypes args - UnifyTypes cenv env m ty (TType_tuple (tupInfoRef, argtys)) - let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) argtys args - (fun values -> TPat_tuple(tupInfoRef, List.map (fun f -> f values) args', argtys, m)), acc - - | SynPat.StructTuple (args, m) -> - let argtys = NewInferenceTypes args - UnifyTypes cenv env m ty (TType_tuple (tupInfoStruct, argtys)) + | SynPat.Tuple (isExplicitStruct, args, m) -> + let tupInfo, argtys = UnifyTupleTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m ty isExplicitStruct args let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) argtys args - (fun values -> TPat_tuple(tupInfoStruct, List.map (fun f -> f values) args', argtys, m)), acc + (fun values -> TPat_tuple(tupInfo, List.map (fun f -> f values) args', argtys, m)), acc | SynPat.Paren (p, _) -> TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p @@ -5779,19 +5813,31 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = let e', tpenv = TcExpr cenv ety env tpenv e mkLazyDelayed cenv.g m ety (mkUnitDelayLambda cenv.g m e'), tpenv - | SynExpr.Tuple (args, _, m) -> - let argtys = UnifyRefTupleType env.eContextInfo cenv env.DisplayEnv m overallTy args + | SynExpr.Tuple (isExplicitStruct, args, _, m) -> + let tupInfo, argtys = UnifyTupleTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m overallTy isExplicitStruct args // No subsumption at tuple construction let flexes = argtys |> List.map (fun _ -> false) let args', tpenv = TcExprs cenv env m tpenv flexes argtys args - mkRefTupled cenv.g m args' argtys, tpenv + let expr = mkAnyTupled cenv.g m tupInfo args' argtys + expr, tpenv - | SynExpr.StructTuple (args, _, m) -> - let argtys = UnifyStructTupleType env.eContextInfo cenv env.DisplayEnv m overallTy args - // No subsumption at tuple construction - let flexes = argtys |> List.map (fun _ -> false) - let args', tpenv = TcExprs cenv env m tpenv flexes argtys args - mkAnyTupled cenv.g m tupInfoStruct args' argtys, tpenv + | SynExpr.AnonRecd (isStruct, unsortedArgs, m) -> + let unsortedIds = unsortedArgs |> List.map fst |> List.toArray + let anonInfo, sortedArgTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m overallTy isStruct unsortedIds + + // Sort into canonical order + let sortedIndexedArgs = unsortedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) + let sigma = List.map fst sortedIndexedArgs |> List.toArray + let sortedArgs = List.map snd sortedIndexedArgs + sortedArgs |> List.iteri (fun j (x, _) -> + let item = Item.AnonRecdField(anonInfo, sortedArgTys, j, x.idRange) + CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights)) + let unsortedArgTys = sortedArgTys |> List.indexed |> List.sortBy (fun (j, _) -> sigma.[j]) |> List.map snd + let flexes = unsortedArgTys |> List.map (fun _ -> true) + let unsortedCheckedArgs, tpenv = TcExprs cenv env m tpenv flexes unsortedArgTys (List.map snd unsortedArgs) + let sortedCheckedArgs = unsortedCheckedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) |> List.map snd + + mkAnonRecd cenv.g m anonInfo sortedCheckedArgs sortedArgTys, tpenv | SynExpr.ArrayOrList (isArray, args, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) @@ -6168,7 +6214,7 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg match indexArgs with | [] -> failwith "unexpected empty index list" | [SynIndexerArg.One h] -> SynExpr.Paren(h, range0, None, idxRange) - | _ -> SynExpr.Paren(SynExpr.Tuple(GetIndexArgs indexArgs @ Option.toList vopt, [], idxRange), range0, None, idxRange) + | _ -> SynExpr.Paren(SynExpr.Tuple(false, GetIndexArgs indexArgs @ Option.toList vopt, [], idxRange), range0, None, idxRange) let attemptArrayString = if isArray || isString then @@ -6177,13 +6223,13 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg let sliceOpPath = ["Microsoft";"FSharp";"Core";"Operators";"OperatorIntrinsics"] let info = match isString, isArray, wholeExpr with - | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_] as idxs, _, _))], _, _) -> Some (indexOpPath, "GetArray2D", idxs) - | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_;_] as idxs, _, _))], _, _) -> Some (indexOpPath, "GetArray3D", idxs) - | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_;_;_] as idxs, _, _))], _, _) -> Some (indexOpPath, "GetArray4D", idxs) + | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_] as idxs), _, _))], _, _) -> Some (indexOpPath, "GetArray2D", idxs) + | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_;_] as idxs), _, _))], _, _) -> Some (indexOpPath, "GetArray3D", idxs) + | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_;_;_] as idxs), _, _))], _, _) -> Some (indexOpPath, "GetArray4D", idxs) | false, true, SynExpr.DotIndexedGet(_, [SynIndexerArg.One idx], _, _) -> Some (indexOpPath, "GetArray", [idx]) - | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_] as idxs, _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray2D", (idxs @ [e3])) - | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_;_] as idxs, _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray3D", (idxs @ [e3])) - | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple ([_;_;_;_] as idxs, _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray4D", (idxs @ [e3])) + | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_] as idxs), _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray2D", (idxs @ [e3])) + | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_;_] as idxs), _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray3D", (idxs @ [e3])) + | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One(SynExpr.Tuple (false, ([_;_;_;_] as idxs), _, _))] , e3, _, _, _) -> Some (indexOpPath, "SetArray4D", (idxs @ [e3])) | false, true, SynExpr.DotIndexedSet(_, [SynIndexerArg.One _], e3, _, _, _) -> Some (indexOpPath, "SetArray", (GetIndexArgs indexArgs @ [e3])) | true, false, SynExpr.DotIndexedGet(_, [SynIndexerArg.Two _], _, _) -> Some (sliceOpPath, "GetStringSlice", GetIndexArgs indexArgs) | true, false, SynExpr.DotIndexedGet(_, [SynIndexerArg.One _], _, _) -> Some (indexOpPath, "GetString", GetIndexArgs indexArgs) @@ -6300,10 +6346,6 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a error(Error(FSComp.SR.tcSyntaxCanOnlyBeUsedToCreateObjectTypes(if superInit then "inherit" else "new"), mWholeCall)) -//------------------------------------------------------------------------- -// TcRecordConstruction -//------------------------------------------------------------------------- - // Check a record construction expression and TcRecordConstruction cenv overallTy env tpenv optOrigExpr objTy fldsList m = let tcref, tinst = destAppTy cenv.g objTy @@ -7109,7 +7151,7 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv match args with | [] -> SynExpr.Const(SynConst.Unit, m) | [arg] -> SynExpr.Paren(SynExpr.Paren(arg, range0, None, m), range0, None, m) - | args -> SynExpr.Paren(SynExpr.Tuple(args, [], m), range0, None, m) + | args -> SynExpr.Paren(SynExpr.Tuple(false, args, [], m), range0, None, m) let builderVal = mkSynIdGet m builderValName mkSynApp1 (SynExpr.DotGet(builderVal, range0, LongIdentWithDots([mkSynId m nm], []), m)) args m @@ -7475,7 +7517,7 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv match patvs with | [] -> SynExpr.Const(SynConst.Unit, m) | [v] -> SynExpr.Ident v.Id - | vs -> SynExpr.Tuple((vs |> List.map (fun v -> SynExpr.Ident v.Id)), [], m) + | vs -> SynExpr.Tuple(false, (vs |> List.map (fun v -> SynExpr.Ident v.Id)), [], m) let mkSimplePatForVarSpace m (patvs: Val list) = let spats = @@ -7489,7 +7531,7 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv match patvs with | [] -> SynPat.Const (SynConst.Unit, m) | [v] -> mkSynPatVar None v.Id - | vs -> SynPat.Tuple((vs |> List.map (fun x -> mkSynPatVar None x.Id)), m) + | vs -> SynPat.Tuple(false, (vs |> List.map (fun x -> mkSynPatVar None x.Id)), m) let (|OptionalSequential|) e = match e with @@ -7506,7 +7548,7 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv let estimatedRangeOfIntendedLeftAndRightArguments = unionRanges (List.last args).Range arg2.Range errorR(Error(FSComp.SR.tcUnrecognizedQueryBinaryOperator(), estimatedRangeOfIntendedLeftAndRightArguments)) true - | SynExpr.Tuple( (StripApps(SingleIdent nm2, args) :: _), _, m) when + | SynExpr.Tuple(false, (StripApps(SingleIdent nm2, args) :: _), _, m) when expectedArgCountForCustomOperator nm2 > 0 && not (List.isEmpty args) -> let estimatedRangeOfIntendedLeftAndRightArguments = unionRanges (List.last args).Range m.EndRange @@ -8490,8 +8532,8 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del let (|FittedArgs|_|) arg = match arg with - | SynExprParen(SynExpr.Tuple(args, _, _), _, _, _) - | SynExpr.Tuple(args, _, _) when nargtys > 1 -> Some args + | SynExprParen(SynExpr.Tuple(false, args, _, _), _, _, _) + | SynExpr.Tuple(false, args, _, _) when nargtys > 1 -> Some args | SynExprParen(arg, _, _, _) | arg when nargtys = 1 -> Some [arg] | _ -> None @@ -8782,14 +8824,14 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del | SynExpr.Const _ | SynExpr.LongIdent _ -> true - | SynExpr.Tuple(synExprs, _, _) - | SynExpr.StructTuple(synExprs, _, _) + | SynExpr.Tuple(_, synExprs, _, _) | SynExpr.ArrayOrList(_, synExprs, _) -> synExprs |> List.forall isSimpleArgument | SynExpr.Record(_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) | SynExpr.App (_, _, synExpr, synExpr2, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 | SynExpr.IfThenElse(synExpr, synExpr2, synExprOpt, _, _, _, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 && Option.forall isSimpleArgument synExprOpt | SynExpr.DotIndexedGet(synExpr, _, _, _) -> isSimpleArgument synExpr | SynExpr.ObjExpr _ + | SynExpr.AnonRecd _ | SynExpr.While _ | SynExpr.For _ | SynExpr.ForEach _ @@ -9132,6 +9174,18 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela let objExpr' = mkRecdFieldGet cenv.g (objExpr, rfinfo.RecdFieldRef, rfinfo.TypeInst, mExprAndItem) PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + | Item.AnonRecdField (anonInfo, tinst, n, _) -> + let tgty = TType_anon (anonInfo, tinst) + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgty objExprTy + let fieldTy = List.item n tinst + match delayed with + | DelayedSet _ :: _otherDelayed -> + error(Error(FSComp.SR.tcInvalidAssignment(),mItem)) + | _ -> + // Instance F# Anonymous Record + let objExpr' = mkAnonRecdFieldGet cenv.g (anonInfo,objExpr,tinst,n,mExprAndItem) + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + | Item.ILField finfo -> // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad mItem finfo @@ -15450,6 +15504,7 @@ module EstablishTypeDefinitionCores = let rec accInAbbrevType ty acc = match stripTyparEqns ty with + | TType_anon (_,l) | TType_tuple (_, l) -> accInAbbrevTypes l acc | TType_ucase (UCRef(tc, _), tinst) | TType_app (tc, tinst) -> @@ -17140,16 +17195,16 @@ let TypeCheckOneImplFile // We ALWAYS run the PostTypeCheckSemanticChecks phase, though we if we have already encountered some // errors we turn off error reporting. This is because it performs various fixups over the TAST, e.g. // assigning nice names for inference variables. - let hasExplicitEntryPoint = + let hasExplicitEntryPoint, anonRecdTypes = conditionallySuppressErrorReporting (checkForErrors()) (fun () -> try let reportErrors = not (checkForErrors()) PostTypeCheckSemanticChecks.CheckTopImpl (g, cenv.amap, reportErrors, cenv.infoReader, env.eInternalsVisibleCompPaths, cenv.topCcu, envAtEnd.DisplayEnv, implFileExprAfterSig, extraAttribs, isLastCompiland) with e -> errorRecovery e m - false) + false, StampMap.Empty) - let implFile = TImplFile(qualNameOfFile, scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint, isScript) + let implFile = TImplFile(qualNameOfFile, scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint, isScript, anonRecdTypes) return (topAttrs, implFile, envAtEnd, cenv.createsGeneratedProvidedTypes) } diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 1963b00ed34..3bc6214ec7c 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -162,22 +162,26 @@ type LongIdentWithDots = /// more freedom about typechecking these expressions. /// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit) | LongIdentWithDots of id:LongIdent * dotms:range list - with member this.Range = - match this with - | LongIdentWithDots([],_) -> failwith "rangeOfLidwd" - | LongIdentWithDots([id],[]) -> id.idRange - | LongIdentWithDots([id],[m]) -> unionRanges id.idRange m - | LongIdentWithDots(h::t,[]) -> unionRanges h.idRange (List.last t).idRange - | LongIdentWithDots(h::t,dotms) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotms) - member this.Lid = match this with LongIdentWithDots(lid,_) -> lid - member this.ThereIsAnExtraDotAtTheEnd = match this with LongIdentWithDots(lid,dots) -> lid.Length = dots.Length - member this.RangeSansAnyExtraDot = - match this with - | LongIdentWithDots([],_) -> failwith "rangeOfLidwd" - | LongIdentWithDots([id],_) -> id.idRange - | LongIdentWithDots(h::t,dotms) -> - let nonExtraDots = if dotms.Length = t.Length then dotms else List.take t.Length dotms - unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last nonExtraDots) + + member this.Range = + match this with + | LongIdentWithDots([],_) -> failwith "rangeOfLidwd" + | LongIdentWithDots([id],[]) -> id.idRange + | LongIdentWithDots([id],[m]) -> unionRanges id.idRange m + | LongIdentWithDots(h::t,[]) -> unionRanges h.idRange (List.last t).idRange + | LongIdentWithDots(h::t,dotms) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotms) + + member this.Lid = match this with LongIdentWithDots(lid,_) -> lid + + member this.ThereIsAnExtraDotAtTheEnd = match this with LongIdentWithDots(lid,dots) -> lid.Length = dots.Length + + member this.RangeSansAnyExtraDot = + match this with + | LongIdentWithDots([],_) -> failwith "rangeOfLidwd" + | LongIdentWithDots([id],_) -> id.idRange + | LongIdentWithDots(h::t,dotms) -> + let nonExtraDots = if dotms.Length = t.Length then dotms else List.take t.Length dotms + unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last nonExtraDots) //------------------------------------------------------------------------ // AST: the grammar of implicitly scoped type parameters @@ -428,44 +432,56 @@ and | LongIdentApp of typeName:SynType * longDotId:LongIdentWithDots * LESSRange:range option * typeArgs:SynType list * commaRanges:range list * GREATERrange:range option * range:range /// F# syntax : type * ... * type - // the bool is true if / rather than * follows the type - | Tuple of typeNames:(bool*SynType) list * range:range - /// F# syntax : struct (type * ... * type) // the bool is true if / rather than * follows the type - | StructTuple of typeNames:(bool*SynType) list * range:range + | Tuple of isStruct:bool * typeNames:(bool*SynType) list * range:range + + /// F# syntax : {| id: type; ...; id: type |} + /// F# syntax : struct {| id: type; ...; id: type |} + | AnonRecd of isStruct:bool * typeNames:(Ident * SynType) list * range:range /// F# syntax : type[] | Array of int * elementType:SynType * range:range + /// F# syntax : type -> type | Fun of argType:SynType * returnType:SynType * range:range + /// F# syntax : 'Var | Var of genericName:SynTypar * range:range + /// F# syntax : _ | Anon of range:range + /// F# syntax : typ with constraints | WithGlobalConstraints of typeName:SynType * constraints:SynTypeConstraint list * range:range + /// F# syntax : #type | HashConstraint of SynType * range:range + /// F# syntax : for units of measure e.g. m / s | MeasureDivide of dividendType:SynType * divisorType:SynType * range:range + /// F# syntax : for units of measure e.g. m^3, kg^1/2 | MeasurePower of measureType:SynType * SynRationalConst * range:range + /// F# syntax : 1, "abc" etc, used in parameters to type providers /// For the dimensionless units i.e. 1 , and static parameters to provided types | StaticConstant of constant:SynConst * range:range + /// F# syntax : const expr, used in static parameters to type providers | StaticConstantExpr of expr:SynExpr * range:range + /// F# syntax : ident=1 etc., used in static parameters to type providers | StaticConstantNamed of expr:SynType * SynType * range:range + /// Get the syntactic range of source code covered by this construct. member x.Range = match x with | SynType.App (range=m) | SynType.LongIdentApp (range=m) | SynType.Tuple (range=m) - | SynType.StructTuple (range=m) | SynType.Array (range=m) + | SynType.AnonRecd (range=m) | SynType.Fun (range=m) | SynType.Var (range=m) | SynType.Anon (range=m) @@ -504,10 +520,11 @@ and | Typed of expr:SynExpr * typeName:SynType * range:range /// F# syntax: e1, ..., eN - | Tuple of exprs:SynExpr list * commaRanges:range list * range:range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them + | Tuple of isStruct: bool * exprs:SynExpr list * commaRanges:range list * range:range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them - /// F# syntax: struct (e1, ..., eN) - | StructTuple of exprs:SynExpr list * commaRanges:range list * range:range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them + /// F# syntax: {| id1=e1; ...; idN=eN |} + /// F# syntax: {| new id1=e1; ...; idN=eN |} + | AnonRecd of isStruct: bool * recordFields:(Ident * SynExpr) list * range:range /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] | ArrayOrList of isList:bool * exprs:SynExpr list * range:range @@ -728,7 +745,7 @@ and | SynExpr.Const (range=m) | SynExpr.Typed (range=m) | SynExpr.Tuple (range=m) - | SynExpr.StructTuple (range=m) + | SynExpr.AnonRecd (range=m) | SynExpr.ArrayOrList (range=m) | SynExpr.Record (range=m) | SynExpr.New (range=m) @@ -791,8 +808,8 @@ and | SynExpr.Const (range=m) | SynExpr.Typed (range=m) | SynExpr.Tuple (range=m) - | SynExpr.StructTuple (range=m) | SynExpr.ArrayOrList (range=m) + | SynExpr.AnonRecd (range=m) | SynExpr.Record (range=m) | SynExpr.New (range=m) | SynExpr.ObjExpr (range=m) @@ -845,6 +862,7 @@ and | SynExpr.DiscardAfterMissingQualificationAfterDot (expr,_) -> expr.Range | SynExpr.Fixed (_,m) -> m | SynExpr.Ident id -> id.idRange + /// Attempt to get the range of the first token or initial portion only - this is extremely ad-hoc, just a cheap way to improve a certain 'query custom operation' error range member e.RangeOfFirstPortion = match e with @@ -853,8 +871,8 @@ and | SynExpr.Const (range=m) | SynExpr.Typed (range=m) | SynExpr.Tuple (range=m) - | SynExpr.StructTuple (range=m) | SynExpr.ArrayOrList (range=m) + | SynExpr.AnonRecd (range=m) | SynExpr.Record (range=m) | SynExpr.New (range=m) | SynExpr.ObjExpr (range=m) @@ -981,8 +999,7 @@ and | Or of SynPat * SynPat * range:range | Ands of SynPat list * range:range | LongIdent of longDotId:LongIdentWithDots * (* holds additional ident for tooling *) Ident option * SynValTyparDecls option (* usually None: temporary used to parse "f<'a> x = x"*) * SynConstructorArgs * accessibility:SynAccess option * range:range - | Tuple of SynPat list * range:range - | StructTuple of SynPat list * range:range + | Tuple of isStruct: bool * SynPat list * range:range | Paren of SynPat * range:range | ArrayOrList of bool * SynPat list * range:range | Record of ((LongIdent * Ident) * SynPat) list * range:range @@ -1013,7 +1030,6 @@ and | SynPat.LongIdent (range=m) | SynPat.ArrayOrList (range=m) | SynPat.Tuple (range=m) - | SynPat.StructTuple (range=m) | SynPat.Typed (range=m) | SynPat.Attrib (range=m) | SynPat.Record (range=m) @@ -1702,8 +1718,8 @@ let rec SimplePatsOfPat synArgNameGenerator p = SynSimplePats.Typed(p2,ty,m), laterf // | SynPat.Paren (p,m) -> SimplePatsOfPat synArgNameGenerator p - | SynPat.Tuple (ps,m) - | SynPat.Paren(SynPat.Tuple (ps,m),_) -> + | SynPat.Tuple (false,ps,m) + | SynPat.Paren(SynPat.Tuple (false,ps,m),_) -> let ps2,laterf = List.foldBack (fun (p',rhsf) (ps',rhsf') -> @@ -1823,14 +1839,14 @@ let mkSynDotBrackSeqSliceGet m mDot arr (argslist:list) = | SynIndexerArg.One x -> yield x | _ -> () ] if notsliced.Length = argslist.Length then - SynExpr.DotIndexedGet(arr,[SynIndexerArg.One (SynExpr.Tuple(notsliced,[],unionRanges (List.head notsliced).Range (List.last notsliced).Range))],mDot,m) + 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) let mkSynDotParenGet lhsm dotm a b = match b with - | SynExpr.Tuple ([_;_],_,_) -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm) - | SynExpr.Tuple ([_;_;_],_,_) -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm) + | SynExpr.Tuple (false,[_;_],_,_) -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm) + | SynExpr.Tuple (false,[_;_;_],_,_) -> errorR(Deprecated(FSComp.SR.astDeprecatedIndexerNotation(),lhsm)) ; SynExpr.Const(SynConst.Unit,lhsm) | _ -> mkSynInfix dotm a parenGet b let mkSynUnit m = SynExpr.Const(SynConst.Unit,m) @@ -2337,10 +2353,12 @@ let rec synExprContainsError inpExpr = walkExpr e1 || walkExpr e2 | SynExpr.ArrayOrList (_,es,_) - | SynExpr.Tuple (es,_,_) - | SynExpr.StructTuple (es,_,_) -> + | SynExpr.Tuple (_,es,_,_) -> walkExprs es + | SynExpr.AnonRecd (_,flds,_) -> + walkExprs (List.map snd flds) + | SynExpr.Record (_,_,fs,_) -> let flds = fs |> List.choose (fun (_, v, _) -> v) walkExprs (flds) diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 699b6c52ec8..b7ab66e6461 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -300,7 +300,7 @@ module InterfaceFileWriter = fprintfn os "#light" fprintfn os "" - for (TImplFile(_, _, mexpr, _, _)) in declaredImpls do + for (TImplFile(_, _, mexpr, _, _, _)) in declaredImpls do let denv = BuildInitialDisplayEnvForSigFileGeneration tcGlobals writeViaBufferWithEnvironmentNewLines os (fun os s -> Printf.bprintf os "%s\n\n" s) (NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr |> Layout.squashTo 80 |> Layout.showL) @@ -1800,7 +1800,7 @@ let main1(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, gener // it as the updated global error logger and never remove it let oldLogger = errorLogger let errorLogger = - let scopedPragmas = [ for (TImplFile(_, pragmas, _, _, _)) in typedImplFiles do yield! pragmas ] + let scopedPragmas = [ for (TImplFile(_, pragmas, _, _, _, _)) in typedImplFiles do yield! pragmas ] GetErrorLoggerFilteringByScopedPragmas(true, scopedPragmas, oldLogger) let _unwindEL_3 = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) @@ -1960,13 +1960,10 @@ let main2b (tcImportsCapture,dynamicAssemblyCreator) (Args (ctok, tcConfig: TcCo let ilxGenerator = CreateIlxAssemblyGenerator (tcConfig, tcImports, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), generatedCcu) let codegenResults = GenerateIlxCode ((if Option.isSome dynamicAssemblyCreator then IlReflectBackend else IlWriteBackend), Option.isSome dynamicAssemblyCreator, false, tcConfig, topAttrs, optimizedImpls, generatedCcu.AssemblyName, ilxGenerator) - let casApplied = new Dictionary() - let securityAttrs, topAssemblyAttrs = topAttrs.assemblyAttrs |> List.partition (fun a -> TypeChecker.IsSecurityAttribute tcGlobals (tcImports.GetImportMap()) casApplied a rangeStartup) - - // remove any security attributes from the top-level assembly attribute list + let topAssemblyAttrs = codegenResults.topAssemblyAttrs let topAttrs = {topAttrs with assemblyAttrs=topAssemblyAttrs} - let permissionSets = ilxGenerator.CreatePermissionSets securityAttrs - let secDecls = if List.isEmpty securityAttrs then emptyILSecurityDecls else mkILSecurityDecls permissionSets + let permissionSets = codegenResults.permissionSets + let secDecls = mkILSecurityDecls permissionSets let ilxMainModule = MainModuleBuilder.CreateMainModule (ctok, tcConfig, tcGlobals, tcImports, pdbfile, assemblyName, outfile, topAttrs, idata, optDataResources, codegenResults, assemVerFromAttrib, metadataVersion, secDecls) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index b0d55326c4a..f320761eec6 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1115,7 +1115,7 @@ type internal FsiDynamicCompiler // 'Open' the path for the fragment we just compiled for any future printing. let denv = denv.AddOpenPath (pathOfLid prefixPath) - for (TImplFile(_qname,_,mexpr,_,_)) in declaredImpls do + for (TImplFile(_qname,_,mexpr,_,_,_)) in declaredImpls do let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr if not (Layout.isEmptyL responseL) then let opts = valuePrinter.GetFsiPrintOptions() diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index f117f36ccad..8d2fe33be73 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -88,6 +88,8 @@ let GetSuperTypeOfType g amap m typ = Some(g.system_Enum_typ) else Some (g.system_Value_typ) + elif isAnonRecdTy g typ then + Some g.obj_ty elif isRecdTy g typ || isUnionTy g typ then Some g.obj_ty else diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index 0a59e85582a..2ee543d9b1f 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -109,6 +109,8 @@ module TaggedTextOps = let rightBracket = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.rightBracket let leftBrace = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.leftBrace let rightBrace = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.rightBrace + let leftBraceBar = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.leftBraceBar + let rightBraceBar = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.rightBraceBar let equals = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.equals let arrow = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.arrow let questionMark = Internal.Utilities.StructuredFormat.TaggedTextOps.Literals.questionMark diff --git a/src/fsharp/layout.fsi b/src/fsharp/layout.fsi index e2d1bcc7a3b..a9ced6d9f2a 100644 --- a/src/fsharp/layout.fsi +++ b/src/fsharp/layout.fsi @@ -104,6 +104,8 @@ module TaggedTextOps = val rightBracket : TaggedText val leftBrace: TaggedText val rightBrace : TaggedText + val leftBraceBar: TaggedText + val rightBraceBar : TaggedText val leftAngle: TaggedText val rightAngle: TaggedText val equals : TaggedText diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index cffda3b3ccb..1b13aab4e3e 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -560,11 +560,13 @@ rule token args skip = parse | "=" { EQUALS } | "[" { LBRACK } | "[|" { LBRACK_BAR } + | "{|" { LBRACE_BAR } | "<" { LESS false } | ">" { GREATER false } | "[<" { LBRACK_LESS } | "]" { RBRACK } | "|]" { BAR_RBRACK } + | "|}" { BAR_RBRACE } | ">]" { GREATER_RBRACK } | "{" { LBRACE } | "|" { BAR } diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index c36b1886418..bd6f1b12a33 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -197,8 +197,8 @@ let rangeOfLongIdent(lid:LongIdent) = %token OPEN OR REC THEN TO TRUE TRY TYPE VAL INLINE INTERFACE INSTANCE CONST %token WHEN WHILE WITH HASH AMP AMP_AMP QUOTE LPAREN RPAREN RPAREN_COMING_SOON RPAREN_IS_HERE STAR COMMA RARROW GREATER_BAR_RBRACK LPAREN_STAR_RPAREN %token QMARK QMARK_QMARK DOT COLON COLON_COLON COLON_GREATER COLON_QMARK_GREATER COLON_QMARK COLON_EQUALS SEMICOLON -%token SEMICOLON_SEMICOLON LARROW EQUALS LBRACK LBRACK_BAR LBRACK_LESS LBRACE -%token LBRACE_LESS BAR_RBRACK GREATER_RBRACE UNDERSCORE +%token SEMICOLON_SEMICOLON LARROW EQUALS LBRACK LBRACK_BAR LBRACE_BAR LBRACK_LESS LBRACE +%token BAR_RBRACK BAR_RBRACE UNDERSCORE %token BAR RBRACK RBRACE RBRACE_COMING_SOON RBRACE_IS_HERE MINUS DOLLAR %token GREATER_RBRACK STRUCT SIG %token STATIC MEMBER CLASS ABSTRACT OVERRIDE DEFAULT CONSTRUCTOR INHERIT @@ -1782,10 +1782,10 @@ memberCore: let args = if id.idText = "set" then match args with - | [SynPat.Paren(SynPat.Tuple (indexPats,_),indexPatRange);valuePat] when id.idText = "set" -> - [SynPat.Tuple(indexPats@[valuePat],unionRanges indexPatRange valuePat.Range)] + | [SynPat.Paren(SynPat.Tuple (false,indexPats,_),indexPatRange);valuePat] when id.idText = "set" -> + [SynPat.Tuple(false,indexPats@[valuePat],unionRanges indexPatRange valuePat.Range)] | [indexPat;valuePat] -> - [SynPat.Tuple(args,unionRanges indexPat.Range valuePat.Range)] + [SynPat.Tuple(false,args,unionRanges indexPat.Range valuePat.Range)] | [valuePat] -> [valuePat] | _ -> @@ -1945,11 +1945,11 @@ opt_classDefn: /* An 'inherits' definition in an object type definition */ inheritsDefn: - | INHERIT appTypeNonAtomicDeprecated optBaseSpec + | INHERIT atomTypeNonAtomicDeprecated optBaseSpec { let mDecl = unionRanges (rhs parseState 1) (($2): SynType).Range SynMemberDefn.Inherit($2,$3,mDecl) } - | INHERIT appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType optBaseSpec + | INHERIT atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType optBaseSpec { let mDecl = unionRanges (rhs parseState 1) $4.Range SynMemberDefn.ImplicitInherit($2,$4,$5,mDecl) } @@ -2081,6 +2081,24 @@ braceFieldDeclList: | LBRACE error rbrace { [] } +anonRecdType: + | STRUCT braceBarFieldDeclListCore + { $2,true } + | braceBarFieldDeclListCore + { $1,false } + +/* The core of a record type definition */ +braceBarFieldDeclListCore: + | LBRACE_BAR recdFieldDeclList bar_rbrace + { $2 } + + | LBRACE_BAR recdFieldDeclList recover + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBraceBar()) + $2 } + + | LBRACE_BAR error bar_rbrace + { [] } + inlineAssemblyTyconRepr: | HASH stringOrKeywordString HASH { libraryOnlyError (lhs parseState) @@ -2210,8 +2228,8 @@ typeConstraint: | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } typarAlts: - | typarAlts OR appType { $3::$1 } - | appType { [$1] } + | typarAlts OR appType { $3::$1 } + | appType { [$1] } /* The core of a union type definition */ unionTypeRepr: @@ -2359,7 +2377,7 @@ openDecl: /*-------------------------------------------------------------------------*/ -/* F# Definitions and Expressions */ +/* F# Definitions, Types, Patterns and Expressions */ /* A 'let ...' or 'do ...' statement in the non-#light syntax */ defnBindings: @@ -2472,7 +2490,7 @@ cPrototype: SynExpr.Const(SynConst.String("extern was not given a DllImport attribute",rhs parseState 8),rhs parseState 8), mRhs) (fun attrs vis -> - let bindingId = SynPat.LongIdent (LongIdentWithDots([nm],[]), None, Some noInferredTypars, SynConstructorArgs.Pats [SynPat.Tuple(args,argsm)], vis, nmm) + let bindingId = SynPat.LongIdent (LongIdentWithDots([nm],[]), None, Some noInferredTypars, SynConstructorArgs.Pats [SynPat.Tuple(false,args,argsm)], vis, nmm) let binding = mkSynBinding (xmlDoc, bindingId) (vis, false, false, mBindLhs, NoSequencePointAtInvisibleBinding, Some rty ,rhsExpr, mRhs, [], attrs, None) @@ -2754,9 +2772,9 @@ headBindingPattern: | headBindingPattern BAR headBindingPattern { SynPat.Or($1,$3,rhs2 parseState 1 3) } | headBindingPattern COLON_COLON headBindingPattern - { SynPat.LongIdent (LongIdentWithDots(mkSynCaseName (rhs parseState 2) opNameCons,[]), None, None, SynConstructorArgs.Pats [SynPat.Tuple ([$1;$3],rhs2 parseState 1 3)],None,lhs parseState) } + { SynPat.LongIdent (LongIdentWithDots(mkSynCaseName (rhs parseState 2) opNameCons,[]), None, None, SynConstructorArgs.Pats [SynPat.Tuple (false,[$1;$3],rhs2 parseState 1 3)],None,lhs parseState) } | tuplePatternElements %prec pat_tuple - { SynPat.Tuple(List.rev $1, lhs parseState) } + { SynPat.Tuple(false,List.rev $1, lhs parseState) } | conjPatternElements %prec pat_conj { SynPat.Ands(List.rev $1, lhs parseState) } | constrPattern @@ -2790,7 +2808,7 @@ constrPattern: { let vis,lid = $1 in SynPat.LongIdent (lid,None,$2, $4,vis,lhs parseState) } | atomicPatternLongIdent opt_explicitValTyparDecls2 HIGH_PRECEDENCE_BRACK_APP atomicPatsOrNamePatPairs { let vis,lid = $1 in SynPat.LongIdent (lid,None,$2, $4,vis,lhs parseState) } - | COLON_QMARK atomType %prec pat_isinst + | COLON_QMARK atomTypeOrAnonRecdType %prec pat_isinst { SynPat.IsInst($2,lhs parseState) } | atomicPattern { $1 } @@ -2815,8 +2833,8 @@ atomicPattern: | quoteExpr { SynPat.QuoteExpr($1,lhs parseState) } | CHAR DOT_DOT CHAR { SynPat.DeprecatedCharRange ($1,$3,rhs2 parseState 1 3) } - | LBRACE recordPatternElements rbrace - { $2 } + | LBRACE recordPatternElementsAux rbrace + { let rs,m = $2 in SynPat.Record (rs,m) } | LBRACK listPatternElements RBRACK { SynPat.ArrayOrList(false,$2,lhs parseState) } | LBRACK_BAR listPatternElements BAR_RBRACK @@ -2850,10 +2868,10 @@ atomicPattern: { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedParen()) SynPat.Wild (lhs parseState)} | STRUCT LPAREN tupleParenPatternElements rparen - { SynPat.StructTuple(List.rev $3,lhs parseState) } + { SynPat.Tuple(true, List.rev $3,lhs parseState) } | STRUCT LPAREN tupleParenPatternElements recover { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()); - SynPat.StructTuple(List.rev $3,lhs parseState) } + SynPat.Tuple(true, List.rev $3,lhs parseState) } | STRUCT LPAREN error rparen { (* silent recovery *) SynPat.Wild (lhs parseState) } | STRUCT LPAREN recover @@ -2899,7 +2917,7 @@ parenPattern: | parenPattern BAR parenPattern { SynPat.Or($1,$3,rhs2 parseState 1 3) } | tupleParenPatternElements - { SynPat.Tuple(List.rev $1,lhs parseState) } + { SynPat.Tuple(false,List.rev $1,lhs parseState) } | conjParenPatternElements { SynPat.Ands(List.rev $1,rhs2 parseState 1 3) } | parenPattern COLON typeWithTypeConstraints %prec paren_pat_colon @@ -2909,7 +2927,7 @@ parenPattern: { let lhsm = lhs parseState SynPat.Attrib($2,$1,lhsm) } | parenPattern COLON_COLON parenPattern - { SynPat.LongIdent (LongIdentWithDots(mkSynCaseName (rhs parseState 2) opNameCons,[]), None, None, SynConstructorArgs.Pats [ SynPat.Tuple ([$1;$3],rhs2 parseState 1 3) ],None,lhs parseState) } + { SynPat.LongIdent (LongIdentWithDots(mkSynCaseName (rhs parseState 2) opNameCons,[]), None, None, SynConstructorArgs.Pats [ SynPat.Tuple (false,[$1;$3],rhs2 parseState 1 3) ],None,lhs parseState) } | constrPattern { $1 } tupleParenPatternElements: @@ -2924,9 +2942,6 @@ conjParenPatternElements: | parenPattern AMP parenPattern { $3 :: $1 :: [] } -recordPatternElements: - | recordPatternElementsAux { let rs,m = $1 in SynPat.Record (rs,m) } - recordPatternElementsAux: /* Fix 1190 */ | recordPatternElement opt_seps { [$1],lhs parseState } @@ -3329,7 +3344,7 @@ declExpr: | declExpr COLON_EQUALS declExpr { mkSynInfix (rhs parseState 2) $1 ":=" $3 } | minusExpr LARROW declExprBlock { mkSynAssign $1 $3 } /* | minusExpr LARROW recover { mkSynAssign $1 (arbExpr("assignRhs",rhs parseState 2)) } */ - | tupleExpr %prec expr_tuple { let exprs,commas = $1 in SynExpr.Tuple(List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ) } + | tupleExpr %prec expr_tuple { let exprs,commas = $1 in SynExpr.Tuple(false, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ) } | declExpr JOIN_IN declExpr { SynExpr.JoinIn($1,rhs parseState 2,$3,unionRanges $1.Range $3.Range) } | declExpr BAR_BAR declExpr { mkSynInfix (rhs parseState 2) $1 "||" $3 } | declExpr INFIX_BAR_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } @@ -3346,7 +3361,7 @@ declExpr: | declExpr GREATER declExpr { mkSynInfix (rhs parseState 2) $1 ">" $3 } | declExpr INFIX_AT_HAT_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } | declExpr PERCENT_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } - | declExpr COLON_COLON declExpr { SynExpr.App (ExprAtomicFlag.NonAtomic, true, mkSynIdGet (rhs parseState 2) opNameCons,SynExpr.Tuple ([$1;$3],[rhs parseState 2],unionRanges $1.Range $3.Range),unionRanges $1.Range $3.Range) } + | declExpr COLON_COLON declExpr { SynExpr.App (ExprAtomicFlag.NonAtomic, true, mkSynIdGet (rhs parseState 2) opNameCons,SynExpr.Tuple (false,[$1;$3],[rhs parseState 2],unionRanges $1.Range $3.Range),unionRanges $1.Range $3.Range) } | declExpr PLUS_MINUS_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } | declExpr MINUS declExpr { mkSynInfix (rhs parseState 2) $1 "-" $3 } | declExpr STAR declExpr { mkSynInfix (rhs parseState 2) $1 "*" $3 } @@ -3382,7 +3397,7 @@ declExpr: | declExpr PERCENT_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } | declExpr COLON_COLON OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("::")) - SynExpr.App (ExprAtomicFlag.NonAtomic, true, mkSynIdGet (rhs parseState 2) opNameCons,SynExpr.Tuple ([$1;(arbExpr("declExprInfix",(rhs parseState 3).StartRange))],[rhs parseState 2],unionRanges $1.Range (rhs parseState 3).StartRange),unionRanges $1.Range (rhs parseState 3).StartRange) } + SynExpr.App (ExprAtomicFlag.NonAtomic, true, mkSynIdGet (rhs parseState 2) opNameCons,SynExpr.Tuple (false,[$1;(arbExpr("declExprInfix",(rhs parseState 3).StartRange))],[rhs parseState 2],unionRanges $1.Range (rhs parseState 3).StartRange),unionRanges $1.Range (rhs parseState 3).StartRange) } | declExpr PLUS_MINUS_OP OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr("declExprInfix",(rhs parseState 3).StartRange))) } | declExpr MINUS OBLOCKEND_COMING_SOON { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("-")) @@ -3538,9 +3553,9 @@ minusExpr: { SynExpr.AddressOf(true,$2,rhs parseState 1,unionRanges (rhs parseState 1) $2.Range) } | AMP_AMP minusExpr { SynExpr.AddressOf(false,$2,rhs parseState 1, unionRanges (rhs parseState 1) $2.Range) } - | NEW appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType + | NEW atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType { SynExpr.New(false,$2,$4,unionRanges (rhs parseState 1) $4.Range) } - | NEW appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP error + | NEW atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP error { SynExpr.New(false,$2,arbExpr("minusExpr",(rhs parseState 4)),unionRanges (rhs parseState 1) ($2).Range) } | NEW error { arbExpr("minusExpr2",(rhs parseState 1)) } @@ -3620,10 +3635,10 @@ atomicExpr: // silent recovery exprFromParseError (SynExpr.ArrayOrList(false,[ ], rhs parseState 1)),false } | STRUCT LPAREN tupleExpr rparen - { let exprs,commas = $3 in SynExpr.StructTuple(List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } + { let exprs,commas = $3 in SynExpr.Tuple(true, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } | STRUCT LPAREN tupleExpr recover { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedBracket()); - let exprs,commas = $3 in SynExpr.StructTuple(List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } + let exprs,commas = $3 in SynExpr.Tuple(true, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } | atomicExprAfterType { $1,false } @@ -3699,6 +3714,8 @@ atomicExprAfterType: { $1 } | braceExpr { $1 } + | braceBarExpr + { $1 } | NULL { SynExpr.Null(lhs parseState) } | FALSE @@ -3925,6 +3942,10 @@ forLoopRange: | parenPattern EQUALS rangeSequenceExpr { raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedSymbolEqualsInsteadOfIn()) } +forLoopDirection: + | TO { true } + | DOWNTO { false } + inlineAssemblyExpr: | HASH stringOrKeywordString opt_inlineAssemblyTypeArg opt_curriedArgExprs opt_inlineAssemblyReturnTypes HASH { libraryOnlyWarning (lhs parseState) @@ -3960,7 +3981,7 @@ opt_inlineAssemblyReturnTypes: { [] } recdExpr: - | INHERIT appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP opt_atomicExprAfterType recdExprBindings opt_seps_recd + | INHERIT atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP opt_atomicExprAfterType recdExprBindings opt_seps_recd { let arg = match $4 with None -> mkSynUnit (lhs parseState) | Some e -> e let l = List.rev $5 let dummyField = mkRecdField (LongIdentWithDots([], [])) // dummy identifier, it will be discarded @@ -4001,7 +4022,6 @@ recdExpr: | UNDERSCORE EQUALS declExprBlock recdExprBindings opt_seps_recd { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnderscoreInvalidFieldName()) let f = mkUnderscoreRecdField (rhs parseState 1) - let l = List.rev $4 let l = rebindRanges (f, Some $3) l $5 (None, None, l) } @@ -4030,6 +4050,7 @@ seps_recd: | SEMICOLON OBLOCKSEP { (rhs2 parseState 1 2), Some (rhs parseState 1).End } | OBLOCKSEP SEMICOLON { (rhs2 parseState 1 2), Some (rhs parseState 2).End } + /* identifier can start from the underscore */ @@ -4082,19 +4103,19 @@ objExpr: let fullRange = match $3 with [] -> (rhs parseState 1) | _ -> (rhs2 parseState 1 3) fullRange, (fun m -> let (a,b) = $1 in SynExpr.ObjExpr(a,b,[],$3, mNewExpr, m)) } - | NEW appTypeNonAtomicDeprecated + | NEW atomTypeNonAtomicDeprecated { let mNewExpr = rhs parseState 1 (rhs2 parseState 1 2), (fun m -> let (a,b) = $2,None in SynExpr.ObjExpr(a,b,[],[], mNewExpr, m)) } objExprBaseCall: - | NEW appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType baseSpec + | NEW atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType baseSpec { ($2, Some($4,Some($5))) } - | NEW appTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType + | NEW atomTypeNonAtomicDeprecated opt_HIGH_PRECEDENCE_APP atomicExprAfterType { ($2, Some($4,None)) } - | NEW appTypeNonAtomicDeprecated + | NEW atomTypeNonAtomicDeprecated { $2,None } @@ -4138,9 +4159,45 @@ objExprInterface: | interfaceMember appType opt_objExprBindings opt_declEnd opt_OBLOCKSEP { InterfaceImpl($2, $3, lhs parseState) } -forLoopDirection: - | TO { true } - | DOWNTO { false } +braceBarExpr: + | STRUCT braceBarExprCore + { $2 true } + | braceBarExprCore + { $1 false } + +braceBarExprCore: + | LBRACE_BAR oneOrMoreRecdExprBindings bar_rbrace + { let flds = $2 + let m = rhs2 parseState 1 3 + (fun isStruct -> SynExpr.AnonRecd(isStruct,flds,m)) } + + | LBRACE_BAR oneOrMoreRecdExprBindings recover + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBraceBar()) + let flds = $2 + let m = rhs2 parseState 1 2 + (fun isStruct -> SynExpr.AnonRecd(isStruct,flds,m)) } + + | LBRACE_BAR error bar_rbrace + { // silent recovery + let m = rhs2 parseState 1 3 + (fun _ -> arbExpr("braceBarExpr",m)) } + + | LBRACE_BAR recover + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBraceBar()) + let m = rhs2 parseState 1 1 + (fun isStruct -> SynExpr.AnonRecd(isStruct,[],m)) } + + | LBRACE_BAR bar_rbrace + { let m = rhs2 parseState 1 2 + (fun isStruct -> SynExpr.AnonRecd(isStruct,[],m)) } + +oneOrMoreRecdExprBindings: + | recdBinding recdExprBindings + { (($1, None) :: List.rev $2) |> List.choose (function + | (((LongIdentWithDots([id],_),_),Some e),_) -> Some (id,e) + | (((LongIdentWithDots([id],_),_),None),_) -> Some (id, arbExpr("anonField",id.idRange)) + | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) } + anonLambdaExpr: | FUN atomicPatterns RARROW typedSeqExprBlock @@ -4224,7 +4281,7 @@ topType: topTupleType: | topAppType STAR topTupleTypeElements - { let ty,mdata = $1 in let tys,mdatas = List.unzip $3 in (SynType.Tuple(List.map (fun ty -> (false,ty)) (ty ::tys), lhs parseState)),(mdata :: mdatas) } + { let ty,mdata = $1 in let tys,mdatas = List.unzip $3 in (SynType.Tuple(false,List.map (fun ty -> (false,ty)) (ty ::tys), lhs parseState)),(mdata :: mdatas) } | topAppType { let ty,mdata = $1 in ty,[mdata] } @@ -4274,15 +4331,15 @@ typEOF: tupleType: | appType STAR tupleOrQuotTypeElements - { SynType.Tuple((false,$1) :: $3,lhs parseState) } + { SynType.Tuple(false,(false,$1) :: $3,lhs parseState) } | INFIX_STAR_DIV_MOD_OP tupleOrQuotTypeElements { if $1 <> "/" then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedInfixOperator()); - SynType.Tuple((true, SynType.StaticConstant (SynConst.Int32 1, lhs parseState)):: $2, lhs parseState) } + SynType.Tuple(false,(true, SynType.StaticConstant (SynConst.Int32 1, lhs parseState)):: $2, lhs parseState) } | appType INFIX_STAR_DIV_MOD_OP tupleOrQuotTypeElements { if $2 <> "/" then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedInfixOperator()); - SynType.Tuple((true,$1) :: $3, lhs parseState) } + SynType.Tuple(false,(true,$1) :: $3, lhs parseState) } | appType %prec prec_tuptyp_prefix { $1 } @@ -4298,13 +4355,6 @@ tupleOrQuotTypeElements: | appType %prec prec_tuptyptail_prefix { [(false,$1)] } -tupleTypeElements: - | appType STAR tupleTypeElements - { $1 :: $3 } - - | appType %prec prec_tuptyptail_prefix - { [$1] } - appTypeCon: | path %prec prec_atomtyp_path { SynType.LongIdent($1) } @@ -4378,57 +4428,37 @@ typeArgListElements: { [], [] } powerType: - | atomType + | atomTypeOrAnonRecdType { $1 } - | atomType INFIX_AT_HAT_OP atomicRationalConstant + | atomTypeOrAnonRecdType INFIX_AT_HAT_OP atomicRationalConstant { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator()); if $2 = "^-" then SynType.MeasurePower($1, SynRationalConst.Negate($3), lhs parseState) else SynType.MeasurePower($1, $3, lhs parseState) } -/* Like appType but gives a deprecation error when a non-atomic type is used */ -appTypeNonAtomicDeprecated: - | appType arrayTypeSuffix - { deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState); - SynType.Array($2,$1,lhs parseState) } - - | appType HIGH_PRECEDENCE_BRACK_APP arrayTypeSuffix /* only HPA for "name[]" allowed here */ - { deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState); - SynType.Array($3,$1,lhs parseState) } - - | appType appTypeConPower - { let mWhole = unionRanges (rhs parseState 1) $2.Range // note: use "rhs parseState 1" to deal with parens in "(int) list" - deprecatedWithError (FSComp.SR.parsNonAtomicType()) mWhole; - SynType.App($2, None, [$1], [], None, true, mWhole) } +/* Like appType but gives a deprecation error when a non-atomic type is used */ +/* Also, doesn't start with '{|' */ +atomTypeNonAtomicDeprecated: | LPAREN appTypePrefixArguments rparen appTypeConPower { let args, commas = $2 mlCompatWarning (FSComp.SR.parsMultiArgumentGenericTypeFormDeprecated()) (unionRanges (rhs parseState 1) $4.Range); SynType.App($4, None, args, commas, None, true, unionRanges (rhs parseState 1) $4.Range) } - | powerTypeNonAtomicDeprecated + | atomType { $1 } - | typar COLON_GREATER typ - { deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState); - let tp,typ = $1,$3 - let m = lhs parseState - SynType.WithGlobalConstraints(SynType.Var (tp, rhs parseState 1), [WhereTyparSubtypeOfType(tp,typ,m)],m) } - - | UNDERSCORE COLON_GREATER typ %prec COLON_GREATER - { deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState); - SynType.HashConstraint($3, lhs parseState) } - -/* Like powerType but gives a deprecation warning if a non-atomic type is used */ -powerTypeNonAtomicDeprecated: +atomTypeOrAnonRecdType: | atomType - { $1 } + { $1 } + | anonRecdType + { let flds,isStruct = $1 + let flds2 = + flds |> List.choose (function + | (Field([],false,Some id,ty,false,_xmldoc,None,_m)) -> Some (id,ty) + | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) + SynType.AnonRecd (isStruct,flds2, rhs parseState 1) } - | atomType INFIX_AT_HAT_OP atomicRationalConstant - { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator()); - deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState); - if $2 = "^-" then SynType.MeasurePower($1, SynRationalConst.Negate($3), lhs parseState) - else SynType.MeasurePower($1, $3, lhs parseState) } /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */ @@ -4451,11 +4481,11 @@ atomType: $2 } | STRUCT LPAREN appType STAR tupleOrQuotTypeElements rparen - { SynType.StructTuple((false,$3) :: $5,lhs parseState) } + { SynType.Tuple(true, (false,$3) :: $5,lhs parseState) } | STRUCT LPAREN appType STAR tupleOrQuotTypeElements recover { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) - SynType.StructTuple((false,$3) :: $5,lhs parseState) } + SynType.Tuple(true, (false,$3) :: $5,lhs parseState) } | STRUCT LPAREN appType STAR recover { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedParen()) @@ -4927,6 +4957,9 @@ rbrace: | RBRACE_IS_HERE { } | RBRACE { } +bar_rbrace: + | BAR_RBRACE { } + rparen: | RPAREN_COMING_SOON rparen { } | RPAREN_IS_HERE { } diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index f4a7ac416c3..8702a6a7595 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -530,7 +530,7 @@ module ParsedInput = | SynTypeConstraint.WhereTyparSupportsMember (ts, sign, _) -> List.iter walkType ts; walkMemberSig sign and walkPat = function - | SynPat.Tuple (pats, _) + | SynPat.Tuple (_,pats, _) | SynPat.ArrayOrList (_, pats, _) | SynPat.Ands (pats, _) -> List.iter walkPat pats | SynPat.Named (pat, ident, _, _, _) -> @@ -578,7 +578,7 @@ module ParsedInput = | SynType.LongIdent ident -> addLongIdentWithDots ident | SynType.App (ty, _, types, _, _, _, _) -> walkType ty; List.iter walkType types | SynType.LongIdentApp (_, _, _, types, _, _, _) -> List.iter walkType types - | SynType.Tuple (ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) + | SynType.Tuple (_, ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) | SynType.WithGlobalConstraints (t, typeConstraints, _) -> walkType t; List.iter walkTypeConstraint typeConstraints | _ -> () @@ -616,7 +616,7 @@ module ParsedInput = | SynExpr.TypeTest (e, t, _) | SynExpr.Upcast (e, t, _) | SynExpr.Downcast (e, t, _) -> walkExpr e; walkType t - | SynExpr.Tuple (es, _, _) + | SynExpr.Tuple (_, es, _, _) | Sequentials es | SynExpr.ArrayOrList (_, es, _) -> List.iter walkExpr es | SynExpr.App (_, _, e1, e2, _) @@ -1003,4 +1003,4 @@ module ParsedInput = match tryFindNearestPointAndModules currentLine ast insertionPoint with | Some (scope, _, point), modules -> Some (findBestPositionToInsertOpenDeclaration modules scope point entity) - | _ -> None \ No newline at end of file + | _ -> None diff --git a/src/fsharp/service/ServiceDeclarationLists.fs b/src/fsharp/service/ServiceDeclarationLists.fs index 5acc998cf46..69c6eef3b48 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fs +++ b/src/fsharp/service/ServiceDeclarationLists.fs @@ -284,6 +284,10 @@ module internal DescriptionListsImpl = let _prettyTyparInst, prettyRetTyL = NicePrint.prettyLayoutOfUncurriedSig denv item.TyparInst [] rfinfo.FieldType [], prettyRetTyL + | Item.AnonRecdField(_anonInfo,tys,i, _) -> + let _prettyTyparInst, prettyRetTyL = NicePrint.prettyLayoutOfUncurriedSig denv item.TyparInst [] tys.[i] + [], prettyRetTyL + | Item.ILField finfo -> let _prettyTyparInst, prettyRetTyL = NicePrint.prettyLayoutOfUncurriedSig denv item.TyparInst [] (finfo.FieldType(amap,m)) [], prettyRetTyL @@ -404,6 +408,7 @@ module internal DescriptionListsImpl = | Item.UnionCase _ | Item.ActivePatternCase _ -> FSharpGlyph.EnumMember | Item.ExnCase _ -> FSharpGlyph.Exception + | Item.AnonRecdField _ -> FSharpGlyph.Field | Item.RecdField _ -> FSharpGlyph.Field | Item.ILField _ -> FSharpGlyph.Field | Item.Event _ -> FSharpGlyph.Event diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fs b/src/fsharp/service/ServiceInterfaceStubGenerator.fs index 04b09ec157b..34c99cd8e04 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fs +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fs @@ -151,8 +151,8 @@ type internal InterfaceData = None | SynType.Anon _ -> Some "_" - | SynType.Tuple(ts, _) -> - Some (ts |> Seq.choose (snd >> (|TypeIdent|_|)) |> String.concat " * ") + | SynType.AnonRecd (_, ts, _) -> + Some (ts |> Seq.choose (snd >> (|TypeIdent|_|)) |> String.concat "; ") | SynType.Array(dimension, TypeIdent typeName, _) -> Some (sprintf "%s [%s]" typeName (new String(',', dimension-1))) | SynType.MeasurePower(TypeIdent typeName, RationalConst power, _) -> @@ -760,7 +760,7 @@ module internal InterfaceStubGenerator = | SynExpr.Typed(synExpr, _synType, _range) -> walkExpr synExpr - | SynExpr.Tuple(synExprList, _, _range) + | SynExpr.Tuple(_, synExprList, _, _range) | SynExpr.ArrayOrList(_, synExprList, _range) -> List.tryPick walkExpr synExprList diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index ce78b9101e6..393579bb5ee 100755 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -237,16 +237,16 @@ module internal TokenClassifications = | RPAREN | RPAREN_COMING_SOON | RPAREN_IS_HERE -> (FSharpTokenColorKind.Punctuation,FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamEnd ||| FSharpTokenTriggerClass.MatchBraces) - | LBRACK_LESS | LBRACE_LESS + | LBRACK_LESS -> (FSharpTokenColorKind.Punctuation,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None ) - | LQUOTE _ | LBRACK | LBRACE | LBRACK_BAR + | LQUOTE _ | LBRACK | LBRACE | LBRACK_BAR | LBRACE_BAR -> (FSharpTokenColorKind.Punctuation,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MatchBraces ) - | GREATER_RBRACE | GREATER_RBRACK | GREATER_BAR_RBRACK + | GREATER_RBRACK | GREATER_BAR_RBRACK -> (FSharpTokenColorKind.Punctuation,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.None ) - | RQUOTE _ | RBRACK | RBRACE | RBRACE_COMING_SOON | RBRACE_IS_HERE | BAR_RBRACK + | RQUOTE _ | RBRACK | RBRACE | RBRACE_COMING_SOON | RBRACE_IS_HERE | BAR_RBRACK | BAR_RBRACE -> (FSharpTokenColorKind.Punctuation,FSharpTokenCharKind.Delimiter,FSharpTokenTriggerClass.MatchBraces ) | PUBLIC | PRIVATE | INTERNAL | BASE | GLOBAL diff --git a/src/fsharp/service/ServiceParamInfoLocations.fs b/src/fsharp/service/ServiceParamInfoLocations.fs index 987d10c2de7..1acdac88a13 100755 --- a/src/fsharp/service/ServiceParamInfoLocations.fs +++ b/src/fsharp/service/ServiceParamInfoLocations.fs @@ -96,7 +96,7 @@ module internal NoteworthyParamInfoLocationsImpl = // see bug 345385. let rec searchSynArgExpr traverseSynExpr pos expr = match expr with - | SynExprParen((SynExpr.Tuple(synExprList, commaRanges, _tupleRange) as synExpr), _lpRange, rpRangeOpt, parenRange) -> // tuple argument + | SynExprParen((SynExpr.Tuple(false, synExprList, commaRanges, _tupleRange) as synExpr), _lpRange, rpRangeOpt, parenRange) -> // tuple argument let inner = traverseSynExpr synExpr match inner with | None -> @@ -108,7 +108,7 @@ module internal NoteworthyParamInfoLocationsImpl = NotFound, None | _ -> NotFound, None - | SynExprParen(SynExprParen(SynExpr.Tuple(_, _, _), _, _, _) as synExpr, _, rpRangeOpt, parenRange) -> // f((x, y)) is special, single tuple arg + | SynExprParen(SynExprParen(SynExpr.Tuple(false, _, _, _), _, _, _) as synExpr, _, rpRangeOpt, parenRange) -> // f((x, y)) is special, single tuple arg handleSingleArg traverseSynExpr (pos, synExpr, parenRange, rpRangeOpt) // dig into multiple parens diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 4a07d826880..3f1de0e7e84 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -191,9 +191,10 @@ module public AstTraversal = |> pick expr | SynExpr.Const(_synConst, _range) -> None | SynExpr.Typed(synExpr, synType, _range) -> [ traverseSynExpr synExpr; traverseSynType synType ] |> List.tryPick id - | SynExpr.Tuple(synExprList, _, _range) - | SynExpr.StructTuple(synExprList, _, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr + | SynExpr.Tuple(_, synExprList, _, _range) | SynExpr.ArrayOrList(_, synExprList, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr + + | SynExpr.AnonRecd(_isStruct, synExprList, _range) -> synExprList |> List.map snd |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr | SynExpr.Record(inheritOpt,copyOpt,fields, _range) -> [ let diveIntoSeparator offsideColumn scPosOpt copyOpt = @@ -455,8 +456,7 @@ module public AstTraversal = | SynPat.Paren (p, _) -> traversePat p | SynPat.Or (p1, p2, _) -> [ p1; p2] |> List.tryPick traversePat | SynPat.Ands (ps, _) - | SynPat.Tuple (ps, _) - | SynPat.StructTuple (ps, _) + | SynPat.Tuple (_, ps, _) | SynPat.ArrayOrList (_, ps, _) -> ps |> List.tryPick traversePat | SynPat.Attrib (p, _, _) -> traversePat p | SynPat.LongIdent(_, _, _, args, _, _) -> @@ -485,8 +485,7 @@ module public AstTraversal = | SynType.Array (_, ty, _) -> traverseSynType ty | SynType.StaticConstantNamed (ty1, ty2, _) | SynType.MeasureDivide (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick traverseSynType - | SynType.Tuple (tys, _) - | SynType.StructTuple (tys, _) -> tys |> List.map snd |> List.tryPick traverseSynType + | SynType.Tuple (_, tys, _) -> tys |> List.map snd |> List.tryPick traverseSynType | SynType.StaticConstantExpr (expr, _) -> traverseSynExpr [] expr | SynType.Anon _ -> None | _ -> None diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index ffe2461d959..0c55b379e67 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -371,8 +371,7 @@ module Structure = // subtract columns so the @@> or @> is not collapsed rcheck Scope.Quote Collapse.Same r (Range.modBoth (if isRaw then 3 else 2) (if isRaw then 3 else 2) r) parseExpr e - | SynExpr.Tuple (es,_,r) - | SynExpr.StructTuple(es,_,r) -> + | SynExpr.Tuple (_, es, _, r) -> rcheck Scope.Tuple Collapse.Same r r List.iter parseExpr es | SynExpr.Paren (e,_,_,_) -> @@ -849,4 +848,4 @@ module Structure = List.iter parseModuleOrNamespaceSigs moduleSigs getCommentRanges sourceLines - acc :> seq<_> \ No newline at end of file + acc :> seq<_> diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index 1405443c42a..5af088ff525 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -218,15 +218,17 @@ type FSharpParseFileResults(errors: FSharpErrorInfo[], input: Ast.ParsedInput op yield! walkExpr false e2 | SynExpr.ArrayOrList (_,es,_) - | SynExpr.Tuple (es,_,_) - | SynExpr.StructTuple (es,_,_) -> + | SynExpr.Tuple (_,es,_,_) -> yield! walkExprs es | SynExpr.Record (_,copyExprOpt,fs,_) -> match copyExprOpt with | Some (e,_) -> yield! walkExpr true e | None -> () - yield! walkExprs (List.map (fun (_, v, _) -> v) fs |> List.choose id) + yield! walkExprs (fs |> List.choose p23) + + | SynExpr.AnonRecd (_isStruct, fs, _) -> + yield! walkExprs (fs |> List.map snd) | SynExpr.ObjExpr (_,_,bs,is,_,_) -> yield! walkBinds bs @@ -719,7 +721,7 @@ module UntypedParseImpl = List.tryPick walkTyparDecl typars |> Option.orElse (List.tryPick walkTypeConstraint constraints))) |> Option.orElse (List.tryPick walkPat pats) - | SynPat.Tuple(pats, _) -> List.tryPick walkPat pats + | SynPat.Tuple(_,pats, _) -> List.tryPick walkPat pats | SynPat.Paren(pat, _) -> walkPat pat | SynPat.ArrayOrList(_, pats, _) -> List.tryPick walkPat pats | SynPat.IsInst(t, _) -> walkType t @@ -752,7 +754,7 @@ module UntypedParseImpl = | SynType.App(ty, _, types, _, _, _, _) -> walkType ty |> Option.orElse (List.tryPick walkType types) | SynType.LongIdentApp(_, _, _, types, _, _, _) -> List.tryPick walkType types - | SynType.Tuple(ts, _) -> ts |> List.tryPick (fun (_, t) -> walkType t) + | SynType.Tuple(_,ts, _) -> ts |> List.tryPick (fun (_, t) -> walkType t) | SynType.Array(_, t, _) -> walkType t | SynType.Fun(t1, t2, _) -> walkType t1 |> Option.orElse (walkType t2) | SynType.WithGlobalConstraints(t, _, _) -> walkType t @@ -780,7 +782,7 @@ module UntypedParseImpl = | SynExpr.Paren (e, _, _, _) -> walkExprWithKind parentKind e | SynExpr.Quote(_, _, e, _, _) -> walkExprWithKind parentKind e | SynExpr.Typed(e, _, _) -> walkExprWithKind parentKind e - | SynExpr.Tuple(es, _, _) -> List.tryPick (walkExprWithKind parentKind) es + | SynExpr.Tuple(_, es, _, _) -> List.tryPick (walkExprWithKind parentKind) es | SynExpr.ArrayOrList(_, es, _) -> List.tryPick (walkExprWithKind parentKind) es | SynExpr.Record(_, _, fields, r) -> ifPosInRange r (fun _ -> @@ -1050,7 +1052,7 @@ module UntypedParseImpl = let findSetters argList = match argList with - | SynExpr.Paren(SynExpr.Tuple(parameters, _, _), _, _, _) -> + | SynExpr.Paren(SynExpr.Tuple(false, parameters, _, _), _, _, _) -> let setters = HashSet() for p in parameters do match p with @@ -1111,7 +1113,7 @@ module UntypedParseImpl = match path with | TS.Expr(SynExpr.Paren _)::TS.Expr(NewObjectOrMethodCall(args))::_ -> if Option.isSome precedingArgument then None else Some args - | TS.Expr(SynExpr.Tuple (elements, commas, _))::TS.Expr(SynExpr.Paren _)::TS.Expr(NewObjectOrMethodCall(args))::_ -> + | TS.Expr(SynExpr.Tuple (false, elements, commas, _))::TS.Expr(SynExpr.Paren _)::TS.Expr(NewObjectOrMethodCall(args))::_ -> match precedingArgument with | None -> Some args | Some e -> @@ -1213,7 +1215,7 @@ module UntypedParseImpl = match pat with | SynPat.Paren(pat, _) -> match pat with - | SynPat.Tuple(pats, _) -> + | SynPat.Tuple(_, pats, _) -> pats |> List.tryPick visitParam | _ -> visitParam pat | SynPat.Wild(range) when rangeContainsPos range pos -> diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index 187c84bdd0a..3f171716851 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -22,8 +22,7 @@ module XmlDocParsing = | SynPat.Attrib(pat,_attrs,_range) -> digNamesFrom pat | SynPat.LongIdent(_lid,_idOpt,_typDeclsOpt,ConstructorPats pats,_access,_range) -> pats |> List.collect digNamesFrom - | SynPat.Tuple(pats,_range) - | SynPat.StructTuple(pats,_range) -> pats |> List.collect digNamesFrom + | SynPat.Tuple(_,pats,_range) -> pats |> List.collect digNamesFrom | SynPat.Paren(pat,_range) -> digNamesFrom pat | SynPat.OptionalVal (id, _) -> [id.idText] | SynPat.Or _ // no one uses ors in fun decls diff --git a/src/fsharp/symbols/Exprs.fs b/src/fsharp/symbols/Exprs.fs index d818cf956a1..87f93eecc93 100644 --- a/src/fsharp/symbols/Exprs.fs +++ b/src/fsharp/symbols/Exprs.fs @@ -1223,7 +1223,7 @@ and FSharpImplementationFileDeclaration = | InitAction of FSharpExpr and FSharpImplementationFileContents(cenv, mimpl) = - let (TImplFile(qname, _pragmas, ModuleOrNamespaceExprWithSig(_mty, mdef, _), hasExplicitEntryPoint, isScript)) = mimpl + let (TImplFile(qname, _pragmas, ModuleOrNamespaceExprWithSig(_mty, mdef, _), hasExplicitEntryPoint, isScript, _anonRecdTypes)) = mimpl let rec getDecls2 (ModuleOrNamespaceExprWithSig(_mty, def, _m)) = getDecls def and getBind (bind: Binding) = let v = bind.Var diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index a2997654b74..89cb44394b6 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -359,6 +359,7 @@ module internal SymbolHelpers = | Item.UnionCase(ucinfo, _) -> Some (rangeOfUnionCaseInfo preferFlag ucinfo) | Item.ActivePatternCase apref -> Some (rangeOfValRef preferFlag apref.ActivePatternVal) | Item.ExnCase tcref -> Some tcref.Range + | Item.AnonRecdField (_,_,_,m) -> Some m | Item.RecdField rfinfo -> Some (rangeOfRecdFieldInfo preferFlag rfinfo) | Item.Event einfo -> rangeOfEventInfo preferFlag einfo | Item.ILField _ -> None @@ -425,6 +426,7 @@ module internal SymbolHelpers = | Item.UnqualifiedType(erefs) -> erefs |> List.tryPick computeCcuOfTyconRef | Item.SetterArg (_, item) -> ccuOfItem g item + | Item.AnonRecdField (info, _, _, _) -> Some info.Assembly | Item.TypeVar _ -> None | _ -> None @@ -743,6 +745,8 @@ module internal SymbolHelpers = List.zip pi1s pi2s |> List.forall(fun (pi1, pi2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) | Item.Event(evt1), Item.Event(evt2) -> EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 + | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> + Tastops.anonInfoEquiv anon1 anon2 && i1 = i2 | Item.CtorGroup(_, meths1), Item.CtorGroup(_, meths2) -> List.zip meths1 meths2 |> List.forall (fun (minfo1, minfo2) -> MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) @@ -775,6 +779,7 @@ module internal SymbolHelpers = | Item.ExnCase(tcref) -> hash tcref.LogicalName | Item.UnionCase(UnionCaseInfo(_, UCRef(tcref, n)), _) -> hash(tcref.Stamp, n) | Item.RecdField(RecdFieldInfo(_, RFRef(tcref, n))) -> hash(tcref.Stamp, n) + | Item.AnonRecdField(anon, _, i, _) -> hash anon.SortedNames.[i] | Item.Event evt -> evt.ComputeHashCode() | Item.Property(_name, pis) -> hash (pis |> List.map (fun pi -> pi.ComputeHashCode())) | Item.UnqualifiedType(tcref :: _) -> hash tcref.LogicalName @@ -855,6 +860,7 @@ module internal SymbolHelpers = | Item.ActivePatternResult(apinfo, _ty, idx, _) -> apinfo.Names.[idx] | Item.ActivePatternCase apref -> FullNameOfItem g (Item.Value apref.ActivePatternVal) + "." + apref.Name | Item.ExnCase ecref -> fullDisplayTextOfExnRef ecref + | Item.AnonRecdField(anon, _argTys, i, _) -> anon.SortedNames.[i] | Item.RecdField rfinfo -> fullDisplayTextOfRecdFieldRef rfinfo.RecdFieldRef | Item.NewDef id -> id.idText | Item.ILField finfo -> bufs (fun os -> NicePrint.outputILTypeRef denv os finfo.ILTypeRef; bprintf os ".%s" finfo.FieldName) @@ -1191,6 +1197,17 @@ module internal SymbolHelpers = else FSharpStructuredToolTipElement.Single (layout, xml) + | Item.AnonRecdField(anon, argTys, i, _) -> + let argTy = argTys.[i] + let nm = anon.SortedNames.[i] + let argTy, _ = PrettyTypes.PrettifyType g argTy + let layout = + wordL (tagText (FSComp.SR.typeInfoAnonRecdField())) ^^ + wordL (tagRecordField nm) ^^ + RightL.colon ^^ + NicePrint.layoutType denv argTy + FSharpStructuredToolTipElement.Single (layout, FSharpXmlDoc.None) + // Named parameters | Item.ArgName (id, argTy, _) -> let argTy, _ = PrettyTypes.PrettifyType g argTy @@ -1310,6 +1327,8 @@ module internal SymbolHelpers = | Item.RecdField rfi -> (rfi.TyconRef |> ticksAndArgCountTextOfTyconRef)+"."+rfi.Name |> Some + | Item.AnonRecdField _ -> None + | Item.ILField finfo -> match finfo with | ILFieldInfo(tinfo, fdef) -> diff --git a/src/fsharp/symbols/SymbolPatterns.fs b/src/fsharp/symbols/SymbolPatterns.fs index 22b406e12fb..c8c70562cd4 100644 --- a/src/fsharp/symbols/SymbolPatterns.fs +++ b/src/fsharp/symbols/SymbolPatterns.fs @@ -185,7 +185,9 @@ module Symbol = let (|RecordField|_|) (e: FSharpSymbol) = match e with | :? FSharpField as field -> - if field.DeclaringEntity.IsFSharpRecord then Some field else None + match field.DeclaringEntity with + | None -> None + | Some e -> if e.IsFSharpRecord then Some field else None | _ -> None let (|ActivePatternCase|_|) (symbol: FSharpSymbol) = diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 74aa51c9e20..ad8c68c652a 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -710,26 +710,43 @@ and FSharpUnionCase(cenv, v: UnionCaseRef) = and FSharpFieldData = + | AnonField of AnonRecdTypeInfo * TTypes * int * range | ILField of ILFieldInfo | RecdOrClass of RecdFieldRef | Union of UnionCaseRef * int member x.TryRecdField = match x with - | RecdOrClass v -> v.RecdField |> Choice1Of2 - | Union (v, n) -> v.FieldByIndex(n) |> Choice1Of2 - | ILField f -> f |> Choice2Of2 + | AnonField (anonInfo, tinst, n, m) -> (anonInfo, tinst, n, m) |> Choice3Of3 + | RecdOrClass v -> v.RecdField |> Choice1Of3 + | Union (v, n) -> v.FieldByIndex(n) |> Choice1Of3 + | ILField f -> f |> Choice2Of3 - member x.DeclaringTyconRef = + member x.TryDeclaringTyconRef = match x with - | RecdOrClass v -> v.TyconRef - | Union (v, _) -> v.TyconRef - | ILField f -> f.DeclaringTyconRef + | AnonField _ -> None + | RecdOrClass v -> Some v.TyconRef + | Union (v, _) -> Some v.TyconRef + | ILField f -> Some f.DeclaringTyconRef + +and FSharpAnonRecordTypeDetails(cenv: cenv, anonInfo: AnonRecdTypeInfo) = + member __.Assembly = FSharpAssembly (cenv, anonInfo.Assembly) + + /// Names of any enclosing types of the compiled form of the anonymous type (if the anonymous type was defined as a nested type) + member __.EnclosingCompiledTypeNames = anonInfo.ILTypeRef.Enclosing + + /// The name of the compiled form of the anonymous type + member __.CompiledName = anonInfo.ILTypeRef.Name + + /// The sorted labels of the anonymous type + member __.SortedFieldNames = anonInfo.SortedNames and FSharpField(cenv: cenv, d: FSharpFieldData) = inherit FSharpSymbol (cenv, (fun () -> match d with + | AnonField (anonInfo, tinst, n, m) -> + Item.AnonRecdField(anonInfo, tinst, n, m) | RecdOrClass v -> checkEntityIsResolved v.TyconRef Item.RecdField(RecdFieldInfo(generalizeTypars v.TyconRef.TyparsNoRange, v)) @@ -747,15 +764,17 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = ) let isUnresolved() = - entityIsUnresolved d.DeclaringTyconRef || + d.TryDeclaringTyconRef |> Option.exists entityIsUnresolved || match d with + | AnonField _ -> false | RecdOrClass v -> v.TryRecdField.IsNone | Union (v, _) -> v.TryUnionCase.IsNone | ILField _ -> false let checkIsResolved() = - checkEntityIsResolved d.DeclaringTyconRef + d.TryDeclaringTyconRef |> Option.iter checkEntityIsResolved match d with + | AnonField _ -> () | RecdOrClass v -> if v.TryRecdField.IsNone then invalidOp (sprintf "The record field '%s' could not be found in the target type" v.FieldName) @@ -768,7 +787,7 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = new (cenv, rfref) = FSharpField(cenv, FSharpFieldData.RecdOrClass(rfref)) member __.DeclaringEntity = - FSharpEntity(cenv, d.DeclaringTyconRef) + d.TryDeclaringTyconRef |> Option.map (fun tcref -> FSharpEntity(cenv, tcref)) member __.IsUnresolved = isUnresolved() @@ -776,32 +795,47 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = member __.IsMutable = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.IsMutable - | Choice2Of2 f -> not f.IsInitOnly && f.LiteralValue.IsNone + | Choice1Of3 r -> r.IsMutable + | Choice2Of3 f -> not f.IsInitOnly && f.LiteralValue.IsNone + | Choice3Of3 _ -> false member __.IsLiteral = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.LiteralValue.IsSome - | Choice2Of2 f -> f.LiteralValue.IsSome + | Choice1Of3 r -> r.LiteralValue.IsSome + | Choice2Of3 f -> f.LiteralValue.IsSome + | Choice3Of3 _ -> false member __.LiteralValue = if isUnresolved() then None else match d.TryRecdField with - | Choice1Of2 r -> getLiteralValue r.LiteralValue - | Choice2Of2 f -> f.LiteralValue |> Option.map AbstractIL.ILRuntimeWriter.convFieldInit + | Choice1Of3 r -> getLiteralValue r.LiteralValue + | Choice2Of3 f -> f.LiteralValue |> Option.map AbstractIL.ILRuntimeWriter.convFieldInit + | Choice3Of3 _ -> None member __.IsVolatile = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.IsVolatile - | Choice2Of2 _ -> false // F# doesn't actually respect "volatile" from other assemblies in any case + | Choice1Of3 r -> r.IsVolatile + | Choice2Of3 _ -> false // F# doesn't actually respect "volatile" from other assemblies in any case + | Choice3Of3 _ -> false member __.IsDefaultValue = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.IsZeroInit - | Choice2Of2 _ -> false + | Choice1Of3 r -> r.IsZeroInit + | Choice2Of3 _ -> false + | Choice3Of3 _ -> false + + member __.IsAnonRecordField = + match d with + | AnonField _ -> true + | _ -> false + + member __.AnonRecordFieldDetails = + match d with + | AnonField (anonInfo, types, n, _) -> FSharpAnonRecordTypeDetails(cenv, anonInfo), [| for ty in types -> FSharpType(cenv, ty) |], n + | _ -> invalidOp "not an anonymous record field" member __.XmlDocSig = checkIsResolved() @@ -815,6 +849,7 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = SymbolHelpers.GetXmlDocSigOfUnionCaseInfo unionCase | ILField f -> SymbolHelpers.GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f + | AnonField _ -> None match xmlsig with | Some (_, docsig) -> docsig | _ -> "" @@ -822,71 +857,81 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = member __.XmlDoc = if isUnresolved() then XmlDoc.Empty |> makeXmlDoc else match d.TryRecdField with - | Choice1Of2 r -> r.XmlDoc - | Choice2Of2 _ -> XmlDoc.Empty + | Choice1Of3 r -> r.XmlDoc + | Choice2Of3 _ -> XmlDoc.Empty + | Choice3Of3 _ -> XmlDoc.Empty |> makeXmlDoc member __.FieldType = checkIsResolved() let fty = match d.TryRecdField with - | Choice1Of2 r -> r.FormalType - | Choice2Of2 f -> f.FieldType(cenv.amap, range0) + | Choice1Of3 r -> r.FormalType + | Choice2Of3 f -> f.FieldType(cenv.amap, range0) + | Choice3Of3 (_,tinst,n,_) -> tinst.[n] FSharpType(cenv, fty) member __.IsStatic = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.IsStatic - | Choice2Of2 f -> f.IsStatic + | Choice1Of3 r -> r.IsStatic + | Choice2Of3 f -> f.IsStatic + | Choice3Of3 _ -> false member __.Name = checkIsResolved() match d.TryRecdField with - | Choice1Of2 r -> r.Name - | Choice2Of2 f -> f.FieldName + | Choice1Of3 r -> r.Name + | Choice2Of3 f -> f.FieldName + | Choice3Of3 (anonInfo, _tinst, n, _) -> anonInfo.SortedNames.[n] member __.IsCompilerGenerated = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.IsCompilerGenerated - | Choice2Of2 _ -> false + | Choice1Of3 r -> r.IsCompilerGenerated + | Choice2Of3 _ -> false + | Choice3Of3 _ -> false member __.IsNameGenerated = if isUnresolved() then false else match d.TryRecdField with - | Choice1Of2 r -> r.rfield_name_generated + | Choice1Of3 r -> r.rfield_name_generated | _ -> false member __.DeclarationLocation = checkIsResolved() match d.TryRecdField with - | Choice1Of2 r -> r.Range - | Choice2Of2 _ -> range0 + | Choice1Of3 r -> r.Range + | Choice2Of3 _ -> range0 + | Choice3Of3 (_anonInfo, _tinst, _n, m) -> m member __.FieldAttributes = if isUnresolved() then makeReadOnlyCollection [] else match d.TryRecdField with - | Choice1Of2 r -> r.FieldAttribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) - | Choice2Of2 _ -> [] + | Choice1Of3 r -> r.FieldAttribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) + | Choice2Of3 _ -> [] + | Choice3Of3 _ -> [] |> makeReadOnlyCollection member __.PropertyAttributes = if isUnresolved() then makeReadOnlyCollection [] else match d.TryRecdField with - | Choice1Of2 r -> r.PropertyAttribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) - | Choice2Of2 _ -> [] + | Choice1Of3 r -> r.PropertyAttribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) + | Choice2Of3 _ -> [] + | Choice3Of3 _ -> [] |> makeReadOnlyCollection member __.Accessibility: FSharpAccessibility = if isUnresolved() then FSharpAccessibility(taccessPublic) else let access = match d.TryRecdField with - | Choice1Of2 r -> r.Accessibility - | Choice2Of2 _ -> taccessPublic + | Choice1Of3 r -> r.Accessibility + | Choice2Of3 _ -> taccessPublic + | Choice3Of3 _ -> taccessPublic FSharpAccessibility(access) member private x.V = d + override x.Equals(other: obj) = box x === other || match other with @@ -894,10 +939,12 @@ and FSharpField(cenv: cenv, d: FSharpFieldData) = match d, uc.V with | RecdOrClass r1, RecdOrClass r2 -> recdFieldRefOrder.Compare(r1, r2) = 0 | Union (u1, n1), Union (u2, n2) -> cenv.g.unionCaseRefEq u1 u2 && n1 = n2 + | AnonField (anonInfo1, _, _, _) , AnonField (anonInfo2, _, _, _) -> x.Name = uc.Name && anonInfoEquiv anonInfo1 anonInfo2 | _ -> false | _ -> false override x.GetHashCode() = hash x.Name + override x.ToString() = "field " + x.Name and [] FSharpRecordField = FSharpField @@ -1900,6 +1947,7 @@ and FSharpType(cenv, typ:TType) = member __.GenericArguments = protect <| fun () -> match stripTyparEqns typ with + | TType_anon (_, tyargs) | TType_app (_, tyargs) | TType_tuple (_, tyargs) -> (tyargs |> List.map (fun ty -> FSharpType(cenv, ty)) |> makeReadOnlyCollection) | TType_fun(d, r) -> [| FSharpType(cenv, d); FSharpType(cenv, r) |] |> makeReadOnlyCollection @@ -1931,6 +1979,19 @@ and FSharpType(cenv, typ:TType) = | TType_fun _ -> true | _ -> false + member __.IsAnonRecordType = + isResolved() && + protect <| fun () -> + match stripTyparEqns typ with + | TType_anon _ -> true + | _ -> false + + member __.AnonRecordTypeDetails = + protect <| fun () -> + match stripTyparEqns typ with + | TType_anon (anonInfo, _) -> FSharpAnonRecordTypeDetails(cenv, anonInfo) + | _ -> invalidOp "not an anonymous record type" + member __.IsGenericParameter = protect <| fun () -> match stripTyparEqns typ with @@ -1985,6 +2046,7 @@ and FSharpType(cenv, typ:TType) = | TType_tuple (_, l1) -> 10400 + List.sumBy hashType l1 | TType_fun (dty, rty) -> 10500 + hashType dty + hashType rty | TType_measure _ -> 10600 + | TType_anon (_,l1) -> 10800 + List.sumBy hashType l1 hashType typ member x.Format(denv: FSharpDisplayContext) = @@ -2221,6 +2283,8 @@ type FSharpSymbol with | Item.ILField finfo -> FSharpField(cenv, ILField finfo) :> _ + | Item.AnonRecdField (anonInfo, tinst, n, m) -> FSharpField(cenv, AnonField (anonInfo, tinst, n, m)) :> _ + | Item.Event einfo -> FSharpMemberOrFunctionOrValue(cenv, E einfo, item) :> _ diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index 55c1a6fbb2b..faa0f851109 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -395,7 +395,20 @@ and [] public FSharpUnionCase = /// Indicates if the union case is for a type in an unresolved assembly member IsUnresolved : bool +/// A subtype of FSharpSymbol that represents a record or union case field as seen by the F# language +and [] public FSharpAnonRecordTypeDetails = + + /// The assembly where the compiled form of the anonymous type is defined + member Assembly : FSharpAssembly + + /// Names of any enclosing types of the compiled form of the anonymous type (if the anonymous type was defined as a nested type) + member EnclosingCompiledTypeNames : string list + + /// The name of the compiled form of the anonymous type + member CompiledName : string + /// The sorted labels of the anonymous type + member SortedFieldNames : string[] /// A subtype of FSharpSymbol that represents a record or union case field as seen by the F# language and [] public FSharpField = @@ -404,8 +417,14 @@ and [] public FSharpField = internal new : Impl.cenv * RecdFieldRef -> FSharpField internal new : Impl.cenv * UnionCaseRef * int -> FSharpField - /// Get the declaring entity of this field - member DeclaringEntity: FSharpEntity + /// Get the declaring entity of this field, if any. Fields from anonymous types do not have a declaring entity + member DeclaringEntity: FSharpEntity option + + /// Is this a field from an anonymous record type? + member IsAnonRecordField: bool + + /// If the field is from an anonymous record type then get the details of the field including the index in the sorted array of fields + member AnonRecordFieldDetails: FSharpAnonRecordTypeDetails * FSharpType[] * int /// Indicates if the field is declared 'static' member IsMutable: bool @@ -922,6 +941,12 @@ and [] public FSharpType = /// Indicates if the type is a function type. The GenericArguments property returns the domain and range of the function type. member IsFunctionType : bool + /// Indicates if the type is an anonymous record type. The GenericArguments property returns the type instantiation of the anonymous record type + member IsAnonRecordType: bool + + /// Get the details of the anonymous record type. + member AnonRecordTypeDetails: FSharpAnonRecordTypeDetails + /// Indicates if the type is a variable type, whether declared, generalized or an inference type parameter member IsGenericParameter : bool diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 58a348c1861..a5e3350ed55 100755 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -2114,6 +2114,9 @@ and /// isSetProp -- indicates if this is a set of a record field | FSRecdFieldSln of TypeInst * RecdFieldRef * bool + /// Indicates a trait is solved by an F# anonymous record field. + | FSAnonRecdFieldSln of AnonRecdTypeInfo * TypeInst * int + /// ILMethSln(typ, extOpt, ilMethodRef, minst) /// /// Indicates a trait is solved by a .NET method. @@ -3536,6 +3539,11 @@ and /// Indicates the type is built from a named type and a number of type arguments | TType_app of TyconRef * TypeInst + /// TType_anon + /// + /// Indicates the type is an anonymous record type whose compiled representation is located in the given assembly + | TType_anon of AnonRecdTypeInfo * TType list + /// TType_tuple(elementTypes). /// /// Indicates the type is a tuple type. elementTypes must be of length 2 or greater. @@ -3567,7 +3575,12 @@ and (match tupInfo with | TupInfo.Const false -> "" | TupInfo.Const true -> "struct ") - + String.concat "," (List.map string tinst) + ")" + + String.concat "," (List.map string tinst) + | TType_anon (anonInfo, tinst) -> + (match anonInfo.TupInfo with + | TupInfo.Const false -> "" + | TupInfo.Const true -> "struct ") + + "{|" + String.concat "," (Seq.map2 (fun nm ty -> nm + " " + string ty + ";") anonInfo.SortedNames tinst) + ")" + "|}" | TType_fun (d,r) -> "(" + string d + " -> " + string r + ")" | TType_ucase (uc,tinst) -> "union case type " + uc.CaseName + (match tinst with [] -> "" | tys -> "<" + String.concat "," (List.map string tys) + ">") | TType_var tp -> tp.DisplayName @@ -3580,6 +3593,7 @@ and | TType_forall (_tps, ty) -> ty.GetAssemblyName() | TType_app (tcref, _tinst) -> tcref.CompilationPath.ILScopeRef.QualifiedName | TType_tuple (_tupInfo, _tinst) -> "" + | TType_anon (anonInfo, _tinst) -> defaultArg anonInfo.Assembly.QualifiedName "" | TType_fun (_d,_r) -> "" | TType_measure _ms -> "" | TType_var tp -> tp.Solution |> function Some sln -> sln.GetAssemblyName() | None -> "" @@ -3589,7 +3603,50 @@ and and TypeInst = TType list and TTypes = TType list - +and [] AnonRecdTypeInfo = + // Mutability for pickling/unpickling only + { mutable Assembly: CcuThunk + mutable TupInfo: TupInfo + mutable SortedIds: Ident[] + mutable Stamp: Stamp + mutable SortedNames: string[] } + + /// Create an AnonRecdTypeInfo from the basic data + static member Create(ccu: CcuThunk, tupInfo, ids: Ident[]) = + let sortedIds = ids |> Array.sortBy (fun id -> id.idText) + // Hash all the data to form a unique stamp + let stamp = + sha1HashInt64 + [| for c in ccu.AssemblyName do yield byte c; yield byte (int32 c >>> 8); + match tupInfo with + | TupInfo.Const b -> yield (if b then 0uy else 1uy) + for id in sortedIds do + for c in id.idText do yield byte c; yield byte (int32 c >>> 8) |] + let sortedNames = Array.map textOfId sortedIds + { Assembly = ccu; TupInfo = tupInfo; SortedIds = sortedIds; Stamp = stamp; SortedNames = sortedNames } + + /// Get the ILTypeRef for the generated type implied by the anonymous type + member x.ILTypeRef = + let ilTypeName = sprintf "<>f__AnonymousType%s%u`%d'" (match x.TupInfo with TupInfo.Const b -> if b then "1000" else "") (uint32 x.Stamp) x.SortedIds.Length + mkILTyRef(x.Assembly.ILScopeRef,ilTypeName) + + static member NewUnlinked() : AnonRecdTypeInfo = + { Assembly = Unchecked.defaultof<_> + TupInfo = Unchecked.defaultof<_> + SortedIds = Unchecked.defaultof<_> + Stamp = Unchecked.defaultof<_> + SortedNames = Unchecked.defaultof<_> } + + member x.Link d = + let sortedNames = Array.map textOfId d.SortedIds + x.Assembly <- d.Assembly + x.TupInfo <- d.TupInfo + x.SortedIds <- d.SortedIds + x.Stamp <- d.Stamp + x.SortedNames <- sortedNames + + member x.IsLinked = (match x.SortedIds with null -> true | _ -> false) + and [] TupInfo = /// Some constant, e.g. true or false for tupInfo | Const of bool @@ -4133,6 +4190,12 @@ and /// An operation representing the creation of a tuple value | Tuple of TupInfo + /// An operation representing the creation of an anonymous record + | AnonRecd of AnonRecdTypeInfo + + /// An operation representing the get of a property from an anonymous record + | AnonRecdGet of AnonRecdTypeInfo * int + /// An operation representing the creation of an array value | Array @@ -4377,7 +4440,7 @@ and [] /// Represents a complete typechecked implementation file, including its typechecked signature if any. /// /// TImplFile(qualifiedNameOfFile,pragmas,implementationExpressionWithSignature,hasExplicitEntryPoint,isScript) -and TypedImplFile = TImplFile of QualifiedNameOfFile * ScopedPragma list * ModuleOrNamespaceExprWithSig * bool * bool +and TypedImplFile = TImplFile of QualifiedNameOfFile * ScopedPragma list * ModuleOrNamespaceExprWithSig * bool * bool * StampMap /// Represents a complete typechecked assembly, made up of multiple implementation files. /// @@ -4519,9 +4582,9 @@ let mkRawStructTupleTy tys = TType_tuple (tupInfoStruct, tys) // make up the entire compilation unit //--------------------------------------------------------------------------- -let mapTImplFile f (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)) = TImplFile(fragName, pragmas,f moduleExpr,hasExplicitEntryPoint,isScript) -let mapAccImplFile f z (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript)) = let moduleExpr,z = f z moduleExpr in TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript), z -let foldTImplFile f z (TImplFile(_,_,moduleExpr,_,_)) = f z moduleExpr +let mapTImplFile f (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes)) = TImplFile(fragName, pragmas,f moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes) +let mapAccImplFile f z (TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes)) = let moduleExpr,z = f z moduleExpr in TImplFile(fragName,pragmas,moduleExpr,hasExplicitEntryPoint,isScript,anonRecdTypes), z +let foldTImplFile f z (TImplFile(_,_,moduleExpr,_,_,_)) = f z moduleExpr //--------------------------------------------------------------------------- // Equality relations on locally defined things @@ -5144,3 +5207,4 @@ let FSharpOptimizationDataResourceName2 = "FSharpOptimizationInfo." let FSharpSignatureDataResourceName2 = "FSharpSignatureInfo." + diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index ad7572ef053..13433bae31d 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -6982,6 +6982,36 @@ Tento výraz vrátí hodnotu typu {0}, ale implicitně se zahodí. Zvažte vytvoření vazby mezi výsledkem a názvem pomocí klíčového slova let, např. let výsledek = výraz. Pokud jste chtěli výraz použít jako hodnotu v sekvenci, použijte explicitní klíčové slovo yield!. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 1754e4d729a..09ee764bc5a 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -6982,6 +6982,36 @@ Dieser Ausdruck gibt einen Wert des Typs "{0}" zurück, wird aber implizit verworfen. Verwenden Sie ggf. "let", um das Ergebnis an einen Namen zu binden. Beispiel: "let Ergebnis = Ausdruck". Falls Sie den Ausdruck als Wert in der Sequenz einsetzen möchten, verwenden Sie explizit "yield!". + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.en.xlf b/src/fsharp/xlf/FSComp.txt.en.xlf index a1dece2d6f9..bb3d873ab9e 100644 --- a/src/fsharp/xlf/FSComp.txt.en.xlf +++ b/src/fsharp/xlf/FSComp.txt.en.xlf @@ -6982,6 +6982,36 @@ This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 0ea4958ff74..e02d0d40831 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -6982,6 +6982,36 @@ Esta expresión devuelve un valor de tipo “{0}”, pero se descarta de forma implícita. Considere el uso de “let” para enlazar el resultado a un nombre; por ejemplo, “let result = expression”. Si su intención es utilizar la expresión como un valor en la secuencia, utilice “yield” de forma explícita. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index c74eb738e59..2d00a2fbd6e 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -6982,6 +6982,36 @@ Cette expression retourne une valeur de type '{0}', mais est implicitement ignorée. Utilisez 'let' pour lier le résultat à un nom, par ex. 'let result = expression'. Si vous voulez utiliser l'expression comme valeur dans la séquence, utilisez un 'yield!' explicite. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index d063e9e49ce..a9a9c35e72d 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -6982,6 +6982,36 @@ Questa espressione restituisce un valore di tipo '{0}' ma viene rimossa in modo implicito. Provare a usare 'let' per eseguire il binding del risultato a un nome, ad esempio 'let risultato = espressione'. Se si intende usare l'espressione come valore nella sequenza, usare l'operando 'yield!' esplicito. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index f515115c15d..c9dc1d8c305 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -6982,6 +6982,36 @@ この式は型 '{0}' の値を返しますが、暗黙的に破棄されます。'let' を使用して結果を名前にバインドすることを検討してください。例: 'let result = expression'。式をシーケンス内で値として使用する場合は、明示的に 'yield!' を使用してください。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index ca9ffe834f4..64d4bc3e904 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -6982,6 +6982,36 @@ 이 식은 '{0}' 형식의 값을 반환하지만 암시적으로 삭제됩니다. 'let'을 사용하여 결과를 이름에 바인딩하세요(예: 'let result = expression'). 식을 시퀀스의 값으로 사용하려면 명시적 'yield!'를 사용하세요. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 4cad63a4afa..b956238d314 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -6982,6 +6982,36 @@ To wyrażenie zwraca wartość typu „{0}”, ale jest niejawnie odrzucane. Rozważ użycie instrukcji „let” do powiązania wyniku z nazwą, np. „let wynik = wyrażenie”. Jeśli chcesz użyć tego wyrażenia jako wartości w sekwencji, użyj jawnej instrukcji „yield!”. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 98205cd7a14..9fdb7d83f8f 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -6982,6 +6982,36 @@ Essa expressão retorna um valor de tipo '{0}', mas é descartada de forma implícita. Considere o uso de 'let' para associar o resultado a um nome, por exemplo, 'let result = expression'. Se você pretende usar a expressão como um valor na sequência, use um “yield!” explícito. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 4e32cbed5d1..9e56782f248 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -6982,6 +6982,36 @@ Это выражение возвращает значение типа "{0}", но оно неявно отбрасывается. Чтобы привязать результат к какому-то имени, используйте "let", например: "let <результат> = <выражение>". Если вы собирались использовать выражение как значение в последовательности, используйте в явном виде "yield!". + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 93cfa3de92d..67e8c1965c0 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -6982,6 +6982,36 @@ Bu ifade '{0}' türünde bir değer döndürür ancak örtük olarak atılır. Sonucu bir ada bağlamak için 'let' kullanabilirsiniz, örn. 'let sonuc = ifade'. İfadeyi dizide bir değer olarak kullanmayı amaçladıysanız açık bir 'yield!' kullanın. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index f9af6c23c8b..ca95767c04a 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -6982,6 +6982,36 @@ 此表达式返回类型为“{0}”的值,但被隐式放弃。请考虑使用 "let" 将结果绑定到名称,例如 "let result = expression"。如果要使用该表达式作为序列中的值,则使用显式 "yield!"。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 63e673fe136..c9bdbbe4f52 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -6982,6 +6982,36 @@ 此運算式會傳回類型為 '{0}' 的值,但會被間接捨棄。請考慮使用 'let' 將結果繫結到名稱。例如 'let result = expression'。若您想要在序列中,以值的形式使用運算式,請直接使用 'yield!'。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.cs.xlf b/src/fsharp/xlf/FSStrings.cs.xlf index 90e272e863b..1be5ea9aaab 100644 --- a/src/fsharp/xlf/FSStrings.cs.xlf +++ b/src/fsharp/xlf/FSStrings.cs.xlf @@ -1607,6 +1607,16 @@ Vnitřní chyba: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.de.xlf b/src/fsharp/xlf/FSStrings.de.xlf index 1c98a1cdb01..8775393d9d6 100644 --- a/src/fsharp/xlf/FSStrings.de.xlf +++ b/src/fsharp/xlf/FSStrings.de.xlf @@ -1607,6 +1607,16 @@ Interner Fehler: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.en.xlf b/src/fsharp/xlf/FSStrings.en.xlf index 03bc0887740..7bb2d00d541 100644 --- a/src/fsharp/xlf/FSStrings.en.xlf +++ b/src/fsharp/xlf/FSStrings.en.xlf @@ -1607,6 +1607,16 @@ internal error: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.es.xlf b/src/fsharp/xlf/FSStrings.es.xlf index 986deafbc5c..8fad5818503 100644 --- a/src/fsharp/xlf/FSStrings.es.xlf +++ b/src/fsharp/xlf/FSStrings.es.xlf @@ -1607,6 +1607,16 @@ error interno: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.fr.xlf b/src/fsharp/xlf/FSStrings.fr.xlf index 4d4cccb39fe..d2cf29066f8 100644 --- a/src/fsharp/xlf/FSStrings.fr.xlf +++ b/src/fsharp/xlf/FSStrings.fr.xlf @@ -1607,6 +1607,16 @@ erreur interne : {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.it.xlf b/src/fsharp/xlf/FSStrings.it.xlf index e26f38b3270..d366d972645 100644 --- a/src/fsharp/xlf/FSStrings.it.xlf +++ b/src/fsharp/xlf/FSStrings.it.xlf @@ -1607,6 +1607,16 @@ errore interno: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.ja.xlf b/src/fsharp/xlf/FSStrings.ja.xlf index 7256d1b1a49..2fcdbbb2d45 100644 --- a/src/fsharp/xlf/FSStrings.ja.xlf +++ b/src/fsharp/xlf/FSStrings.ja.xlf @@ -1607,6 +1607,16 @@ 内部エラー: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.ko.xlf b/src/fsharp/xlf/FSStrings.ko.xlf index 2ba29ac4307..53437c9c1a3 100644 --- a/src/fsharp/xlf/FSStrings.ko.xlf +++ b/src/fsharp/xlf/FSStrings.ko.xlf @@ -1607,6 +1607,16 @@ 내부 오류: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.pl.xlf b/src/fsharp/xlf/FSStrings.pl.xlf index d544bdcc32e..f56de53fa3f 100644 --- a/src/fsharp/xlf/FSStrings.pl.xlf +++ b/src/fsharp/xlf/FSStrings.pl.xlf @@ -1607,6 +1607,16 @@ błąd wewnętrzny: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.pt-BR.xlf b/src/fsharp/xlf/FSStrings.pt-BR.xlf index b1dccf3db10..6d812fb2bc4 100644 --- a/src/fsharp/xlf/FSStrings.pt-BR.xlf +++ b/src/fsharp/xlf/FSStrings.pt-BR.xlf @@ -1607,6 +1607,16 @@ erro interno: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.ru.xlf b/src/fsharp/xlf/FSStrings.ru.xlf index bd45c8d8eee..31bc70d007b 100644 --- a/src/fsharp/xlf/FSStrings.ru.xlf +++ b/src/fsharp/xlf/FSStrings.ru.xlf @@ -1607,6 +1607,16 @@ внутренняя ошибка: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.tr.xlf b/src/fsharp/xlf/FSStrings.tr.xlf index 6ce85a3cc4c..87dc0f84f1b 100644 --- a/src/fsharp/xlf/FSStrings.tr.xlf +++ b/src/fsharp/xlf/FSStrings.tr.xlf @@ -1607,6 +1607,16 @@ iç hata: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.zh-Hans.xlf b/src/fsharp/xlf/FSStrings.zh-Hans.xlf index 235affe46bb..3afc6bee94d 100644 --- a/src/fsharp/xlf/FSStrings.zh-Hans.xlf +++ b/src/fsharp/xlf/FSStrings.zh-Hans.xlf @@ -1607,6 +1607,16 @@ 内部错误: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSStrings.zh-Hant.xlf b/src/fsharp/xlf/FSStrings.zh-Hant.xlf index 90c5a5a8066..ae07f546c5f 100644 --- a/src/fsharp/xlf/FSStrings.zh-Hant.xlf +++ b/src/fsharp/xlf/FSStrings.zh-Hant.xlf @@ -1607,6 +1607,16 @@ 內部錯誤: {0} + + symbol '{|' + symbol '{|' + + + + symbol '|}' + symbol '|}' + + \ No newline at end of file diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs index d3f6bb48eda..18b571b46d3 100644 --- a/src/utils/sformat.fs +++ b/src/utils/sformat.fs @@ -199,6 +199,8 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl let rightBracket = tagPunctuation "]" let leftBrace= tagPunctuation "{" let rightBrace = tagPunctuation "}" + let leftBraceBar = tagPunctuation "{|" + let rightBraceBar = tagPunctuation "|}" let equals = tagOperator "=" let arrow = tagPunctuation "->" let questionMark = tagPunctuation "?" diff --git a/src/utils/sformat.fsi b/src/utils/sformat.fsi index fb768703e17..afdd931f900 100644 --- a/src/utils/sformat.fsi +++ b/src/utils/sformat.fsi @@ -148,6 +148,8 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val rightBracket : TaggedText val leftBrace: TaggedText val rightBrace : TaggedText + val leftBraceBar: TaggedText + val rightBraceBar : TaggedText val equals : TaggedText val arrow : TaggedText val questionMark : TaggedText diff --git a/tests/fsharp/core/anon/lib.fs b/tests/fsharp/core/anon/lib.fs new file mode 100644 index 00000000000..23571cab8b5 --- /dev/null +++ b/tests/fsharp/core/anon/lib.fs @@ -0,0 +1,209 @@ + +module AnonLib + + +let failures = ref [] + +let report_failure (s : string) = + stderr.Write" NO: " + stderr.WriteLine s + failures := !failures @ [s] + +let test (s : string) b = + stderr.Write(s) + if b then stderr.WriteLine " OK" + else report_failure (s) + +let check (s:string) x1 x2 = + stderr.Write(s) + if (x1 = x2) then stderr.WriteLine " OK" + else (stderr.WriteLine (sprintf "fail, expected %A, got %A" x2 x1); report_failure (s)) + +let inline getX (x: ^TX) : ^X = + (^TX : (member get_X : unit -> ^X) (x)) + + +let inline Y (x: ^TX) : ^X = + (^TX : (member get_Y : unit -> ^X) (x)) + + +module KindB1 = + + let data1 = {| X = 1 |} + + // Types can be written with the same syntax + let data2 : {| X : int |} = data1 + + // Access is as expected + let f1 (v : {| X : int |}) = v.X + + // Access can be nested + let f2 (v : {| X: {| X : int |} |}) = v.X.X + + // Access can be nested + let f3 (v : {| Y: {| X : int |} |}) = v.Y.X + + // Access can be nested + let f4 (v : {| Y: {| X : 'T |} |}) = v.Y.X + + check "coijoiwcnkc42c2" {| Y = 1; X = "1" |} {| X = "1"; Y = 1 |} + check "coijoiwcnkc42c3" {| Y = 1; X = "1"; Z = 2 |} {| Z = 2; X = "1"; Y = 1 |} + + check "coijoiwcnkwle1" {| a = 1 |} {| a = 1 |} + check "coijoiwcnkwle2" {| a = 2 |} {| a = 2 |} + + check "coijoiwcnkwle3" (sprintf "%A" {| X = 10 |}) "{X = 10;}" + check "coijoiwcnkwle4" (sprintf "%A" {| X = 10; Y = 1 |} |> fun s -> s.Replace("\n","").Replace("\r","")) ("{X = 10; Y = 1;}".Replace("\n","").Replace("\r","")) + check "clekoiew09" (f2 {| X = {| X = 10 |} |}) 10 + check "cewkew0oijew" (f2 {| X = {| X = 20 |} |}) 20 + + check "ceoijew90ewcw1" (FSharp.Reflection.FSharpType.IsRecord(typeof<{| X : int; Y: string |}>)) true + check "ceoijew90ewcw2" (FSharp.Reflection.FSharpType.GetRecordFields(typeof<{| X : int; Y: string |}>).Length) 2 + check "ceoijew90ewcw3" (FSharp.Reflection.FSharpValue.GetRecordFields({| X = 1; Y = "a" |}).Length) 2 + check "ceoijew90ewcw4" (FSharp.Reflection.FSharpType.IsRecord(typeof<{| X : int |}>)) true + check "ceoijew90ewcw5" (FSharp.Reflection.FSharpType.GetRecordFields(typeof<{| X : int |}>).Length) 1 + check "ceoijew90ewcw6" (FSharp.Reflection.FSharpValue.GetRecordFields({| X = 1 |}).Length) 1 + check "ceoijew90ewcw7" (FSharp.Reflection.FSharpValue.GetRecordFields({| X = 1 |}).[0]) (box 1) + + // TODO: field reordering.... + //let test3b() = {| a = 1+1; b = 2 |} = {| b = 1; a = 2 |} + + // Equality is possible + check "ceijoewwekcj" {| a = 1-1 |} {| a = Unchecked.defaultof<_> |} + + // Comparison is possible if structural elements are comparable + check "ceijowere9er" ({| a = 1+1 |} > {| a = 0 |}) true + + // Check we can alias these types + type recd1 = {| a : int |} + + // test a generic function + let test7<'T>(x:'T) = {| a = x |} + + // test a generic function + let test8<'T>(x:'T) = {| a = x; b = x |} + + // Properties may satisfy member constraints + // Access code may not be generic except through existing member constraints + + + // To speciy a struct representation use this: + let data3 = struct {| X = 1 |} + + // Types can be written with the same syntax + let data4 : struct {| X : int |} = data3 + + let testConstrainedAccess = getX {| X = 0 |}, getX data1, getX {| X = 2; Y = "2" |} + + check "testConstrainedAccess1" (sprintf "%A" testConstrainedAccess) "(0, 1, 2)" + + let testConstrainedAccess2 = getX (struct {| X = 0 |}), getX data3, getX (struct {| X = 2; Y = "2" |}) + + check "testConstrainedAccess2" (sprintf "%A" testConstrainedAccess2) "(0, 1, 2)" + +module TestInAttributes = + type FooAttribute(ty: System.Type) = + inherit System.Attribute() + member x.Type = ty + + [)>] + type C() = + member x.P = 1 + check "clkwweclk" ((typeof.GetCustomAttributes(typeof,true).[0] :?> FooAttribute).Type) (typeof<{| Field1: int; Field2 : string |}>) + +module KindB2 = + + // Gives object that has full C#-compatibe anonymous metadata. Compiles to an instantiation of a generic type in the declaring assembly with appropriate .NET + // metadata (property names). The types are CLIMutable to be C#-compatible. The identity of the types are implicitly assembly-qualified. + let data1 = {| X = 1 |} + + let data1b = {| Y = 1 |} + + let data1c = {| X = 1; Y = 2 |} + + let data1d = {| X = 1; Y = 3 |} + + // Types can be written with the same syntax + let data2 : {| X : int |} = data1 + + // Struct representations may be specified, though C# doesn't allow them + let data3 = struct {| X = 1; Y = 2 |} + + // Types can be written with the same syntax + let data4 : struct {| X : int; Y : int |} = data3 + + let testAccess = (data4.X, data4.Y, data1.X, data2.X, data3.X, data3.Y) + + printfn "{| X = 10 |} = %A" ({| X = 10 |} ) + printfn "{| X = 10 ; Y = \"abc\" |} = %A" ({| X = 10 ; Y = "abc"|} ) + + let testConstrainedAccess = getX ({| X = 0 |}), getX data1, getX ({| X = 2; Y = "2" |}) + + check "cew9cwoi" testConstrainedAccess (0, 1, 2) + + let testConstrainedAccess2 = getX (struct {| X = 0 |}), getX data3, getX (struct {| X = 2; Y = "2" |}) + + check "cew9cwo3" testConstrainedAccess2 (0, 1, 2) + + // Copy-and-update may not be used, since C# doesn't allow this on anonymous objects + + // Types _can_ be used outside their assembly, but can _not_ be named in the syntax of types, nor created + + +module QuotesNewRecord = + + open FSharp.Quotations + open FSharp.Quotations.Patterns + let ty, args = match <@ {| X = 1; Y = "two" |} @> with NewRecord(a,b) -> a,b + + check "gceoijew90ewcw1" (FSharp.Reflection.FSharpType.IsRecord(ty)) true + check "gceoijew90ewcw2" (FSharp.Reflection.FSharpType.GetRecordFields(ty).Length) 2 + check "gceoijew90ewcw2" ([ for p in FSharp.Reflection.FSharpType.GetRecordFields(ty) -> p.Name ]) [ "X"; "Y" ] + check "gceoijew90ewcw3" args [ <@@ 1 @@>; <@@ "two" @@> ] + +module QuotesNewRecord2 = + + open FSharp.Quotations + open FSharp.Quotations.Patterns + let ty, args = match <@ {| Y = "two"; X = 1 |} @> with NewRecord(a,b) -> a,b + + check "qgceoijew90ewcw1" (FSharp.Reflection.FSharpType.IsRecord(ty)) true + check "qgceoijew90ewcw2" (FSharp.Reflection.FSharpType.GetRecordFields(ty).Length) 2 + // Fields are sorted + check "qgceoijew90ewcw2" ([ for p in FSharp.Reflection.FSharpType.GetRecordFields(ty) -> p.Name ]) [ "X"; "Y" ] + check "qgceoijew90ewcw3" args [ <@@ 1 @@>; <@@ "two" @@> ] + +module QuotesPropertyGet = + + open FSharp.Quotations + open FSharp.Quotations.Patterns + let obj, prop = match <@ {| X = 1; Y = "two" |}.X @> with Patterns.PropertyGet(a,b,[]) -> a,b + + check "wgceoijew90ewcw1" prop.Name "X" + + +module SampleAPI = + + let SampleFunction (arg : {| A: int; B: string |}) = arg.A + arg.B.Length + let SampleFunctionAcceptingList (args : {| A: int; B: string |} list) = args |> List.map (fun arg -> arg.A + arg.B.Length) + let SampleFunctionReturningAnonRecd () = {| A=1; B = "abc" |} + +module SampleAPIStruct = + let SampleFunction (arg : (struct {| A: int; B: string |})) = arg.A + arg.B.Length + let SampleFunctionAcceptingList (args : (struct {| A: int; B: string |}) list) = args |> List.map (fun arg -> arg.A + arg.B.Length) + let SampleFunctionReturningAnonRecd () = struct {| A=1; B = "abc" |} + +module SampleAPITupleStruct = + let SampleFunction ((a,b) : (struct (int * string))) = a + b.Length + let SampleFunctionAcceptingList (args : (struct (int * string)) list) = args |> List.map (fun (struct (a,b)) -> a + b.Length) + let SampleFunctionReturningStructTuple () = struct (1, "abc") + +module SyntaxCornerCaseTests = + + let _ = id<{| X: int |}> {| X = 3 |} + // Check use as type argument + let _ = id<{| X: int |}> {| X = 3 |} + let _ = id<{| X: int; Y: int |}> {| X = 3; Y = 4 |} + let _ = id<{| X: int; Y: int |}> ({| X = 3; Y = 4 |}) + let _ = id (struct {| X = 3; Y = 44 |}) + let _ = id (struct {| X = 3; Y = 4 |}) \ No newline at end of file diff --git a/tests/fsharp/core/anon/test.fsx b/tests/fsharp/core/anon/test.fsx new file mode 100644 index 00000000000..d45bd257165 --- /dev/null +++ b/tests/fsharp/core/anon/test.fsx @@ -0,0 +1,83 @@ +// #Regression #Conformance #Accessibility #SignatureFiles #Regression #Records +#if TESTS_AS_APP +module Core_anon +#endif + +open AnonLib +let failures = ref [] + +let report_failure (s : string) = + stderr.Write" NO: " + stderr.WriteLine s + failures := !failures @ [s] + +let test (s : string) b = + stderr.Write(s) + if b then stderr.WriteLine " OK" + else report_failure (s) + +let check (s:string) x1 x2 = + stderr.Write(s) + if (x1 = x2) then stderr.WriteLine " OK" + else (stderr.WriteLine (sprintf "fail, expected %A, got %A" x2 x1); report_failure (s)) + +module Test = + + let testAccess = (KindB1.data1.X, KindB1.data3.X) + + check "coijoiwcnkwle2" (sprintf "%A" KindB1.data1) "{X = 1;}" + +module Tests2 = + + let testAccess = (KindB2.data1.X, KindB2.data3.X, KindB2.data3.Y) + + check "coijoiwcnkwle3" (sprintf "%A" KindB2.data1) "{X = 1;}" + + let _ = (KindB2.data1 = KindB2.data1) + +module MoreTests = + + let testUseInFunctionSignatureOnly (x: {| X1 : int |}) = () + let testUseInReturnSignatureOnly () : {| X2 : int |} = Unchecked.defaultof<_> + let testUseInTypeOfOnly () = typeof<{| X3 : int |}> + + let (x : struct (int * int)) = (3, 4) + let () = match (struct (3,4)) with (a,b) -> () + +module CrossAssemblyTest = + let tests() = + check "vrknvio1" (SampleAPI.SampleFunction {| A=1; B = "abc" |}) 4 // note, this is creating an instance of an anonymous record from another assembly. + check "vrknvio2" (SampleAPI.SampleFunctionAcceptingList [ {| A=1; B = "abc" |}; {| A=2; B = "def" |} ]) [4; 5] // note, this is creating an instance of an anonymous record from another assembly. + check "vrknvio3" (let d = SampleAPI.SampleFunctionReturningAnonRecd() in d.A + d.B.Length) 4 + check "vrknvio4" (let d = SampleAPIStruct.SampleFunctionReturningAnonRecd() in d.ToString().Replace("\n","").Replace("\r","")) """{A = 1; B = "abc";}""" + tests() + +module CrossAssemblyTestStruct = + let tesvts() = + check "svrknvio1" (SampleAPIStruct.SampleFunction {| A=1; B = "abc" |}) 4 // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. + check "svrknvio2" (SampleAPIStruct.SampleFunctionAcceptingList [ {| A=1; B = "abc" |}; {| A=2; B = "def" |} ]) [4; 5] // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. + check "svrknvio3" (let d = SampleAPIStruct.SampleFunctionReturningAnonRecd() in d.A + d.B.Length) 4 + tests() + +module CrossAssemblyTestTupleStruct = + let tests() = + check "svrknvio1" (SampleAPITupleStruct.SampleFunction (1, "abc")) 4 // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. + check "svrknvio2" (SampleAPITupleStruct.SampleFunctionAcceptingList [ (1, "abc"); (2, "def") ]) [4; 5] // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. + check "svrknvio3" (match SampleAPITupleStruct.SampleFunctionReturningStructTuple() with (x,y) -> x + y.Length) 4 + check "svrknvio4" (let res = SampleAPITupleStruct.SampleFunctionReturningStructTuple() in match res with (x,y) -> x + y.Length) 4 + tests() + +#if TESTS_AS_APP +let RUN() = !failures +#else +let aa = + match !failures with + | [] -> + stdout.WriteLine "Test Passed" + System.IO.File.WriteAllText("test.ok","ok") + exit 0 + | _ -> + stdout.WriteLine "Test Failed" + exit 1 +#endif + diff --git a/tests/fsharp/core/fsi-load/test.fsx b/tests/fsharp/core/fsi-load/test.fsx index ad2ef3bef5c..f81654365e7 100644 --- a/tests/fsharp/core/fsi-load/test.fsx +++ b/tests/fsharp/core/fsi-load/test.fsx @@ -11,6 +11,9 @@ module OtherModule = let foo () = [ for (k: KeyValuePair) in [] -> () ] + let testAnonRecordInFsi1 (x : {| X : int |}) = () + + let testAnonRecordInFsi2 () : {| X : int |} = failwith "ok" let _ = stdout.WriteLine "Test Passed" diff --git a/tests/fsharp/core/queriesOverIQueryable/test.fsx b/tests/fsharp/core/queriesOverIQueryable/test.fsx index 245c32bb463..472dac742f6 100644 --- a/tests/fsharp/core/queriesOverIQueryable/test.fsx +++ b/tests/fsharp/core/queriesOverIQueryable/test.fsx @@ -142,19 +142,29 @@ module QueryExecutionOverIQueryable = (query { let q = query { for i in db -> i.Name } in for v in q do yield v } ) "db.Select(_arg1 => _arg1.Name).Select(_arg2 => _arg2)" + open FSharp.Reflection + + let t = typeof< {| Name1: string; Name2: string |} > + check "wkcwe09" (FSharpType.IsRecord t) true + check "wkcwe09" (FSharpType.GetRecordFields t |> Array.forall (fun f -> f.CanWrite)) false + +// checkLinqQueryText "ltcjhnwec6" +// (query { for i in db -> {| Name1 = i.Name; Name2 = i.Name |} } ) +// "db.Select(_arg1 => _arg1.Name).Select(_arg2 => _arg2)" +// "System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[System.String,System.String],<>f__AnonymousType3691853213`2'[System.String,System.String]].Select(_arg2 => _arg2)" + checkCommuteSeq "cnewnc03nested" (query { let q = query { for i in db -> i.Name } in for v in q do yield v } ) (seq { for i in db -> i.Name }) - //type R = { A : int; B : int } - //let db2 = [ { A = 1; B = 2 } ] - //let results = query { for (i: MutTup) in db2 -> (i,i) } - - //System.Linq.Queryable.GroupBy( checkCommuteSeq "cnewnc06y" (query { for i in db do for j in db do yield (i.Name,j.Name) }) (seq { for i in db do for j in db do yield (i.Name,j.Name) }) + checkCommuteSeq "cnewnc06y" + (query { for i in db do for j in db do yield {| Name1 = i.Name; Name2 = j.Name |} }) + (seq { for i in db do for j in db do yield {| Name1 = i.Name; Name2 = j.Name |} }) + checkCommuteSeq "cnewnc06ynested" (query { let q = query { for i in db do for j in db do yield (i.Name,j.Name) } in for v in q do yield v }) (seq { for i in db do for j in db do yield (i.Name,j.Name) }) @@ -286,44 +296,10 @@ module QueryExecutionOverIQueryable = take 2 }) ["Don"; "Peter"] - (* - checkCommuteSeq "cnewnc06ya3b" - (query { for i in db do - yield i.Name - distinct } |> Seq.toList) - ["Don"; "Peter"; "Freddy"; "Freddi"] - *) - -#if ZIP - checkCommuteSeq "cnewnc06ya3c" - (query { for i in [1;2;3;4] do - zip [4;3;2;1] into j - yield (i,j) } |> Seq.toList) - [(1, 4); (2, 3); (3, 2); (4, 1)] - - checkCommuteSeq "cnewnc06y43" - (query { for i in [1;2;3;4] do - zip [4;3;2;1;0] into j - yield (i,j) } |> Seq.toList) - [(1, 4); (2, 3); (3, 2); (4, 1)] - - checkCommuteSeq "cnewnc06y43b" - (query { for i in [1;2;3;4] do - zip [4;3;2] into j - yield (i,j) } |> Seq.toList) - [(1, 4); (2, 3); (3, 2)] - - checkCommuteSeq "cnewnc06y43c" - (query { for i in db do - zip db into j - yield (i.Name,j.Name.Length) } |> Seq.toList) - [("Don", 3); ("Peter", 5); ("Freddy", 6); ("Freddi", 6); ("Don", 3)] - -#endif - checkLinqQueryText "ltcjhnwecd" (query { for i in db do where true; take 3 }) "db.Where(i => True).Take(3)" + checkCommuteSeq "cnewnc06yb" (query { for i in db do groupBy i.Name } |> Seq.map (fun g -> (g.Key,Seq.toList g)) |> System.Linq.Queryable.AsQueryable) (seq { for i in db do yield i } |> Seq.groupBy (fun i -> i.Name) |> Seq.map (fun (key,g) -> (key, Seq.toList g))) @@ -894,8 +870,6 @@ module QueryExecutionOverIQueryable = (query { for i in db do groupValBy i i.Name }) "db.GroupBy(i => i.Name, i => i)" - - checkLinqQueryText "ltcnewnc06yb2x" (query { for i in db do for j in db do groupValBy j i.Name }) "db.SelectMany(_arg1 => db, (_arg1, _arg2) => new AnonymousObject`2(Item1 = _arg1, Item2 = _arg2)).GroupBy(tupledArg => tupledArg.Item1.Name, tupledArg => tupledArg.Item2)" @@ -980,9 +954,6 @@ module QueryExecutionOverIQueryable = yield (i.Cost + j.Cost) }) "db.Join(db, i => i.Quantity, j => j.Quantity, (i, j) => new AnonymousObject`2(Item1 = i, Item2 = j)).Select(_arg1 => (_arg1.Item1.Cost + _arg1.Item2.Cost))" - - - checkLinqQueryText "ltcnewnc06yh9Q5" (query { for i in db do groupJoin j in db on (i.Name = j.Name) into group @@ -996,8 +967,6 @@ module QueryExecutionOverIQueryable = yield group } ) "db.Select(_arg1 => new AnonymousObject`2(Item1 = _arg1, Item2 = _arg1.Name)).GroupJoin(db, tupledArg => tupledArg.Item2, j => j.Name, (tupledArg, group) => new AnonymousObject`3(Item1 = tupledArg.Item1, Item2 = tupledArg.Item2, Item3 = group)).Select(_arg2 => _arg2.Item3)" - - checkLinqQueryText "ltcnewnc06yh9Q6" (query { for i in db do groupJoin j in db on (i.Quantity ?= j.Quantity.GetValueOrDefault()) into group @@ -1027,8 +996,6 @@ module QueryExecutionOverIQueryable = yield group } ) "db.Select(_arg1 => new AnonymousObject`2(Item1 = _arg1, Item2 = _arg1.Name)).GroupJoin(db, tupledArg => tupledArg.Item2, j => j.Name, (tupledArg, group) => new AnonymousObject`3(Item1 = tupledArg.Item1, Item2 = tupledArg.Item2, Item3 = group.DefaultIfEmpty())).Select(_arg2 => _arg2.Item3)" - - check "cnewnc06yh9Q5" (query { for i in db do groupJoin j in db on (i.Name = j.Name) into group @@ -1052,10 +1019,6 @@ module QueryExecutionOverIQueryable = (query { for i in db do groupJoin j in db on (i.Quantity ?=? j.Quantity) into group; yield group |> Seq.map (fun x -> x.Name) |> Seq.toList } |> Seq.toList) [[]; ["Peter"]; []; ["Freddi"]; []] - - - - check "cnewnc06yh9Q5left1" (query { for i in db do leftOuterJoin j in db on (i.Name = j.Name) into group @@ -1068,9 +1031,6 @@ module QueryExecutionOverIQueryable = yield (i, group |> Seq.toList) } |> Seq.toList) [("1", ["1";"12"]); ("2", [null]) ] - - - // Smoke test for returning a tuple checkCommuteSeq "smcnewnc01a" (query { yield (1,1) } ) @@ -1162,8 +1122,6 @@ module QueryExecutionOverIQueryable = (query { for x in db do yield (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) }) (seq { for x in db do yield (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) }) - - // Smoke test for returning a tuple, nested for loops checkCommuteSeq "smcnewnc01xx" (query { for x in db do for y in db do yield (1,1) }) @@ -1194,12 +1152,10 @@ module QueryExecutionOverIQueryable = (query { for x in db do for y in db do yield (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) }) (seq { for x in db do for y in db do yield (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) }) - type R1 = { V1 : int } type R7 = { V1 : int; V2 : int; V3 : int; V4 : int; V5 : int; V6 : int; V7 : int } type R8 = { V1 : int; V2 : int; V3 : int; V4 : int; V5 : int; V6 : int; V7 : int; V8 : int } - // Smoke test for returning an immutable record object, size = 1 checkCommuteSeq "rsmcnewnc01" (query { yield { R1.V1=1 } } |> Seq.map (fun r -> r.V1) |> System.Linq.Queryable.AsQueryable) @@ -1262,7 +1218,6 @@ module QueryExecutionOverIQueryable = (query { yield { MR8.V1=1; MR8.V2=2; MR8.V3=3; MR8.V4=4; MR8.V5=5; MR8.V6=6; MR8.V7=7; MR8.V8=8 } } |> qmap (fun r -> r.V1, r.V2)) [1,2;] - // Smoke test for returning a mutable record object, size = 1 checkCommuteSeq "mrsmcnewnc01x" (query { for x in db do yield { MR1.V1=1 } } |> qmap (fun r -> r.V1)) @@ -1289,6 +1244,37 @@ module QueryExecutionOverIQueryable = (seq { for x in db do yield { MR8.V1=1; MR8.V2=2; MR8.V3=3; MR8.V4=4; MR8.V5=5; MR8.V6=6; MR8.V7=7; MR8.V8=8 } } |> Seq.map (fun r -> r.V1, r.V2)) + // Smoke test for returning an immutable anonymous record object, size = 1 + checkCommuteSeq "rsmcnewnc01" + (query { yield {| V1=1 |} } |> Seq.map (fun r -> r.V1) |> System.Linq.Queryable.AsQueryable) + [1;] + + // Smoke test for returning an immutable anonymous record object, size = 7 + checkCommuteSeq "rsmcnewnc07" + (query { yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7 |} } |> qmap (fun r -> r.V1, r.V2) |> System.Linq.Queryable.AsQueryable) + [1,2;] + + // Smoke test for returning an immutable anonymous record object, size = 8 + checkCommuteSeq "rsmcnewnc08" + (query { yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7; V8=8 |} } |> qmap (fun r -> r.V1, r.V2) |> System.Linq.Queryable.AsQueryable) + [1,2;] + + + // Smoke test for returning an immutable anonymous record object, size = 1 + checkCommuteSeq "rsmcnewnc01x" + (query { for x in db do yield {| V1=1 |} } |> qmap (fun r -> r.V1)) + (seq { for x in db do yield {| V1=1 |} } |> Seq.map (fun r -> r.V1)) + + // Smoke test for returning an immutable anonymous record object, size = 7 + checkCommuteSeq "rsmcnewnc07x" + (query { for x in db do yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7 |} } |> qmap (fun r -> r.V1, r.V2) |> System.Linq.Queryable.AsQueryable) + (seq { for x in db do yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7 |} } |> Seq.map (fun r -> r.V1, r.V2)) + + // Smoke test for returning an immutable anonymous record object, size = 8 + checkCommuteSeq "rsmcnewnc08x" + (query { for x in db do yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7; V8=8 |} } |> qmap (fun r -> r.V1, r.V2)) + (seq { for x in db do yield {| V1=1; V2=2; V3=3; V4=4; V5=5; V6=6; V7=7; V8=8 |} } |> Seq.map (fun r -> r.V1, r.V2)) + // Smoke test for returning an object using property-set notation for member init, size = 8 type C1() = let mutable v1 = 0 @@ -1302,8 +1288,6 @@ module QueryExecutionOverIQueryable = (query { for x in db do yield C1(V1=1) } |> qmap (fun r -> r.V1)) (seq { for x in db do yield C1(V1=1) } |> Seq.map (fun r -> r.V1)) - //<@ C1(V1=1) @> - // Smoke test for returning an object using property-set notation for member init type C2() = let mutable v1 = 0 @@ -1351,8 +1335,6 @@ module QueryExecutionOverIQueryable = (query { for i in db -> (i, i) }) (seq { for i in db -> (i,i) }) - - checkCommuteSeq "smcnewnc022df1" (query { for p in db do groupBy p.Name into g @@ -1367,9 +1349,6 @@ module QueryExecutionOverIQueryable = select (g.Key, s) }) [("Don", 0s); ("Peter", 10s); ("Freddy", 0s); ("Freddi", 32s)] - - - module QueryExecutionOverIQueryableWhereDataIsRecord = open System open Microsoft.FSharp.Linq @@ -1390,7 +1369,6 @@ module QueryExecutionOverIQueryableWhereDataIsRecord = let dbEmpty = System.Linq.Queryable.AsQueryable([] |> List.toSeq) let dbOne = System.Linq.Queryable.AsQueryable([1] |> List.toSeq) - checkCommuteSeq "rrcnewnc01" (query { yield! db }) db diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 3c2d9c2d792..75b31fd95cc 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -30,6 +30,8 @@ module CoreTests = // These tests are enabled for .NET Framework and .NET Core [] let ``access-FSC_BASIC``() = singleTestBuildAndRun "core/access" FSC_BASIC + + // All tests below here are known to pass for .NET Core but not yet enabled due to CI problems [] let ``access-FSI_BASIC``() = singleTestBuildAndRun "core/access" FSI_BASIC @@ -228,6 +230,36 @@ module CoreTests = #if !FSHARP_SUITE_DRIVES_CORECLR_TESTS + // These tests are enabled for .NET Framework and .NET Core + [] + let ``anon-FSC_BASIC``() = + let cfg = testConfig "core/anon" + + fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] + + copyFile (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") + peverify cfg "lib.dll" + + fsc cfg "%s -r:lib.dll -g" cfg.fsc_flags ["test.fsx"] + + peverify cfg "test.exe" + + begin + use testOkFile = fileguard cfg "test.ok" + + exec cfg ("." ++ "test.exe") "" + + testOkFile.CheckExists() + end + + begin + use testOkFile = fileguard cfg "test.ok" + + fsi cfg "-r:lib.dll" ["test.fsx"] + + testOkFile.CheckExists() + end + [] let events () = let cfg = testConfig "core/events" @@ -2162,6 +2194,12 @@ module TypecheckTests = [] let ``type check neg101`` () = singleNegTest (testConfig "typecheck/sigs") "neg101" + [] + let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" + + [] + let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" + [] let ``type check neg_byref_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_1" diff --git a/tests/fsharp/typecheck/sigs/neg103.bsl b/tests/fsharp/typecheck/sigs/neg103.bsl new file mode 100644 index 00000000000..4c55fca4170 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103.bsl @@ -0,0 +1,24 @@ + +neg103.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' + +neg103.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' + +neg103.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type + '{|b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type + '{|a : int ; b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface + +neg103.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface diff --git a/tests/fsharp/typecheck/sigs/neg103.fs b/tests/fsharp/typecheck/sigs/neg103.fs new file mode 100644 index 00000000000..660788f83e2 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103.fs @@ -0,0 +1,20 @@ + +module M + + // Check we get compile-time errors + let negTypeTest1() = ({| a = 1+1; b = 2 |} = {| a = 2 |}) + + let negTypeTest2() = ({| b = 2 |} = {| a = 2 |} ) + + // no subsumption + let negTypeTest3() = ({| b = 2 |} :> {| a : int |} ) + + // no subsumption + let negTypeTest4() = ({| b = 2; a = 1 |} :> {| a : int |} ) + + let posgTypeTest5() = ({| b = 2; a = 1 |} = {| a = 1; b = 2 |} ) + + // Comparison is not possible if structural elements are comparable + let negTypeTest6() = ({| a = id |} > {| a = id |}) + + let negTypeTest7() = (compare {| a = id |} {| a = id |}) diff --git a/tests/fsharp/typecheck/sigs/neg103.vsbsl b/tests/fsharp/typecheck/sigs/neg103.vsbsl new file mode 100644 index 00000000000..4c55fca4170 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103.vsbsl @@ -0,0 +1,24 @@ + +neg103.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' + +neg103.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' + +neg103.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type + '{|b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type + '{|a : int ; b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface + +neg103.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface diff --git a/tests/fsharp/typecheck/sigs/neg104.bsl b/tests/fsharp/typecheck/sigs/neg104.bsl new file mode 100644 index 00000000000..f0ed9fbd026 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg104.bsl @@ -0,0 +1,20 @@ + +neg104.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. + +neg104.fs(6,29,6,31): parse error FS0605: Unmatched '{|' + +neg104.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. + +neg104.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. + +neg104.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. + +neg104.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + +neg104.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. + +neg104.fs(10,14,10,16): parse error FS0605: Unmatched '{|' + +neg104.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. + +neg104.fs(14,1,14,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file diff --git a/tests/fsharp/typecheck/sigs/neg104.fs b/tests/fsharp/typecheck/sigs/neg104.fs new file mode 100644 index 00000000000..adbdc0fa986 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg104.fs @@ -0,0 +1,13 @@ + +module M + + + // Check we get parsing error and decent recovery + let negParsingTest2() = {| b = 2 } + + let normalCode1() = () + // Check we get parsing error and decent recovery + type X = {| A : int } + + let normalCode2() = () + diff --git a/tests/fsharp/typecheck/sigs/neg104.vsbsl b/tests/fsharp/typecheck/sigs/neg104.vsbsl new file mode 100644 index 00000000000..c12cacbf608 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg104.vsbsl @@ -0,0 +1,24 @@ + +neg104.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. + +neg104.fs(6,29,6,31): parse error FS0605: Unmatched '{|' + +neg104.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. + +neg104.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. + +neg104.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. + +neg104.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + +neg104.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. + +neg104.fs(10,14,10,16): parse error FS0605: Unmatched '{|' + +neg104.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. + +neg104.fs(14,1,14,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file + +neg104.fs(10,10,10,11): typecheck error FS0964: Type abbreviations cannot have augmentations + +neg104.fs(12,5,12,27): typecheck error FS0912: This declaration element is not permitted in an augmentation diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType01.fs b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType01.fs index 0d719d0fd45..3fe7bda3e32 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType01.fs +++ b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType01.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #ApplicationExpressions // Regression test for FSHARP1.0:5525 // Deprecate postfix type application in "new" and "inherit" constructs -//This construct is deprecated: The use of the type syntax 'int C' and 'C ' is not permitted here\. Consider adjusting this type to be written in the form 'C'$ +//Unexpected identifier in expression$ type T<'t> = System.Collections.Generic.List<'t> let o = new int T () diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType03.fs b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType03.fs index eed4e517a69..aedb265593a 100644 --- a/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType03.fs +++ b/tests/fsharpqa/Source/Conformance/Expressions/ApplicationExpressions/BasicApplication/E_PostfixType03.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #ApplicationExpressions // Regression test for FSHARP1.0:5525 // Deprecate postfix type application in "new" and "inherit" constructs -//This construct is deprecated: The use of the type syntax 'int C' and 'C ' is not permitted here\. Consider adjusting this type to be written in the form 'C'$ +//Unexpected identifier in member definition$ #nowarn "0988" type T<'t> = System.Collections.Generic.List<'t> diff --git a/tests/fsharpqa/Source/OCamlCompat/MultiArgumentGenericType.fs b/tests/fsharpqa/Source/OCamlCompat/MultiArgumentGenericType.fs index 54b26ccc63d..a632b981da4 100644 --- a/tests/fsharpqa/Source/OCamlCompat/MultiArgumentGenericType.fs +++ b/tests/fsharpqa/Source/OCamlCompat/MultiArgumentGenericType.fs @@ -2,7 +2,7 @@ // Regressin Test for FSharp1.0:2098 - OCaml-compat warning for generics written like this: (string, int)Dictionary -//This construct is deprecated: The use of the type syntax 'int C' and 'C ' is not permitted here\. Consider adjusting this type to be written in the form 'C'$ +//Unexpected identifier in expression$ open System.Collections.Generic diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index ee00b0994f9..cf61efda488 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -131,3 +131,9 @@ https://github.com/manofstick/visualfsharp.git all-your-collections-are-belong-t https://github.com/manofstick/visualfsharp.git all-your-collections-are-belong-to-us 87dafbc17b494c438b6db9e59e064736bd8a44e2 ba63403cb5898596c5e875a14ce22b33ef618c01 221.58 11.19 31.91 48.23 66.05 52.99 https://github.com/manofstick/visualfsharp.git all-your-collections-are-belong-to-us 87dafbc17b494c438b6db9e59e064736bd8a44e2 458e6c29d7e059a5a8a7b4cd7858c7d633fb5906 224.75 11.20 31.09 46.96 63.08 53.08 https://github.com/manofstick/visualfsharp.git all-your-collections-are-belong-to-us 87dafbc17b494c438b6db9e59e064736bd8a44e2 7e1fd6ac330f86597f3167e8067cfd805a89eec9 235.48 10.83 33.47 47.17 65.56 52.50 +https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f21223e60d0d9597e52ea9e5f8705963 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 259.69 11.98 32.23 47.16 56.83 58.14 +https://github.com/Microsoft/visualfsharp master ac9f2af4329d2ae1c4213bb1d22dc4450b319207 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 250.78 11.70 30.18 46.84 57.18 58.49 +https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f21223e60d0d9597e52ea9e5f8705963 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 250.75 11.73 30.77 46.66 57.97 59.44 +https://github.com/Microsoft/visualfsharp master ac9f2af4329d2ae1c4213bb1d22dc4450b319207 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 251.89 11.89 30.30 46.67 58.00 59.09 +https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f21223e60d0d9597e52ea9e5f8705963 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 252.83 11.66 31.05 47.17 58.80 58.59 +https://github.com/Microsoft/visualfsharp master ac9f2af4329d2ae1c4213bb1d22dc4450b319207 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 250.48 11.44 30.93 46.09 57.41 58.86 diff --git a/tests/service/Common.fs b/tests/service/Common.fs index f174908114a..9765be12118 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -230,6 +230,9 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsVolatile then yield "volatile" if v.IsStatic then yield "static" if v.IsLiteral then yield sprintf "%A" v.LiteralValue.Value + if v.IsAnonRecordField then + let info, tys, i = v.AnonRecordFieldDetails + yield "anon(" + string i + ", [" + info.Assembly.QualifiedName + "/" + String.concat "+" info.EnclosingCompiledTypeNames + "/" + info.CompiledName + "]" + String.concat "," info.SortedFieldNames + ")" | :? FSharpEntity as v -> diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 34822b99fe1..5852a0a4436 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -4971,6 +4971,88 @@ let ``Test Project40 all symbols`` () = ("IsItAnAMethod", ((13, 25), (13, 40)), ["member"; "funky"]); ("g", ((13, 4), (13, 5)), ["val"]); ("M", ((2, 7), (2, 8)), ["module"])] +//-------------------------------------------- + +module internal Project41 = + open System.IO + + let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") + let base2 = Path.GetTempFileName() + let dllName = Path.ChangeExtension(base2, ".dll") + let projFileName = Path.ChangeExtension(base2, ".fsproj") + let fileSource1 = """ +module M + + let data1 = {| X = 1 |} + + // Types can be written with the same syntax + let data2 : {| X : int |} = data1 + + type D = {| X : int |} + + // Access is as expected + let f1 (v : {| X : int |}) = v.X + + // Access is as expected + let f2 (v : D) = v.X + + // Access can be nested + let f3 (v : {| X: {| X : int; Y : string |} |}) = v.X.X + + """ + File.WriteAllText(fileName1, fileSource1) + let fileNames = [fileName1] + let args = mkProjectCommandLineArgs (dllName, fileNames) + let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) + let cleanFileName a = if a = fileName1 then "file1" else "??" + +[] +let ``Test project41 all symbols`` () = + + let wholeProjectResults = checker.ParseAndCheckProject(Project41.options) |> Async.RunSynchronously + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() |> Async.RunSynchronously + let allSymbolUsesInfo = + [ for s in allSymbolUses do + let pos = + match s.Symbol.DeclarationLocation with + | Some r when r.FileName = Project41.fileName1 -> r.StartLine, r.StartColumn + | _ -> (0,0) + yield (s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol, pos) ] + allSymbolUsesInfo |> shouldEqual + [("X", ((4, 19), (4, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (4, 19)); + ("data1", ((4, 8), (4, 13)), ["val"], (4, 8)); + ("int", ((7, 23), (7, 26)), ["abbrev"], (0, 0)); + ("X", ((7, 19), (7, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (7, 19)); + ("data1", ((7, 32), (7, 37)), ["val"], (4, 8)); + ("data2", ((7, 8), (7, 13)), ["val"], (7, 8)); + ("int", ((9, 20), (9, 23)), ["abbrev"], (0, 0)); + ("X", ((9, 16), (9, 17)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("int", ((9, 20), (9, 23)), ["abbrev"], (0, 0)); + ("X", ((9, 16), (9, 17)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("D", ((9, 9), (9, 10)), ["abbrev"], (9, 9)); + ("int", ((12, 23), (12, 26)), ["abbrev"], (0, 0)); + ("X", ((12, 19), (12, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (12, 19)); + ("v", ((12, 12), (12, 13)), [], (12, 12)); + ("v", ((12, 33), (12, 34)), [], (12, 12)); + ("X", ((12, 33), (12, 36)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (12, 19)); + ("f1", ((12, 8), (12, 10)), ["val"], (12, 8)); + ("D", ((15, 16), (15, 17)), ["abbrev"], (9, 9)); + ("v", ((15, 12), (15, 13)), [], (15, 12)); + ("v", ((15, 21), (15, 22)), [], (15, 12)); + ("X", ((15, 21), (15, 24)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("f2", ((15, 8), (15, 10)), ["val"], (15, 8)); + ("int", ((18, 29), (18, 32)), ["abbrev"], (0, 0)); + ("string", ((18, 38), (18, 44)), ["abbrev"], (0, 0)); + ("X", ((18, 25), (18, 26)), ["field"; "anon(0, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 25)); + ("Y", ((18, 34), (18, 35)), ["field"; "anon(1, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 34)); + ("X", ((18, 19), (18, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (18, 19)); + ("v", ((18, 12), (18, 13)), [], (18, 12)); + ("v", ((18, 54), (18, 55)), [], (18, 12)); + ("X", ((18, 56), (18, 57)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (18, 19)); + ("X", ((18, 54), (18, 59)), ["field"; "anon(0, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 25)); + ("f3", ((18, 8), (18, 10)), ["val"], (18, 8)); + ("M", ((2, 7), (2, 8)), ["module"], (2, 7))] + module internal ProjectBig = open System.IO From 4335cff62c9ecfa1b50a2817234072d036026fb4 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 13 Mar 2018 19:07:43 +0000 Subject: [PATCH 02/48] stable tests --- tests/service/ProjectAnalysisTests.fs | 39 ++++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 5852a0a4436..6463fbd5490 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -4977,7 +4977,8 @@ module internal Project41 = open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") - let base2 = Path.GetTempFileName() + // We need to us a stable name to keep the hashes stable + let base2 = Path.Combine(Path.GetDirectoryName(Path.GetTempFileName()), "stabletmp.tmp") let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSource1 = """ @@ -5019,37 +5020,49 @@ let ``Test project41 all symbols`` () = | _ -> (0,0) yield (s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol, pos) ] allSymbolUsesInfo |> shouldEqual - [("X", ((4, 19), (4, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (4, 19)); + [("X", ((4, 19), (4, 20)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (4, 19)); ("data1", ((4, 8), (4, 13)), ["val"], (4, 8)); ("int", ((7, 23), (7, 26)), ["abbrev"], (0, 0)); - ("X", ((7, 19), (7, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (7, 19)); + ("X", ((7, 19), (7, 20)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (7, 19)); ("data1", ((7, 32), (7, 37)), ["val"], (4, 8)); ("data2", ((7, 8), (7, 13)), ["val"], (7, 8)); ("int", ((9, 20), (9, 23)), ["abbrev"], (0, 0)); - ("X", ((9, 16), (9, 17)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("X", ((9, 16), (9, 17)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (9, 16)); ("int", ((9, 20), (9, 23)), ["abbrev"], (0, 0)); - ("X", ((9, 16), (9, 17)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("X", ((9, 16), (9, 17)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (9, 16)); ("D", ((9, 9), (9, 10)), ["abbrev"], (9, 9)); ("int", ((12, 23), (12, 26)), ["abbrev"], (0, 0)); - ("X", ((12, 19), (12, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (12, 19)); + ("X", ((12, 19), (12, 20)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (12, 19)); ("v", ((12, 12), (12, 13)), [], (12, 12)); ("v", ((12, 33), (12, 34)), [], (12, 12)); - ("X", ((12, 33), (12, 36)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (12, 19)); + ("X", ((12, 33), (12, 36)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (12, 19)); ("f1", ((12, 8), (12, 10)), ["val"], (12, 8)); ("D", ((15, 16), (15, 17)), ["abbrev"], (9, 9)); ("v", ((15, 12), (15, 13)), [], (15, 12)); ("v", ((15, 21), (15, 22)), [], (15, 12)); - ("X", ((15, 21), (15, 24)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (9, 16)); + ("X", ((15, 21), (15, 24)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (9, 16)); ("f2", ((15, 8), (15, 10)), ["val"], (15, 8)); ("int", ((18, 29), (18, 32)), ["abbrev"], (0, 0)); ("string", ((18, 38), (18, 44)), ["abbrev"], (0, 0)); - ("X", ((18, 25), (18, 26)), ["field"; "anon(0, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 25)); - ("Y", ((18, 34), (18, 35)), ["field"; "anon(1, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 34)); - ("X", ((18, 19), (18, 20)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (18, 19)); + ("X", ((18, 25), (18, 26)), + ["field"; "anon(0, [//<>f__AnonymousType4026451324`2']X,Y)"], (18, 25)); + ("Y", ((18, 34), (18, 35)), + ["field"; "anon(1, [//<>f__AnonymousType4026451324`2']X,Y)"], (18, 34)); + ("X", ((18, 19), (18, 20)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (18, 19)); ("v", ((18, 12), (18, 13)), [], (18, 12)); ("v", ((18, 54), (18, 55)), [], (18, 12)); - ("X", ((18, 56), (18, 57)), ["field"; "anon(0, [//<>f__AnonymousType3999162117`1']X)"], (18, 19)); - ("X", ((18, 54), (18, 59)), ["field"; "anon(0, [//<>f__AnonymousType3571351395`2']X,Y)"], (18, 25)); + ("X", ((18, 56), (18, 57)), + ["field"; "anon(0, [//<>f__AnonymousType1416859829`1']X)"], (18, 19)); + ("X", ((18, 54), (18, 59)), + ["field"; "anon(0, [//<>f__AnonymousType4026451324`2']X,Y)"], (18, 25)); ("f3", ((18, 8), (18, 10)), ["val"], (18, 8)); ("M", ((2, 7), (2, 8)), ["module"], (2, 7))] From 6000c34a39759d52c65a0dd93c35cfa7249394b5 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 14 Mar 2018 14:08:19 +0000 Subject: [PATCH 03/48] fix build --- tests/fsharp/core/anon/test.fsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharp/core/anon/test.fsx b/tests/fsharp/core/anon/test.fsx index d45bd257165..331d522f071 100644 --- a/tests/fsharp/core/anon/test.fsx +++ b/tests/fsharp/core/anon/test.fsx @@ -53,7 +53,7 @@ module CrossAssemblyTest = tests() module CrossAssemblyTestStruct = - let tesvts() = + let tests() = check "svrknvio1" (SampleAPIStruct.SampleFunction {| A=1; B = "abc" |}) 4 // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. check "svrknvio2" (SampleAPIStruct.SampleFunctionAcceptingList [ {| A=1; B = "abc" |}; {| A=2; B = "def" |} ]) [4; 5] // note, this is creating an instance of an anonymous record from another assembly. The structness is inferred in this case. check "svrknvio3" (let d = SampleAPIStruct.SampleFunctionReturningAnonRecd() in d.A + d.B.Length) 4 From 1ffbee73fa422767513c326fad7b1282a49f60e3 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 14 Mar 2018 17:29:55 +0000 Subject: [PATCH 04/48] copy and update --- DEVGUIDE.md | 18 +- .../FSharp.Compiler.Private/FSComp.fs | 182 +++++++++--------- .../FSharp.Compiler.Private/FSComp.resx | 3 + src/fsharp/FSComp.txt | 1 + src/fsharp/LexFilter.fs | 9 +- src/fsharp/TypeChecker.fs | 129 ++++++++++--- src/fsharp/ast.fs | 10 +- src/fsharp/pars.fsy | 51 ++--- src/fsharp/service/ServiceParseTreeWalk.fs | 32 ++- src/fsharp/service/ServiceUntypedParse.fs | 5 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 5 + src/fsharp/xlf/FSComp.txt.de.xlf | 5 + src/fsharp/xlf/FSComp.txt.en.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 + tests/fsharp/core/anon/lib.fs | 45 ++++- 25 files changed, 392 insertions(+), 163 deletions(-) diff --git a/DEVGUIDE.md b/DEVGUIDE.md index 9fd93452651..b453a7bdbc7 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -215,12 +215,23 @@ For **Release**: - We use the proto compiler to compile the source for `FSharp.Core.dll` in this distribution. - We use the proto compiler to compile the source for `FSharp.Compiler.dll`, `fsc.exe`, `fsi.exe`, and other binaries found in this distribution. -#### Updating FSComp.fs +#### Updating FSComp.fs, FSComp.resx and XLF If you change error messages you may need to update FSComp.fs in `src\buildfromsource\FSharp.Compiler.Private`. To do this, build the non-buildfromsource version of FSharp.Compiler.Private (src\fsharp\FSharp.Compiler.Private) then check its obj\ directory for `FSComp.fs` and manually copy that into the buildfromsource directory. + copy /y src\fsharp\FSharp.Compiler.Private\obj\Debug\net40\FSComp.fs src\buildfromsource\FSharp.Compiler.Private\ + copy /y src\fsharp\FSharp.Compiler.Private\obj\Debug\net40\FSComp.resx src\buildfromsource\FSharp.Compiler.Private\ + +If your changes involve modifying the list of language keywords in any way, (e.g. when implementing a new keyword), the XLF localization files need to be synced with the corresponding resx files. This can be done automatically by running + + pushd src\fsharp\FSharp.Compiler.Private + msbuild FSharp.Compiler.Private.fsproj /t:UpdateXlf + popd + +This only works on Windows/.NETStandard framework, so changing this from any other platform requires editing and syncing all of the XLF files manually. + #### Configuring proxy server @@ -232,11 +243,6 @@ If you are behind a proxy server, NuGet client tool must be configured to use it Where you should set proper proxy address, user name and password. -#### When modifying, adding, or removing keywords or compiler messages - -If your changes involve modifying the list of language keywords in any way, (e.g. when implementing a new keyword), the XLF localization files need to be synced with the corresponding resx files. This can be done automatically by running `msbuild FSharp.Compiler.Private.fsproj /t:UpdateXlf` (located in [src\fsharp\FSharp.Compiler.Private](https://github.com/Microsoft/visualfsharp/tree/master/src/fsharp/FSharp.Compiler.Private)). This only works on Windows/.NETStandard framework, so changing this from any other platform requires editing and syncing all of the XLF files manually. - -After this, you must copy any differing `resx` files from the output directory into the corresponding subdirectory in [src\buildfromsource](https://github.com/Microsoft/visualfsharp/tree/master/src/fsharp/FSharp.Compiler.Private). This step will soon be eliminated (see issue [#3905](https://github.com/Microsoft/visualfsharp/issues/3905)). #### Resources diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs index a88526f0fe7..e78c24d6146 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs @@ -4057,273 +4057,276 @@ type internal SR private() = /// Two anonymous record types are from different assemblies '%s' and '%s' /// (Originally from ..\FSComp.txt:1343) static member tcAnonRecdCcuMismatch(a0 : System.String, a1 : System.String) = (GetStringFunc("tcAnonRecdCcuMismatch",",,,%s,,,%s,,,") a0 a1) - /// One anonymous record type is assembly-bound to '%s' (syntax 'new {| ... |}'), the other is assembly-neutral (syntax '{| ... |}') + /// Two anonymous record types have mismatched sets of field names '%s' and '%s' /// (Originally from ..\FSComp.txt:1344) static member tcAnonRecdFieldNameMismatch(a0 : System.String, a1 : System.String) = (GetStringFunc("tcAnonRecdFieldNameMismatch",",,,%s,,,%s,,,") a0 a1) /// Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. - /// (Originally from ..\FSComp.txt:1346) + /// (Originally from ..\FSComp.txt:1345) static member keywordDescriptionAbstract() = (GetStringFunc("keywordDescriptionAbstract",",,,") ) /// Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters. - /// (Originally from ..\FSComp.txt:1347) + /// (Originally from ..\FSComp.txt:1346) static member keyworkDescriptionAnd() = (GetStringFunc("keyworkDescriptionAnd",",,,") ) /// Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. - /// (Originally from ..\FSComp.txt:1348) + /// (Originally from ..\FSComp.txt:1347) static member keywordDescriptionAs() = (GetStringFunc("keywordDescriptionAs",",,,") ) /// Used to verify code during debugging. - /// (Originally from ..\FSComp.txt:1349) + /// (Originally from ..\FSComp.txt:1348) static member keywordDescriptionAssert() = (GetStringFunc("keywordDescriptionAssert",",,,") ) /// Used as the name of the base class object. - /// (Originally from ..\FSComp.txt:1350) + /// (Originally from ..\FSComp.txt:1349) static member keywordDescriptionBase() = (GetStringFunc("keywordDescriptionBase",",,,") ) /// In verbose syntax, indicates the start of a code block. - /// (Originally from ..\FSComp.txt:1351) + /// (Originally from ..\FSComp.txt:1350) static member keywordDescriptionBegin() = (GetStringFunc("keywordDescriptionBegin",",,,") ) /// In verbose syntax, indicates the start of a class definition. - /// (Originally from ..\FSComp.txt:1352) + /// (Originally from ..\FSComp.txt:1351) static member keywordDescriptionClass() = (GetStringFunc("keywordDescriptionClass",",,,") ) /// Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. - /// (Originally from ..\FSComp.txt:1353) + /// (Originally from ..\FSComp.txt:1352) static member keywordDescriptionDefault() = (GetStringFunc("keywordDescriptionDefault",",,,") ) /// Used to declare a delegate. - /// (Originally from ..\FSComp.txt:1354) + /// (Originally from ..\FSComp.txt:1353) static member keywordDescriptionDelegate() = (GetStringFunc("keywordDescriptionDelegate",",,,") ) /// Used in looping constructs or to execute imperative code. - /// (Originally from ..\FSComp.txt:1355) + /// (Originally from ..\FSComp.txt:1354) static member keywordDescriptionDo() = (GetStringFunc("keywordDescriptionDo",",,,") ) /// In verbose syntax, indicates the end of a block of code in a looping expression. - /// (Originally from ..\FSComp.txt:1356) + /// (Originally from ..\FSComp.txt:1355) static member keywordDescriptionDone() = (GetStringFunc("keywordDescriptionDone",",,,") ) /// Used to convert to a type that is lower in the inheritance chain. - /// (Originally from ..\FSComp.txt:1357) + /// (Originally from ..\FSComp.txt:1356) static member keywordDescriptionDowncast() = (GetStringFunc("keywordDescriptionDowncast",",,,") ) /// In a for expression, used when counting in reverse. - /// (Originally from ..\FSComp.txt:1358) + /// (Originally from ..\FSComp.txt:1357) static member keywordDescriptionDownto() = (GetStringFunc("keywordDescriptionDownto",",,,") ) /// Used in conditional branching. A short form of else if. - /// (Originally from ..\FSComp.txt:1359) + /// (Originally from ..\FSComp.txt:1358) static member keywordDescriptionElif() = (GetStringFunc("keywordDescriptionElif",",,,") ) /// Used in conditional branching. - /// (Originally from ..\FSComp.txt:1360) + /// (Originally from ..\FSComp.txt:1359) static member keywordDescriptionElse() = (GetStringFunc("keywordDescriptionElse",",,,") ) /// In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. - /// (Originally from ..\FSComp.txt:1361) + /// (Originally from ..\FSComp.txt:1360) static member keywordDescriptionEnd() = (GetStringFunc("keywordDescriptionEnd",",,,") ) /// Used to declare an exception type. - /// (Originally from ..\FSComp.txt:1362) + /// (Originally from ..\FSComp.txt:1361) static member keywordDescriptionException() = (GetStringFunc("keywordDescriptionException",",,,") ) /// Indicates that a declared program element is defined in another binary or assembly. - /// (Originally from ..\FSComp.txt:1363) + /// (Originally from ..\FSComp.txt:1362) static member keywordDescriptionExtern() = (GetStringFunc("keywordDescriptionExtern",",,,") ) /// Used as a Boolean literal. - /// (Originally from ..\FSComp.txt:1364) + /// (Originally from ..\FSComp.txt:1363) static member keywordDescriptionTrueFalse() = (GetStringFunc("keywordDescriptionTrueFalse",",,,") ) /// Used together with try to introduce a block of code that executes regardless of whether an exception occurs. - /// (Originally from ..\FSComp.txt:1365) + /// (Originally from ..\FSComp.txt:1364) static member keywordDescriptionFinally() = (GetStringFunc("keywordDescriptionFinally",",,,") ) /// Used in looping constructs. - /// (Originally from ..\FSComp.txt:1366) + /// (Originally from ..\FSComp.txt:1365) static member keywordDescriptionFor() = (GetStringFunc("keywordDescriptionFor",",,,") ) /// Used in lambda expressions, also known as anonymous functions. - /// (Originally from ..\FSComp.txt:1367) + /// (Originally from ..\FSComp.txt:1366) static member keywordDescriptionFun() = (GetStringFunc("keywordDescriptionFun",",,,") ) /// Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. - /// (Originally from ..\FSComp.txt:1368) + /// (Originally from ..\FSComp.txt:1367) static member keywordDescriptionFunction() = (GetStringFunc("keywordDescriptionFunction",",,,") ) /// Used to reference the top-level .NET namespace. - /// (Originally from ..\FSComp.txt:1369) + /// (Originally from ..\FSComp.txt:1368) static member keywordDescriptionGlobal() = (GetStringFunc("keywordDescriptionGlobal",",,,") ) /// Used in conditional branching constructs. - /// (Originally from ..\FSComp.txt:1370) + /// (Originally from ..\FSComp.txt:1369) static member keywordDescriptionIf() = (GetStringFunc("keywordDescriptionIf",",,,") ) /// Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. - /// (Originally from ..\FSComp.txt:1371) + /// (Originally from ..\FSComp.txt:1370) static member keywordDescriptionIn() = (GetStringFunc("keywordDescriptionIn",",,,") ) /// Used to specify a base class or base interface. - /// (Originally from ..\FSComp.txt:1372) + /// (Originally from ..\FSComp.txt:1371) static member keywordDescriptionInherit() = (GetStringFunc("keywordDescriptionInherit",",,,") ) /// Used to indicate a function that should be integrated directly into the caller's code. - /// (Originally from ..\FSComp.txt:1373) + /// (Originally from ..\FSComp.txt:1372) static member keywordDescriptionInline() = (GetStringFunc("keywordDescriptionInline",",,,") ) /// Used to declare and implement interfaces. - /// (Originally from ..\FSComp.txt:1374) + /// (Originally from ..\FSComp.txt:1373) static member keywordDescriptionInterface() = (GetStringFunc("keywordDescriptionInterface",",,,") ) /// Used to specify that a member is visible inside an assembly but not outside it. - /// (Originally from ..\FSComp.txt:1375) + /// (Originally from ..\FSComp.txt:1374) static member keywordDescriptionInternal() = (GetStringFunc("keywordDescriptionInternal",",,,") ) /// Used to specify a computation that is to be performed only when a result is needed. - /// (Originally from ..\FSComp.txt:1376) + /// (Originally from ..\FSComp.txt:1375) static member keywordDescriptionLazy() = (GetStringFunc("keywordDescriptionLazy",",,,") ) /// Used to associate, or bind, a name to a value or function. - /// (Originally from ..\FSComp.txt:1377) + /// (Originally from ..\FSComp.txt:1376) static member keywordDescriptionLet() = (GetStringFunc("keywordDescriptionLet",",,,") ) /// Used in asynchronous workflows to bind a name to the result of an asynchronous computation, or, in other computation expressions, used to bind a name to a result, which is of the computation type. - /// (Originally from ..\FSComp.txt:1378) + /// (Originally from ..\FSComp.txt:1377) static member keywordDescriptionLetBang() = (GetStringFunc("keywordDescriptionLetBang",",,,") ) /// Used to branch by comparing a value to a pattern. - /// (Originally from ..\FSComp.txt:1379) + /// (Originally from ..\FSComp.txt:1378) static member keywordDescriptionMatch() = (GetStringFunc("keywordDescriptionMatch",",,,") ) /// Used to declare a property or method in an object type. - /// (Originally from ..\FSComp.txt:1380) + /// (Originally from ..\FSComp.txt:1379) static member keywordDescriptionMember() = (GetStringFunc("keywordDescriptionMember",",,,") ) /// Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. - /// (Originally from ..\FSComp.txt:1381) + /// (Originally from ..\FSComp.txt:1380) static member keywordDescriptionModule() = (GetStringFunc("keywordDescriptionModule",",,,") ) /// Used to declare a variable, that is, a value that can be changed. - /// (Originally from ..\FSComp.txt:1382) + /// (Originally from ..\FSComp.txt:1381) static member keywordDescriptionMutable() = (GetStringFunc("keywordDescriptionMutable",",,,") ) /// Used to associate a name with a group of related types and modules, to logically separate it from other code. - /// (Originally from ..\FSComp.txt:1383) + /// (Originally from ..\FSComp.txt:1382) static member keywordDescriptionNamespace() = (GetStringFunc("keywordDescriptionNamespace",",,,") ) /// Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. - /// (Originally from ..\FSComp.txt:1384) + /// (Originally from ..\FSComp.txt:1383) static member keywordDescriptionNew() = (GetStringFunc("keywordDescriptionNew",",,,") ) /// Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - /// (Originally from ..\FSComp.txt:1385) + /// (Originally from ..\FSComp.txt:1384) static member keywordDescriptionNot() = (GetStringFunc("keywordDescriptionNot",",,,") ) /// Indicates the absence of an object. Also used in generic parameter constraints. - /// (Originally from ..\FSComp.txt:1386) + /// (Originally from ..\FSComp.txt:1385) static member keywordDescriptionNull() = (GetStringFunc("keywordDescriptionNull",",,,") ) /// Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. - /// (Originally from ..\FSComp.txt:1387) + /// (Originally from ..\FSComp.txt:1386) static member keywordDescriptionOf() = (GetStringFunc("keywordDescriptionOf",",,,") ) /// Used to make the contents of a namespace or module available without qualification. - /// (Originally from ..\FSComp.txt:1388) + /// (Originally from ..\FSComp.txt:1387) static member keywordDescriptionOpen() = (GetStringFunc("keywordDescriptionOpen",",,,") ) /// Used with Boolean conditions as a Boolean or operator. Equivalent to ||. Also used in member constraints. - /// (Originally from ..\FSComp.txt:1389) + /// (Originally from ..\FSComp.txt:1388) static member keywordDescriptionOr() = (GetStringFunc("keywordDescriptionOr",",,,") ) /// Used to implement a version of an abstract or virtual method that differs from the base version. - /// (Originally from ..\FSComp.txt:1390) + /// (Originally from ..\FSComp.txt:1389) static member keywordDescriptionOverride() = (GetStringFunc("keywordDescriptionOverride",",,,") ) /// Restricts access to a member to code in the same type or module. - /// (Originally from ..\FSComp.txt:1391) + /// (Originally from ..\FSComp.txt:1390) static member keywordDescriptionPrivate() = (GetStringFunc("keywordDescriptionPrivate",",,,") ) /// Allows access to a member from outside the type. - /// (Originally from ..\FSComp.txt:1392) + /// (Originally from ..\FSComp.txt:1391) static member keywordDescriptionPublic() = (GetStringFunc("keywordDescriptionPublic",",,,") ) /// Used to indicate that a function is recursive. - /// (Originally from ..\FSComp.txt:1393) + /// (Originally from ..\FSComp.txt:1392) static member keywordDescriptionRec() = (GetStringFunc("keywordDescriptionRec",",,,") ) /// Used to indicate a value to provide as the result of a computation expression. - /// (Originally from ..\FSComp.txt:1394) + /// (Originally from ..\FSComp.txt:1393) static member keywordDescriptionReturn() = (GetStringFunc("keywordDescriptionReturn",",,,") ) /// Used to indicate a computation expression that, when evaluated, provides the result of the containing computation expression. - /// (Originally from ..\FSComp.txt:1395) + /// (Originally from ..\FSComp.txt:1394) static member keywordDescriptionReturnBang() = (GetStringFunc("keywordDescriptionReturnBang",",,,") ) /// Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. - /// (Originally from ..\FSComp.txt:1396) + /// (Originally from ..\FSComp.txt:1395) static member keywordDescriptionSelect() = (GetStringFunc("keywordDescriptionSelect",",,,") ) /// Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. - /// (Originally from ..\FSComp.txt:1397) + /// (Originally from ..\FSComp.txt:1396) static member keywordDescriptionStatic() = (GetStringFunc("keywordDescriptionStatic",",,,") ) /// Used to declare a structure type. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. - /// (Originally from ..\FSComp.txt:1398) + /// (Originally from ..\FSComp.txt:1397) static member keywordDescriptionStruct() = (GetStringFunc("keywordDescriptionStruct",",,,") ) /// Used in conditional expressions. Also used to perform side effects after object construction. - /// (Originally from ..\FSComp.txt:1399) + /// (Originally from ..\FSComp.txt:1398) static member keywordDescriptionThen() = (GetStringFunc("keywordDescriptionThen",",,,") ) /// Used in for loops to indicate a range. - /// (Originally from ..\FSComp.txt:1400) + /// (Originally from ..\FSComp.txt:1399) static member keywordDescriptionTo() = (GetStringFunc("keywordDescriptionTo",",,,") ) /// Used to introduce a block of code that might generate an exception. Used together with with or finally. - /// (Originally from ..\FSComp.txt:1401) + /// (Originally from ..\FSComp.txt:1400) static member keywordDescriptionTry() = (GetStringFunc("keywordDescriptionTry",",,,") ) /// Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. - /// (Originally from ..\FSComp.txt:1402) + /// (Originally from ..\FSComp.txt:1401) static member keywordDescriptionType() = (GetStringFunc("keywordDescriptionType",",,,") ) /// Used to convert to a type that is higher in the inheritance chain. - /// (Originally from ..\FSComp.txt:1403) + /// (Originally from ..\FSComp.txt:1402) static member keywordDescriptionUpcast() = (GetStringFunc("keywordDescriptionUpcast",",,,") ) /// Used instead of let for values that require Dispose to be called to free resources. - /// (Originally from ..\FSComp.txt:1404) + /// (Originally from ..\FSComp.txt:1403) static member keywordDescriptionUse() = (GetStringFunc("keywordDescriptionUse",",,,") ) /// Used instead of let! in asynchronous workflows and other computation expressions for values that require Dispose to be called to free resources. - /// (Originally from ..\FSComp.txt:1405) + /// (Originally from ..\FSComp.txt:1404) static member keywordDescriptionUseBang() = (GetStringFunc("keywordDescriptionUseBang",",,,") ) /// Used in a signature to indicate a value, or in a type to declare a member, in limited situations. - /// (Originally from ..\FSComp.txt:1406) + /// (Originally from ..\FSComp.txt:1405) static member keywordDescriptionVal() = (GetStringFunc("keywordDescriptionVal",",,,") ) /// Indicates the .NET void type. Used when interoperating with other .NET languages. - /// (Originally from ..\FSComp.txt:1407) + /// (Originally from ..\FSComp.txt:1406) static member keywordDescriptionVoid() = (GetStringFunc("keywordDescriptionVoid",",,,") ) /// Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. - /// (Originally from ..\FSComp.txt:1408) + /// (Originally from ..\FSComp.txt:1407) static member keywordDescriptionWhen() = (GetStringFunc("keywordDescriptionWhen",",,,") ) /// Introduces a looping construct. - /// (Originally from ..\FSComp.txt:1409) + /// (Originally from ..\FSComp.txt:1408) static member keywordDescriptionWhile() = (GetStringFunc("keywordDescriptionWhile",",,,") ) /// Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. - /// (Originally from ..\FSComp.txt:1410) + /// (Originally from ..\FSComp.txt:1409) static member keywordDescriptionWith() = (GetStringFunc("keywordDescriptionWith",",,,") ) /// Used in a sequence expression to produce a value for a sequence. - /// (Originally from ..\FSComp.txt:1411) + /// (Originally from ..\FSComp.txt:1410) static member keywordDescriptionYield() = (GetStringFunc("keywordDescriptionYield",",,,") ) /// Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. - /// (Originally from ..\FSComp.txt:1412) + /// (Originally from ..\FSComp.txt:1411) static member keywordDescriptionYieldBang() = (GetStringFunc("keywordDescriptionYieldBang",",,,") ) /// In function types, delimits arguments and return values. Yields an expression (in sequence expressions); equivalent to the yield keyword. Used in match expressions - /// (Originally from ..\FSComp.txt:1413) + /// (Originally from ..\FSComp.txt:1412) static member keywordDescriptionRightArrow() = (GetStringFunc("keywordDescriptionRightArrow",",,,") ) /// Assigns a value to a variable. - /// (Originally from ..\FSComp.txt:1414) + /// (Originally from ..\FSComp.txt:1413) static member keywordDescriptionLeftArrow() = (GetStringFunc("keywordDescriptionLeftArrow",",,,") ) /// Converts a type to type that is higher in the hierarchy. - /// (Originally from ..\FSComp.txt:1415) + /// (Originally from ..\FSComp.txt:1414) static member keywordDescriptionCast() = (GetStringFunc("keywordDescriptionCast",",,,") ) /// Converts a type to a type that is lower in the hierarchy. - /// (Originally from ..\FSComp.txt:1416) + /// (Originally from ..\FSComp.txt:1415) static member keywordDescriptionDynamicCast() = (GetStringFunc("keywordDescriptionDynamicCast",",,,") ) /// Delimits a typed code quotation. - /// (Originally from ..\FSComp.txt:1417) + /// (Originally from ..\FSComp.txt:1416) static member keywordDescriptionTypedQuotation() = (GetStringFunc("keywordDescriptionTypedQuotation",",,,") ) /// Delimits a untyped code quotation. - /// (Originally from ..\FSComp.txt:1418) + /// (Originally from ..\FSComp.txt:1417) static member keywordDescriptionUntypedQuotation() = (GetStringFunc("keywordDescriptionUntypedQuotation",",,,") ) /// %s '%s' not found in assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ..\FSComp.txt:1419) + /// (Originally from ..\FSComp.txt:1418) static member itemNotFoundDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String) = (3216, GetStringFunc("itemNotFoundDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s '%s' not found in type '%s' from assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ..\FSComp.txt:1420) + /// (Originally from ..\FSComp.txt:1419) static member itemNotFoundInTypeDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3216, GetStringFunc("itemNotFoundInTypeDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// is - /// (Originally from ..\FSComp.txt:1421) + /// (Originally from ..\FSComp.txt:1420) static member descriptionWordIs() = (GetStringFunc("descriptionWordIs",",,,") ) /// This value is not a function and cannot be applied. - /// (Originally from ..\FSComp.txt:1422) + /// (Originally from ..\FSComp.txt:1421) static member notAFunction() = (GetStringFunc("notAFunction",",,,") ) /// This value is not a function and cannot be applied. Did you intend to access the indexer via %s.[index] instead? - /// (Originally from ..\FSComp.txt:1423) + /// (Originally from ..\FSComp.txt:1422) static member notAFunctionButMaybeIndexerWithName(a0 : System.String) = (GetStringFunc("notAFunctionButMaybeIndexerWithName",",,,%s,,,") a0) /// This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead? - /// (Originally from ..\FSComp.txt:1424) + /// (Originally from ..\FSComp.txt:1423) static member notAFunctionButMaybeIndexer() = (GetStringFunc("notAFunctionButMaybeIndexer",",,,") ) /// - /// (Originally from ..\FSComp.txt:1425) + /// (Originally from ..\FSComp.txt:1424) static member notAFunctionButMaybeIndexerErrorCode() = (3217, GetStringFunc("notAFunctionButMaybeIndexerErrorCode",",,,") ) /// This value is not a function and cannot be applied. Did you forget to terminate a declaration? - /// (Originally from ..\FSComp.txt:1426) + /// (Originally from ..\FSComp.txt:1425) static member notAFunctionButMaybeDeclaration() = (GetStringFunc("notAFunctionButMaybeDeclaration",",,,") ) /// The argument names in the signature '%s' and implementation '%s' do not match. The argument name from the signature file will be used. This may cause problems when debugging or profiling. - /// (Originally from ..\FSComp.txt:1427) + /// (Originally from ..\FSComp.txt:1426) static member ArgumentsInSigAndImplMismatch(a0 : System.String, a1 : System.String) = (3218, GetStringFunc("ArgumentsInSigAndImplMismatch",",,,%s,,,%s,,,") a0 a1) /// An error occurred while reading the F# metadata of assembly '%s'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct. - /// (Originally from ..\FSComp.txt:1428) + /// (Originally from ..\FSComp.txt:1427) static member pickleUnexpectedNonZero(a0 : System.String) = (3219, GetStringFunc("pickleUnexpectedNonZero",",,,%s,,,") a0) /// This method or property is not normally used from F# code, use an explicit tuple pattern for deconstruction instead. - /// (Originally from ..\FSComp.txt:1429) + /// (Originally from ..\FSComp.txt:1428) static member tcTupleMemberNotNormallyUsed() = (3220, GetStringFunc("tcTupleMemberNotNormallyUsed",",,,") ) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'. - /// (Originally from ..\FSComp.txt:1430) + /// (Originally from ..\FSComp.txt:1429) static member implicitlyDiscardedInSequenceExpression(a0 : System.String) = (3221, GetStringFunc("implicitlyDiscardedInSequenceExpression",",,,%s,,,") a0) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. - /// (Originally from ..\FSComp.txt:1431) + /// (Originally from ..\FSComp.txt:1430) static member implicitlyDiscardedSequenceInSequenceExpression(a0 : System.String) = (3222, GetStringFunc("implicitlyDiscardedSequenceInSequenceExpression",",,,%s,,,") a0) /// Invalid anonymous record expression - /// (Originally from ..\FSComp.txt:1432) + /// (Originally from ..\FSComp.txt:1431) static member parsInvalidAnonRecdExpr() = (3223, GetStringFunc("parsInvalidAnonRecdExpr",",,,") ) /// Invalid anonymous record type - /// (Originally from ..\FSComp.txt:1433) + /// (Originally from ..\FSComp.txt:1432) static member parsInvalidAnonRecdType() = (3224, GetStringFunc("parsInvalidAnonRecdType",",,,") ) + /// The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + /// (Originally from ..\FSComp.txt:1433) + static member tcCopyAndUpdateNeedsRecordType() = (3225, GetStringFunc("tcCopyAndUpdateNeedsRecordType",",,,") ) /// Call this method once to validate that all known resources are valid; throws if not static member RunStartupValidation() = @@ -5730,4 +5733,5 @@ type internal SR private() = ignore(GetString("implicitlyDiscardedSequenceInSequenceExpression")) ignore(GetString("parsInvalidAnonRecdExpr")) ignore(GetString("parsInvalidAnonRecdType")) + ignore(GetString("tcCopyAndUpdateNeedsRecordType")) () diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index 2e1d0938ce4..07ea19a9a34 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -4327,4 +4327,7 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + \ No newline at end of file diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index a212f7def0b..60d6405efaa 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1430,3 +1430,4 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3222,implicitlyDiscardedSequenceInSequenceExpression,"This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'." 3223,parsInvalidAnonRecdExpr,"Invalid anonymous record expression" 3224,parsInvalidAnonRecdType,"Invalid anonymous record type" +3225,tcCopyAndUpdateNeedsRecordType,"The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record" diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index 8d92b6edb64..ed229ff4e83 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -674,7 +674,6 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, | _,(CtxtSeqBlock _ :: CtxtParen(LBRACE,_) :: CtxtVanilla _ :: CtxtSeqBlock _ :: rest) -> unindentationLimit false rest - // MAJOR PERMITTED UNDENTATION This is allowing: // if x then y else // let x = 3 + 4 @@ -768,7 +767,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // REVIEW: document these | _,(CtxtSeqBlock _ :: CtxtParen((BEGIN | LPAREN | LBRACK | LBRACK_BAR),_) :: CtxtVanilla _ :: (CtxtSeqBlock _ as limitCtxt) :: _) - | (CtxtSeqBlock _),(CtxtParen ((BEGIN | LPAREN | LBRACE | LBRACK | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: ((CtxtTypeDefns _ | CtxtLetDecl _ | CtxtMemberBody _ | CtxtWithAsLet _) as limitCtxt) :: _) + | (CtxtSeqBlock _),(CtxtParen ((BEGIN | LPAREN | LBRACE | LBRACE_BAR | LBRACK | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: ((CtxtTypeDefns _ | CtxtLetDecl _ | CtxtMemberBody _ | CtxtWithAsLet _) as limitCtxt) :: _) -> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1) // Permitted inner-construct (e.g. "then" block and "else" block in overall @@ -998,7 +997,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // WITH balances except in the following contexts.... Phew - an overused keyword! | WITH , ( ((CtxtMatch _ | CtxtException _ | CtxtMemberHead _ | CtxtInterfaceHead _ | CtxtTry _ | CtxtTypeDefns _ | CtxtMemberBody _) :: _) // This is the nasty record/object-expression case - | (CtxtSeqBlock _ :: CtxtParen(LBRACE,_) :: _) ) + | (CtxtSeqBlock _ :: CtxtParen((LBRACE | LBRACE_BAR),_) :: _) ) | FINALLY , (CtxtTry _ :: _) -> true @@ -1796,7 +1795,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, // '{ id1 = 1 // M.id2 = ... ' ~~~> CtxtSeqBlock | EQUALS, ((CtxtWithAsLet _) :: _) // This detects 'with = '. - | EQUALS, ((CtxtVanilla (_,true)) :: (CtxtSeqBlock _) :: (CtxtWithAsLet _ | CtxtParen(LBRACE,_)) :: _) -> + | EQUALS, ((CtxtVanilla (_,true)) :: (CtxtSeqBlock _) :: (CtxtWithAsLet _ | CtxtParen((LBRACE | LBRACE_BAR),_)) :: _) -> if debug then dprintf "CtxtLetDecl/CtxtWithAsLet: EQUALS, pushing CtxtSeqBlock\n" // We don't insert begin/end block tokens for single-line bindings since we can't properly distinguish single-line *) // record update expressions such as "{ t with gbuckets=Array.copy t.gbuckets; gcount=t.gcount }" *) @@ -1897,7 +1896,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer, returnToken tokenLexbufState token | WITH, (((CtxtException _ | CtxtTypeDefns _ | CtxtMemberHead _ | CtxtInterfaceHead _ | CtxtMemberBody _) as limCtxt) :: _) - | WITH, ((CtxtSeqBlock _) as limCtxt :: CtxtParen(LBRACE,_) :: _) -> + | WITH, ((CtxtSeqBlock _) as limCtxt :: CtxtParen((LBRACE | LBRACE_BAR),_) :: _) -> let lookaheadTokenTup = peekNextTokenTup() let lookaheadTokenStartPos = startPosOfTokenTup lookaheadTokenTup match lookaheadTokenTup.Token with diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 77fbb1daaf1..8c186961e1f 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -5821,23 +5821,8 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = let expr = mkAnyTupled cenv.g m tupInfo args' argtys expr, tpenv - | SynExpr.AnonRecd (isStruct, unsortedArgs, m) -> - let unsortedIds = unsortedArgs |> List.map fst |> List.toArray - let anonInfo, sortedArgTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m overallTy isStruct unsortedIds - - // Sort into canonical order - let sortedIndexedArgs = unsortedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) - let sigma = List.map fst sortedIndexedArgs |> List.toArray - let sortedArgs = List.map snd sortedIndexedArgs - sortedArgs |> List.iteri (fun j (x, _) -> - let item = Item.AnonRecdField(anonInfo, sortedArgTys, j, x.idRange) - CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights)) - let unsortedArgTys = sortedArgTys |> List.indexed |> List.sortBy (fun (j, _) -> sigma.[j]) |> List.map snd - let flexes = unsortedArgTys |> List.map (fun _ -> true) - let unsortedCheckedArgs, tpenv = TcExprs cenv env m tpenv flexes unsortedArgTys (List.map snd unsortedArgs) - let sortedCheckedArgs = unsortedCheckedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) |> List.map snd - - mkAnonRecd cenv.g m anonInfo sortedCheckedArgs sortedArgTys, tpenv + | SynExpr.AnonRecd (isStruct, optOrigExpr, unsortedArgs, mWholeExpr) -> + TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigExpr, unsortedArgs, mWholeExpr) | SynExpr.ArrayOrList (isArray, args, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.DisplayEnv, env.eAccessRights) @@ -6685,9 +6670,9 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, if // record construction ? isRecordTy || // object construction? - (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && Option.isNone argopt) then + (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && argopt.IsNone) then - if Option.isSome argopt then error(Error(FSComp.SR.tcNoArgumentsForRecordValue(), mWholeExpr)) + if argopt.IsSome then error(Error(FSComp.SR.tcNoArgumentsForRecordValue(), mWholeExpr)) if not (isNil extraImpls) then error(Error(FSComp.SR.tcNoInterfaceImplementationForConstructionExpression(), mNewExpr)) if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env <> 1 then error(Error(FSComp.SR.tcObjectConstructionCanOnlyBeUsedInClassTypes(), mNewExpr)) @@ -6894,11 +6879,6 @@ and TcAssertExpr cenv overallTy env (m:range) tpenv x = TcExpr cenv overallTy env tpenv callDiagnosticsExpr - -//------------------------------------------------------------------------- -// TcRecdExpr -//------------------------------------------------------------------------- - and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) = let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors @@ -6985,9 +6965,104 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr expr, tpenv -//------------------------------------------------------------------------- -// TcForEachExpr -//------------------------------------------------------------------------- +// Check '{| .... |}' +and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigExpr, unsortedArgs, mWholeExpr) = + + match optOrigExpr with + | None -> + let unsortedIds = unsortedArgs |> List.map fst |> List.toArray + let anonInfo, sortedArgTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedIds + + // Sort into canonical order + let sortedIndexedArgs = unsortedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) + let sigma = List.map fst sortedIndexedArgs |> List.toArray + let sortedArgs = List.map snd sortedIndexedArgs + sortedArgs |> List.iteri (fun j (x, _) -> + let item = Item.AnonRecdField(anonInfo, sortedArgTys, j, x.idRange) + CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights)) + let unsortedArgTys = sortedArgTys |> List.indexed |> List.sortBy (fun (j, _) -> sigma.[j]) |> List.map snd + let flexes = unsortedArgTys |> List.map (fun _ -> true) + let unsortedCheckedArgs, tpenv = TcExprs cenv env mWholeExpr tpenv flexes unsortedArgTys (List.map snd unsortedArgs) + let sortedCheckedArgs = unsortedCheckedArgs |> List.indexed |> List.sortBy (fun (i,_) -> unsortedIds.[i].idText) |> List.map snd + + mkAnonRecd cenv.g mWholeExpr anonInfo sortedCheckedArgs sortedArgTys, tpenv + + | Some (origExpr, _) -> + // The fairly complex case '{| origExpr with X = 1; Y = 2 |}' + // The origExpr may be either a record or anonymous record. + // The origExpr may be either a struct or not. + // All the properties of origExpr are copied across except where they are overridden. + // The result is a field-sorted anonymous record. + // + // Unlike in the case of record type copy-and-update we do _not_ assume that the origExpr has the same type as the overall expression. + // Unlike in the case of record type copy-and-update {| a with X = 1 |} does not force a.X to exist or have had type 'int' + + let origExprTy = NewInferenceType() + let origExprChecked, tpenv = TcExpr cenv origExprTy env tpenv origExpr + let oldv, oldve = mkCompGenLocal mWholeExpr "inputRecord" origExprTy + let mOrigExpr = origExpr.Range + + if not (isAppTy cenv.g origExprTy || isAnonRecdTy cenv.g origExprTy) then + error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) + + let origExprIsStruct = + match tryDestAnonRecdTy cenv.g origExprTy with + | Some (anonInfo, _) -> evalTupInfoIsStruct anonInfo.TupInfo + | None -> + let tcref, _ = destAppTy cenv.g origExprTy + tcref.IsStructOrEnumTycon + + let wrap, oldveaddr = mkExprAddrOfExpr cenv.g origExprIsStruct false NeverMutates oldve None mOrigExpr + + // Put all the expressions in unsorted order. The new bindings come first. The origin of each is tracked using + /// - Choice1Of2 for a new binding + /// - Choice2Of2 for a binding coming from the original expression + let unsortedIdAndExprsAll = + [| for (id, e) in unsortedArgs do + yield (id, Choice1Of2 e) + match tryDestAnonRecdTy cenv.g origExprTy with + | Some (anonInfo, tinst) -> + for (i, id) in Array.indexed anonInfo.SortedIds do + yield id, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) + | None -> + if isRecdTy cenv.g origExprTy then + let tcref, tinst = destAppTy cenv.g origExprTy + let fspecs = tcref.Deref.TrueInstanceFieldsAsList + for fspec in fspecs do + yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr , tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) + else + error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) |] + |> Array.distinctBy (fst >> textOfId) + + let unsortedIdsAll = Array.map fst unsortedIdAndExprsAll + let anonInfo, sortedArgTysAll = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedIdsAll + let sortedIndexedArgsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) + let sigma = Array.map fst sortedIndexedArgsAll // map from sorted indexes to unsorted indexes + let sortedArgsAll = Array.map snd sortedIndexedArgsAll + sortedArgsAll |> Array.iteri (fun j (x, expr) -> + match expr with + | Choice1Of2 _ -> + let item = Item.AnonRecdField(anonInfo, sortedArgTysAll, j, x.idRange) + CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights) + | Choice2Of2 _ -> ()) + + let unsortedArgTysNew = sortedArgTysAll |> List.indexed |> List.sortBy (fun (j, _) -> sigma.[j]) |> List.take unsortedArgs.Length |> List.map snd + let flexes = unsortedArgTysNew |> List.map (fun _ -> true) + + let unsortedCheckedArgsNew, tpenv = TcExprs cenv env mWholeExpr tpenv flexes unsortedArgTysNew (List.map snd unsortedArgs) + let sortedArgTysAllArray = Array.ofList sortedArgTysAll + let unsortedCheckedArgsNewArray = unsortedCheckedArgsNew |> List.toArray + let sortedCheckedArgsAll = + sortedArgsAll |> Array.mapi (fun j (_, expr) -> + match expr with + | Choice1Of2 _ -> unsortedCheckedArgsNewArray.[sigma.[j]] + | Choice2Of2 subExpr -> UnifyTypes cenv env mOrigExpr (tyOfExpr cenv.g subExpr) sortedArgTysAllArray.[j]; subExpr) + + let expr = mkAnonRecd cenv.g mWholeExpr anonInfo (List.ofArray sortedCheckedArgsAll) sortedArgTysAll + let expr = wrap expr + let expr = mkCompGenLet mOrigExpr oldv origExprChecked expr + expr, tpenv + and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWholeExpr, spForLoop) = UnifyTypes cenv env mWholeExpr overallTy cenv.g.unit_ty diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 3bc6214ec7c..611c0f91dd6 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -523,8 +523,8 @@ and | Tuple of isStruct: bool * exprs:SynExpr list * commaRanges:range list * range:range // "range list" is for interstitial commas, these only matter for parsing/design-time tooling, the typechecker may munge/discard them /// F# syntax: {| id1=e1; ...; idN=eN |} - /// F# syntax: {| new id1=e1; ...; idN=eN |} - | AnonRecd of isStruct: bool * recordFields:(Ident * SynExpr) list * range:range + /// F# syntax: struct {| id1=e1; ...; idN=eN |} + | AnonRecd of isStruct: bool * copyInfo:(SynExpr * BlockSeparator) option * recordFields:(Ident * SynExpr) list * range:range /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] | ArrayOrList of isList:bool * exprs:SynExpr list * range:range @@ -2356,10 +2356,12 @@ let rec synExprContainsError inpExpr = | SynExpr.Tuple (_,es,_,_) -> walkExprs es - | SynExpr.AnonRecd (_,flds,_) -> + | SynExpr.AnonRecd (_,origExpr,flds,_) -> + (match origExpr with Some (e,_) -> walkExpr e | None -> false) || walkExprs (List.map snd flds) - | SynExpr.Record (_,_,fs,_) -> + | SynExpr.Record (_,origExpr,fs,_) -> + (match origExpr with Some (e,_) -> walkExpr e | None -> false) || let flds = fs |> List.choose (fun (_, v, _) -> v) walkExprs (flds) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index bd6f1b12a33..b305f08eca1 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -3989,14 +3989,17 @@ recdExpr: let (_, _, inheritsSep) = List.head l let bindings = List.tail l (Some ($2,arg,rhs2 parseState 2 4, inheritsSep, rhs parseState 1), None, bindings) } + | recdExprCore + { let a,b = $1 in (None, a, b) } +recdExprCore: | appExpr EQUALS declExprBlock recdExprBindings opt_seps_recd { match $1 with | LongOrSingleIdent(false, (LongIdentWithDots(_,_) as f),None,m) -> let f = mkRecdField f let l = List.rev $4 let l = rebindRanges (f, Some $3) l $5 - (None, None, l) + (None, l) | _ -> raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsFieldBinding()) } /* @@ -4008,7 +4011,7 @@ recdExpr: reportParseErrorAt m (FSComp.SR.parsUnderscoreInvalidFieldName()) reportParseErrorAt m (FSComp.SR.parsFieldBinding()) let f = mkUnderscoreRecdField m - (None, None, [ f, None, None ]) } + (None, [ (f, None, None) ]) } | UNDERSCORE EQUALS { let m = rhs parseState 1 @@ -4017,28 +4020,28 @@ recdExpr: reportParseErrorAt (rhs2 parseState 1 2) (FSComp.SR.parsFieldBinding()) - (None, None, [f, None, None]) } + (None, [ (f, None, None) ]) } | UNDERSCORE EQUALS declExprBlock recdExprBindings opt_seps_recd { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnderscoreInvalidFieldName()) let f = mkUnderscoreRecdField (rhs parseState 1) let l = List.rev $4 let l = rebindRanges (f, Some $3) l $5 - (None, None, l) } + (None, l) } /* handles case like {x with} */ | appExpr WITH recdBinding recdExprBindings opt_seps_recd { let l = List.rev $4 let l = rebindRanges $3 l $5 - (None,Some ($1, (rhs parseState 2, None)), l) } + (Some ($1, (rhs parseState 2, None)), l) } | appExpr OWITH opt_seps_recd OEND - { (None,Some ($1, (rhs parseState 2, None)), []) } + { (Some ($1, (rhs parseState 2, None)), []) } | appExpr OWITH recdBinding recdExprBindings opt_seps_recd OEND { let l = List.rev $4 let l = rebindRanges $3 l $5 - (None,Some ($1, (rhs parseState 2, None)), l) } + (Some ($1, (rhs parseState 2, None)), l) } opt_seps_recd: | seps_recd { Some $1 } @@ -4166,16 +4169,26 @@ braceBarExpr: { $1 false } braceBarExprCore: - | LBRACE_BAR oneOrMoreRecdExprBindings bar_rbrace - { let flds = $2 + | LBRACE_BAR recdExprCore bar_rbrace + { let orig, flds = $2 + let flds = + flds |> List.choose (function + | ((LongIdentWithDots([id],_),_),Some e,_) -> Some (id,e) + | ((LongIdentWithDots([id],_),_),None,_) -> Some (id, arbExpr("anonField",id.idRange)) + | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) let m = rhs2 parseState 1 3 - (fun isStruct -> SynExpr.AnonRecd(isStruct,flds,m)) } + (fun isStruct -> SynExpr.AnonRecd(isStruct,orig,flds,m)) } - | LBRACE_BAR oneOrMoreRecdExprBindings recover + | LBRACE_BAR recdExprCore recover { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBraceBar()) - let flds = $2 + let orig, flds = $2 + let flds = + flds |> List.choose (function + | ((LongIdentWithDots([id],_),_),Some e,_) -> Some (id,e) + | ((LongIdentWithDots([id],_),_),None,_) -> Some (id, arbExpr("anonField",id.idRange)) + | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) let m = rhs2 parseState 1 2 - (fun isStruct -> SynExpr.AnonRecd(isStruct,flds,m)) } + (fun isStruct -> SynExpr.AnonRecd(isStruct,orig,flds,m)) } | LBRACE_BAR error bar_rbrace { // silent recovery @@ -4185,19 +4198,11 @@ braceBarExprCore: | LBRACE_BAR recover { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBraceBar()) let m = rhs2 parseState 1 1 - (fun isStruct -> SynExpr.AnonRecd(isStruct,[],m)) } + (fun isStruct -> SynExpr.AnonRecd(isStruct,None,[],m)) } | LBRACE_BAR bar_rbrace { let m = rhs2 parseState 1 2 - (fun isStruct -> SynExpr.AnonRecd(isStruct,[],m)) } - -oneOrMoreRecdExprBindings: - | recdBinding recdExprBindings - { (($1, None) :: List.rev $2) |> List.choose (function - | (((LongIdentWithDots([id],_),_),Some e),_) -> Some (id,e) - | (((LongIdentWithDots([id],_),_),None),_) -> Some (id, arbExpr("anonField",id.idRange)) - | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) } - + (fun isStruct -> SynExpr.AnonRecd(isStruct,None,[],m)) } anonLambdaExpr: | FUN atomicPatterns RARROW typedSeqExprBlock diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 3f1de0e7e84..eb0652c3a33 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -49,48 +49,63 @@ module public AstTraversal = /// traverseSynExpr(subExpr) to recurse deeper on some particular sub-expression based on your own logic /// path helps to track AST nodes that were passed during traversal abstract VisitExpr : TraversePath * (SynExpr -> 'T option) * (SynExpr -> 'T option) * SynExpr -> 'T option + /// VisitTypeAbbrev(ty,m), defaults to ignoring this leaf of the AST abstract VisitTypeAbbrev : SynType * range -> 'T option default this.VisitTypeAbbrev(_ty,_m) = None + /// VisitImplicitInherit(defaultTraverse,ty,expr,m), defaults to just visiting expr abstract VisitImplicitInherit : (SynExpr -> 'T option) * SynType * SynExpr * range -> 'T option default this.VisitImplicitInherit(defaultTraverse, _ty, expr, _m) = defaultTraverse expr + /// VisitModuleDecl allows overriding module declaration behavior abstract VisitModuleDecl : (SynModuleDecl -> 'T option) * SynModuleDecl -> 'T option default this.VisitModuleDecl(defaultTraverse, decl) = defaultTraverse decl + /// VisitBinding allows overriding binding behavior (note: by default it would defaultTraverse expression) abstract VisitBinding : (SynBinding -> 'T option) * SynBinding -> 'T option default this.VisitBinding(defaultTraverse, binding) = defaultTraverse binding + /// VisitMatchClause allows overriding clause behavior (note: by default it would defaultTraverse expression) abstract VisitMatchClause : (SynMatchClause -> 'T option) * SynMatchClause -> 'T option default this.VisitMatchClause(defaultTraverse, mc) = defaultTraverse mc + /// VisitInheritSynMemberDefn allows overriding inherit behavior (by default do nothing) abstract VisitInheritSynMemberDefn : SynComponentInfo * SynTypeDefnKind * SynType * SynMemberDefns * range -> 'T option default this.VisitInheritSynMemberDefn(_componentInfo, _typeDefnKind, _synType, _members, _range) = None + /// VisitInterfaceSynMemberDefnType allows overriding behavior for visiting interface member in types (by default - do nothing) abstract VisitInterfaceSynMemberDefnType : SynType -> 'T option default this.VisitInterfaceSynMemberDefnType(_synType) = None + /// VisitRecordField allows overriding behavior when visiting l.h.s. of constructed record instances abstract VisitRecordField : TraversePath * SynExpr option * LongIdentWithDots option -> 'T option default this.VisitRecordField (_path, _copyOpt, _recordField) = None + /// VisitHashDirective allows overriding behavior when visiting hash directives in FSX scripts, like #r, #load and #I. abstract VisitHashDirective : range -> 'T option default this.VisitHashDirective (_) = None + /// VisitModuleOrNamespace allows overriding behavior when visiting module or namespaces abstract VisitModuleOrNamespace : SynModuleOrNamespace -> 'T option default this.VisitModuleOrNamespace (_) = None + /// VisitComponentInfo allows overriding behavior when visiting type component infos abstract VisitComponentInfo : SynComponentInfo -> 'T option default this.VisitComponentInfo (_) = None + /// VisitLetOrUse allows overriding behavior when visiting module or local let or use bindings abstract VisitLetOrUse : SynBinding list * range -> 'T option default this.VisitLetOrUse (_, _) = None + /// VisitType allows overriding behavior when visiting simple pats abstract VisitSimplePats : SynSimplePat list -> 'T option default this.VisitSimplePats (_) = None + /// VisitPat allows overriding behavior when visiting patterns abstract VisitPat : (SynPat -> 'T option) * SynPat -> 'T option default this.VisitPat (defaultTraverse, pat) = defaultTraverse pat + /// VisitType allows overriding behavior when visiting type hints (x: ..., etc.) abstract VisitType : (SynType -> 'T option) * SynType -> 'T option default this.VisitType (defaultTraverse, ty) = defaultTraverse ty @@ -194,7 +209,22 @@ module public AstTraversal = | SynExpr.Tuple(_, synExprList, _, _range) | SynExpr.ArrayOrList(_, synExprList, _range) -> synExprList |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr - | SynExpr.AnonRecd(_isStruct, synExprList, _range) -> synExprList |> List.map snd |> List.map (fun x -> dive x x.Range traverseSynExpr) |> pick expr + | SynExpr.AnonRecd(_isStruct, copyOpt, synExprList, _range) -> + [ match copyOpt with + | Some(expr, (withRange, _)) -> + yield dive expr expr.Range traverseSynExpr + yield dive () withRange (fun () -> + if posGeq pos withRange.End then + // special case: caret is after WITH + // { x with $ } + visitor.VisitRecordField (path, Some expr, None) + else + None + ) + | _ -> () + for (_,x) in synExprList do + yield dive x x.Range traverseSynExpr + ] |> pick expr | SynExpr.Record(inheritOpt,copyOpt,fields, _range) -> [ let diveIntoSeparator offsideColumn scPosOpt copyOpt = diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index 5af088ff525..dc8df504330 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -227,7 +227,10 @@ type FSharpParseFileResults(errors: FSharpErrorInfo[], input: Ast.ParsedInput op | None -> () yield! walkExprs (fs |> List.choose p23) - | SynExpr.AnonRecd (_isStruct, fs, _) -> + | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> + match copyExprOpt with + | Some (e,_) -> yield! walkExpr true e + | None -> () yield! walkExprs (fs |> List.map snd) | SynExpr.ObjExpr (_,_,bs,is,_,_) -> diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 13433bae31d..166376a2607 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 09ee764bc5a..c1bee3d6c8c 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.en.xlf b/src/fsharp/xlf/FSComp.txt.en.xlf index bb3d873ab9e..0620bd3cc67 100644 --- a/src/fsharp/xlf/FSComp.txt.en.xlf +++ b/src/fsharp/xlf/FSComp.txt.en.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index e02d0d40831..080b0f3173b 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 2d00a2fbd6e..96346eb0581 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index a9a9c35e72d..98a7b01e1d6 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index c9dc1d8c305..4d08d1598b6 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 64d4bc3e904..13eae1e8a3b 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index b956238d314..7259abdd073 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 9fdb7d83f8f..c0f53fb61c0 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 9e56782f248..9ba98b42f03 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 67e8c1965c0..e1d5e517ef1 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index ca95767c04a..c8370e41d5a 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index c9bdbbe4f52..19c53d6514f 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -7012,6 +7012,11 @@ Invalid anonymous record type + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/tests/fsharp/core/anon/lib.fs b/tests/fsharp/core/anon/lib.fs index 23571cab8b5..0fee8e30c35 100644 --- a/tests/fsharp/core/anon/lib.fs +++ b/tests/fsharp/core/anon/lib.fs @@ -65,9 +65,6 @@ module KindB1 = check "ceoijew90ewcw6" (FSharp.Reflection.FSharpValue.GetRecordFields({| X = 1 |}).Length) 1 check "ceoijew90ewcw7" (FSharp.Reflection.FSharpValue.GetRecordFields({| X = 1 |}).[0]) (box 1) - // TODO: field reordering.... - //let test3b() = {| a = 1+1; b = 2 |} = {| b = 1; a = 2 |} - // Equality is possible check "ceijoewwekcj" {| a = 1-1 |} {| a = Unchecked.defaultof<_> |} @@ -145,10 +142,44 @@ module KindB2 = check "cew9cwo3" testConstrainedAccess2 (0, 1, 2) - // Copy-and-update may not be used, since C# doesn't allow this on anonymous objects - - // Types _can_ be used outside their assembly, but can _not_ be named in the syntax of types, nor created - +module CopyAndUpdateOfAnonRecord = + let data = {| X = 1 |} + let data2 = {| data with Y = "1" |} + let data3 = {| data with X = "3" |} + check "fewjkvwno31" data.X 1 + check "fewjkvwno32" data2.X 1 + check "fewjkvwno33" data2.Y "1" + check "fewjkvwno34" data3.X "3" + +module CopyAndUpdateOfAnonRecordStruct = + let data = struct {| X = 1 |} + let data2 = struct {| data with Y = "1" |} + let data3 = struct {| data with X = "3" |} + check "fewjkvwno311" data.X 1 + check "fewjkvwno322" data2.X 1 + check "fewjkvwno333" data2.Y "1" + check "fewjkvwno344" data3.X "3" + +module CopyAndUpdateOfAnonRecordFromRecord = + type Base = { X : int } + let data = { X = 1 } + let data2 = {| data with Y = "1" |} + let data3 = {| data with X = "3" |} + check "fewjkvwno315" data.X 1 + check "fewjkvwno326" data2.X 1 + check "fewjkvwno337" data2.Y "1" + check "fewjkvwno348" data3.X "3" + +module CopyAndUpdateOfAnonRecordFromStructRecord = + [] + type Base = { X : int } + let data = { X = 1 } + let data2 = {| data with Y = "1" |} + let data3 = {| data with X = "3" |} + check "fewjkvwno31q" data.X 1 + check "fewjkvwno32w" data2.X 1 + check "fewjkvwno33e" data2.Y "1" + check "fewjkvwno34r" data3.X "3" module QuotesNewRecord = From 4f424c23761a52871c7450663fc45d0d4f76ede3 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 14 Mar 2018 17:57:26 +0000 Subject: [PATCH 05/48] more tests --- tests/fsharp/core/anon/lib.fs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/fsharp/core/anon/lib.fs b/tests/fsharp/core/anon/lib.fs index 0fee8e30c35..abeb7711ab9 100644 --- a/tests/fsharp/core/anon/lib.fs +++ b/tests/fsharp/core/anon/lib.fs @@ -146,29 +146,38 @@ module CopyAndUpdateOfAnonRecord = let data = {| X = 1 |} let data2 = {| data with Y = "1" |} let data3 = {| data with X = "3" |} + let data4 = {| data2 with X = "3" |} check "fewjkvwno31" data.X 1 check "fewjkvwno32" data2.X 1 check "fewjkvwno33" data2.Y "1" check "fewjkvwno34" data3.X "3" + check "fewjkvwno3443" data4.X "3" + check "fewjkvwno3443" data4.Y "1" module CopyAndUpdateOfAnonRecordStruct = let data = struct {| X = 1 |} let data2 = struct {| data with Y = "1" |} let data3 = struct {| data with X = "3" |} + let data4 = struct {| data2 with X = "3" |} check "fewjkvwno311" data.X 1 check "fewjkvwno322" data2.X 1 check "fewjkvwno333" data2.Y "1" check "fewjkvwno344" data3.X "3" + check "fewjkvwno3444" data4.X "3" + check "fewjkvwno3442" data4.Y "1" module CopyAndUpdateOfAnonRecordFromRecord = type Base = { X : int } let data = { X = 1 } let data2 = {| data with Y = "1" |} let data3 = {| data with X = "3" |} + let data4 = {| data2 with X = "3" |} check "fewjkvwno315" data.X 1 check "fewjkvwno326" data2.X 1 check "fewjkvwno337" data2.Y "1" check "fewjkvwno348" data3.X "3" + check "fewjkvwno344y" data4.X "3" + check "fewjkvwno344b" data4.Y "1" module CopyAndUpdateOfAnonRecordFromStructRecord = [] @@ -178,8 +187,8 @@ module CopyAndUpdateOfAnonRecordFromStructRecord = let data3 = {| data with X = "3" |} check "fewjkvwno31q" data.X 1 check "fewjkvwno32w" data2.X 1 - check "fewjkvwno33e" data2.Y "1" - check "fewjkvwno34r" data3.X "3" + check "fewjkvwno33ej" data2.Y "1" + check "fewjkvwno34rs" data3.X "3" module QuotesNewRecord = From 9b9f6bf744d0056f732bd65212180f4304b150cc Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 15 Mar 2018 00:05:44 +0000 Subject: [PATCH 06/48] update ilxgen --- src/fsharp/IlxGen.fs | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 410c38bd730..9b65b3c966f 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -3640,7 +3640,7 @@ and GenSlotParam m cenv eenv (TSlotParam(nm,ty,inFlag,outFlag,optionalFlag,attri IsOptional=optionalFlag || optionalFlag2 CustomAttrs= mkILCustomAttrs (GenAttrs cenv eenv attribs) } -and GenFormalSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy)) = +and GenFormalSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy)) = let paraml = List.concat paraml let ilTy = GenType cenv m eenv.tyenv typ let eenvForSlotSig = EnvForTypars (ctps @ mtps) eenv @@ -3651,7 +3651,7 @@ and GenFormalSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy and instSlotParam inst (TSlotParam(nm,ty,inFlag,fl2,fl3,attrs)) = TSlotParam(nm,instType inst ty,inFlag,fl2,fl3,attrs) -and GenActualSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,ilSlotRetTy)) methTyparsOfOverridingMethod (methodParams: Val list) = +and GenActualSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,ilSlotRetTy)) methTyparsOfOverridingMethod (methodParams: Val list) = let ilSlotParams = List.concat ilSlotParams let instForSlotSig = mkTyparInst (ctps@mtps) (argsOfAppTy cenv.g typ @ generalizeTypars methTyparsOfOverridingMethod) let ilParams = ilSlotParams |> List.map (instSlotParam instForSlotSig >> GenSlotParam m cenv eenv) @@ -3664,8 +3664,8 @@ and GenActualSlotsig m cenv mgbuf eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,il and GenNameOfOverridingMethod cenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,enclTypOfOverridenMethod,_,_,_,_))) = if useMethodImpl then qualifiedMangledNameOfTyconRef (tcrefOfAppTy cenv.g enclTypOfOverridenMethod) nameOfOverridenMethod else nameOfOverridenMethod -and GenMethodImpl cenv mgbuf eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,_,_,_,_,_) as slotsig)) m = - let ilOverrideTy,ilOverrideParams,ilOverrideRet = GenFormalSlotsig m cenv mgbuf eenv slotsig +and GenMethodImpl cenv eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod,_,_,_,_,_) as slotsig)) m = + let ilOverrideTy,ilOverrideParams,ilOverrideRet = GenFormalSlotsig m cenv eenv slotsig let nameOfOverridingMethod = GenNameOfOverridingMethod cenv (useMethodImpl,slotsig) nameOfOverridingMethod, @@ -3673,7 +3673,7 @@ and GenMethodImpl cenv mgbuf eenv (useMethodImpl,(TSlotSig(nameOfOverridenMethod let ilOverrideTyRef = ilOverrideTy.TypeRef let ilOverrideMethRef = mkILMethRef(ilOverrideTyRef, ILCallingConv.Instance, nameOfOverridenMethod, List.length (DropErasedTypars methTyparsOfOverridingMethod), (typesOfILParams ilOverrideParams), ilOverrideRet.Type) let eenvForOverrideBy = AddTyparsToEnv methTyparsOfOverridingMethod eenv - let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv mgbuf eenvForOverrideBy slotsig methTyparsOfOverridingMethod [] + let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv eenvForOverrideBy slotsig methTyparsOfOverridingMethod [] let ilOverrideMethGenericParams = GenGenericParams cenv eenvForOverrideBy methTyparsOfOverridingMethod let ilOverrideMethGenericArgs = mkILFormalGenericArgs 0 ilOverrideMethGenericParams let ilOverrideBy = mkILInstanceMethSpecInTy(ilTyForOverriding, nameOfOverridingMethod, typesOfILParams ilParamsOfOverridingMethod, ilReturnOfOverridingMethod.Type, ilOverrideMethGenericArgs) @@ -3705,14 +3705,14 @@ and GenObjectMethod cenv eenvinner (cgbuf:CodeGenBuffer) useMethodImpl tmethod = let eenvUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner let methodParams = List.concat methodParams let methodParamsNonSelf = match methodParams with [] -> [] | _::t -> t // drop the 'this' arg when computing better argument names for IL parameters - let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv cgbuf.mgbuf eenvUnderTypars slotsig methTyparsOfOverridingMethod methodParamsNonSelf + let ilParamsOfOverridingMethod,ilReturnOfOverridingMethod = GenActualSlotsig m cenv eenvUnderTypars slotsig methTyparsOfOverridingMethod methodParamsNonSelf let ilAttribs = GenAttrs cenv eenvinner attribs // Args are stored starting at #1 let eenvForMeth = AddStorageForLocalVals cenv.g (methodParams |> List.mapi (fun i v -> (v,Arg i))) eenvUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,[],nameOfOverridenMethod,eenvForMeth,0,0,methodBodyExpr,(if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) - let nameOfOverridingMethod,methodImplGenerator = GenMethodImpl cenv cgbuf.mgbuf eenvinner (useMethodImpl,slotsig) methodBodyExpr.Range + let nameOfOverridingMethod,methodImplGenerator = GenMethodImpl cenv eenvinner (useMethodImpl,slotsig) methodBodyExpr.Range let mdef = mkILGenericVirtualMethod @@ -3729,7 +3729,7 @@ and GenObjectMethod cenv eenvinner (cgbuf:CodeGenBuffer) useMethodImpl tmethod = [(useMethodImpl,methodImplGenerator,methTyparsOfOverridingMethod),mdef] and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overrides,interfaceImpls,m) sequel = - let cloinfo,_,eenvinner = GetIlxClosureInfo cenv cgbuf.mgbuf m false None eenvouter expr + let cloinfo,_,eenvinner = GetIlxClosureInfo cenv m false None eenvouter expr let cloAttribs = cloinfo.cloAttribs let cloFreeVars = cloinfo.cloFreeVars @@ -3787,7 +3787,7 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V // Get the free variables. Make a lambda to pretend that the 'nextEnumeratorValRef' is bound (it is an argument to GenerateNext) let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilCloTypeRef:ILTypeRef,ilCloFreeVars,eenvinner) = - GetIlxClosureFreeVars cenv cgbuf.mgbuf m None eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, cenv.g.int32_ty)) + GetIlxClosureFreeVars cenv m None eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, cenv.g.int32_ty)) let ilCloSeqElemTy = GenType cenv m eenvinner.tyenv seqElemTy let cloRetTy = mkSeqTy cenv.g seqElemTy @@ -3900,7 +3900,7 @@ and GenLambdaClosure cenv (cgbuf:CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Expr.Lambda (_,_,_,_,_,m,_) | Expr.TyLambda(_,_,_,m,_) -> - let cloinfo,body,eenvinner = GetIlxClosureInfo cenv cgbuf.mgbuf m isLocalTypeFunc selfv eenv expr + let cloinfo,body,eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenv expr let entryPointInfo = match selfv with @@ -3975,7 +3975,7 @@ and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = #endif | _ -> GenType cenv m tyenvinner fv.Type -and GetIlxClosureFreeVars cenv mgbuf m selfv eenvouter takenNames expr = +and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = // Choose a base name for the closure let basename = @@ -4070,7 +4070,7 @@ and GetIlxClosureFreeVars cenv mgbuf m selfv eenvouter takenNames expr = (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,cloFreeTyvars,cloFreeVars,ilCloTypeRef,Array.ofList ilCloFreeVars,eenvinner) -and GetIlxClosureInfo cenv mgbuf m isLocalTypeFunc selfv eenvouter expr = +and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let returnTy = match expr with | Expr.Lambda (_,_,_,_,_,_,returnTy) | Expr.TyLambda(_,_,_,_,returnTy) -> returnTy @@ -4096,7 +4096,7 @@ and GetIlxClosureInfo cenv mgbuf m isLocalTypeFunc selfv eenvouter expr = let takenNames = vs |> List.map (fun v -> v.CompiledName) // Get the free variables and the information about the closure, add the free variables to the environment - let (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,_,cloFreeVars,ilCloTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv mgbuf m selfv eenvouter takenNames expr + let (cloAttribs,cloInternalFreeTyvars,cloContractFreeTyvars,_,cloFreeVars,ilCloTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr // Put the type and value arguments into the environment let rec getClosureArgs eenv ntmargs tvsl (vs:Val list) = @@ -4252,7 +4252,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega // Work out the free type variables for the morphing thunk let takenNames = List.map nameOfVal tmvs - let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilDelegeeTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv cgbuf.mgbuf m None eenvouter takenNames expr + let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilDelegeeTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv m None eenvouter takenNames expr let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars let ilDelegeeGenericActualsInner = mkILFormalGenericArgs 0 ilDelegeeGenericParams @@ -4267,7 +4267,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega // The slot sig contains a formal instantiation. When creating delegates we're only // interested in the actual instantiation since we don't have to emit a method impl. - let ilDelegeeParams,ilDelegeeRet = GenActualSlotsig m cenv cgbuf.mgbuf envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs + let ilDelegeeParams,ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs let envForDelegeeMeth = AddStorageForLocalVals cenv.g (List.mapi (fun i v -> (v,Arg (i+numthis))) tmvs) envForDelegeeUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,[],delegeeMethName,envForDelegeeMeth,1,0,body,(if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) @@ -4741,7 +4741,7 @@ and GenLetRecBindings cenv (cgbuf:CodeGenBuffer) eenv (allBinds: Bindings,m) = | Expr.Lambda _ | Expr.TyLambda _ | Expr.Obj _ -> let isLocalTypeFunc = Option.isSome selfv && (IsNamedLocalTypeFuncVal cenv.g (Option.get selfv) e) let selfv = (match e with Expr.Obj _ -> None | _ when isLocalTypeFunc -> None | _ -> Option.map mkLocalValRef selfv) - let clo,_,eenvclo = GetIlxClosureInfo cenv cgbuf.mgbuf m isLocalTypeFunc selfv {eenv with letBoundVars=(mkLocalValRef boundv)::eenv.letBoundVars} e + let clo,_,eenvclo = GetIlxClosureInfo cenv m isLocalTypeFunc selfv {eenv with letBoundVars=(mkLocalValRef boundv)::eenv.letBoundVars} e clo.cloFreeVars |> List.iter (fun fv -> if Zset.contains fv forwardReferenceSet then match StorageForVal m fv eenvclo with @@ -5688,7 +5688,7 @@ and AllocLocalVal cenv cgbuf v eenv repr scopeMarks = let eenvinner = {eenv with letBoundVars=(mkLocalValRef v)::eenv.letBoundVars} - let cloinfo,_,_ = GetIlxClosureInfo cenv cgbuf.mgbuf v.Range true None eenvinner (Option.get repr) + let cloinfo,_,_ = GetIlxClosureInfo cenv v.Range true None eenvinner (Option.get repr) cloinfo let idx,eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName, cenv.g.ilg.typ_Object, false) scopeMarks @@ -6196,7 +6196,7 @@ and GenFieldInit m c = | ConstToILFieldInit fieldInit -> fieldInit | _ -> error(Error(FSComp.SR.ilTypeCannotBeUsedForLiteralField(),m)) -and GenAbstractBinding cenv mgbuf eenv tref (vref:ValRef) = +and GenAbstractBinding cenv eenv tref (vref:ValRef) = assert(vref.IsMember) let m = vref.Range let memberInfo = Option.get vref.MemberInfo @@ -6339,7 +6339,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = // REVIEW: this should be based off tcaug_adhoc_list, which is in declaration order tycon.MembersOfFSharpTyconSorted |> List.sortWith (fun v1 v2 -> rangeOrder.Compare(v1.DefinitionRange,v2.DefinitionRange)) - |> List.map (GenAbstractBinding cenv mgbuf eenv tref) + |> List.map (GenAbstractBinding cenv eenv tref) |> List.unzip3 |> mapTriple (List.concat, List.concat, List.concat) @@ -6369,7 +6369,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let useMethodImpl = true let eenvUnderTypars = EnvForTypars memberParentTypars eenv - let _,methodImplGenerator = GenMethodImpl cenv mgbuf eenvUnderTypars (useMethodImpl,slotsig) m + let _,methodImplGenerator = GenMethodImpl cenv eenvUnderTypars (useMethodImpl,slotsig) m if useMethodImpl then yield methodImplGenerator (ilThisTy,memberMethodTypars) @@ -6665,7 +6665,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = match paraml with | [[tsp]] when isUnitTy cenv.g tsp.Type -> [] (* suppress unit arg *) | paraml -> paraml - GenActualSlotsig m cenv mgbuf eenvinner (TSlotSig(nm,typ,ctps,mtps,paraml,returnTy)) [] [] + GenActualSlotsig m cenv eenvinner (TSlotSig(nm,typ,ctps,mtps,paraml,returnTy)) [] [] yield! mkILDelegateMethods reprAccess cenv.g.ilg (cenv.g.iltyp_AsyncCallback, cenv.g.iltyp_IAsyncResult) (p,r) | _ -> () From f42054a50a02b86afb5143c453d986be7bab5cea Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 16 Mar 2018 12:38:39 +0000 Subject: [PATCH 07/48] adjust test --- tests/fsharp/tests.fs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index d3d684bc9d6..163ad8e8cc6 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -235,14 +235,14 @@ module CoreTests = let ``anon-FSC_BASIC``() = let cfg = testConfig "core/anon" - fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] + fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"] copyFile (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") - peverify cfg "lib.dll" + //peverify cfg "lib.dll" - fsc cfg "%s -r:lib.dll -g" cfg.fsc_flags ["test.fsx"] + fsc cfg "%s -r:lib.dll" cfg.fsc_flags ["test.fsx"] - peverify cfg "test.exe" + //peverify cfg "test.exe" begin use testOkFile = fileguard cfg "test.ok" From 2b51188f7ddba2d865d22223958eb704ecebbf88 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 17 Mar 2018 02:24:33 +0000 Subject: [PATCH 08/48] conflicts --- tests/scripts/compiler-perf-results.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index cf61efda488..19c42c41f6b 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -137,3 +137,8 @@ https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f https://github.com/Microsoft/visualfsharp master ac9f2af4329d2ae1c4213bb1d22dc4450b319207 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 251.89 11.89 30.30 46.67 58.00 59.09 https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f21223e60d0d9597e52ea9e5f8705963 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 252.83 11.66 31.05 47.17 58.80 58.59 https://github.com/Microsoft/visualfsharp master ac9f2af4329d2ae1c4213bb1d22dc4450b319207 ac9f2af4329d2ae1c4213bb1d22dc4450b319207 250.48 11.44 30.93 46.09 57.41 58.86 +https://github.com/dsyme/visualfsharp.git weak1 58bd2bec78f01e57fecff604146a3cc55eec4966 221224e6d20bd835c2b9e01e0a52bf45e740a8d0 MSRC-3617253 260.05 10.97 30.78 47.15 58.04 59.77 +https://github.com/dsyme/visualfsharp.git range1 e49ac8a2f21223e60d0d9597e52ea9e5f8705963 221224e6d20bd835c2b9e01e0a52bf45e740a8d0 MSRC-3617253 275.83 12.79 32.57 53.38 61.94 58.03 +https://github.com/Microsoft/visualfsharp master 221224e6d20bd835c2b9e01e0a52bf45e740a8d0 221224e6d20bd835c2b9e01e0a52bf45e740a8d0 MSRC-3617253 273.00 12.46 32.80 51.38 60.93 58.66 +https://github.com/dsyme/visualfsharp.git weak1 6be11a0290c689f2331a03fb9762592b24bdacad 95348d0aafd168064d4c2282c59d62ac95bbebdf MSRC-3617253 308.27 10.79 31.51 47.44 58.70 59.71 +https://github.com/Microsoft/visualfsharp master 95348d0aafd168064d4c2282c59d62ac95bbebdf 95348d0aafd168064d4c2282c59d62ac95bbebdf MSRC-3617253 256.40 11.22 32.40 47.49 58.47 59.82 From 7a33c0511016eaa49be8834bf1b9dc188683c8be Mon Sep 17 00:00:00 2001 From: Don Syme Date: Sat, 17 Mar 2018 02:27:34 +0000 Subject: [PATCH 09/48] fix test --- tests/fsharp/tests.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 163ad8e8cc6..80631821e76 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -237,12 +237,12 @@ module CoreTests = fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"] - copyFile (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") - //peverify cfg "lib.dll" + copy_y cfg (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") + peverify cfg "lib.dll" fsc cfg "%s -r:lib.dll" cfg.fsc_flags ["test.fsx"] - //peverify cfg "test.exe" + peverify cfg "test.exe" begin use testOkFile = fileguard cfg "test.ok" From c2b02c1d37c34db2af3bf9023aba90cabda0c9ab Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 21 Mar 2018 04:01:18 +0000 Subject: [PATCH 10/48] fix test --- src/fsharp/TypeChecker.fs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 6ddee7e0288..72429dce8d0 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -776,6 +776,12 @@ let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExpl tupInfo, ptys else TupInfo.Const isExplicitStruct, NewInferenceTypes ps + + let contextInfo = + match contextInfo with + | ContextInfo.RecordFields -> ContextInfo.TupleInRecordFields + | _ -> contextInfo + let ty2 = TType_tuple (tupInfo, ptys) AddCxTypeEqualsType contextInfo denv cenv.css m knownTy ty2 tupInfo, ptys From cbb0d514b39ec08488a27fe85203e33f69acf958 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 11:32:39 +0100 Subject: [PATCH 11/48] simplify diff --- src/fsharp/IlxGen.fs | 1637 +++++++++++++++++++++--------------------- 1 file changed, 814 insertions(+), 823 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index a3afe589650..02d9862530c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -371,24 +371,26 @@ type PtrsOK = | PtrTypesNotOK let rec GenTypeArgAux amap m tyenv tyarg = - GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesNotOK tyarg + GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK tyarg -and GenTypeArgsAux amap m tyenv tyargs = +and GenTypeArgs amap m tyenv tyargs = List.map (GenTypeArgAux amap m tyenv) (DropErasedTyargs tyargs) -and GenTyAppAux amap m tyenv repr tinst = +and GenTyApp amap m tyenv repr tinst = match repr with | CompiledTypeRepr.ILAsmOpen ty -> - let ilTypeInst = GenTypeArgsAux amap m tyenv tinst + let ilTypeInst = GenTypeArgs amap m tyenv tinst let ty = IL.instILType ilTypeInst ty ty | CompiledTypeRepr.ILAsmNamed (tref, boxity, ilTypeOpt) -> GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst +and GenNamedTyApp amap m tyenv tcref tinst = GenNamedTyAppAux amap m tyenv PtrTypesNotOK tcref tinst + and GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst = match ilTypeOpt with | None -> - let ilTypeInst = GenTypeArgsAux amap m tyenv tinst + let ilTypeInst = GenTypeArgs amap m tyenv tinst mkILTy boxity (mkILTySpec (tref,ilTypeInst)) | Some ilType -> ilType // monomorphic types include a cached ilType to avoid reallocation of an ILType node @@ -404,12 +406,12 @@ and GenNamedTyAppAux (amap:ImportMap) m tyenv ptrsOK tcref tinst = match tcref.TypeReprInfo with // Generate the base type, because that is always the representation of the erased type, unless the assembly is being injected | TProvidedTypeExtensionPoint info when info.IsErased -> - GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK (info.BaseTypeForErased (m,g.obj_ty)) + GenTypeAux amap m tyenv VoidNotOK ptrsOK (info.BaseTypeForErased (m,g.obj_ty)) | _ -> #endif - GenTyAppAux amap m tyenv (GenTyconRef tcref) tinst + GenTyApp amap m tyenv (GenTyconRef tcref) tinst -and GenTypeAuxAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = +and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = let g = amap.g #if DEBUG voidCheck m g voidOK ty @@ -418,7 +420,7 @@ and GenTypeAuxAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = #endif match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m tyenv ptrsOK tcref tinst - | TType_tuple (tupInfo, args) -> GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) + | TType_tuple (tupInfo, args) -> GenTypeAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) | TType_fun (dty, returnTy) -> EraseClosures.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m tyenv dty) (GenTypeArgAux amap m tyenv returnTy) | TType_anon (anonInfo, tinst) -> let tref = anonInfo.ILTypeRef @@ -426,12 +428,12 @@ and GenTypeAuxAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = GenILTyAppAux amap m tyenv (tref, boxity, None) tinst | TType_ucase (ucref, args) -> - let cuspec,idx = GenUnionCaseSpecAux amap m tyenv ucref args + let cuspec,idx = GenUnionCaseSpec amap m tyenv ucref args EraseUnions.GetILTypeForAlternative cuspec idx | TType_forall (tps, tau) -> let tps = DropErasedTypars tps - if tps.IsEmpty then GenTypeAuxAux amap m tyenv VoidNotOK ptrsOK tau + if tps.IsEmpty then GenTypeAux amap m tyenv VoidNotOK ptrsOK tau else EraseClosures.mkILTyFuncTy g.ilxPubCloEnv | TType_var tp -> mkILTyvarTy tyenv.[tp,m] | TType_measure _ -> g.ilg.typ_Int32 @@ -443,7 +445,7 @@ and GenTypeAuxAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = and GenUnionCaseRef (amap: ImportMap) m tyenv i (fspecs:RecdField array) = let g = amap.g fspecs |> Array.mapi (fun j fspec -> - let ilFieldDef = IL.mkILInstanceField(fspec.Name,GenTypeAux amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) + let ilFieldDef = IL.mkILInstanceField(fspec.Name,GenType amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) IlxUnionField { ilFieldDef with // These properties on the "field" of an alternative end up going on a property generated by cu_erase.fs @@ -486,26 +488,26 @@ and ComputeUnionHasHelpers g (tcref : TyconRef) = | _ -> AllHelpers (* not hiddenRepr *) -and GenUnionSpecAux amap m tyenv tcref tyargs = +and GenUnionSpec amap m tyenv tcref tyargs = let curef = GenUnionRef amap m tcref - let tinst = GenTypeArgsAux amap m tyenv tyargs + let tinst = GenTypeArgs amap m tyenv tyargs IlxUnionSpec(curef,tinst) -and GenUnionCaseSpecAux amap m tyenv (ucref:UnionCaseRef) tyargs = - let cuspec = GenUnionSpecAux amap m tyenv ucref.TyconRef tyargs +and GenUnionCaseSpec amap m tyenv (ucref:UnionCaseRef) tyargs = + let cuspec = GenUnionSpec amap m tyenv ucref.TyconRef tyargs cuspec, ucref.Index /// IL void types are only generated for return types -and GenReturnTypeAux amap m tyenv returnTyOpt = +and GenReturnType amap m tyenv returnTyOpt = match returnTyOpt with | None -> ILType.Void - | Some returnTy -> GenTypeAuxAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) + | Some returnTy -> GenTypeAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) -and GenTypeAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesNotOK ty -and GenTypesAux amap m tyenv tys = List.map (GenTypeAux amap m tyenv) tys -and GenParamTypeAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidNotOK PtrTypesOK ty -and GenParamTypesAux amap m tyenv tys = tys |> List.map (GenParamTypeAux amap m tyenv) -and GenTypePermitVoidAux amap m tyenv ty = GenTypeAuxAux amap m tyenv VoidOK PtrTypesNotOK ty +and GenType amap m tyenv ty = GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK ty +and GenTypes amap m tyenv tys = List.map (GenType amap m tyenv) tys +and GenParamType amap m tyenv ty = GenTypeAux amap m tyenv VoidNotOK PtrTypesOK ty +and GenParamTypes amap m tyenv tys = tys |> List.map (GenParamType amap m tyenv) +and GenTypePermitVoidAux amap m tyenv ty = GenTypeAux amap m tyenv VoidOK PtrTypesNotOK ty // Static fields generally go in a private InitializationCodeAndBackingFields section. This is to ensure all static // fields are initialized only in their class constructors (we generate one primary @@ -532,9 +534,9 @@ let GenFieldSpecForStaticField (isInteractive, g, ilContainerTy, vspec:Val, nm, let GenRecdFieldRef m cenv tyenv (rfref:RecdFieldRef) tyargs = let tyenvinner = TypeReprEnv.ForTycon rfref.Tycon - mkILFieldSpecInTy(GenTyAppAux cenv.amap m tyenv rfref.TyconRef.CompiledRepresentation tyargs, + mkILFieldSpecInTy(GenTyApp cenv.amap m tyenv rfref.TyconRef.CompiledRepresentation tyargs, ComputeFieldName rfref.Tycon rfref.RecdField, - GenTypeAux cenv.amap m tyenvinner rfref.RecdField.FormalType) + GenType cenv.amap m tyenvinner rfref.RecdField.FormalType) //-------------------------------------------------------------------------- // Closure summaries @@ -575,827 +577,816 @@ type IlxClosureInfo = //-------------------------------------------------------------------------- -// Generate debugging marks +// Representation of term declarations = Environments for compiling expressions. //-------------------------------------------------------------------------- -let GenILSourceMarker (g: TcGlobals) (m:range) = - ILSourceMarker.Create(document=g.memoize_file m.FileIndex, - line=m.StartLine, - /// NOTE: .NET && VS measure first column as column 1 - column= m.StartColumn+1, - endLine= m.EndLine, - endColumn=m.EndColumn+1) + +[] +type ValStorage = + /// Indicates the value is always null + | Null + /// Indicates the value is stored in a static field. + | StaticField of ILFieldSpec * ValRef * (*hasLiteralAttr:*)bool * ILType * string * ILType * ILMethodRef * ILMethodRef * OptionalShadowLocal + /// Indicates the value is "stored" as a property that recomputes it each time it is referenced. Used for simple constants that do not cause initialization triggers + | StaticProperty of ILMethodSpec * OptionalShadowLocal + /// Indicates the value is "stored" as a IL static method (in a "main" class for a F# + /// compilation unit, or as a member) according to its inferred or specified arity. + | Method of ValReprInfo * ValRef * ILMethodSpec * Range.range * ArgReprInfo list * ArgReprInfo + /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" + | Env of ILType * int * ILFieldSpec * NamedLocalIlxClosureInfo ref option + /// Indicates that the value is an argument of a method being generated + | Arg of int + /// Indicates that the value is stored in local of the method being generated. NamedLocalIlxClosureInfo is normally empty. + /// It is non-empty for 'local type functions', see comments on definition of NamedLocalIlxClosureInfo. + | Local of int * NamedLocalIlxClosureInfo ref option -let GenPossibleILSourceMarker cenv m = - if cenv.opts.generateDebugSymbols then - Some (GenILSourceMarker cenv.g m ) - else - None +and OptionalShadowLocal = + | NoShadowLocal + | ShadowLocal of ValStorage -//-------------------------------------------------------------------------- -// Helpers for merging property definitions -//-------------------------------------------------------------------------- +/// The representation of a NamedLocalClosure is based on a cloinfo. However we can't generate a cloinfo until we've +/// decided the representations of other items in the recursive set. Hence we use two phases to decide representations in +/// a recursive set. Yuck. +and NamedLocalIlxClosureInfo = + | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) + | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo + +and ModuleStorage = + { Vals: Lazy> + SubModules: Lazy> } -let HashRangeSorted (ht: IDictionary<_, (int * _)>) = - [ for KeyValue(_k,v) in ht -> v ] |> List.sortBy fst |> List.map snd +/// BranchCallItems are those where 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. +and BranchCallItem = + | BranchCallClosure of ArityInfo + | BranchCallMethod of + // Argument counts for compiled form of F# method or value + ArityInfo * + // Arg infos for compiled form of F# method or value + (TType * ArgReprInfo) list list * + // Typars for F# method or value + Tast.Typars * + // Typars for F# method or value + int * + // num obj args + int + +and Mark = + | Mark of ILCodeLabel (* places we can branch to *) + member x.CodeLabel = (let (Mark(lab)) = x in lab) -let MergeOptions m o1 o2 = - match o1,o2 with - | Some x, None | None, Some x -> Some x - | None, None -> None - | Some x, Some _ -> -#if DEBUG - // This warning fires on some code that also triggers this warning: - // warning(Error("The implementation of a specified generic interface required a method implementation not fully supported by F# Interactive. In the unlikely event that the resulting class fails to load then compile the interface type into a statically-compiled DLL and reference it using '#r'",m)) - // The code is OK so we don't print this. - errorR(InternalError("MergeOptions: two values given",m)) -#else - ignore m -#endif - Some x +and IlxGenEnv = + { tyenv: TypeReprEnv + someTypeInThisAssembly: ILType + isFinalFile: bool + /// Where to place the stuff we're currently generating + cloc: CompileLocation + /// Hiding information down the signature chain, used to compute what's public to the assembly + sigToImplRemapInfo: (Remap * SignatureHidingInfo) list + /// All values in scope + valsInScope: ValMap> + /// For optimizing direct tail recursion to a loop - mark says where to branch to. Length is 0 or 1. + /// REVIEW: generalize to arbitrary nested local loops?? + innerVals: (ValRef * (BranchCallItem * Mark)) list + /// Full list of enclosing bound values. First non-compiler-generated element is used to help give nice names for closures and other expressions. + letBoundVars: ValRef list + /// The set of IL local variable indexes currently in use by lexically scoped variables, to allow reuse on different branches. + /// Really an integer set. + liveLocals: IntMap + /// Are we under the scope of a try, catch or finally? If so we can't tailcall. SEH = structured exception handling + withinSEH: bool } -let MergePropertyPair m (pd: ILPropertyDef) pdef = - {pd with GetMethod=MergeOptions m pd.GetMethod pdef.GetMethod - SetMethod=MergeOptions m pd.SetMethod pdef.SetMethod} +let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } +let EnvForTypars tps eenv = {eenv with tyenv = TypeReprEnv.ForTypars tps } +let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add typars} -type PropKey = PropKey of string * ILTypes * ILThisConvention +let AddSignatureRemapInfo _msg (rpi, mhi) eenv = + { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi,mhi) :: eenv.sigToImplRemapInfo } + +//-------------------------------------------------------------------------- +// Print eenv +//-------------------------------------------------------------------------- -let AddPropertyDefToHash (m:range) (ht:Dictionary) (pdef: ILPropertyDef) = - let nm = PropKey(pdef.Name, pdef.Args, pdef.CallingConv) - if ht.ContainsKey nm then - let idx,pd = ht.[nm] - ht.[nm] <- (idx, MergePropertyPair m pd pdef) +let OutputStorage (pps: TextWriter) s = + match s with + | StaticField _ -> pps.Write "(top)" + | StaticProperty _ -> pps.Write "(top)" + | Method _ -> pps.Write "(top)" + | Local _ -> pps.Write "(local)" + | Arg _ -> pps.Write "(arg)" + | Env _ -> pps.Write "(env)" + | Null -> pps.Write "(null)" + +//-------------------------------------------------------------------------- +// Augment eenv with values +//-------------------------------------------------------------------------- + +let AddStorageForVal (g: TcGlobals) (v,s) eenv = + let eenv = { eenv with valsInScope = eenv.valsInScope.Add v s } + // If we're compiling fslib then also bind the value as a non-local path to + // allow us to resolve the compiler-non-local-references that arise from env.fs + // + // Do this by generating a fake "looking from the outside in" non-local value reference for + // v, dereferencing it to find the corresponding signature Val, and adding an entry for the signature val. + // + // A similar code path exists in ilxgen.fs for the tables of "optimization data" for values + if g.compilingFslib then + // Passing an empty remap is sufficient for FSharp.Core.dll because it turns out the remapped type signature can + // still be resolved. + match tryRescopeVal g.fslibCcu Remap.Empty v with + | None -> eenv + | Some vref -> + match vref.TryDeref with + | VNone -> + //let msg = sprintf "could not dereference external value reference to something in FSharp.Core.dll during code generation, v.MangledName = '%s', v.Range = %s" v.MangledName (stringOfRange v.Range) + //System.Diagnostics.Debug.Assert(false, msg) + eenv + | VSome gv -> + { eenv with valsInScope = eenv.valsInScope.Add gv s } else - ht.[nm] <- (ht.Count, pdef) - + eenv -/// Merge a whole group of properties all at once -let MergePropertyDefs m ilPropertyDefs = - let ht = new Dictionary<_,_>(3,HashIdentity.Structural) - ilPropertyDefs |> List.iter (AddPropertyDefToHash m ht) - HashRangeSorted ht +let AddStorageForLocalVals g vals eenv = List.foldBack (fun (v,s) acc -> AddStorageForVal g (v,notlazy s) acc) vals eenv //-------------------------------------------------------------------------- -// Buffers for compiling modules. The entire assembly gets compiled via an AssemblyBuilder +// Lookup eenv //-------------------------------------------------------------------------- + +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -/// Information collected imperatively for each type definition -type TypeDefBuilder(tdef, tdefDiscards) = - let gmethods = new ResizeArray(0) - let gfields = new ResizeArray(0) - let gproperties : Dictionary = new Dictionary<_,_>(3,HashIdentity.Structural) - let gevents = new ResizeArray(0) - let gnested = new TypeDefsBuilder() - - member b.Close() = - { tdef with - Methods = mkILMethods (tdef.Methods.AsList @ ResizeArray.toList gmethods) - Fields = mkILFields (tdef.Fields.AsList @ ResizeArray.toList gfields) - Properties = mkILProperties (tdef.Properties.AsList @ HashRangeSorted gproperties ) - Events = mkILEvents (tdef.Events.AsList @ ResizeArray.toList gevents) - NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } +let StorageForVal m v eenv = + let v = + try eenv.valsInScope.[v] + with :? KeyNotFoundException -> + assert false + errorR(Error(FSComp.SR.ilUndefinedValue(showL(vspecAtBindL v)),m)) + notlazy (Arg 668(* random value for post-hoc diagnostic analysis on generated tree *) ) + v.Force() +let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv - member b.AddEventDef(edef) = gevents.Add edef - member b.AddFieldDef(ilFieldDef) = gfields.Add ilFieldDef - member b.AddMethodDef(ilMethodDef) = - let discard = - match tdefDiscards with - | Some (mdefDiscard, _) -> mdefDiscard ilMethodDef - | None -> false - if not discard then - gmethods.Add ilMethodDef - member b.NestedTypeDefs = gnested - member b.GetCurrentFields() = gfields |> Seq.readonly +//-------------------------------------------------------------------------- +// Imported modules and the environment +// +// How a top level value is represented depends on its type. 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. +//-------------------------------------------------------------------------- - /// Merge Get and Set property nodes, which we generate independently for F# code - /// when we come across their corresponding methods. - member b.AddOrMergePropertyDef(pdef,m) = - let discard = - match tdefDiscards with - | Some (_, pdefDiscard) -> pdefDiscard pdef - | None -> false - if not discard then - AddPropertyDefToHash m gproperties pdef +let IsValRefIsDllImport g (vref:ValRef) = + vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute - member b.PrependInstructionsToSpecificMethodDef(cond,instrs,tag) = - match ResizeArray.tryFindIndex cond gmethods with - | Some idx -> gmethods.[idx] <- prependInstrsToMethod instrs gmethods.[idx] - | None -> gmethods.Add(mkILClassCtor (mkMethodBody (false,[],1,nonBranchingInstrsToCode instrs,tag))) +let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = + let m = vref.Range + let tps,curriedArgInfos,returnTy,retInfo = + assert(vref.ValReprInfo.IsSome) + GetTopValTypeInCompiledForm g (Option.get vref.ValReprInfo) vref.Type m + let tyenvUnderTypars = TypeReprEnv.ForTypars tps + let flatArgInfos = List.concat curriedArgInfos + let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) + let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) + let parentTcref = vref.TopValDeclaringEntity + let parentTypars = parentTcref.TyparsNoRange + let numParentTypars = parentTypars.Length + if tps.Length < numParentTypars then error(InternalError("CodeGen check: type checking did not ensure that this method is sufficiently generic", m)) + let ctps,mtps = List.chop numParentTypars tps + let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref + let ilActualRetTy = + let ilRetTy = GenReturnType amap m tyenvUnderTypars returnTy + if isCtor || cctor then ILType.Void else ilRetTy -and TypeDefsBuilder() = - let tdefs : Internal.Utilities.Collections.HashMultiMap = HashMultiMap(0, HashIdentity.Structural) - let mutable countDown = System.Int32.MaxValue + let ilTy = GenType amap m tyenvUnderTypars (mkAppTy parentTcref (List.map mkTyparTy ctps)) - member b.Close() = - //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. - // Ideally it shouldn't matter which order we use. - // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. - - [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do - let tdef = b.Close() - // Skip the type if it is empty - if not eliminateIfEmpty - || not tdef.NestedTypes.AsList.IsEmpty - || not tdef.Fields.AsList.IsEmpty - || not tdef.Events.AsList.IsEmpty - || not tdef.Properties.AsList.IsEmpty - || not tdef.Methods.AsList.IsEmpty then - yield tdef ] - - member b.FindTypeDefBuilder(nm) = - try tdefs.[nm] |> snd |> fst - with :? KeyNotFoundException -> failwith ("FindTypeDefBuilder: " + nm + " not found") - - member b.FindNestedTypeDefsBuilder(path) = - List.fold (fun (acc:TypeDefsBuilder) x -> acc.FindTypeDefBuilder(x).NestedTypeDefs) b path - - member b.FindNestedTypeDefBuilder(tref:ILTypeRef) = - b.FindNestedTypeDefsBuilder(tref.Enclosing).FindTypeDefBuilder(tref.Name) - - member b.AddTypeDef(tdef:ILTypeDef, eliminateIfEmpty, addAtEnd, tdefDiscards) = - let idx = if addAtEnd then (countDown <- countDown - 1; countDown) else tdefs.Count - tdefs.Add (tdef.Name, (idx, (new TypeDefBuilder(tdef, tdefDiscards), eliminateIfEmpty))) - -type AnonTypeGenerationTable() = - let dict = Dictionary(HashIdentity.Structural) - member __.Table = dict - -/// Assembly generation buffers -type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf = - // The Abstract IL table of types - let gtdefs= new TypeDefsBuilder() - // The definitions of top level values, as quotations. - let mutable reflectedDefinitions : Dictionary = Dictionary(HashIdentity.Reference) - let mutable extraBindingsToGenerate = [] - - // A memoization table for generating value types for big constant arrays - let rawDataValueTypeGenerator = - new MemoizationTable<(CompileLocation * int) , ILTypeSpec> - ((fun (cloc,size) -> - let name = CompilerGeneratedName ("T" + string(newUnique()) + "_" + string size + "Bytes") // Type names ending ...$T_37Bytes - let vtdef = mkRawDataValueTypeDef cenv.g.iltyp_ValueType (name,size,0us) - let vtref = NestedTypeRefForCompLoc cloc vtdef.Name - let vtspec = mkILTySpec(vtref,[]) - let vtdef = vtdef.WithAccess(ComputeTypeAccess vtref true) - mgbuf.AddTypeDef(vtref, vtdef, false, true, None) - vtspec), - keyComparer=HashIdentity.Structural) + if isCompiledAsInstance || isCtor then + // Find the 'this' argument type if any + let thisTy,flatArgInfos = + if isCtor then (GetFSharpViewOfReturnType g returnTy),flatArgInfos + else + match flatArgInfos with + | [] -> error(InternalError("This instance method '" + vref.LogicalName + "' has no arguments", m)) + | (h,_):: t -> h,t - let generateAnonType genToStringMethod (isStruct, ilTypeRef, nms) = + let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy + let thisArgTys = argsOfAppTy g thisTy + if ctps.Length <> thisArgTys.Length then + warning(InternalError(sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #ctps = %d, #mtps = %d, #thisArgTys = %d" numParentTypars ctps.Length mtps.Length thisArgTys.Length,m)) + else + List.iter2 + (fun gtp ty2 -> + if not (typeEquiv g (mkTyparTy gtp) ty2) then + warning(InternalError("CodeGen check: type checking did not quantify the correct type variables for this method: generalization list contained " + gtp.Name + "#" + string gtp.Stamp + " and list from 'this' pointer contained " + (showL(typeL ty2)), m))) + ctps + thisArgTys + let methodArgTys,paramInfos = List.unzip flatArgInfos + let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys + let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) + let mspec = mkILInstanceMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - let flds = [ for (i,nm) in Array.indexed nms -> (nm, nm + "@", ILType.TypeVar (uint16 i)) ] - // Note that this alternative below would give the same names as C#, but the generated - // comparison/equality doesn't know about these names. - //let flds = [ for (i,nm) in Array.indexed nms -> (nm, "<" + nm + ">" + "i__Field", ILType.TypeVar (uint16 i)) ] - - let ilGenericParams = - [ for nm in nms -> - { Name = sprintf "<%s>j__TPar" nm - Constraints = [] - Variance=NonVariant - CustomAttrs = emptyILCustomAttrs - HasReferenceTypeConstraint=false - HasNotNullableValueTypeConstraint=false - HasDefaultConstructorConstraint= false } ] - - let ilTy = mkILFormalNamedTy (if isStruct then ILBoxity.AsValue else ILBoxity.AsObject) ilTypeRef ilGenericParams - - // Generate the IL fields - let ilFieldDefs = - mkILFields - [ for (_, fldName, fldTy) in flds -> - let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) - { fdef with CustomAttrs = mkILCustomAttrs [ cenv.g.DebuggerBrowsableNeverAttribute ] } ] - - // Generate property definitions for the fields compiled as properties - let ilProperties = - mkILProperties - [ for (i,(propName, _fldName, fldTy)) in List.indexed flds -> - { Name = propName - Attributes = PropertyAttributes.None - SetMethod = None - GetMethod = Some(mkILMethRef(ilTypeRef,ILCallingConv.Instance,"get_" + propName,0,[],fldTy )) - CallingConv = ILCallingConv.Instance.ThisConv - Type = fldTy - Init = None - Args = [] - CustomAttrs = mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i ] } ] - - let ilMethods = - [ for (propName, fldName, fldTy) in flds -> - mkLdfldMethodDef ("get_" + propName,ILMemberAccess.Public,false,ilTy,fldName,fldTy) - yield! genToStringMethod ilTy ] + mspec,ctps,mtps,paramInfos,retInfo + else + let methodArgTys,paramInfos = List.unzip flatArgInfos + let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys + let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) + let mspec = mkILStaticMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) + + mspec,ctps,mtps,paramInfos,retInfo - let ilBaseTy = (if isStruct then cenv.g.iltyp_ValueType else cenv.g.ilg.typ_Object) - - let ilCtorDef = mkILSimpleStorageCtorWithParamNames(None, (if isStruct then None else Some ilBaseTy.TypeSpec), ilTy, [], flds, ILMemberAccess.Public) - let ilCtorRef = mkRefToILMethod(ilTypeRef, ilCtorDef) - let ilMethodRefs = [| for mdef in ilMethods -> mkRefToILMethod(ilTypeRef, mdef) |] +// Generate the ILFieldSpec for a top-level value - if ilTypeRef.Scope.IsLocalRef then +let ComputeFieldSpecForVal(optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, g, ilTyForProperty, vspec:Val, nm, m, cloc, ilTy, ilGetterMethRef) = + assert vspec.IsCompiledAsTopLevel + let generate() = GenFieldSpecForStaticField (isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy) + match optIntraAssemblyInfo with + | None -> generate() + | Some intraAssemblyInfo -> + if vspec.IsMutable && vspec.IsCompiledAsTopLevel && isStructTy g vspec.Type then + let ok, res = intraAssemblyInfo.StaticFieldInfo.TryGetValue ilGetterMethRef + if ok then + res + else + let res = generate() + intraAssemblyInfo.StaticFieldInfo.[ilGetterMethRef] <- res + res + else + generate() - // Create a tycon that looks exactly like a record definition, to help drive the generation of equality/comparison code - let m = range0 - let tps = - [ for nm in nms -> - let stp = Typar(mkSynId m ("T"+nm),TyparStaticReq.NoStaticReq,true) - NewTypar (TyparKind.Type, TyparRigidity.WarnIfNotRigid,stp,false,TyparDynamicReq.Yes,[],true,true) ] +let IsValCompiledAsMethod g (v:Val) = + match v.ValReprInfo with + | None -> false + | Some topValInfo -> + not (isUnitTy g v.Type && not v.IsMemberOrModuleBinding && not v.IsMutable) && + not v.IsCompiledAsStaticPropertyWithoutField && + match GetTopValTypeInFSharpForm g topValInfo v.Type v.Range with + | [],[],_,_ when not v.IsMember -> false + | _ -> true - let tycon = - let lmtyp = MaybeLazy.Strict (NewEmptyModuleOrNamespaceType ModuleOrType) - let cpath = CompPath(ilTypeRef.Scope,[]) - NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) +// This called via 2 routes. +// (a) ComputeAndAddStorageForLocalTopVal +// (b) ComputeStorageForNonLocalTopVal +// +/// This function decides the storage for the val. +/// The decision is based on arityInfo. +let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, optShadowLocal, vref:ValRef, cloc) = - if isStruct then - tycon.SetIsStructRecordOrUnion(true) + if isUnitTy g vref.Type && not vref.IsMemberOrModuleBinding && not vref.IsMutable then + Null + else + let topValInfo = + match vref.ValReprInfo with + | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref),vref.Range)) + | Some a -> a + + let m = vref.Range + let nm = vref.CompiledName - tycon.entity_tycon_repr <- - TRecdRepr (MakeRecdFieldsTable - [ for (tp, (propName, _fldName, _fldTy)) in (List.zip tps flds) -> - NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false ]) + if vref.Deref.IsCompiledAsStaticPropertyWithoutField then + let nm = "get_"+nm + let tyenvUnderTypars = TypeReprEnv.ForTypars [] + let ilRetTy = GenType amap m tyenvUnderTypars vref.Type + let typ = mkILTyForCompLoc cloc + let mspec = mkILStaticMethSpecInTy (typ, nm, [], ilRetTy, []) + + StaticProperty (mspec, optShadowLocal) + else - let tcref = mkLocalTyconRef tycon - let _,typ = generalizeTyconRef tcref - let tcaug = tcref.TypeContents - - tcaug.tcaug_interfaces <- - [ (cenv.g.mk_IStructuralComparable_ty,true,m) - (cenv.g.mk_IComparable_ty,true,m) - (mkAppTy cenv.g.system_GenericIComparable_tcref [typ],true,m) - (cenv.g.mk_IStructuralEquatable_ty,true,m) - (mkAppTy cenv.g.system_GenericIEquatable_tcref [typ],true,m) ] + // Determine when a static field is required. + // + // REVIEW: This call to GetTopValTypeInFSharpForm is only needed to determine if this is a (type) function or a value + // We should just look at the arity + match GetTopValTypeInFSharpForm g topValInfo vref.Type vref.Range with + | [],[], returnTy,_ when not vref.IsMember -> + // Mutable and literal static fields must have stable names and live in the "public" location + // See notes on GenFieldSpecForStaticField above. + let vspec = vref.Deref + let ilTy = GenType amap m TypeReprEnv.Empty returnTy (* TypeReprEnv.Empty ok: not a field in a generic class *) + let ilTyForProperty = mkILTyForCompLoc cloc + let attribs = vspec.Attribs + let hasLiteralAttr = HasFSharpAttribute g g.attrib_LiteralAttribute attribs - let vspec1,vspec2 = AugmentWithHashCompare.MakeValsForEqualsAugmentation cenv.g tcref - let evspec1,evspec2,evspec3 = AugmentWithHashCompare.MakeValsForEqualityWithComparerAugmentation cenv.g tcref - let cvspec1,cvspec2 = AugmentWithHashCompare.MakeValsForCompareAugmentation cenv.g tcref - let cvspec3 = AugmentWithHashCompare.MakeValsForCompareWithComparerAugmentation cenv.g tcref + let ilTypeRefForProperty = ilTyForProperty.TypeRef + let ilGetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "get_"+nm, 0, [], ilTy) + let ilSetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "set_"+nm, 0, [ilTy], ILType.Void) - tcaug.SetCompare (mkLocalValRef cvspec1, mkLocalValRef cvspec2) - tcaug.SetCompareWith (mkLocalValRef cvspec3) - tcaug.SetEquals (mkLocalValRef vspec1, mkLocalValRef vspec2) - tcaug.SetHashAndEqualsWith (mkLocalValRef evspec1, mkLocalValRef evspec2, mkLocalValRef evspec3) + let fspec = ComputeFieldSpecForVal(optIntraAssemblyInfo, isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy, ilGetterMethRef) - // Build the ILTypeDef. We don't rely on the normal record generation process because we want very specific field names + StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, nm, ilTy, ilGetterMethRef, ilSetterMethRef, optShadowLocal) + + | _ -> + match vref.MemberInfo with + | Some memberInfo when not vref.IsExtensionMember -> + let mspec,_,_,paramInfos,retInfo = GetMethodSpecForMemberVal amap g memberInfo vref + Method (topValInfo, vref, mspec, m, paramInfos, retInfo) + | _ -> + let (tps, curriedArgInfos, returnTy, retInfo) = GetTopValTypeInCompiledForm g topValInfo vref.Type m + let tyenvUnderTypars = TypeReprEnv.ForTypars tps + let (methodArgTys,paramInfos) = curriedArgInfos |> List.concat |> List.unzip + let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars methodArgTys + let ilRetTy = GenReturnType amap m tyenvUnderTypars returnTy + let ilLocTy = mkILTyForCompLoc cloc + let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy tps) + let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) + Method (topValInfo, vref, mspec, m, paramInfos, retInfo) - let ilTypeDefAttribs = mkILCustomAttrs [ cenv.g.CompilerGeneratedAttribute; mkCompilationMappingAttr cenv.g (int SourceConstructFlags.RecordType) ] +let ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyFieldTable, isInteractive, optShadowLocal) cloc (v:Val) eenv = + let storage = ComputeStorageForTopVal (amap, g, Some intraAssemblyFieldTable, isInteractive, optShadowLocal, mkLocalValRef v, cloc) + AddStorageForVal g (v,notlazy storage) eenv - let ilInterfaceTys = [ for (ity,_,_) in tcaug.tcaug_interfaces -> GenTypeAux cenv.amap m (TypeReprEnv.ForTypars tps) ity ] +let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = + match v.ValReprInfo with + | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName,v.Range)) + | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) - let ilTypeDef = - mkILGenericClass (ilTypeRef.Name, ILTypeDefAccess.Public, ilGenericParams, ilBaseTy, ilInterfaceTys, - mkILMethods (ilCtorDef :: ilMethods), ilFieldDefs, emptyILTypeDefs, - ilProperties, mkILEvents [], ilTypeDefAttribs, - ILTypeInit.BeforeField) - +let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = + let acc = + (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> + ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) - let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) + let acc = + (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> + AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc modref v)) acc) + acc - let ilTypeDef = { ilTypeDef with MethodImpls=mkILMethodImpls [] } - - mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) - - let extraBindings = - [ yield! AugmentWithHashCompare.MakeBindingsForCompareAugmentation cenv.g tycon - yield! AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon - yield! AugmentWithHashCompare.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon - yield! AugmentWithHashCompare.MakeBindingsForEqualsAugmentation cenv.g tycon ] +let ComputeStorageForExternalCcu amap g eenv (ccu:CcuThunk) = + if not ccu.IsFSharp then eenv else + let cloc = CompLocForCcu ccu + let eenv = + List.foldBack + (fun smodul acc -> + let cloc = CompLocForSubModuleOrNamespace cloc smodul + let modref = mkNonLocalCcuRootEntityRef ccu smodul + ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc modref smodul) + ccu.RootModulesAndNamespaces + eenv + let eenv = + let eref = ERefNonLocalPreResolved ccu.Contents (mkNonLocalEntityRef ccu [| |]) + (eenv, ccu.Contents.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> + AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc eref v)) acc) + eenv + +let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty:ModuleOrNamespaceType) = + let eenv = List.fold (fun eenv submodul -> AddBindingsForLocalModuleType allocVal (CompLocForSubModuleOrNamespace cloc submodul) eenv submodul.ModuleOrNamespaceType) eenv mty.ModuleAndNamespaceDefinitions + let eenv = Seq.fold (fun eenv v -> allocVal cloc v eenv) eenv mty.AllValsAndMembers + eenv - let optimizedExtraBindings = extraBindings |> List.map (fun (TBind(a,b,c)) -> TBind(a,cenv.optimizeDuringCodeGen b,c)) +let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (ComputeStorageForExternalCcu amap g) eenv ccus - extraBindingsToGenerate <- optimizedExtraBindings @ extraBindingsToGenerate +let AddBindingsForTycon allocVal (cloc:CompileLocation) (tycon:Tycon) eenv = + let unrealizedSlots = + if tycon.IsFSharpObjectModelTycon + then tycon.FSharpObjectModelTypeInfo.fsobjmodel_vslots + else [] + (eenv,unrealizedSlots) ||> List.fold (fun eenv vref -> allocVal cloc vref.Deref eenv) - (ilCtorRef,ilMethodRefs,ilTy) +let rec AddBindingsForModuleDefs allocVal (cloc:CompileLocation) eenv mdefs = + List.fold (AddBindingsForModuleDef allocVal cloc) eenv mdefs - let mutable explicitEntryPointInfo : ILTypeRef option = None +and AddBindingsForModuleDef allocVal cloc eenv x = + match x with + | TMDefRec(_isRec,tycons,mbinds,_) -> + (* Virtual don't have 'let' bindings and must be added to the environment *) + let eenv = List.foldBack (AddBindingsForTycon allocVal cloc) tycons eenv + let eenv = List.foldBack (AddBindingsForModule allocVal cloc) mbinds eenv + eenv + | TMDefLet(bind,_) -> + allocVal cloc bind.Var eenv + | TMDefDo _ -> + eenv + | TMAbstract(ModuleOrNamespaceExprWithSig(mtyp,_,_)) -> + AddBindingsForLocalModuleType allocVal cloc eenv mtyp + | TMDefs(mdefs) -> + AddBindingsForModuleDefs allocVal cloc eenv mdefs - /// static init fields on script modules. - let mutable scriptInitFspecs : (ILFieldSpec * range) list = [] - - member mgbuf.AddScriptInitFieldSpec(fieldSpec,range) = - scriptInitFspecs <- (fieldSpec,range) :: scriptInitFspecs +and AddBindingsForModule allocVal cloc x eenv = + match x with + | ModuleOrNamespaceBinding.Binding bind -> + allocVal cloc bind.Var eenv + | ModuleOrNamespaceBinding.Module (mspec, mdef) -> + let cloc = + if mspec.IsNamespace then cloc + else CompLocForFixedModule cloc.clocQualifiedNameOfFile cloc.clocTopImplQualifiedName mspec - /// This initializes the script in #load and fsc command-line order causing their - /// sideeffects 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) = - mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) - scriptInitFspecs |> List.iter IntializeCompiledScript - | None -> () + AddBindingsForModuleDef allocVal cloc eenv mdef - member mgbuf.GenerateRawDataValueType(cloc,size) = - // Byte array literals require a ValueType of size the required number of bytes. - // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. - // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. - let cloc = CompLocForPrivateImplementationDetails cloc - rawDataValueTypeGenerator.Apply((cloc,size)) +and AddBindingsForModuleTopVals _g allocVal _cloc eenv vs = + List.foldBack allocVal vs eenv - member mgbuf.GenerateAnonType(genToStringMethod, anonInfo:AnonRecdTypeInfo) = - let isStruct = evalAnonInfoIsStruct anonInfo - let key = anonInfo.Stamp - match anonTypeTable.Table.TryGetValue key with - | true, res -> res - | _ -> - let info = generateAnonType genToStringMethod (isStruct,anonInfo.ILTypeRef,anonInfo.SortedNames) - anonTypeTable.Table.[key] <- info - info - member mgbuf.LookupAnonType(anonInfo:AnonRecdTypeInfo) = - match anonTypeTable.Table.TryGetValue anonInfo.Stamp with - | true, res -> res - | _ -> failwithf "the anonymous record %A has not been generated in the pre-phase of generating this module" anonInfo.ILTypeRef +// Put the partial results for a generated fragment (i.e. a part of a CCU generated by FSI) +// into the stored results for the whole CCU. +// isIncrementalFragment = true --> "typed input" +// isIncrementalFragment = false --> "#load" +let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, typedImplFiles) = + let cloc = CompLocForFragment fragName ccu + let allocVal = ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyInfo, true, NoShadowLocal) + (eenv, typedImplFiles) ||> List.fold (fun eenv (TImplFile(qname, _, mexpr, _, _, _)) -> + let cloc = { cloc with clocTopImplQualifiedName = qname.Text } + if isIncrementalFragment then + match mexpr with + | ModuleOrNamespaceExprWithSig(_,mdef,_) -> AddBindingsForModuleDef allocVal cloc eenv mdef + (* | ModuleOrNamespaceExprWithSig(mtyp,_,m) -> error(Error("don't expect inner defs to have a constraint",m)) *) + else + AddBindingsForLocalModuleType allocVal cloc eenv mexpr.Type) - member mgbuf.GrabExtraBindingsToGenerate() = - let result = extraBindingsToGenerate - extraBindingsToGenerate <- [] - result +//-------------------------------------------------------------------------- +// Generate debugging marks +//-------------------------------------------------------------------------- - member mgbuf.AddTypeDef(tref:ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = - gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) +let GenILSourceMarker (g: TcGlobals) (m:range) = + ILSourceMarker.Create(document=g.memoize_file m.FileIndex, + line=m.StartLine, + /// NOTE: .NET && VS measure first column as column 1 + column= m.StartColumn+1, + endLine= m.EndLine, + endColumn=m.EndColumn+1) - member mgbuf.GetCurrentFields(tref:ILTypeRef) = - gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() +let GenPossibleILSourceMarker cenv m = + if cenv.opts.generateDebugSymbols then + Some (GenILSourceMarker cenv.g m ) + else + None - member mgbuf.AddReflectedDefinition(vspec : Tast.Val,expr) = - // preserve order by storing index of item - let n = reflectedDefinitions.Count - reflectedDefinitions.Add(vspec, (vspec.CompiledName, n, expr)) - - member mgbuf.ReplaceNameOfReflectedDefinition(vspec, newName) = - match reflectedDefinitions.TryGetValue vspec with - | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) - | _ -> () +//-------------------------------------------------------------------------- +// Helpers for merging property definitions +//-------------------------------------------------------------------------- - member mgbuf.AddMethodDef(tref:ILTypeRef,ilMethodDef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) - if ilMethodDef.IsEntryPoint then - explicitEntryPointInfo <- Some(tref) +let HashRangeSorted (ht: IDictionary<_, (int * _)>) = + [ for KeyValue(_k,v) in ht -> v ] |> List.sortBy fst |> List.map snd - member mgbuf.AddExplicitInitToSpecificMethodDef(cond,tref,fspec,sourceOpt,feefee,seqpt) = - // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field - // Doing both a store and load keeps FxCop happier because it thinks the field is useful - let instrs = - [ yield! (if condition "NO_ADD_FEEFEE_TO_CCTORS" then [] elif condition "ADD_SEQPT_TO_CCTORS" then seqpt else feefee) // mark start of hidden code - yield mkLdcInt32 0 - yield mkNormalStsfld fspec - yield mkNormalLdsfld fspec - yield AI_pop] - gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond,instrs,sourceOpt) +let MergeOptions m o1 o2 = + match o1,o2 with + | Some x, None | None, Some x -> Some x + | None, None -> None + | Some x, Some _ -> +#if DEBUG + // This warning fires on some code that also triggers this warning: + // warning(Error("The implementation of a specified generic interface required a method implementation not fully supported by F# Interactive. In the unlikely event that the resulting class fails to load then compile the interface type into a statically-compiled DLL and reference it using '#r'",m)) + // The code is OK so we don't print this. + errorR(InternalError("MergeOptions: two values given",m)) +#else + ignore m +#endif + Some x - member mgbuf.AddEventDef(tref,edef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) +let MergePropertyPair m (pd: ILPropertyDef) pdef = + {pd with GetMethod=MergeOptions m pd.GetMethod pdef.GetMethod + SetMethod=MergeOptions m pd.SetMethod pdef.SetMethod} - member mgbuf.AddFieldDef(tref,ilFieldDef) = - gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) +type PropKey = PropKey of string * ILTypes * ILThisConvention - member mgbuf.AddOrMergePropertyDef(tref,pdef,m) = - gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef,m) +let AddPropertyDefToHash (m:range) (ht:Dictionary) (pdef: ILPropertyDef) = + let nm = PropKey(pdef.Name, pdef.Args, pdef.CallingConv) + if ht.ContainsKey nm then + let idx,pd = ht.[nm] + ht.[nm] <- (idx, MergePropertyPair m pd pdef) + else + ht.[nm] <- (ht.Count, pdef) + - member mgbuf.Close() = - // old implementation adds new element to the head of list so result was accumulated in reversed order - let orderedReflectedDefinitions = - [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name,vspec), expr)] - |> List.sortBy (fst >> (~-)) // invert the result to get 'order-by-descending' behavior (items in list are 0..* so we don't need to worry about int.MinValue) - |> List.map snd - gtdefs.Close(), orderedReflectedDefinitions - member mgbuf.cenv = cenv - member mgbuf.GetExplicitEntryPointInfo() = explicitEntryPointInfo +/// Merge a whole group of properties all at once +let MergePropertyDefs m ilPropertyDefs = + let ht = new Dictionary<_,_>(3,HashIdentity.Structural) + ilPropertyDefs |> List.iter (AddPropertyDefToHash m ht) + HashRangeSorted ht -/// Type generators which walk the types first to make sure all anonymous types are generated -let GenType cenv m tyenv ty = GenTypeAux cenv.amap m tyenv ty -let GenTypes cenv m tyenv tys = GenTypesAux cenv.amap m tyenv tys -let GenUnionCaseSpec cenv m tyenv c tyargs = GenUnionCaseSpecAux cenv.amap m tyenv c tyargs -let GenUnionSpec cenv m tyenv tcref tyargs = GenUnionSpecAux cenv.amap m tyenv tcref tyargs -let GenTypePermitVoid cenv m tyenv ty = GenTypeAuxAux cenv.amap m tyenv VoidOK PtrTypesNotOK ty -let GenTypesPermitVoid cenv m tyenv tys = List.map (GenTypePermitVoid cenv m tyenv) tys -let GenTyApp cenv m tyenv repr tyargs = GenTyAppAux cenv.amap m tyenv repr tyargs -let GenNamedTyApp cenv m tyenv tcref tinst = GenNamedTyAppAux cenv.amap m tyenv PtrTypesNotOK tcref tinst -let GenReturnType cenv m tyenv returnTyOpt = GenReturnTypeAux cenv.amap m tyenv returnTyOpt -let GenParamType cenv m tyenv ty = GenParamTypeAux cenv.amap m tyenv ty -let GenParamTypes cenv m tyenv tys = GenParamTypesAux cenv.amap m tyenv tys -let GenTypeArgs cenv m tyenv tyargs = GenTypeArgsAux cenv.amap m tyenv tyargs -let GenExnType amap m tyenv (ecref:TyconRef) = GenTyAppAux amap m tyenv ecref.CompiledRepresentation [] - //-------------------------------------------------------------------------- -// Representation of term declarations = Environments for compiling expressions. +// Buffers for compiling modules. The entire assembly gets compiled via an AssemblyBuilder //-------------------------------------------------------------------------- - -[] -type ValStorage = - /// Indicates the value is always null - | Null - /// Indicates the value is stored in a static field. - | StaticField of ILFieldSpec * ValRef * (*hasLiteralAttr:*)bool * ILType * string * ILType * ILMethodRef * ILMethodRef * OptionalShadowLocal - /// Indicates the value is "stored" as a property that recomputes it each time it is referenced. Used for simple constants that do not cause initialization triggers - | StaticProperty of ILMethodSpec * OptionalShadowLocal - /// Indicates the value is "stored" as a IL static method (in a "main" class for a F# - /// compilation unit, or as a member) according to its inferred or specified arity. - | Method of ValReprInfo * ValRef * ILMethodSpec * Range.range * ArgReprInfo list * ArgReprInfo - /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" - | Env of ILType * int * ILFieldSpec * NamedLocalIlxClosureInfo ref option - /// Indicates that the value is an argument of a method being generated - | Arg of int - /// Indicates that the value is stored in local of the method being generated. NamedLocalIlxClosureInfo is normally empty. - /// It is non-empty for 'local type functions', see comments on definition of NamedLocalIlxClosureInfo. - | Local of int * NamedLocalIlxClosureInfo ref option +/// Information collected imperatively for each type definition +type TypeDefBuilder(tdef, tdefDiscards) = + let gmethods = new ResizeArray(0) + let gfields = new ResizeArray(0) + let gproperties : Dictionary = new Dictionary<_,_>(3,HashIdentity.Structural) + let gevents = new ResizeArray(0) + let gnested = new TypeDefsBuilder() + + member b.Close() = + { tdef with + Methods = mkILMethods (tdef.Methods.AsList @ ResizeArray.toList gmethods) + Fields = mkILFields (tdef.Fields.AsList @ ResizeArray.toList gfields) + Properties = mkILProperties (tdef.Properties.AsList @ HashRangeSorted gproperties ) + Events = mkILEvents (tdef.Events.AsList @ ResizeArray.toList gevents) + NestedTypes = mkILTypeDefs (tdef.NestedTypes.AsList @ gnested.Close()) } -and OptionalShadowLocal = - | NoShadowLocal - | ShadowLocal of ValStorage -/// The representation of a NamedLocalClosure is based on a cloinfo. However we can't generate a cloinfo until we've -/// decided the representations of other items in the recursive set. Hence we use two phases to decide representations in -/// a recursive set. Yuck. -and NamedLocalIlxClosureInfo = - | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) - | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo - -and ModuleStorage = - { Vals: Lazy> - SubModules: Lazy> } + member b.AddEventDef(edef) = gevents.Add edef + member b.AddFieldDef(ilFieldDef) = gfields.Add ilFieldDef + member b.AddMethodDef(ilMethodDef) = + let discard = + match tdefDiscards with + | Some (mdefDiscard, _) -> mdefDiscard ilMethodDef + | None -> false + if not discard then + gmethods.Add ilMethodDef + member b.NestedTypeDefs = gnested + member b.GetCurrentFields() = gfields |> Seq.readonly -/// BranchCallItems are those where 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. -and BranchCallItem = - | BranchCallClosure of ArityInfo - | BranchCallMethod of - // Argument counts for compiled form of F# method or value - ArityInfo * - // Arg infos for compiled form of F# method or value - (TType * ArgReprInfo) list list * - // Typars for F# method or value - Tast.Typars * - // Typars for F# method or value - int * - // num obj args - int - -and Mark = - | Mark of ILCodeLabel (* places we can branch to *) - member x.CodeLabel = (let (Mark(lab)) = x in lab) + /// Merge Get and Set property nodes, which we generate independently for F# code + /// when we come across their corresponding methods. + member b.AddOrMergePropertyDef(pdef,m) = + let discard = + match tdefDiscards with + | Some (_, pdefDiscard) -> pdefDiscard pdef + | None -> false + if not discard then + AddPropertyDefToHash m gproperties pdef -and IlxGenEnv = - { tyenv: TypeReprEnv - someTypeInThisAssembly: ILType - isFinalFile: bool - /// Where to place the stuff we're currently generating - cloc: CompileLocation - /// Hiding information down the signature chain, used to compute what's public to the assembly - sigToImplRemapInfo: (Remap * SignatureHidingInfo) list - /// All values in scope - valsInScope: ValMap> - /// For optimizing direct tail recursion to a loop - mark says where to branch to. Length is 0 or 1. - /// REVIEW: generalize to arbitrary nested local loops?? - innerVals: (ValRef * (BranchCallItem * Mark)) list - /// Full list of enclosing bound values. First non-compiler-generated element is used to help give nice names for closures and other expressions. - letBoundVars: ValRef list - /// The set of IL local variable indexes currently in use by lexically scoped variables, to allow reuse on different branches. - /// Really an integer set. - liveLocals: IntMap - /// Are we under the scope of a try, catch or finally? If so we can't tailcall. SEH = structured exception handling - withinSEH: bool } + member b.PrependInstructionsToSpecificMethodDef(cond,instrs,tag) = + match ResizeArray.tryFindIndex cond gmethods with + | Some idx -> gmethods.[idx] <- prependInstrsToMethod instrs gmethods.[idx] + | None -> gmethods.Add(mkILClassCtor (mkMethodBody (false,[],1,nonBranchingInstrsToCode instrs,tag))) + + +and TypeDefsBuilder() = + let tdefs : Internal.Utilities.Collections.HashMultiMap = HashMultiMap(0, HashIdentity.Structural) + let mutable countDown = System.Int32.MaxValue + + member b.Close() = + //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. + // Ideally it shouldn't matter which order we use. + // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. + + [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do + let tdef = b.Close() + // Skip the type if it is empty + if not eliminateIfEmpty + || not tdef.NestedTypes.AsList.IsEmpty + || not tdef.Fields.AsList.IsEmpty + || not tdef.Events.AsList.IsEmpty + || not tdef.Properties.AsList.IsEmpty + || not tdef.Methods.AsList.IsEmpty then + yield tdef ] -let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } -let EnvForTypars tps eenv = {eenv with tyenv = TypeReprEnv.ForTypars tps } -let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add typars} + member b.FindTypeDefBuilder(nm) = + try tdefs.[nm] |> snd |> fst + with :? KeyNotFoundException -> failwith ("FindTypeDefBuilder: " + nm + " not found") -let AddSignatureRemapInfo _msg (rpi, mhi) eenv = - { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi,mhi) :: eenv.sigToImplRemapInfo } - -//-------------------------------------------------------------------------- -// Print eenv -//-------------------------------------------------------------------------- + member b.FindNestedTypeDefsBuilder(path) = + List.fold (fun (acc:TypeDefsBuilder) x -> acc.FindTypeDefBuilder(x).NestedTypeDefs) b path -let OutputStorage (pps: TextWriter) s = - match s with - | StaticField _ -> pps.Write "(top)" - | StaticProperty _ -> pps.Write "(top)" - | Method _ -> pps.Write "(top)" - | Local _ -> pps.Write "(local)" - | Arg _ -> pps.Write "(arg)" - | Env _ -> pps.Write "(env)" - | Null -> pps.Write "(null)" + member b.FindNestedTypeDefBuilder(tref:ILTypeRef) = + b.FindNestedTypeDefsBuilder(tref.Enclosing).FindTypeDefBuilder(tref.Name) -//-------------------------------------------------------------------------- -// Augment eenv with values -//-------------------------------------------------------------------------- + member b.AddTypeDef(tdef:ILTypeDef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + let idx = if addAtEnd then (countDown <- countDown - 1; countDown) else tdefs.Count + tdefs.Add (tdef.Name, (idx, (new TypeDefBuilder(tdef, tdefDiscards), eliminateIfEmpty))) -let AddStorageForVal (g: TcGlobals) (v,s) eenv = - let eenv = { eenv with valsInScope = eenv.valsInScope.Add v s } - // If we're compiling fslib then also bind the value as a non-local path to - // allow us to resolve the compiler-non-local-references that arise from env.fs - // - // Do this by generating a fake "looking from the outside in" non-local value reference for - // v, dereferencing it to find the corresponding signature Val, and adding an entry for the signature val. - // - // A similar code path exists in ilxgen.fs for the tables of "optimization data" for values - if g.compilingFslib then - // Passing an empty remap is sufficient for FSharp.Core.dll because it turns out the remapped type signature can - // still be resolved. - match tryRescopeVal g.fslibCcu Remap.Empty v with - | None -> eenv - | Some vref -> - match vref.TryDeref with - | VNone -> - //let msg = sprintf "could not dereference external value reference to something in FSharp.Core.dll during code generation, v.MangledName = '%s', v.Range = %s" v.MangledName (stringOfRange v.Range) - //System.Diagnostics.Debug.Assert(false, msg) - eenv - | VSome gv -> - { eenv with valsInScope = eenv.valsInScope.Add gv s } - else - eenv +type AnonTypeGenerationTable() = + let dict = Dictionary(HashIdentity.Structural) + member __.Table = dict -let AddStorageForLocalVals g vals eenv = List.foldBack (fun (v,s) acc -> AddStorageForVal g (v,notlazy s) acc) vals eenv +/// Assembly generation buffers +type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf = + // The Abstract IL table of types + let gtdefs= new TypeDefsBuilder() + // The definitions of top level values, as quotations. + let mutable reflectedDefinitions : Dictionary = Dictionary(HashIdentity.Reference) + let mutable extraBindingsToGenerate = [] -//-------------------------------------------------------------------------- -// Lookup eenv -//-------------------------------------------------------------------------- - -open Microsoft.FSharp.Compiler.AbstractIL -open Microsoft.FSharp.Compiler.AbstractIL.Internal -open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library + // A memoization table for generating value types for big constant arrays + let rawDataValueTypeGenerator = + new MemoizationTable<(CompileLocation * int) , ILTypeSpec> + ((fun (cloc,size) -> + let name = CompilerGeneratedName ("T" + string(newUnique()) + "_" + string size + "Bytes") // Type names ending ...$T_37Bytes + let vtdef = mkRawDataValueTypeDef cenv.g.iltyp_ValueType (name,size,0us) + let vtref = NestedTypeRefForCompLoc cloc vtdef.Name + let vtspec = mkILTySpec(vtref,[]) + let vtdef = vtdef.WithAccess(ComputeTypeAccess vtref true) + mgbuf.AddTypeDef(vtref, vtdef, false, true, None) + vtspec), + keyComparer=HashIdentity.Structural) -let StorageForVal m v eenv = - let v = - try eenv.valsInScope.[v] - with :? KeyNotFoundException -> - assert false - errorR(Error(FSComp.SR.ilUndefinedValue(showL(vspecAtBindL v)),m)) - notlazy (Arg 668(* random value for post-hoc diagnostic analysis on generated tree *) ) - v.Force() + let generateAnonType genToStringMethod (isStruct, ilTypeRef, nms) = + + let flds = [ for (i,nm) in Array.indexed nms -> (nm, nm + "@", ILType.TypeVar (uint16 i)) ] + // Note that this alternative below would give the same names as C#, but the generated + // comparison/equality doesn't know about these names. + //let flds = [ for (i,nm) in Array.indexed nms -> (nm, "<" + nm + ">" + "i__Field", ILType.TypeVar (uint16 i)) ] -let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv + let ilGenericParams = + [ for nm in nms -> + { Name = sprintf "<%s>j__TPar" nm + Constraints = [] + Variance=NonVariant + CustomAttrs = emptyILCustomAttrs + HasReferenceTypeConstraint=false + HasNotNullableValueTypeConstraint=false + HasDefaultConstructorConstraint= false } ] -//-------------------------------------------------------------------------- -// Imported modules and the environment -// -// How a top level value is represented depends on its type. 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. -//-------------------------------------------------------------------------- + let ilTy = mkILFormalNamedTy (if isStruct then ILBoxity.AsValue else ILBoxity.AsObject) ilTypeRef ilGenericParams -let IsValRefIsDllImport g (vref:ValRef) = - vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute + // Generate the IL fields + let ilFieldDefs = + mkILFields + [ for (_, fldName, fldTy) in flds -> + let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) + { fdef with CustomAttrs = mkILCustomAttrs [ cenv.g.DebuggerBrowsableNeverAttribute ] } ] + + // Generate property definitions for the fields compiled as properties + let ilProperties = + mkILProperties + [ for (i,(propName, _fldName, fldTy)) in List.indexed flds -> + { Name = propName + Attributes = PropertyAttributes.None + SetMethod = None + GetMethod = Some(mkILMethRef(ilTypeRef,ILCallingConv.Instance,"get_" + propName,0,[],fldTy )) + CallingConv = ILCallingConv.Instance.ThisConv + Type = fldTy + Init = None + Args = [] + CustomAttrs = mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i ] } ] + + let ilMethods = + [ for (propName, fldName, fldTy) in flds -> + mkLdfldMethodDef ("get_" + propName,ILMemberAccess.Public,false,ilTy,fldName,fldTy) + yield! genToStringMethod ilTy ] -let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = - let m = vref.Range - let tps,curriedArgInfos,returnTy,retInfo = - assert(vref.ValReprInfo.IsSome) - GetTopValTypeInCompiledForm g (Option.get vref.ValReprInfo) vref.Type m - let tyenvUnderTypars = TypeReprEnv.ForTypars tps - let flatArgInfos = List.concat curriedArgInfos - let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) - let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) - let parentTcref = vref.TopValDeclaringEntity - let parentTypars = parentTcref.TyparsNoRange - let numParentTypars = parentTypars.Length - if tps.Length < numParentTypars then error(InternalError("CodeGen check: type checking did not ensure that this method is sufficiently generic", m)) - let ctps,mtps = List.chop numParentTypars tps - let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref + let ilBaseTy = (if isStruct then cenv.g.iltyp_ValueType else cenv.g.ilg.typ_Object) + + let ilCtorDef = mkILSimpleStorageCtorWithParamNames(None, (if isStruct then None else Some ilBaseTy.TypeSpec), ilTy, [], flds, ILMemberAccess.Public) + let ilCtorRef = mkRefToILMethod(ilTypeRef, ilCtorDef) + let ilMethodRefs = [| for mdef in ilMethods -> mkRefToILMethod(ilTypeRef, mdef) |] - let ilActualRetTy = - let ilRetTy = GenReturnTypeAux amap m tyenvUnderTypars returnTy - if isCtor || cctor then ILType.Void else ilRetTy + if ilTypeRef.Scope.IsLocalRef then - let ilTy = GenTypeAux amap m tyenvUnderTypars (mkAppTy parentTcref (List.map mkTyparTy ctps)) + // Create a tycon that looks exactly like a record definition, to help drive the generation of equality/comparison code + let m = range0 + let tps = + [ for nm in nms -> + let stp = Typar(mkSynId m ("T"+nm),TyparStaticReq.NoStaticReq,true) + NewTypar (TyparKind.Type, TyparRigidity.WarnIfNotRigid,stp,false,TyparDynamicReq.Yes,[],true,true) ] - if isCompiledAsInstance || isCtor then - // Find the 'this' argument type if any - let thisTy,flatArgInfos = - if isCtor then (GetFSharpViewOfReturnType g returnTy),flatArgInfos - else - match flatArgInfos with - | [] -> error(InternalError("This instance method '" + vref.LogicalName + "' has no arguments", m)) - | (h,_):: t -> h,t + let tycon = + let lmtyp = MaybeLazy.Strict (NewEmptyModuleOrNamespaceType ModuleOrType) + let cpath = CompPath(ilTypeRef.Scope,[]) + NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) - let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy - let thisArgTys = argsOfAppTy g thisTy - if ctps.Length <> thisArgTys.Length then - warning(InternalError(sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #ctps = %d, #mtps = %d, #thisArgTys = %d" numParentTypars ctps.Length mtps.Length thisArgTys.Length,m)) - else - List.iter2 - (fun gtp ty2 -> - if not (typeEquiv g (mkTyparTy gtp) ty2) then - warning(InternalError("CodeGen check: type checking did not quantify the correct type variables for this method: generalization list contained " + gtp.Name + "#" + string gtp.Stamp + " and list from 'this' pointer contained " + (showL(typeL ty2)), m))) - ctps - thisArgTys - let methodArgTys,paramInfos = List.unzip flatArgInfos - let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys - let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy mtps) - let mspec = mkILInstanceMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - - mspec,ctps,mtps,paramInfos,retInfo - else - let methodArgTys,paramInfos = List.unzip flatArgInfos - let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys - let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy mtps) - let mspec = mkILStaticMethSpecInTy (ilTy,vref.CompiledName,ilMethodArgTys,ilActualRetTy,ilMethodInst) - - mspec,ctps,mtps,paramInfos,retInfo + if isStruct then + tycon.SetIsStructRecordOrUnion(true) -// Generate the ILFieldSpec for a top-level value + tycon.entity_tycon_repr <- + TRecdRepr (MakeRecdFieldsTable + [ for (tp, (propName, _fldName, _fldTy)) in (List.zip tps flds) -> + NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false ]) -let ComputeFieldSpecForVal(optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, g, ilTyForProperty, vspec:Val, nm, m, cloc, ilTy, ilGetterMethRef) = - assert vspec.IsCompiledAsTopLevel - let generate() = GenFieldSpecForStaticField (isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy) - match optIntraAssemblyInfo with - | None -> generate() - | Some intraAssemblyInfo -> - if vspec.IsMutable && vspec.IsCompiledAsTopLevel && isStructTy g vspec.Type then - let ok, res = intraAssemblyInfo.StaticFieldInfo.TryGetValue ilGetterMethRef - if ok then - res - else - let res = generate() - intraAssemblyInfo.StaticFieldInfo.[ilGetterMethRef] <- res - res - else - generate() + let tcref = mkLocalTyconRef tycon + let _,typ = generalizeTyconRef tcref + let tcaug = tcref.TypeContents + + tcaug.tcaug_interfaces <- + [ (cenv.g.mk_IStructuralComparable_ty,true,m) + (cenv.g.mk_IComparable_ty,true,m) + (mkAppTy cenv.g.system_GenericIComparable_tcref [typ],true,m) + (cenv.g.mk_IStructuralEquatable_ty,true,m) + (mkAppTy cenv.g.system_GenericIEquatable_tcref [typ],true,m) ] -let IsValCompiledAsMethod g (v:Val) = - match v.ValReprInfo with - | None -> false - | Some topValInfo -> - not (isUnitTy g v.Type && not v.IsMemberOrModuleBinding && not v.IsMutable) && - not v.IsCompiledAsStaticPropertyWithoutField && - match GetTopValTypeInFSharpForm g topValInfo v.Type v.Range with - | [],[],_,_ when not v.IsMember -> false - | _ -> true + let vspec1,vspec2 = AugmentWithHashCompare.MakeValsForEqualsAugmentation cenv.g tcref + let evspec1,evspec2,evspec3 = AugmentWithHashCompare.MakeValsForEqualityWithComparerAugmentation cenv.g tcref + let cvspec1,cvspec2 = AugmentWithHashCompare.MakeValsForCompareAugmentation cenv.g tcref + let cvspec3 = AugmentWithHashCompare.MakeValsForCompareWithComparerAugmentation cenv.g tcref -// This called via 2 routes. -// (a) ComputeAndAddStorageForLocalTopVal -// (b) ComputeStorageForNonLocalTopVal -// -/// This function decides the storage for the val. -/// The decision is based on arityInfo. -let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo:IlxGenIntraAssemblyInfo option, isInteractive, optShadowLocal, vref:ValRef, cloc) = + tcaug.SetCompare (mkLocalValRef cvspec1, mkLocalValRef cvspec2) + tcaug.SetCompareWith (mkLocalValRef cvspec3) + tcaug.SetEquals (mkLocalValRef vspec1, mkLocalValRef vspec2) + tcaug.SetHashAndEqualsWith (mkLocalValRef evspec1, mkLocalValRef evspec2, mkLocalValRef evspec3) - if isUnitTy g vref.Type && not vref.IsMemberOrModuleBinding && not vref.IsMutable then - Null - else - let topValInfo = - match vref.ValReprInfo with - | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref),vref.Range)) - | Some a -> a - - let m = vref.Range - let nm = vref.CompiledName + // Build the ILTypeDef. We don't rely on the normal record generation process because we want very specific field names - if vref.Deref.IsCompiledAsStaticPropertyWithoutField then - let nm = "get_"+nm - let tyenvUnderTypars = TypeReprEnv.ForTypars [] - let ilRetTy = GenTypeAux amap m tyenvUnderTypars vref.Type - let typ = mkILTyForCompLoc cloc - let mspec = mkILStaticMethSpecInTy (typ, nm, [], ilRetTy, []) - - StaticProperty (mspec, optShadowLocal) - else + let ilTypeDefAttribs = mkILCustomAttrs [ cenv.g.CompilerGeneratedAttribute; mkCompilationMappingAttr cenv.g (int SourceConstructFlags.RecordType) ] - // Determine when a static field is required. - // - // REVIEW: This call to GetTopValTypeInFSharpForm is only needed to determine if this is a (type) function or a value - // We should just look at the arity - match GetTopValTypeInFSharpForm g topValInfo vref.Type vref.Range with - | [],[], returnTy,_ when not vref.IsMember -> - // Mutable and literal static fields must have stable names and live in the "public" location - // See notes on GenFieldSpecForStaticField above. - let vspec = vref.Deref - let ilTy = GenTypeAux amap m TypeReprEnv.Empty returnTy (* TypeReprEnv.Empty ok: not a field in a generic class *) - let ilTyForProperty = mkILTyForCompLoc cloc - let attribs = vspec.Attribs - let hasLiteralAttr = HasFSharpAttribute g g.attrib_LiteralAttribute attribs + let ilInterfaceTys = [ for (ity,_,_) in tcaug.tcaug_interfaces -> GenType cenv.amap m (TypeReprEnv.ForTypars tps) ity ] - let ilTypeRefForProperty = ilTyForProperty.TypeRef - let ilGetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "get_"+nm, 0, [], ilTy) - let ilSetterMethRef = mkILMethRef (ilTypeRefForProperty, ILCallingConv.Static, "set_"+nm, 0, [ilTy], ILType.Void) + let ilTypeDef = + mkILGenericClass (ilTypeRef.Name, ILTypeDefAccess.Public, ilGenericParams, ilBaseTy, ilInterfaceTys, + mkILMethods (ilCtorDef :: ilMethods), ilFieldDefs, emptyILTypeDefs, + ilProperties, mkILEvents [], ilTypeDefAttribs, + ILTypeInit.BeforeField) + - let fspec = ComputeFieldSpecForVal(optIntraAssemblyInfo, isInteractive, g, ilTyForProperty, vspec, nm, m, cloc, ilTy, ilGetterMethRef) + let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) - StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, nm, ilTy, ilGetterMethRef, ilSetterMethRef, optShadowLocal) - - | _ -> - match vref.MemberInfo with - | Some memberInfo when not vref.IsExtensionMember -> - let mspec,_,_,paramInfos,retInfo = GetMethodSpecForMemberVal amap g memberInfo vref - Method (topValInfo, vref, mspec, m, paramInfos, retInfo) - | _ -> - let (tps, curriedArgInfos, returnTy, retInfo) = GetTopValTypeInCompiledForm g topValInfo vref.Type m - let tyenvUnderTypars = TypeReprEnv.ForTypars tps - let (methodArgTys,paramInfos) = curriedArgInfos |> List.concat |> List.unzip - let ilMethodArgTys = GenParamTypesAux amap m tyenvUnderTypars methodArgTys - let ilRetTy = GenReturnTypeAux amap m tyenvUnderTypars returnTy - let ilLocTy = mkILTyForCompLoc cloc - let ilMethodInst = GenTypeArgsAux amap m tyenvUnderTypars (List.map mkTyparTy tps) - let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) - Method (topValInfo, vref, mspec, m, paramInfos, retInfo) + let ilTypeDef = { ilTypeDef with MethodImpls=mkILMethodImpls [] } + + mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) + + let extraBindings = + [ yield! AugmentWithHashCompare.MakeBindingsForCompareAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon + yield! AugmentWithHashCompare.MakeBindingsForEqualsAugmentation cenv.g tycon ] -let ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyFieldTable, isInteractive, optShadowLocal) cloc (v:Val) eenv = - let storage = ComputeStorageForTopVal (amap, g, Some intraAssemblyFieldTable, isInteractive, optShadowLocal, mkLocalValRef v, cloc) - AddStorageForVal g (v,notlazy storage) eenv + let optimizedExtraBindings = extraBindings |> List.map (fun (TBind(a,b,c)) -> TBind(a,cenv.optimizeDuringCodeGen b,c)) -let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = - match v.ValReprInfo with - | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName,v.Range)) - | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) + extraBindingsToGenerate <- optimizedExtraBindings @ extraBindingsToGenerate -let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = - let acc = - (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> - ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) + (ilCtorRef,ilMethodRefs,ilTy) - let acc = - (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> - AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc modref v)) acc) - acc + let mutable explicitEntryPointInfo : ILTypeRef option = None -let ComputeStorageForExternalCcu amap g eenv (ccu:CcuThunk) = - if not ccu.IsFSharp then eenv else - let cloc = CompLocForCcu ccu - let eenv = - List.foldBack - (fun smodul acc -> - let cloc = CompLocForSubModuleOrNamespace cloc smodul - let modref = mkNonLocalCcuRootEntityRef ccu smodul - ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc modref smodul) - ccu.RootModulesAndNamespaces - eenv - let eenv = - let eref = ERefNonLocalPreResolved ccu.Contents (mkNonLocalEntityRef ccu [| |]) - (eenv, ccu.Contents.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> - AddStorageForVal g (v, lazy (ComputeStorageForNonLocalTopVal amap g cloc eref v)) acc) - eenv + /// static init fields on script modules. + let mutable scriptInitFspecs : (ILFieldSpec * range) list = [] -let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty:ModuleOrNamespaceType) = - let eenv = List.fold (fun eenv submodul -> AddBindingsForLocalModuleType allocVal (CompLocForSubModuleOrNamespace cloc submodul) eenv submodul.ModuleOrNamespaceType) eenv mty.ModuleAndNamespaceDefinitions - let eenv = Seq.fold (fun eenv v -> allocVal cloc v eenv) eenv mty.AllValsAndMembers - eenv + member mgbuf.AddScriptInitFieldSpec(fieldSpec,range) = + scriptInitFspecs <- (fieldSpec,range) :: scriptInitFspecs + + /// This initializes the script in #load and fsc command-line order causing their + /// sideeffects 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) = + mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) + scriptInitFspecs |> List.iter IntializeCompiledScript + | None -> () -let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (ComputeStorageForExternalCcu amap g) eenv ccus + member mgbuf.GenerateRawDataValueType(cloc,size) = + // Byte array literals require a ValueType of size the required number of bytes. + // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. + // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. + let cloc = CompLocForPrivateImplementationDetails cloc + rawDataValueTypeGenerator.Apply((cloc,size)) -let AddBindingsForTycon allocVal (cloc:CompileLocation) (tycon:Tycon) eenv = - let unrealizedSlots = - if tycon.IsFSharpObjectModelTycon - then tycon.FSharpObjectModelTypeInfo.fsobjmodel_vslots - else [] - (eenv,unrealizedSlots) ||> List.fold (fun eenv vref -> allocVal cloc vref.Deref eenv) + member mgbuf.GenerateAnonType(genToStringMethod, anonInfo:AnonRecdTypeInfo) = + let isStruct = evalAnonInfoIsStruct anonInfo + let key = anonInfo.Stamp + match anonTypeTable.Table.TryGetValue key with + | true, res -> res + | _ -> + let info = generateAnonType genToStringMethod (isStruct,anonInfo.ILTypeRef,anonInfo.SortedNames) + anonTypeTable.Table.[key] <- info + info -let rec AddBindingsForModuleDefs allocVal (cloc:CompileLocation) eenv mdefs = - List.fold (AddBindingsForModuleDef allocVal cloc) eenv mdefs + member mgbuf.LookupAnonType(anonInfo:AnonRecdTypeInfo) = + match anonTypeTable.Table.TryGetValue anonInfo.Stamp with + | true, res -> res + | _ -> failwithf "the anonymous record %A has not been generated in the pre-phase of generating this module" anonInfo.ILTypeRef -and AddBindingsForModuleDef allocVal cloc eenv x = - match x with - | TMDefRec(_isRec,tycons,mbinds,_) -> - (* Virtual don't have 'let' bindings and must be added to the environment *) - let eenv = List.foldBack (AddBindingsForTycon allocVal cloc) tycons eenv - let eenv = List.foldBack (AddBindingsForModule allocVal cloc) mbinds eenv - eenv - | TMDefLet(bind,_) -> - allocVal cloc bind.Var eenv - | TMDefDo _ -> - eenv - | TMAbstract(ModuleOrNamespaceExprWithSig(mtyp,_,_)) -> - AddBindingsForLocalModuleType allocVal cloc eenv mtyp - | TMDefs(mdefs) -> - AddBindingsForModuleDefs allocVal cloc eenv mdefs + member mgbuf.GrabExtraBindingsToGenerate() = + let result = extraBindingsToGenerate + extraBindingsToGenerate <- [] + result -and AddBindingsForModule allocVal cloc x eenv = - match x with - | ModuleOrNamespaceBinding.Binding bind -> - allocVal cloc bind.Var eenv - | ModuleOrNamespaceBinding.Module (mspec, mdef) -> - let cloc = - if mspec.IsNamespace then cloc - else CompLocForFixedModule cloc.clocQualifiedNameOfFile cloc.clocTopImplQualifiedName mspec - - AddBindingsForModuleDef allocVal cloc eenv mdef + member mgbuf.AddTypeDef(tref:ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) -and AddBindingsForModuleTopVals _g allocVal _cloc eenv vs = - List.foldBack allocVal vs eenv + member mgbuf.GetCurrentFields(tref:ILTypeRef) = + gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() + member mgbuf.AddReflectedDefinition(vspec : Tast.Val,expr) = + // preserve order by storing index of item + let n = reflectedDefinitions.Count + reflectedDefinitions.Add(vspec, (vspec.CompiledName, n, expr)) + + member mgbuf.ReplaceNameOfReflectedDefinition(vspec, newName) = + match reflectedDefinitions.TryGetValue vspec with + | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) + | _ -> () -// Put the partial results for a generated fragment (i.e. a part of a CCU generated by FSI) -// into the stored results for the whole CCU. -// isIncrementalFragment = true --> "typed input" -// isIncrementalFragment = false --> "#load" -let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap:ImportMap, isIncrementalFragment, g, ccu, fragName, intraAssemblyInfo, eenv, typedImplFiles) = - let cloc = CompLocForFragment fragName ccu - let allocVal = ComputeAndAddStorageForLocalTopVal (amap, g, intraAssemblyInfo, true, NoShadowLocal) - (eenv, typedImplFiles) ||> List.fold (fun eenv (TImplFile(qname, _, mexpr, _, _, _)) -> - let cloc = { cloc with clocTopImplQualifiedName = qname.Text } - if isIncrementalFragment then - match mexpr with - | ModuleOrNamespaceExprWithSig(_,mdef,_) -> AddBindingsForModuleDef allocVal cloc eenv mdef - (* | ModuleOrNamespaceExprWithSig(mtyp,_,m) -> error(Error("don't expect inner defs to have a constraint",m)) *) - else - AddBindingsForLocalModuleType allocVal cloc eenv mexpr.Type) + member mgbuf.AddMethodDef(tref:ILTypeRef,ilMethodDef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) + if ilMethodDef.IsEntryPoint then + explicitEntryPointInfo <- Some(tref) + member mgbuf.AddExplicitInitToSpecificMethodDef(cond,tref,fspec,sourceOpt,feefee,seqpt) = + // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field + // Doing both a store and load keeps FxCop happier because it thinks the field is useful + let instrs = + [ yield! (if condition "NO_ADD_FEEFEE_TO_CCTORS" then [] elif condition "ADD_SEQPT_TO_CCTORS" then seqpt else feefee) // mark start of hidden code + yield mkLdcInt32 0 + yield mkNormalStsfld fspec + yield mkNormalLdsfld fspec + yield AI_pop] + gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond,instrs,sourceOpt) + + member mgbuf.AddEventDef(tref,edef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) + + member mgbuf.AddFieldDef(tref,ilFieldDef) = + gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) + + member mgbuf.AddOrMergePropertyDef(tref,pdef,m) = + gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef,m) + + member mgbuf.Close() = + // old implementation adds new element to the head of list so result was accumulated in reversed order + let orderedReflectedDefinitions = + [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name,vspec), expr)] + |> List.sortBy (fst >> (~-)) // invert the result to get 'order-by-descending' behavior (items in list are 0..* so we don't need to worry about int.MinValue) + |> List.map snd + gtdefs.Close(), orderedReflectedDefinitions + member mgbuf.cenv = cenv + member mgbuf.GetExplicitEntryPointInfo() = explicitEntryPointInfo + +let GenTypePermitVoid cenv m tyenv ty = GenTypeAux cenv.amap m tyenv VoidOK PtrTypesNotOK ty +let GenTypesPermitVoid cenv m tyenv tys = List.map (GenTypePermitVoid cenv m tyenv) tys +let GenExnType amap m tyenv (ecref:TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] + /// Record the types of the things on the evaluation stack. /// Used for the few times we have to flush the IL evaluation stack and to compute maxStack. @@ -2202,7 +2193,7 @@ and GenSequel cenv cloc cgbuf sequel = //-------------------------------------------------------------------------- and GenConstant cenv cgbuf eenv (c,m,ty) sequel = - let ilTy = GenType cenv m eenv.tyenv ty + let ilTy = GenType cenv.amap m eenv.tyenv ty // Check if we need to generate the value at all match sequelAfterDiscard sequel with | None -> @@ -2244,7 +2235,7 @@ and GenConstant cenv cgbuf eenv (c,m,ty) sequel = and GenUnitTy cenv eenv m = match cenv.ilUnitTy with | None -> - let res = GenType cenv m eenv.tyenv cenv.g.unit_ty + let res = GenType cenv.amap m eenv.tyenv cenv.g.unit_ty cenv.ilUnitTy <- Some res res | Some res -> res @@ -2266,7 +2257,7 @@ and GenAllocTuple cenv cgbuf eenv (tupInfo, args,argtys,m) sequel = let tupInfo = evalTupInfoIsStruct tupInfo let tcref, tys, args, newm = mkCompiledTuple cenv.g tupInfo (argtys,args,m) - let typ = GenNamedTyApp cenv newm eenv.tyenv tcref tys + let typ = GenNamedTyApp cenv.amap newm eenv.tyenv tcref tys let ntyvars = if (tys.Length - 1) < goodTupleFields then (tys.Length - 1) else goodTupleFields let formalTyvars = [ for n in 0 .. ntyvars do yield mkILTyvarTy (uint16 n) ] @@ -2284,14 +2275,14 @@ and GenGetTupleField cenv cgbuf eenv (tupInfo,e,tys,n,m) sequel = if ar <= 0 then failwith "getCompiledTupleItem" elif ar < maxTuple then let tcr' = mkCompiledTupleTyconRef g tupInfo ar - let typ = GenNamedTyApp cenv m eenv.tyenv tcr' tys + let typ = GenNamedTyApp cenv.amap m eenv.tyenv tcr' tys mkGetTupleItemN g m n typ tupInfo e tys.[n] else let tysA,tysB = List.splitAfter (goodTupleFields) tys let tyB = mkCompiledTupleTy g tupInfo tysB let tys' = tysA@[tyB] let tcr' = mkCompiledTupleTyconRef g tupInfo (List.length tys') - let typ' = GenNamedTyApp cenv m eenv.tyenv tcr' tys' + let typ' = GenNamedTyApp cenv.amap m eenv.tyenv tcr' tys' let n' = (min n goodTupleFields) let elast = mkGetTupleItemN g m n' typ' tupInfo e tys'.[n'] if n < goodTupleFields then @@ -2304,7 +2295,7 @@ and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = GenExprs cenv cgbuf eenv args let typ = GenExnType cenv.amap m eenv.tyenv c let flds = recdFieldsOfExnDefRef c - let argtys = flds |> List.map (fun rfld -> GenType cenv m eenv.tyenv rfld.FormalType) + let argtys = flds |> List.map (fun rfld -> GenType cenv.amap m eenv.tyenv rfld.FormalType) let mspec = mkILCtorMethSpecForTy (typ, argtys) CG.EmitInstr cgbuf (pop args.Length) (Push [typ]) @@ -2313,12 +2304,12 @@ and GenAllocExn cenv cgbuf eenv (c,args,m) sequel = and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = GenExprs cenv cgbuf eenv args - let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv c tyargs + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv c tyargs CG.EmitInstrs cgbuf (pop args.Length) (Push [cuspec.DeclaringType]) (EraseUnions.mkNewData cenv.g.ilg (cuspec, idx)) GenSequel cenv eenv.cloc cgbuf sequel and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = - let typ = GenNamedTyApp cenv m eenv.tyenv tcref argtys + let typ = GenNamedTyApp cenv.amap m eenv.tyenv tcref argtys // Filter out fields with default initialization let relevantFields = @@ -2341,14 +2332,14 @@ and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = let tyenvinner = TypeReprEnv.ForTyconRef tcref CG.EmitInstr cgbuf (pop args.Length) (Push [typ]) (mkNormalNewobj - (mkILCtorMethSpecForTy (typ,relevantFields |> List.map (fun f -> GenType cenv m tyenvinner f.FormalType) ))) + (mkILCtorMethSpecForTy (typ,relevantFields |> List.map (fun f -> GenType cenv.amap m tyenvinner f.FormalType) ))) GenSequel cenv eenv.cloc cgbuf sequel and GenAllocAnonRecd cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, tyargs, args, m) sequel = let anonCtor, _anonMethods, anonType = cgbuf.mgbuf.LookupAnonType(anonInfo) let boxity = anonType.Boxity GenExprs cenv cgbuf eenv args - let ilTypeArgs = GenTypeArgs cenv m eenv.tyenv tyargs + let ilTypeArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs let anonTypeWithInst = mkILTy boxity (mkILTySpec(anonType.TypeSpec.TypeRef,ilTypeArgs)) CG.EmitInstr cgbuf (pop args.Length) (Push [anonTypeWithInst]) (mkNormalNewobj (mkILMethSpec(anonCtor,boxity,ilTypeArgs,[]))) GenSequel cenv eenv.cloc cgbuf sequel @@ -2356,7 +2347,7 @@ and GenAllocAnonRecd cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, tyargs, args, and GenGetAnonRecdField cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, e, tyargs, n, m) sequel = let _anonCtor, anonMethods, anonType = cgbuf.mgbuf.LookupAnonType(anonInfo) let boxity = anonType.Boxity - let ilTypeArgs = GenTypeArgs cenv m eenv.tyenv tyargs + let ilTypeArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs let anonMethod = anonMethods.[n] let anonFieldType = ilTypeArgs.[n] GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -2364,7 +2355,7 @@ and GenGetAnonRecdField cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, e, tyargs, GenSequel cenv eenv.cloc cgbuf sequel and GenNewArraySimple cenv cgbuf eenv (elems,elemTy,m) sequel = - let ilElemTy = GenType cenv m eenv.tyenv elemTy + let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy let ilArrTy = mkILArr1DTy ilElemTy CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4,ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional,ilElemTy) ] @@ -2401,7 +2392,7 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list,elemTy,m) sequel = | _ -> (function _ -> false), (fun _ _ -> failwith "unreachable") if elems' |> Array.forall (function Expr.Const(c,_,_) -> test c | _ -> false) then - let ilElemTy = GenType cenv m eenv.tyenv elemTy + let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy GenConstArray cenv cgbuf eenv ilElemTy elems' (fun buf -> function Expr.Const(c,_,_) -> write buf c | _ -> failwith "unreachable") GenSequel cenv eenv.cloc cgbuf sequel @@ -2416,7 +2407,7 @@ and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = begin if (isInterfaceTy cenv.g tgty) then ( GenExpr cenv cgbuf eenv SPSuppress e Continue - let ilToTy = GenType cenv m eenv.tyenv tgty + 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. CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] @@ -2428,15 +2419,15 @@ and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = else GenExpr cenv cgbuf eenv SPSuppress e Continue if not (isObjTy cenv.g srcty) then - let ilFromTy = GenType cenv m eenv.tyenv srcty + let ilFromTy = GenType cenv.amap m eenv.tyenv srcty CG.EmitInstrs cgbuf (pop 1) (Push [cenv.g.ilg.typ_Object]) [ I_box ilFromTy ] if not (isObjTy cenv.g tgty) then - let ilToTy = GenType cenv m eenv.tyenv tgty + let ilToTy = GenType cenv.amap m eenv.tyenv tgty CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] GenSequel cenv eenv.cloc cgbuf sequel and GenReraise cenv cgbuf eenv (rtnty,m) sequel = - let ilReturnTy = GenType cenv m eenv.tyenv rtnty + let ilReturnTy = GenType cenv.amap m eenv.tyenv rtnty CG.EmitInstrs cgbuf (pop 0) Push0 [I_rethrow] // [See comment related to I_throw]. // Rethrow does not return. Required to push dummy value on the stack. @@ -2451,7 +2442,7 @@ and GenGetExnField cenv cgbuf eenv (e,ecref,fieldNum,m) sequel = CG.EmitInstrs cgbuf (pop 0) Push0 [ I_castclass typ] let fld = List.item fieldNum exnc.TrueInstanceFieldsAsList - let ftyp = GenType cenv m eenv.tyenv fld.FormalType + let ftyp = GenType cenv.amap m eenv.tyenv fld.FormalType let mspec = mkILNonGenericInstanceMethSpecInTy (typ,"get_" + fld.Name, [], ftyp) CG.EmitInstr cgbuf (pop 1) (Push [ftyp]) (mkNormalCall mspec) @@ -2464,7 +2455,7 @@ and GenSetExnField cenv cgbuf eenv (e,ecref,fieldNum,e2,m) sequel = let typ = GenExnType cenv.amap m eenv.tyenv ecref CG.EmitInstrs cgbuf (pop 0) Push0 [ I_castclass typ ] let fld = List.item fieldNum exnc.TrueInstanceFieldsAsList - let ftyp = GenType cenv m eenv.tyenv fld.FormalType + let ftyp = GenType cenv.amap m eenv.tyenv fld.FormalType let ilFieldName = ComputeFieldName exnc fld GenExpr cenv cgbuf eenv SPSuppress e2 Continue CG.EmitInstr cgbuf (pop 2) Push0 (mkNormalStfld(mkILFieldSpecInTy (typ,ilFieldName,ftyp))) @@ -2482,7 +2473,7 @@ and UnionCodeGen (cgbuf: CodeGenBuffer) = and GenUnionCaseProof cenv cgbuf eenv (e,ucref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs let fty = EraseUnions.GetILTypeForAlternative cuspec idx let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef EraseUnions.emitCastData cenv.g.ilg (UnionCodeGen cgbuf) (false,avoidHelpers,cuspec,idx) @@ -2493,7 +2484,7 @@ and GenGetUnionCaseField cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = assert (ucref.Tycon.IsStructOrEnumTycon || isProvenUnionCaseTy (tyOfExpr cenv.g e)) GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs let fty = actualTypOfIlxUnionField cuspec idx n let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef CG.EmitInstrs cgbuf (pop 1) (Push [fty]) (EraseUnions.mkLdData (avoidHelpers, cuspec, idx, n)) @@ -2503,7 +2494,7 @@ and GenGetUnionCaseFieldAddr cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = assert (ucref.Tycon.IsStructOrEnumTycon || isProvenUnionCaseTy (tyOfExpr cenv.g e)) GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs let fty = actualTypOfIlxUnionField cuspec idx n let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref fty]) (EraseUnions.mkLdDataAddr (avoidHelpers, cuspec, idx, n)) @@ -2511,7 +2502,7 @@ and GenGetUnionCaseFieldAddr cenv cgbuf eenv (e,ucref,tyargs,n,m) sequel = and GenGetUnionCaseTag cenv cgbuf eenv (e,tcref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec = GenUnionSpec cenv m eenv.tyenv tcref tyargs + let cuspec = GenUnionSpec cenv.amap m eenv.tyenv tcref tyargs let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib tcref EraseUnions.emitLdDataTag cenv.g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec) CG.EmitInstrs cgbuf (pop 1) (Push [cenv.g.ilg.typ_Int32]) [ ] // push/pop to match the line above @@ -2519,7 +2510,7 @@ and GenGetUnionCaseTag cenv cgbuf eenv (e,tcref,tyargs,m) sequel = and GenSetUnionCaseField cenv cgbuf eenv (e,ucref,tyargs,n,e2,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec,idx = GenUnionCaseSpec cenv m eenv.tyenv ucref tyargs + let cuspec,idx = GenUnionCaseSpec cenv.amap m eenv.tyenv ucref tyargs let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib ucref.TyconRef EraseUnions.emitCastData cenv.g.ilg (UnionCodeGen cgbuf) (false,avoidHelpers,cuspec,idx) CG.EmitInstrs cgbuf (pop 1) (Push [cuspec.DeclaringType]) [ ] // push/pop to match the line above @@ -2752,7 +2743,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let actualRetTy = applyTys cenv.g vref.Type (tyargs,nowArgs) let _,curriedArgInfos,returnTy,_ = GetTopValTypeInCompiledForm cenv.g topValInfo vref.Type m - let ilTyArgs = GenTypeArgs cenv m eenv.tyenv tyargs + let ilTyArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs // For instance method calls chop off some type arguments, which are already @@ -2797,7 +2788,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let callInstr = match valUseFlags with | PossibleConstrainedCall ty -> - let ilThisTy = GenType cenv m eenv.tyenv ty + let ilThisTy = GenType cenv.amap m eenv.tyenv ty I_callconstraint ( isTailCall, ilThisTy,mspec,None) | _ -> if newobj then I_newobj (mspec, None) @@ -2816,7 +2807,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = (eenv,laterArgs) ||> List.mapFold (fun eenv laterArg -> // Only save arguments that have effects if Optimizer.ExprHasEffect cenv.g laterArg then - let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv m eenv.tyenv + let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv.amap m eenv.tyenv let loc,eenv = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("arg",m), ilTy, false) scopeMarks GenExpr cenv cgbuf eenv SPSuppress laterArg Continue EmitSetLocal cgbuf loc @@ -2826,7 +2817,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let nargs = mspec.FormalArgTypes.Length CG.EmitInstr cgbuf (pop (nargs + (if mspec.CallingConv.IsStatic || newobj then 0 else 1))) - (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv m eenv.tyenv actualRetTy)])) callInstr + (if mustGenerateUnitAfterCall || isSuperInit || isSelfInit then Push0 else (Push [(GenType cenv.amap m eenv.tyenv actualRetTy)])) callInstr // For isSuperInit, load the 'this' pointer as the pretend 'result' of the operation. It will be popped again in most cases if isSuperInit then CG.EmitInstrs cgbuf (pop 0) (Push [mspec.DeclaringType]) [ mkLdarg0 ] @@ -2879,9 +2870,9 @@ and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv typ cloinfo tyargs let ilContractClassTyargs = cloinfo.localTypeFuncContractFreeTypars |> List.map mkTyparTy - |> GenTypeArgs cenv m eenv.tyenv + |> GenTypeArgs cenv.amap m eenv.tyenv - let ilTyArgs = tyargs |> GenTypeArgs cenv m eenv.tyenv + let ilTyArgs = tyargs |> GenTypeArgs cenv.amap m eenv.tyenv let _,(ilContractMethTyargs: ILGenericParameterDefs),(ilContractCloTySpec:ILTypeSpec),ilContractFormalRetTy = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo @@ -2896,7 +2887,7 @@ and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv typ cloinfo tyargs let actualRetTy = applyTys cenv.g typ (tyargs,[]) let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilContractTy, "DirectInvoke", [], ilContractFormalRetTy, ilTyArgs) - let ilActualRetTy = GenType cenv m eenv.tyenv actualRetTy + let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy CountCallFuncInstructions() CG.EmitInstr cgbuf (pop 1) (Push [ilActualRetTy]) (mkNormalCallvirt ilDirectInvokeMethSpec) actualRetTy @@ -2926,16 +2917,16 @@ and GenIndirectCall cenv cgbuf eenv (functy,tyargs,args,m) sequel = List.fold (fun (formalFuncTyp,sofar) _ -> let dty,rty = destFunTy cenv.g formalFuncTyp - (rty,(fun acc -> sofar (Apps_app(GenType cenv m feenv dty,acc))))) + (rty,(fun acc -> sofar (Apps_app(GenType cenv.amap m feenv dty,acc))))) (formalFuncTyp,id) args - let ilxRetApps = Apps_done (GenType cenv m feenv formalRetTy) + let ilxRetApps = Apps_done (GenType cenv.amap m feenv formalRetTy) - List.foldBack (fun tyarg acc -> Apps_tyapp(GenType cenv m eenv.tyenv tyarg,acc)) tyargs (appBuilder ilxRetApps) + List.foldBack (fun tyarg acc -> Apps_tyapp(GenType cenv.amap m eenv.tyenv tyarg,acc)) tyargs (appBuilder ilxRetApps) let actualRetTy = applyTys cenv.g functy (tyargs, args) - let ilActualRetTy = GenType cenv m eenv.tyenv actualRetTy + let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy // Check if any byrefs are involved to make sure we don't tailcall let hasByrefArg = @@ -2972,7 +2963,7 @@ and GenTry cenv cgbuf eenv scopeMarks (e1,m,resty,spTry) = let endTryMark = CG.GenerateDelayMark cgbuf "endTryMark" let afterHandler = CG.GenerateDelayMark cgbuf "afterHandler" let eenvinner = {eenvinner with withinSEH = true} - let ilResultTy = GenType cenv m eenvinner.tyenv resty + let ilResultTy = GenType cenv.amap m eenvinner.tyenv resty let whereToSave,eenvinner = AllocLocal cenv cgbuf eenvinner true (ilxgenGlobalNng.FreshCompilerGeneratedName ("tryres",m),ilResultTy, false) (startTryMark,endTryMark) // Generate the body of the try. In the normal case (SequencePointAtTry) we generate a sequence point @@ -3417,7 +3408,7 @@ and GenQuotation cenv cgbuf eenv (ast,conv,m,ety) sequel = let someTypeInModuleExpr = mkTypeOfExpr cenv m eenv.someTypeInThisAssembly let rawTy = mkRawQuotedExprTy cenv.g - let spliceTypeExprs = List.map (GenType cenv m eenv.tyenv >> (mkTypeOfExpr cenv m)) spliceTypes + let spliceTypeExprs = List.map (GenType cenv.amap m eenv.tyenv >> (mkTypeOfExpr cenv m)) spliceTypes let bytesExpr = Expr.Op(TOp.Bytes(astSerializedBytes),[],[],m) @@ -3459,9 +3450,9 @@ and GenILCall cenv cgbuf eenv (virt,valu,newobj,valUseFlags,isDllImport,ilMethRe let makesNoCriticalTailcalls = (newobj || not virt) // Don't tailcall for 'newobj', or 'call' to IL code let tail = CanTailcall(valu,ccallInfo,eenv.withinSEH,hasByrefArg,mustGenerateUnitAfterCall,isDllImport,false,makesNoCriticalTailcalls,sequel) - let ilEnclArgTys = GenTypeArgs cenv m eenv.tyenv enclArgTys - let ilMethArgTys = GenTypeArgs cenv m eenv.tyenv methArgTys - let ilReturnTys = GenTypes cenv m eenv.tyenv returnTys + let ilEnclArgTys = GenTypeArgs cenv.amap m eenv.tyenv enclArgTys + let ilMethArgTys = GenTypeArgs cenv.amap m eenv.tyenv methArgTys + let ilReturnTys = GenTypes cenv.amap m eenv.tyenv returnTys let ilMethSpec = mkILMethSpec (ilMethRef,boxity,ilEnclArgTys,ilMethArgTys) let useICallVirt = virt || useCallVirt cenv boxity ilMethSpec isBaseCall @@ -3474,7 +3465,7 @@ and GenILCall cenv cgbuf eenv (virt,valu,newobj,valUseFlags,isDllImport,ilMethRe else match ccallInfo with | Some objArgTy -> - let ilObjArgTy = GenType cenv m eenv.tyenv objArgTy + let ilObjArgTy = GenType cenv.amap m eenv.tyenv objArgTy [ I_callconstraint(tail,ilObjArgTy,ilMethSpec,None) ] | None -> if useICallVirt then [ I_callvirt(tail,ilMethSpec,None) ] @@ -3538,19 +3529,19 @@ and GenGetValAddr cenv cgbuf eenv (v: ValRef, m) sequel = and GenGetByref cenv cgbuf eenv (v:ValRef,m) sequel = GenGetLocalVRef cenv cgbuf eenv m v None - let ilty = GenType cenv m eenv.tyenv (destByrefTy cenv.g v.Type) + let ilty = GenType cenv.amap m eenv.tyenv (destByrefTy cenv.g v.Type) CG.EmitInstrs cgbuf (pop 1) (Push [ilty]) [ mkNormalLdobj ilty ] GenSequel cenv eenv.cloc cgbuf sequel and GenSetByref cenv cgbuf eenv (v:ValRef,e,m) sequel = GenGetLocalVRef cenv cgbuf eenv m v None GenExpr cenv cgbuf eenv SPSuppress e Continue - let ilty = GenType cenv m eenv.tyenv (destByrefTy cenv.g v.Type) + let ilty = GenType cenv.amap m eenv.tyenv (destByrefTy cenv.g v.Type) CG.EmitInstrs cgbuf (pop 2) Push0 [ mkNormalStobj ilty ] GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel and GenDefaultValue cenv cgbuf eenv (ty,m) = - let ilTy = GenType cenv m eenv.tyenv ty + let ilTy = GenType cenv.amap m eenv.tyenv ty if isRefTy cenv.g ty then CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) AI_ldnull else @@ -3572,7 +3563,7 @@ and GenDefaultValue cenv cgbuf eenv (ty,m) = | Some tcref when (tyconRefEq cenv.g cenv.g.system_Double_tcref tcref) -> CG.EmitInstr cgbuf (pop 0) (Push [ilTy]) (iLdcDouble 0.0) | _ -> - let ilTy = GenType cenv m eenv.tyenv ty + let ilTy = GenType cenv.amap m eenv.tyenv ty LocalScope "ilzero" cgbuf (fun scopeMarks -> let locIdx, _ = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("default",m), ilTy, false) scopeMarks // "initobj" (Generated by EmitInitLocal) doesn't work on byref types @@ -3589,7 +3580,7 @@ and GenDefaultValue cenv cgbuf eenv (ty,m) = //-------------------------------------------------------------------------- and GenGenericParam cenv eenv (tp:Typar) = - let subTypeConstraints = tp.Constraints |> List.choose (function | TyparConstraint.CoercesTo(ty,_) -> Some(ty) | _ -> None) |> List.map (GenTypeAuxAux cenv.amap tp.Range eenv.tyenv VoidNotOK PtrTypesNotOK) + let subTypeConstraints = tp.Constraints |> List.choose (function | TyparConstraint.CoercesTo(ty,_) -> Some(ty) | _ -> None) |> List.map (GenTypeAux cenv.amap tp.Range eenv.tyenv VoidNotOK PtrTypesNotOK) let refTypeConstraint = tp.Constraints |> List.exists (function TyparConstraint.IsReferenceType _ -> true | TyparConstraint.SupportsNull _ -> true | _ -> false) let notNullableValueTypeConstraint = tp.Constraints |> List.exists (function TyparConstraint.IsNonNullableStruct _ -> true | _ -> false) let defaultConstructorConstraint = tp.Constraints |> List.exists (function TyparConstraint.RequiresDefaultConstructor _ -> true | _ -> false) @@ -3630,7 +3621,7 @@ and GenSlotParam m cenv eenv (TSlotParam(nm,ty,inFlag,outFlag,optionalFlag,attri let inFlag2,outFlag2,optionalFlag2,defaultParamValue,paramMarshal2,attribs = GenParamAttribs cenv attribs { Name=nm - Type= GenParamType cenv m eenv.tyenv ty + Type= GenParamType cenv.amap m eenv.tyenv ty Default=defaultParamValue Marshal=paramMarshal2 IsIn=inFlag || inFlag2 @@ -3640,10 +3631,10 @@ and GenSlotParam m cenv eenv (TSlotParam(nm,ty,inFlag,outFlag,optionalFlag,attri and GenFormalSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,paraml,returnTy)) = let paraml = List.concat paraml - let ilTy = GenType cenv m eenv.tyenv typ + let ilTy = GenType cenv.amap m eenv.tyenv typ let eenvForSlotSig = EnvForTypars (ctps @ mtps) eenv let ilParams = paraml |> List.map (GenSlotParam m cenv eenvForSlotSig) - let ilRetTy = GenReturnType cenv m eenvForSlotSig.tyenv returnTy + let ilRetTy = GenReturnType cenv.amap m eenvForSlotSig.tyenv returnTy let ilRet = mkILReturn ilRetTy ilTy, ilParams, ilRet @@ -3655,7 +3646,7 @@ and GenActualSlotsig m cenv eenv (TSlotSig(_,typ,ctps,mtps,ilSlotParams,ilSlotRe let ilParams = ilSlotParams |> List.map (instSlotParam instForSlotSig >> GenSlotParam m cenv eenv) // Use the better names if available let ilParams = if ilParams.Length = methodParams.Length then (ilParams, methodParams) ||> List.map2 (fun p pv -> { p with Name = Some (nameOfVal pv) }) else ilParams - let ilRetTy = GenReturnType cenv m eenv.tyenv (Option.map (instType instForSlotSig) ilSlotRetTy) + let ilRetTy = GenReturnType cenv.amap m eenv.tyenv (Option.map (instType instForSlotSig) ilSlotRetTy) let iLRet = mkILReturn ilRetTy ilParams,iLRet @@ -3761,7 +3752,7 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overri let mimpls = mimpls |> List.choose id // choose the ones that actually have method impls - let interfaceTys = interfaceImpls |> List.map (fst >> GenType cenv m eenvinner.tyenv) + let interfaceTys = interfaceImpls |> List.map (fst >> GenType cenv.amap m eenvinner.tyenv) let attrs = GenAttrs cenv eenvinner cloAttribs let super = (if isInterfaceTy cenv.g baseType then cenv.g.ilg.typ_Object else ilCloRetTy) @@ -3787,13 +3778,13 @@ and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:V let (cloAttribs,_,_,cloFreeTyvars,cloFreeVars,ilCloTypeRef:ILTypeRef,ilCloFreeVars,eenvinner) = GetIlxClosureFreeVars cenv m None eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, cenv.g.int32_ty)) - let ilCloSeqElemTy = GenType cenv m eenvinner.tyenv seqElemTy + let ilCloSeqElemTy = GenType cenv.amap m eenvinner.tyenv seqElemTy let cloRetTy = mkSeqTy cenv.g seqElemTy - let ilCloRetTyInner = GenType cenv m eenvinner.tyenv cloRetTy - let ilCloRetTyOuter = GenType cenv m eenvouter.tyenv cloRetTy - let ilCloEnumeratorTy = GenType cenv m eenvinner.tyenv (mkIEnumeratorTy cenv.g seqElemTy) - let ilCloEnumerableTy = GenType cenv m eenvinner.tyenv (mkSeqTy cenv.g seqElemTy) - let ilCloBaseTy = GenType cenv m eenvinner.tyenv (mkAppTy cenv.g.seq_base_tcr [seqElemTy]) + let ilCloRetTyInner = GenType cenv.amap m eenvinner.tyenv cloRetTy + let ilCloRetTyOuter = GenType cenv.amap m eenvouter.tyenv cloRetTy + let ilCloEnumeratorTy = GenType cenv.amap m eenvinner.tyenv (mkIEnumeratorTy cenv.g seqElemTy) + let ilCloEnumerableTy = GenType cenv.amap m eenvinner.tyenv (mkSeqTy cenv.g seqElemTy) + let ilCloBaseTy = GenType cenv.amap m eenvinner.tyenv (mkAppTy cenv.g.seq_base_tcr [seqElemTy]) let ilCloGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars // Create a new closure class with a single "MoveNext" method that implements the iterator. @@ -3961,7 +3952,7 @@ and GenLambda cenv cgbuf eenv isLocalTypeFunc selfv expr sequel = GenSequel cenv eenv.cloc cgbuf sequel and GenTypeOfVal cenv eenv (v:Val) = - GenType cenv v.Range eenv.tyenv v.Type + GenType cenv.amap v.Range eenv.tyenv v.Type and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = match StorageForVal m fv eenvouter with @@ -3971,7 +3962,7 @@ and GenFreevar cenv m eenvouter tyenvinner (fv:Val) = // Check for things that should never make it into the free variable set. Only do this in debug for performance reasons | (StaticField _ | StaticProperty _ | Method _ | Null) -> error(InternalError("GenFreevar: compiler error: unexpected unrealized value",fv.Range)) #endif - | _ -> GenType cenv m tyenvinner fv.Type + | _ -> GenType cenv.amap m tyenvinner fv.Type and GetIlxClosureFreeVars cenv m selfv eenvouter takenNames expr = @@ -4112,7 +4103,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let lambdas = Lambdas_lambda (mkILParamNamed(nm,GenTypeOfVal cenv eenv v),l) lambdas,eenv | _ -> - let returnTy' = GenType cenv m eenv.tyenv returnTy + let returnTy' = GenType cenv.amap m eenv.tyenv returnTy Lambdas_return returnTy', eenv // start at arg number 1 as "this" pointer holds the current closure @@ -4122,7 +4113,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = let narginfo = vs |> List.map (fun _ -> 1) // Generate the ILX view of the lambdas - let ilReturnTy = GenType cenv m eenvinner.tyenv returnTy + let ilReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy // The general shape is: // {LAM . expr }[free-typars] : overall-type[contract-typars] @@ -4221,14 +4212,14 @@ and GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo = | e -> [], tyOfExpr cenv.g e let eenvForContract = AddTyparsToEnv tvs eenvForContract let ilContractMethTyargs = GenGenericParams cenv eenvForContract tvs - let ilContractFormalRetTy = GenType cenv m eenvForContract.tyenv contractRetTy + let ilContractFormalRetTy = GenType cenv.amap m eenvForContract.tyenv contractRetTy ilContractGenericParams,ilContractMethTyargs,mkILTySpec(ilContractTypeRef,cloinfo.localTypeFuncILGenericArgs),ilContractFormalRetTy /// Generate a new delegate construction including a closure class if necessary. This is a lot like generating function closures /// and object expression closures, and most of the code is shared. and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delegateTy, _,_,_, _) as slotsig),_attribs,methTyparsOfOverridingMethod,tmvs,body,_),m) sequel = // Get the instantiation of the delegate type - let ilCtxtDelTy = GenType cenv m eenvouter.tyenv delegateTy + let ilCtxtDelTy = GenType cenv.amap m eenvouter.tyenv delegateTy let tmvs = List.concat tmvs // Yuck. TLBIMP.EXE generated APIs use UIntPtr for the delegate ctor. @@ -4345,7 +4336,7 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // The others (e.g. Continue, LeaveFilter and CmpThenBrOrContinue) can't be done at the end of each branch. We must create a join point. | _ -> - let pushed = GenType cenv m eenv.tyenv ty + let pushed = GenType cenv.amap m eenv.tyenv ty let stackAfterJoin = (pushed :: (cgbuf.GetCurrentStack())) let afterJoin = CG.GenerateDelayMark cgbuf (pos + "_join") // go to the join point @@ -4547,7 +4538,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau match defaultTargetOpt with | None -> rest.Head.CaseTree | Some tg -> tg - let cuspec = GenUnionSpec cenv m eenv.tyenv c.TyconRef tyargs + let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly cenv.g.compilingFslib c.TyconRef GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [cenv.g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel @@ -4572,7 +4563,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau GenExpr cenv cgbuf eenv SPSuppress e Continue let srcTy = tyOfExpr cenv.g e if isTyparTy cenv.g srcTy then - let ilFromTy = GenType cenv m eenv.tyenv srcTy + let ilFromTy = GenType cenv.amap m eenv.tyenv srcTy CG.EmitInstr cgbuf (pop 1) (Push [cenv.g.ilg.typ_Object]) (I_box ilFromTy) BI_brfalse | DecisionTreeTest.IsInst (_srcty,tgty) -> @@ -4586,7 +4577,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase",switchm)) | DecisionTreeTest.UnionCase (hdc,tyargs) -> GenExpr cenv cgbuf eenv SPSuppress e Continue - let cuspec = GenUnionSpec cenv m eenv.tyenv hdc.TyconRef tyargs + let cuspec = GenUnionSpec cenv.amap m eenv.tyenv hdc.TyconRef tyargs let dests = if cases.Length <> caseLabels.Length then failwith "internal error: DecisionTreeTest.UnionCase" (cases , caseLabels) ||> List.map2 (fun case label -> @@ -5184,7 +5175,7 @@ and GenPropertyForMethodDef compileAsInstance tref mdef (v:Val) (memberInfo:ValM and GenEventForProperty cenv eenvForMeth (mspec:ILMethodSpec) (v:Val) ilAttrsThatGoOnPrimaryItem m returnTy = let evname = v.PropertyName let delegateTy = Infos.FindDelegateTypeOfPropertyEvent cenv.g cenv.amap evname m returnTy - let ilDelegateTy = GenType cenv m eenvForMeth.tyenv delegateTy + let ilDelegateTy = GenType cenv.amap m eenvForMeth.tyenv delegateTy let ilThisTy = mspec.DeclaringType let addMethRef = mkILMethRef (ilThisTy.TypeRef,mspec.CallingConv,"add_" + evname,0,[ilDelegateTy],ILType.Void) let removeMethRef = mkILMethRef (ilThisTy.TypeRef,mspec.CallingConv,"remove_" + evname,0,[ilDelegateTy],ILType.Void) @@ -5451,8 +5442,8 @@ and GenMethodForBinding // Emit the property, but not if its a private method impl if mdef.Access <> ILMemberAccess.Private then let vtyp = ReturnTypeOfPropertyVal cenv.g v - let ilPropTy = GenType cenv m eenvUnderMethTypeTypars.tyenv vtyp - let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv m eenvUnderMethTypeTypars.tyenv + let ilPropTy = GenType cenv.amap m eenvUnderMethTypeTypars.tyenv vtyp + let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv.amap m eenvUnderMethTypeTypars.tyenv let ilPropDef = GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrsThatGoOnPrimaryItem) compiledName mgbuf.AddOrMergePropertyDef(tref,ilPropDef,m) @@ -5529,7 +5520,7 @@ and GenSetVal cenv cgbuf eenv (vref,e,m) sequel = and GenGetValRefAndSequel cenv cgbuf eenv m (v:ValRef) fetchSequel = let ty = v.Type - GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv m eenv.tyenv ty) (StorageForValRef m v eenv) fetchSequel + GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) (StorageForValRef m v eenv) fetchSequel and GenGetVal cenv cgbuf eenv (v:ValRef,m) sequel = GenGetValRefAndSequel cenv cgbuf eenv m v None @@ -5818,16 +5809,16 @@ and GenAttribArg cenv eenv x (ilArgTy:ILType) = // Detect '[| ... |]' nodes | Expr.Op(TOp.Array,[elemTy],args,m),_ -> - let ilElemTy = GenType cenv m eenv.tyenv elemTy + let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy ILAttribElem.Array (ilElemTy, List.map (fun arg -> GenAttribArg cenv eenv arg ilElemTy) args) // Detect 'typeof' calls | TypeOfExpr g ty, _ -> - ILAttribElem.Type (Some (GenType cenv x.Range eenv.tyenv ty)) + ILAttribElem.Type (Some (GenType cenv.amap x.Range eenv.tyenv ty)) // Detect 'typedefof' calls | TypeDefOfExpr g ty, _ -> - ILAttribElem.TypeRef (Some (GenType cenv x.Range eenv.tyenv ty).TypeRef) + ILAttribElem.TypeRef (Some (GenType cenv.amap x.Range eenv.tyenv ty).TypeRef) // Ignore upcasts | Expr.Op(TOp.Coerce,_,[arg2],_),_ -> @@ -5864,7 +5855,7 @@ and GenAttr cenv eenv (Attrib(_,k,args,props,_,_,_)) = let props = props |> List.map (fun (AttribNamedArg(s,ty,fld,AttribExpr(_,expr))) -> let m = expr.Range - let ilTy = GenType cenv m eenv.tyenv ty + let ilTy = GenType cenv.amap m eenv.tyenv ty let cval = GenAttribArg cenv eenv expr ilTy (s,ilTy,fld,cval)) let mspec = @@ -6237,8 +6228,8 @@ and GenAbstractBinding cenv eenv tref (vref:ValRef) = [],[],[edef] else let ilPropDef = - let ilPropTy = GenType cenv m eenvForMeth.tyenv vtyp - let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv m eenvForMeth.tyenv + let ilPropTy = GenType cenv.amap m eenvForMeth.tyenv vtyp + let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv.amap m eenvForMeth.tyenv GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrs) None let mdef = mdef.WithSpecialName [mdef], [ilPropDef],[] @@ -6299,10 +6290,10 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let eenvinner = ReplaceTyenv (TypeReprEnv.ForTycon tycon) eenv let thisTy = generalizedTyconRef tcref - let ilThisTy = GenType cenv m eenvinner.tyenv thisTy + let ilThisTy = GenType cenv.amap m eenvinner.tyenv thisTy let tref = ilThisTy.TypeRef let ilGenParams = GenGenericParams cenv eenvinner tycon.TyparsNoRange - let ilIntfTys = tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv m eenvinner.tyenv) + let ilIntfTys = tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m eenvinner.tyenv) let ilTypeName = tref.Name let hidden = IsHiddenTycon eenv.sigToImplRemapInfo tycon @@ -6453,7 +6444,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = ((fspec.IsCompilerGenerated && not tycon.IsEnumTycon) || hiddenRepr || IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) - let ilType = GenType cenv m eenvinner.tyenv fspec.FormalType + let ilType = GenType cenv.amap m eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec yield (useGenuineField, ilFieldName, fspec.IsMutable, fspec.IsStatic, fspec.PropertyAttribs, ilType, isPropHidden, fspec) ] @@ -6687,7 +6678,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = | TRecdRepr _ | TFSharpObjectRepr _ as tyconRepr -> let super = superOfTycon cenv.g tycon - let ilBaseTy = GenType cenv m eenvinner.tyenv super + let ilBaseTy = GenType cenv.amap m eenvinner.tyenv super // Build a basic type definition let isObjectType = (match tyconRepr with TFSharpObjectRepr _ -> true | _ -> false) @@ -6890,7 +6881,7 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = let ilMethodDefsForProperties,ilFieldDefs,ilPropertyDefs,fieldNamesAndTypes = [ for i,fld in markup fspecs do let ilPropName = fld.Name - let ilPropType = GenType cenv m eenv.tyenv fld.FormalType + let ilPropType = GenType cenv.amap m eenv.tyenv fld.FormalType let ilMethName = "get_" + fld.Name let ilFieldName = ComputeFieldName exnc fld let ilMethodDef = mkLdfldMethodDef (ilMethName,reprAccess,false,ilThisTy,ilFieldName,ilPropType) @@ -6969,7 +6960,7 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = let ilTypeName = tref.Name - let interfaces = exnc.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv m eenv.tyenv) + let interfaces = exnc.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m eenv.tyenv) let tdef = mkILGenericClass (ilTypeName,access,[],cenv.g.iltyp_Exception, @@ -7141,7 +7132,7 @@ let LookupGeneratedValue (amap:ImportMap) (ctxt: ExecutionContext) eenv (v:Val) try // Convert the v.Type into a System.Type according to ilxgen and ilreflect. let objTyp = - let ilTy = GenTypeAux amap v.Range TypeReprEnv.Empty v.Type (* TypeReprEnv.Empty ok, not expecting typars *) + let ilTy = GenType amap v.Range TypeReprEnv.Empty v.Type (* TypeReprEnv.Empty ok, not expecting typars *) ctxt.LookupType ilTy // Lookup the compiled v value (as an object). match StorageForVal v.Range v eenv with From 05ceacad426799fe3e4c42c790a6ee064b68fe02 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 11:36:15 +0100 Subject: [PATCH 12/48] simplify diff --- src/fsharp/IlxGen.fs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 02d9862530c..c890093fa1c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -373,24 +373,22 @@ type PtrsOK = let rec GenTypeArgAux amap m tyenv tyarg = GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK tyarg -and GenTypeArgs amap m tyenv tyargs = +and GenTypeArgsAux amap m tyenv tyargs = List.map (GenTypeArgAux amap m tyenv) (DropErasedTyargs tyargs) -and GenTyApp amap m tyenv repr tinst = +and GenTyAppAux amap m tyenv repr tinst = match repr with | CompiledTypeRepr.ILAsmOpen ty -> - let ilTypeInst = GenTypeArgs amap m tyenv tinst + let ilTypeInst = GenTypeArgsAux amap m tyenv tinst let ty = IL.instILType ilTypeInst ty ty | CompiledTypeRepr.ILAsmNamed (tref, boxity, ilTypeOpt) -> GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst -and GenNamedTyApp amap m tyenv tcref tinst = GenNamedTyAppAux amap m tyenv PtrTypesNotOK tcref tinst - and GenILTyAppAux amap m tyenv (tref, boxity, ilTypeOpt) tinst = match ilTypeOpt with | None -> - let ilTypeInst = GenTypeArgs amap m tyenv tinst + let ilTypeInst = GenTypeArgsAux amap m tyenv tinst mkILTy boxity (mkILTySpec (tref,ilTypeInst)) | Some ilType -> ilType // monomorphic types include a cached ilType to avoid reallocation of an ILType node @@ -409,7 +407,7 @@ and GenNamedTyAppAux (amap:ImportMap) m tyenv ptrsOK tcref tinst = GenTypeAux amap m tyenv VoidNotOK ptrsOK (info.BaseTypeForErased (m,g.obj_ty)) | _ -> #endif - GenTyApp amap m tyenv (GenTyconRef tcref) tinst + GenTyAppAux amap m tyenv (GenTyconRef tcref) tinst and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = let g = amap.g @@ -490,21 +488,29 @@ and ComputeUnionHasHelpers g (tcref : TyconRef) = and GenUnionSpec amap m tyenv tcref tyargs = let curef = GenUnionRef amap m tcref - let tinst = GenTypeArgs amap m tyenv tyargs + let tinst = GenTypeArgsAux amap m tyenv tyargs IlxUnionSpec(curef,tinst) and GenUnionCaseSpec amap m tyenv (ucref:UnionCaseRef) tyargs = let cuspec = GenUnionSpec amap m tyenv ucref.TyconRef tyargs cuspec, ucref.Index +and GenType amap m tyenv ty = + GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK ty + + +and GenTypes amap m tyenv tys = List.map (GenType amap m tyenv) tys + +and GenTyApp amap m tyenv repr tyargs = GenTyAppAux amap m tyenv repr tyargs +and GenNamedTyApp amap m tyenv tcref tinst = GenNamedTyAppAux amap m tyenv PtrTypesNotOK tcref tinst + /// IL void types are only generated for return types and GenReturnType amap m tyenv returnTyOpt = match returnTyOpt with | None -> ILType.Void | Some returnTy -> GenTypeAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) -and GenType amap m tyenv ty = GenTypeAux amap m tyenv VoidNotOK PtrTypesNotOK ty -and GenTypes amap m tyenv tys = List.map (GenType amap m tyenv) tys +and GenTypeArgs amap m tyenv tyargs = GenTypeArgsAux amap m tyenv tyargs and GenParamType amap m tyenv ty = GenTypeAux amap m tyenv VoidNotOK PtrTypesOK ty and GenParamTypes amap m tyenv tys = tys |> List.map (GenParamType amap m tyenv) and GenTypePermitVoidAux amap m tyenv ty = GenTypeAux amap m tyenv VoidOK PtrTypesNotOK ty From 91a969c89c626162ca778d3f689282ae1c70c5a5 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 11:44:38 +0100 Subject: [PATCH 13/48] simplify diff --- src/fsharp/IlxGen.fs | 56 +++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index c890093fa1c..00d763c6978 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -488,7 +488,7 @@ and ComputeUnionHasHelpers g (tcref : TyconRef) = and GenUnionSpec amap m tyenv tcref tyargs = let curef = GenUnionRef amap m tcref - let tinst = GenTypeArgsAux amap m tyenv tyargs + let tinst = GenTypeArgs amap m tyenv tyargs IlxUnionSpec(curef,tinst) and GenUnionCaseSpec amap m tyenv (ucref:UnionCaseRef) tyargs = @@ -500,6 +500,8 @@ and GenType amap m tyenv ty = and GenTypes amap m tyenv tys = List.map (GenType amap m tyenv) tys +and GenTypePermitVoid amap m tyenv ty = (GenTypeAux amap m tyenv VoidOK PtrTypesNotOK ty) +and GenTypesPermitVoid amap m tyenv tys = List.map (GenTypePermitVoid amap m tyenv) tys and GenTyApp amap m tyenv repr tyargs = GenTyAppAux amap m tyenv repr tyargs and GenNamedTyApp amap m tyenv tcref tinst = GenNamedTyAppAux amap m tyenv PtrTypesNotOK tcref tinst @@ -510,9 +512,13 @@ and GenReturnType amap m tyenv returnTyOpt = | None -> ILType.Void | Some returnTy -> GenTypeAux amap m tyenv VoidNotOK(*1*) PtrTypesOK returnTy (*1: generate void from unit, but not accept void *) +and GenParamType amap m tyenv ty = + ty |> GenTypeAux amap m tyenv VoidNotOK PtrTypesOK + +and GenParamTypes amap m tyenv tys = + tys |> List.map (GenTypeAux amap m tyenv VoidNotOK PtrTypesOK) + and GenTypeArgs amap m tyenv tyargs = GenTypeArgsAux amap m tyenv tyargs -and GenParamType amap m tyenv ty = GenTypeAux amap m tyenv VoidNotOK PtrTypesOK ty -and GenParamTypes amap m tyenv tys = tys |> List.map (GenParamType amap m tyenv) and GenTypePermitVoidAux amap m tyenv ty = GenTypeAux amap m tyenv VoidOK PtrTypesNotOK ty // Static fields generally go in a private InitializationCodeAndBackingFields section. This is to ensure all static @@ -544,6 +550,8 @@ let GenRecdFieldRef m cenv tyenv (rfref:RecdFieldRef) tyargs = ComputeFieldName rfref.Tycon rfref.RecdField, GenType cenv.amap m tyenvinner rfref.RecdField.FormalType) +let GenExnType amap m tyenv (ecref:TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] + //-------------------------------------------------------------------------- // Closure summaries //-------------------------------------------------------------------------- @@ -1389,10 +1397,6 @@ type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf member mgbuf.cenv = cenv member mgbuf.GetExplicitEntryPointInfo() = explicitEntryPointInfo -let GenTypePermitVoid cenv m tyenv ty = GenTypeAux cenv.amap m tyenv VoidOK PtrTypesNotOK ty -let GenTypesPermitVoid cenv m tyenv tys = List.map (GenTypePermitVoid cenv m tyenv) tys -let GenExnType amap m tyenv (ecref:TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] - /// Record the types of the things on the evaluation stack. /// Used for the few times we have to flush the IL evaluation stack and to compute maxStack. @@ -3244,8 +3248,8 @@ and GenSequential cenv cgbuf eenv spIn (e1,e2,specialSeqFlag,spSeq,_m) sequel = //-------------------------------------------------------------------------- and GenAsmCode cenv cgbuf eenv (il,tyargs,args,returnTys,m) sequel = - let ilTyArgs = GenTypesPermitVoid cenv m eenv.tyenv tyargs - let ilReturnTys = GenTypesPermitVoid cenv m eenv.tyenv returnTys + let ilTyArgs = GenTypesPermitVoid cenv.amap m eenv.tyenv tyargs + let ilReturnTys = GenTypesPermitVoid cenv.amap m eenv.tyenv returnTys let ilAfterInst = il |> List.filter (function AI_nop -> false | _ -> true) |> List.map (fun i -> @@ -5773,8 +5777,7 @@ and EmitRestoreStack cgbuf (savedStack,savedStackLocals) = //GenAttr: custom attribute generation //------------------------------------------------------------------------- -and GenAttribArg cenv eenv x (ilArgTy:ILType) = - let g = cenv.g +and GenAttribArg amap g eenv x (ilArgTy:ILType) = match x,ilArgTy with @@ -5815,31 +5818,31 @@ and GenAttribArg cenv eenv x (ilArgTy:ILType) = // Detect '[| ... |]' nodes | Expr.Op(TOp.Array,[elemTy],args,m),_ -> - let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy - ILAttribElem.Array (ilElemTy, List.map (fun arg -> GenAttribArg cenv eenv arg ilElemTy) args) + let ilElemTy = GenType amap m eenv.tyenv elemTy + ILAttribElem.Array (ilElemTy, List.map (fun arg -> GenAttribArg amap g eenv arg ilElemTy) args) // Detect 'typeof' calls | TypeOfExpr g ty, _ -> - ILAttribElem.Type (Some (GenType cenv.amap x.Range eenv.tyenv ty)) + ILAttribElem.Type (Some (GenType amap x.Range eenv.tyenv ty)) // Detect 'typedefof' calls | TypeDefOfExpr g ty, _ -> - ILAttribElem.TypeRef (Some (GenType cenv.amap x.Range eenv.tyenv ty).TypeRef) + ILAttribElem.TypeRef (Some (GenType amap x.Range eenv.tyenv ty).TypeRef) // Ignore upcasts | Expr.Op(TOp.Coerce,_,[arg2],_),_ -> - GenAttribArg cenv eenv arg2 ilArgTy + GenAttribArg amap g eenv arg2 ilArgTy // Detect explicit enum values | EnumExpr g arg1, _ -> - GenAttribArg cenv eenv arg1 ilArgTy + GenAttribArg amap g eenv arg1 ilArgTy // Detect bitwise or of attribute flags: one case of constant folding (a more general treatment is needed) | AttribBitwiseOrExpr g (arg1,arg2),_ -> - let v1 = GenAttribArg cenv eenv arg1 ilArgTy - let v2 = GenAttribArg cenv eenv arg2 ilArgTy + let v1 = GenAttribArg amap g eenv arg1 ilArgTy + let v2 = GenAttribArg amap g eenv arg2 ilArgTy match v1,v2 with | ILAttribElem.SByte i1, ILAttribElem.SByte i2 -> ILAttribElem.SByte (i1 ||| i2) | ILAttribElem.Int16 i1, ILAttribElem.Int16 i2-> ILAttribElem.Int16 (i1 ||| i2) @@ -5856,25 +5859,24 @@ and GenAttribArg cenv eenv x (ilArgTy:ILType) = error (InternalError ("invalid custom attribute value (not a constant): " + showL (exprL x),x.Range)) -and GenAttr cenv eenv (Attrib(_,k,args,props,_,_,_)) = - let g = cenv.g +and GenAttr (amap: ImportMap) g eenv (Attrib(_,k,args,props,_,_,_)) = let props = props |> List.map (fun (AttribNamedArg(s,ty,fld,AttribExpr(_,expr))) -> let m = expr.Range - let ilTy = GenType cenv.amap m eenv.tyenv ty - let cval = GenAttribArg cenv eenv expr ilTy + let ilTy = GenType amap m eenv.tyenv ty + let cval = GenAttribArg amap g eenv expr ilTy (s,ilTy,fld,cval)) let mspec = match k with | ILAttrib(mref) -> mkILMethSpec(mref,AsObject,[],[]) | FSAttrib(vref) -> assert(vref.IsMember) - let mspec,_,_,_,_ = GetMethodSpecForMemberVal cenv.amap g (Option.get vref.MemberInfo) vref + let mspec,_,_,_,_ = GetMethodSpecForMemberVal amap g (Option.get vref.MemberInfo) vref mspec - let ilArgs = List.map2 (fun (AttribExpr(_,vexpr)) ty -> GenAttribArg cenv eenv vexpr ty) args mspec.FormalArgTypes + let ilArgs = List.map2 (fun (AttribExpr(_,vexpr)) ty -> GenAttribArg amap g eenv vexpr ty) args mspec.FormalArgTypes mkILCustomAttribMethRef g.ilg (mspec,ilArgs, props) -and GenAttrs cenv eenv attrs = List.map (GenAttr cenv eenv) attrs +and GenAttrs cenv eenv attrs = List.map (GenAttr cenv.amap cenv.g eenv) attrs and GenCompilationArgumentCountsAttr cenv (v:Val) = [ match v.ValReprInfo with @@ -5891,7 +5893,7 @@ and CreatePermissionSets cenv eenv (securityAttributes : Attrib list) = let action = match actions with | [AttribInt32Arg act] -> act | _ -> failwith "internal error: unrecognized security action" let secaction = (List.assoc action (Lazy.force ILSecurityActionRevMap)) let tref = tcref.CompiledRepresentationForNamedType - let ilattr = GenAttr cenv eenv attr + let ilattr = GenAttr cenv.amap cenv.g eenv attr let _, ilNamedArgs = match TryDecodeILAttribute cenv.g tref (mkILCustomAttrs [ilattr]) with | Some(ae,na) -> ae, na From 22918570fb6f4cc05a87e71e38336b911d3be79d Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 11:52:58 +0100 Subject: [PATCH 14/48] simplify diff --- src/fsharp/IlxGen.fs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 00d763c6978..c9cd2726d1f 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4851,7 +4851,7 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec,rhsExpr,_)) sta let tps,ctorThisValOpt,baseValOpt,vsl,body',bodyty = IteratedAdjustArityOfLambda cenv.g cenv.amap topValInfo rhsExpr let methodVars = List.concat vsl CommitStartScope cgbuf startScopeMarkOpt - GenMethodForBinding cenv cgbuf.mgbuf eenv (vspec,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body', bodyty) + GenMethodForBinding cenv cgbuf eenv (vspec,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body', bodyty) | StaticProperty (ilGetterMethSpec, optShadowLocal) -> @@ -5256,7 +5256,7 @@ and ComputeMethodImplAttribs cenv (_v:Val) attrs = hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningImplFlag, hasAggressiveInliningImplFlag, attrs and GenMethodForBinding - cenv mgbuf eenv + cenv cgbuf eenv (v:Val,mspec,access,paramInfos,retInfo) (topValInfo,ctorThisValOpt,baseValOpt,tps,methodVars, body, returnTy) = @@ -5320,7 +5320,7 @@ and GenMethodForBinding // This is the main code generation for most methods false, - MethodBody.IL(CodeGenMethodForExpr cenv mgbuf (SPAlways,tailCallInfo, mspec.Name, eenvForMeth, 0, 0, bodyExpr, sequel)), + MethodBody.IL(CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways,tailCallInfo, mspec.Name, eenvForMeth, 0, 0, bodyExpr, sequel)), false // Do not generate DllImport attributes into the code - they are implicit from the P/Invoke @@ -5381,7 +5381,7 @@ and GenMethodForBinding else mdef CountMethodDef() - mgbuf.AddMethodDef(tref,mdef) + cgbuf.mgbuf.AddMethodDef(tref,mdef) match v.MemberInfo with @@ -5418,7 +5418,7 @@ and GenMethodForBinding let mdef = List.fold (fun mdef f -> f mdef) mdef flagFixups // fixup can potentially change name of reflected definition that was already recorded - patch it if necessary - mgbuf.ReplaceNameOfReflectedDefinition(v, mdef.Name) + cgbuf.mgbuf.ReplaceNameOfReflectedDefinition(v, mdef.Name) mdef else mkILGenericNonVirtualMethod (v.CompiledName,access,ilMethTypars,ilParams,ilReturn,ilMethodBody) @@ -5445,7 +5445,7 @@ and GenMethodForBinding // Emit the pseudo-property as an event, but not if its a private method impl if mdef.Access <> ILMemberAccess.Private then let edef = GenEventForProperty cenv eenvForMeth mspec v ilAttrsThatGoOnPrimaryItem m returnTy - mgbuf.AddEventDef(tref,edef) + cgbuf.mgbuf.AddEventDef(tref,edef) // The method def is dropped on the floor here else @@ -5455,7 +5455,7 @@ and GenMethodForBinding let ilPropTy = GenType cenv.amap m eenvUnderMethTypeTypars.tyenv vtyp let ilArgTys = v |> ArgInfosOfPropertyVal cenv.g |> List.map fst |> GenTypes cenv.amap m eenvUnderMethTypeTypars.tyenv let ilPropDef = GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrsThatGoOnPrimaryItem) compiledName - mgbuf.AddOrMergePropertyDef(tref,ilPropDef,m) + cgbuf.mgbuf.AddOrMergePropertyDef(tref,ilPropDef,m) // Add the special name flag for all properties let mdef = { mdef.WithSpecialName with CustomAttrs= mkILCustomAttrs ((GenAttrs cenv eenv attrsAppliedToGetterOrSetter) @ sourceNameAttribs @ ilAttrsCompilerGenerated) } From a0f54ce1d7fdd2f55a6a7a1525f9abb926005b3c Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 11:54:30 +0100 Subject: [PATCH 15/48] simplify diff --- 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 c9cd2726d1f..865b3c2d535 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -5859,7 +5859,7 @@ and GenAttribArg amap g eenv x (ilArgTy:ILType) = error (InternalError ("invalid custom attribute value (not a constant): " + showL (exprL x),x.Range)) -and GenAttr (amap: ImportMap) g eenv (Attrib(_,k,args,props,_,_,_)) = +and GenAttr amap g eenv (Attrib(_,k,args,props,_,_,_)) = let props = props |> List.map (fun (AttribNamedArg(s,ty,fld,AttribExpr(_,expr))) -> let m = expr.Range From 1f5a26bcd757220a80618e1353c867bef0f9379e Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 12:12:12 +0100 Subject: [PATCH 16/48] integrate dev15.8 --- src/fsharp/xlf/FSComp.txt.en.xlf | 5 ++--- src/fsharp/xlf/FSComp.txt.es.xlf | 5 ++--- src/fsharp/xlf/FSComp.txt.fr.xlf | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/fsharp/xlf/FSComp.txt.en.xlf b/src/fsharp/xlf/FSComp.txt.en.xlf index 7104be610f2..c0ce7e314fb 100644 --- a/src/fsharp/xlf/FSComp.txt.en.xlf +++ b/src/fsharp/xlf/FSComp.txt.en.xlf @@ -6982,7 +6982,6 @@ This expression returns a value of type '{0}' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. -<<<<<<< HEAD Unmatched '{{|' Unmatched '{{|' @@ -7016,11 +7015,11 @@ The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record -======= + + The file '{0}' changed on disk unexpectedly, please reload. The file '{0}' changed on disk unexpectedly, please reload. ->>>>>>> c5d58714cc945bc489e860acfbd7056fd05cc622 diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index e247d1155de..99e40f18118 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -6982,7 +6982,6 @@ Esta expresión devuelve un valor de tipo “{0}”, pero se descarta de forma implícita. Considere el uso de “let” para enlazar el resultado a un nombre; por ejemplo, “let result = expression”. Si su intención es utilizar la expresión como un valor en la secuencia, utilice “yield” de forma explícita. -<<<<<<< HEAD Unmatched '{{|' Unmatched '{{|' @@ -7016,11 +7015,11 @@ The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record -======= + + The file '{0}' changed on disk unexpectedly, please reload. El archivo "{0}" cambió en el disco de manera inesperada; cárguelo de nuevo. ->>>>>>> c5d58714cc945bc489e860acfbd7056fd05cc622 diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index e9f64c00051..9d8396cc6db 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -6982,7 +6982,6 @@ Cette expression retourne une valeur de type '{0}', mais est implicitement ignorée. Utilisez 'let' pour lier le résultat à un nom, par ex. 'let result = expression'. Si vous voulez utiliser l'expression comme valeur dans la séquence, utilisez un 'yield!' explicite. -<<<<<<< HEAD Unmatched '{{|' Unmatched '{{|' @@ -7016,11 +7015,11 @@ The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record -======= + + The file '{0}' changed on disk unexpectedly, please reload. Changement inattendu du fichier '{0}' sur le disque. Rechargez le fichier. ->>>>>>> c5d58714cc945bc489e860acfbd7056fd05cc622 From ddb3ca87ec8fe91557db0e7d37342687b3dd8f64 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 4 May 2018 12:29:31 +0100 Subject: [PATCH 17/48] integrate dev15.8 --- .../FSharp.Compiler.Private/FSComp.resx | 1 + src/fsharp/IlxGen.fs | 30 +++++++++---------- src/fsharp/IlxGen.fsi | 2 +- src/fsharp/symbols/Symbols.fs | 2 +- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index 45f72cf0bfc..2c7b2115d04 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -4323,6 +4323,7 @@ The file '{0}' changed on disk unexpectedly, please reload. + Invalid anonymous record expression diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index ce1c424b9d3..04bf2352b49 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -1187,10 +1187,11 @@ type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf { Name = sprintf "<%s>j__TPar" nm Constraints = [] Variance=NonVariant - CustomAttrs = emptyILCustomAttrs + CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs HasReferenceTypeConstraint=false HasNotNullableValueTypeConstraint=false - HasDefaultConstructorConstraint= false } ] + HasDefaultConstructorConstraint= false + MetadataIndex = NoMetadataIdx } ] let ilTy = mkILFormalNamedTy (if isStruct then ILBoxity.AsValue else ILBoxity.AsObject) ilTypeRef ilGenericParams @@ -1199,21 +1200,21 @@ type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf mkILFields [ for (_, fldName, fldTy) in flds -> let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) - { fdef with CustomAttrs = mkILCustomAttrs [ cenv.g.DebuggerBrowsableNeverAttribute ] } ] + fdef.With(customAttrs = mkILCustomAttrs [ cenv.g.DebuggerBrowsableNeverAttribute ]) ] // Generate property definitions for the fields compiled as properties let ilProperties = mkILProperties [ for (i,(propName, _fldName, fldTy)) in List.indexed flds -> - { Name = propName - Attributes = PropertyAttributes.None - SetMethod = None - GetMethod = Some(mkILMethRef(ilTypeRef,ILCallingConv.Instance,"get_" + propName,0,[],fldTy )) - CallingConv = ILCallingConv.Instance.ThisConv - Type = fldTy - Init = None - Args = [] - CustomAttrs = mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i ] } ] + ILPropertyDef(name=propName, + attributes=PropertyAttributes.None, + setMethod=None, + getMethod=Some(mkILMethRef(ilTypeRef,ILCallingConv.Instance,"get_" + propName,0,[],fldTy )), + callingConv=ILCallingConv.Instance.ThisConv, + propertyType=fldTy, + init= None, + args=[], + customAttrs=mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum cenv.g (int SourceConstructFlags.Field) i ]) ] let ilMethods = [ for (propName, fldName, fldTy) in flds -> @@ -1281,11 +1282,8 @@ type AssemblyBuilder(cenv:cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf ilProperties, mkILEvents [], ilTypeDefAttribs, ILTypeInit.BeforeField) - let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) - let ilTypeDef = { ilTypeDef with MethodImpls=mkILMethodImpls [] } - mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) let extraBindings = @@ -7048,7 +7046,7 @@ type IlxGenResults = ilAssemAttrs : ILAttribute list ilNetModuleAttrs: ILAttribute list topAssemblyAttrs : Attribs - permissionSets : ILPermission list + permissionSets : ILSecurityDecl list quotationResourceInfo: (ILTypeRef list * byte[]) list } diff --git a/src/fsharp/IlxGen.fsi b/src/fsharp/IlxGen.fsi index b0333585751..6d50da1bfd3 100644 --- a/src/fsharp/IlxGen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -65,7 +65,7 @@ type public IlxGenResults = /// The attributes for the assembly in F# form topAssemblyAttrs : Attribs /// The security attributes to attach to the assembly - permissionSets : ILPermission list + permissionSets : ILSecurityDecl list /// The generated IL/ILX resources associated with F# quotations quotationResourceInfo : (ILTypeRef list * byte[]) list } diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index f202280c400..cd7ee0dfbfa 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -831,7 +831,7 @@ and FSharpFieldData = | Union (v, _) -> Some v.TyconRef | ILField f -> Some f.DeclaringTyconRef -and FSharpAnonRecordTypeDetails(cenv: cenv, anonInfo: AnonRecdTypeInfo) = +and FSharpAnonRecordTypeDetails(cenv: SymbolEnv, anonInfo: AnonRecdTypeInfo) = member __.Assembly = FSharpAssembly (cenv, anonInfo.Assembly) /// Names of any enclosing types of the compiled form of the anonymous type (if the anonymous type was defined as a nested type) From f05a399437aac5c4d552a75420e323ce30558c10 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 1 Jun 2018 19:03:50 +0100 Subject: [PATCH 18/48] integrate dev15.8 --- src/fsharp/IlxGen.fs | 2 +- src/fsharp/TypeChecker.fs | 2 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.de.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.en.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.es.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.fr.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.it.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.ja.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.ko.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.pl.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.ru.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.tr.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 35 +++++++++++++++++++++++++++ src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 35 +++++++++++++++++++++++++++ 16 files changed, 492 insertions(+), 2 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index e9ff12f4995..21919af855c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -7114,7 +7114,7 @@ let GenerateCode (cenv, anonTypeTable, eenv, TypedAssemblyAfterOptimization file let ilNetModuleAttrs = GenAttrs cenv eenv moduleAttribs let casApplied = new Dictionary() - let securityAttrs, topAssemblyAttrs = assemAttribs |> List.partition (fun a -> TypeChecker.IsSecurityAttribute cenv.g cenv.amap casApplied a rangeStartup) + let securityAttrs, topAssemblyAttrs = assemAttribs |> List.partition (fun a -> IsSecurityAttribute cenv.g cenv.amap casApplied a rangeStartup) // remove any security attributes from the top-level assembly attribute list let permissionSets = CreatePermissionSets cenv eenv securityAttrs diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 1a89e9df94a..b611f96764e 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -9264,7 +9264,7 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela | _ -> // Instance F# Anonymous Record let objExpr' = mkAnonRecdFieldGet cenv.g (anonInfo,objExpr,tinst,n,mExprAndItem) - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env false objExpr') fieldTy ExprAtomicFlag.Atomic delayed | Item.ILField finfo -> // Get or set instance IL field diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index dbf10a3bfbe..257dd5f5915 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -6992,6 +6992,41 @@ Soubor {0} se na disku neočekávaně změnil, opakujte prosím načtení. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 2b2f389f8c0..4109cd68690 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -6992,6 +6992,41 @@ Die Datei "{0}" wurde auf dem Datenträger unerwartet geändert. Laden Sie sie erneut. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.en.xlf b/src/fsharp/xlf/FSComp.txt.en.xlf index a6d5886d83e..6771f09a02c 100644 --- a/src/fsharp/xlf/FSComp.txt.en.xlf +++ b/src/fsharp/xlf/FSComp.txt.en.xlf @@ -6992,6 +6992,41 @@ The file '{0}' changed on disk unexpectedly, please reload. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 8b9e9460757..3853cbc815e 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -6992,6 +6992,41 @@ El archivo "{0}" cambió en el disco de manera inesperada; cárguelo de nuevo. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 02c238295c2..41f7f38ed36 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -6992,6 +6992,41 @@ Changement inattendu du fichier '{0}' sur le disque. Rechargez le fichier. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 5234a47fed1..4048e90c2b0 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -6992,6 +6992,41 @@ Il file '{0}' è stato modificato su disco in modo imprevisto. Ricaricare. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index f2897a4d7b7..c37f1342174 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -6992,6 +6992,41 @@ ファイル '{0}' がディスク上で予期せず変更されました。再度読み込んでください。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index d13f1ff6080..af5289589e9 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -6992,6 +6992,41 @@ '{0}' 파일이 디스크에서 예기치 않게 변경되었습니다. 다시 로드하세요. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 78155117999..4d5d5def87e 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -6992,6 +6992,41 @@ Plik „{0}” nieoczekiwanie uległ zmianie na dysku. Załaduj go ponownie. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 6098e8f2323..654a8aade8d 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -6992,6 +6992,41 @@ O arquivo '{0}' foi alterado no disco inesperadamente. Recarregue-o. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 5ea6fd8115f..5ab24a0abac 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -6992,6 +6992,41 @@ Файл "{0}" был неожиданно изменен на диске, повторите загрузку. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index e83e67cdaee..5a87859f3ab 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -6992,6 +6992,41 @@ Diskte '{0}' dosyası beklenmedik şekilde değiştirildi. Lütfen yeniden yükleyin. + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 51c322df89e..87d6fb2f11e 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -6992,6 +6992,41 @@ 文件“{0}”在磁盘上意外更改,请重新加载。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index a3db27ef514..6463fe001b1 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -6992,6 +6992,41 @@ 檔案 '{0}' 在磁碟上意外變更,請重新載入。 + + Unmatched '{{|' + Unmatched '{{|' + + + + anonymous record field + anonymous record field + + + + Two anonymous record types are from different assemblies '{0}' and '{1}' + Two anonymous record types are from different assemblies '{0}' and '{1}' + + + + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + Two anonymous record types have mismatched sets of field names '{0}' and '{1}' + + + + Invalid anonymous record expression + Invalid anonymous record expression + + + + Invalid anonymous record type + Invalid anonymous record type + + + + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + \ No newline at end of file From 579f31b4685fa3b71cb4c34dacaaa9aed1bae6a8 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 1 Jun 2018 19:10:39 +0100 Subject: [PATCH 19/48] update FSComp --- .../FSharp.Compiler.Private/FSComp.fs | 2809 +++++++++-------- .../FSharp.Compiler.Private/FSComp.resx | 2 +- 2 files changed, 1407 insertions(+), 1404 deletions(-) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs index 0095154b289..d0b3bf9e4e1 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs @@ -1,4 +1,4 @@ -// This is a generated file; the original input is '../FSComp.txt' +// This is a generated file; the original input is '..\FSComp.txt' namespace FSComp open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators @@ -116,3940 +116,3943 @@ type internal SR private() = // END BOILERPLATE /// The namespace '%s' is not defined. - /// (Originally from ../FSComp.txt:4) + /// (Originally from ..\FSComp.txt:4) static member undefinedNameNamespace(a0 : System.String) = (GetStringFunc("undefinedNameNamespace",",,,%s,,,") a0) /// The namespace or module '%s' is not defined. - /// (Originally from ../FSComp.txt:5) + /// (Originally from ..\FSComp.txt:5) static member undefinedNameNamespaceOrModule(a0 : System.String) = (GetStringFunc("undefinedNameNamespaceOrModule",",,,%s,,,") a0) /// The field, constructor or member '%s' is not defined. - /// (Originally from ../FSComp.txt:6) + /// (Originally from ..\FSComp.txt:6) static member undefinedNameFieldConstructorOrMember(a0 : System.String) = (GetStringFunc("undefinedNameFieldConstructorOrMember",",,,%s,,,") a0) /// The value, constructor, namespace or type '%s' is not defined. - /// (Originally from ../FSComp.txt:7) + /// (Originally from ..\FSComp.txt:7) static member undefinedNameValueConstructorNamespaceOrType(a0 : System.String) = (GetStringFunc("undefinedNameValueConstructorNamespaceOrType",",,,%s,,,") a0) /// The value or constructor '%s' is not defined. - /// (Originally from ../FSComp.txt:8) + /// (Originally from ..\FSComp.txt:8) static member undefinedNameValueOfConstructor(a0 : System.String) = (GetStringFunc("undefinedNameValueOfConstructor",",,,%s,,,") a0) /// The value, namespace, type or module '%s' is not defined. - /// (Originally from ../FSComp.txt:9) + /// (Originally from ..\FSComp.txt:9) static member undefinedNameValueNamespaceTypeOrModule(a0 : System.String) = (GetStringFunc("undefinedNameValueNamespaceTypeOrModule",",,,%s,,,") a0) /// The constructor, module or namespace '%s' is not defined. - /// (Originally from ../FSComp.txt:10) + /// (Originally from ..\FSComp.txt:10) static member undefinedNameConstructorModuleOrNamespace(a0 : System.String) = (GetStringFunc("undefinedNameConstructorModuleOrNamespace",",,,%s,,,") a0) /// The type '%s' is not defined. - /// (Originally from ../FSComp.txt:11) + /// (Originally from ..\FSComp.txt:11) static member undefinedNameType(a0 : System.String) = (GetStringFunc("undefinedNameType",",,,%s,,,") a0) /// The type '%s' is not defined in '%s'. - /// (Originally from ../FSComp.txt:12) + /// (Originally from ..\FSComp.txt:12) static member undefinedNameTypeIn(a0 : System.String, a1 : System.String) = (GetStringFunc("undefinedNameTypeIn",",,,%s,,,%s,,,") a0 a1) /// The record label or namespace '%s' is not defined. - /// (Originally from ../FSComp.txt:13) + /// (Originally from ..\FSComp.txt:13) static member undefinedNameRecordLabelOrNamespace(a0 : System.String) = (GetStringFunc("undefinedNameRecordLabelOrNamespace",",,,%s,,,") a0) /// The record label '%s' is not defined. - /// (Originally from ../FSComp.txt:14) + /// (Originally from ..\FSComp.txt:14) static member undefinedNameRecordLabel(a0 : System.String) = (GetStringFunc("undefinedNameRecordLabel",",,,%s,,,") a0) /// Maybe you want one of the following: - /// (Originally from ../FSComp.txt:15) + /// (Originally from ..\FSComp.txt:15) static member undefinedNameSuggestionsIntro() = (GetStringFunc("undefinedNameSuggestionsIntro",",,,") ) /// The type parameter %s is not defined. - /// (Originally from ../FSComp.txt:16) + /// (Originally from ..\FSComp.txt:16) static member undefinedNameTypeParameter(a0 : System.String) = (GetStringFunc("undefinedNameTypeParameter",",,,%s,,,") a0) /// The pattern discriminator '%s' is not defined. - /// (Originally from ../FSComp.txt:17) + /// (Originally from ..\FSComp.txt:17) static member undefinedNamePatternDiscriminator(a0 : System.String) = (GetStringFunc("undefinedNamePatternDiscriminator",",,,%s,,,") a0) /// Replace with '%s' - /// (Originally from ../FSComp.txt:18) + /// (Originally from ..\FSComp.txt:18) static member replaceWithSuggestion(a0 : System.String) = (GetStringFunc("replaceWithSuggestion",",,,%s,,,") a0) /// Add . for indexer access. - /// (Originally from ../FSComp.txt:19) + /// (Originally from ..\FSComp.txt:19) static member addIndexerDot() = (GetStringFunc("addIndexerDot",",,,") ) /// All elements of a list constructor expression must have the same type. This expression was expected to have type '%s', but here has type '%s'. - /// (Originally from ../FSComp.txt:20) + /// (Originally from ..\FSComp.txt:20) static member listElementHasWrongType(a0 : System.String, a1 : System.String) = (GetStringFunc("listElementHasWrongType",",,,%s,,,%s,,,") a0 a1) /// All elements of an array constructor expression must have the same type. This expression was expected to have type '%s', but here has type '%s'. - /// (Originally from ../FSComp.txt:21) + /// (Originally from ..\FSComp.txt:21) static member arrayElementHasWrongType(a0 : System.String, a1 : System.String) = (GetStringFunc("arrayElementHasWrongType",",,,%s,,,%s,,,") a0 a1) /// The 'if' expression is missing an 'else' branch. The 'then' branch has type '%s'. Because 'if' is an expression, and not a statement, add an 'else' branch which returns a value of the same type. - /// (Originally from ../FSComp.txt:22) + /// (Originally from ..\FSComp.txt:22) static member missingElseBranch(a0 : System.String) = (GetStringFunc("missingElseBranch",",,,%s,,,") a0) /// The 'if' expression needs to have type '%s' to satisfy context type requirements. It currently has type '%s'. - /// (Originally from ../FSComp.txt:23) + /// (Originally from ..\FSComp.txt:23) static member ifExpression(a0 : System.String, a1 : System.String) = (GetStringFunc("ifExpression",",,,%s,,,%s,,,") a0 a1) /// All branches of an 'if' expression must have the same type. This expression was expected to have type '%s', but here has type '%s'. - /// (Originally from ../FSComp.txt:24) + /// (Originally from ..\FSComp.txt:24) static member elseBranchHasWrongType(a0 : System.String, a1 : System.String) = (GetStringFunc("elseBranchHasWrongType",",,,%s,,,%s,,,") a0 a1) /// All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '%s', but this branch returned a value of type '%s'. - /// (Originally from ../FSComp.txt:25) + /// (Originally from ..\FSComp.txt:25) static member followingPatternMatchClauseHasWrongType(a0 : System.String, a1 : System.String) = (GetStringFunc("followingPatternMatchClauseHasWrongType",",,,%s,,,%s,,,") a0 a1) /// A pattern match guard must be of type 'bool', but this 'when' expression is of type '%s'. - /// (Originally from ../FSComp.txt:26) + /// (Originally from ..\FSComp.txt:26) static member patternMatchGuardIsNotBool(a0 : System.String) = (GetStringFunc("patternMatchGuardIsNotBool",",,,%s,,,") a0) /// A ';' is used to separate field values in records. Consider replacing ',' with ';'. - /// (Originally from ../FSComp.txt:27) + /// (Originally from ..\FSComp.txt:27) static member commaInsteadOfSemicolonInRecord() = (GetStringFunc("commaInsteadOfSemicolonInRecord",",,,") ) /// The '!' operator is used to dereference a ref cell. Consider using 'not expr' here. - /// (Originally from ../FSComp.txt:28) + /// (Originally from ..\FSComp.txt:28) static member derefInsteadOfNot() = (GetStringFunc("derefInsteadOfNot",",,,") ) /// The non-generic type '%s' does not expect any type arguments, but here is given %d type argument(s) - /// (Originally from ../FSComp.txt:29) + /// (Originally from ..\FSComp.txt:29) static member buildUnexpectedTypeArgs(a0 : System.String, a1 : System.Int32) = (GetStringFunc("buildUnexpectedTypeArgs",",,,%s,,,%d,,,") a0 a1) /// Consider using 'return!' instead of 'return'. - /// (Originally from ../FSComp.txt:30) + /// (Originally from ..\FSComp.txt:30) static member returnUsedInsteadOfReturnBang() = (GetStringFunc("returnUsedInsteadOfReturnBang",",,,") ) /// Consider using 'yield!' instead of 'yield'. - /// (Originally from ../FSComp.txt:31) + /// (Originally from ..\FSComp.txt:31) static member yieldUsedInsteadOfYieldBang() = (GetStringFunc("yieldUsedInsteadOfYieldBang",",,,") ) /// \nA tuple type is required for one or more arguments. Consider wrapping the given arguments in additional parentheses or review the definition of the interface. - /// (Originally from ../FSComp.txt:32) + /// (Originally from ..\FSComp.txt:32) static member tupleRequiredInAbstractMethod() = (GetStringFunc("tupleRequiredInAbstractMethod",",,,") ) /// Invalid warning number '%s' - /// (Originally from ../FSComp.txt:33) + /// (Originally from ..\FSComp.txt:33) static member buildInvalidWarningNumber(a0 : System.String) = (203, GetStringFunc("buildInvalidWarningNumber",",,,%s,,,") a0) /// Invalid version string '%s' - /// (Originally from ../FSComp.txt:34) + /// (Originally from ..\FSComp.txt:34) static member buildInvalidVersionString(a0 : System.String) = (204, GetStringFunc("buildInvalidVersionString",",,,%s,,,") a0) /// Invalid version file '%s' - /// (Originally from ../FSComp.txt:35) + /// (Originally from ..\FSComp.txt:35) static member buildInvalidVersionFile(a0 : System.String) = (205, GetStringFunc("buildInvalidVersionFile",",,,%s,,,") a0) /// Microsoft (R) F# Compiler version %s - /// (Originally from ../FSComp.txt:36) + /// (Originally from ..\FSComp.txt:36) static member buildProductName(a0 : System.String) = (GetStringFunc("buildProductName",",,,%s,,,") a0) /// F# Compiler for F# %s - /// (Originally from ../FSComp.txt:37) + /// (Originally from ..\FSComp.txt:37) static member buildProductNameCommunity(a0 : System.String) = (GetStringFunc("buildProductNameCommunity",",,,%s,,,") a0) /// Problem with filename '%s': %s - /// (Originally from ../FSComp.txt:38) + /// (Originally from ..\FSComp.txt:38) static member buildProblemWithFilename(a0 : System.String, a1 : System.String) = (206, GetStringFunc("buildProblemWithFilename",",,,%s,,,%s,,,") a0 a1) /// No inputs specified - /// (Originally from ../FSComp.txt:39) + /// (Originally from ..\FSComp.txt:39) static member buildNoInputsSpecified() = (207, GetStringFunc("buildNoInputsSpecified",",,,") ) /// The '--pdb' option requires the '--debug' option to be used - /// (Originally from ../FSComp.txt:40) + /// (Originally from ..\FSComp.txt:40) static member buildPdbRequiresDebug() = (209, GetStringFunc("buildPdbRequiresDebug",",,,") ) /// The search directory '%s' is invalid - /// (Originally from ../FSComp.txt:41) + /// (Originally from ..\FSComp.txt:41) static member buildInvalidSearchDirectory(a0 : System.String) = (210, GetStringFunc("buildInvalidSearchDirectory",",,,%s,,,") a0) /// The search directory '%s' could not be found - /// (Originally from ../FSComp.txt:42) + /// (Originally from ..\FSComp.txt:42) static member buildSearchDirectoryNotFound(a0 : System.String) = (211, GetStringFunc("buildSearchDirectoryNotFound",",,,%s,,,") a0) /// '%s' is not a valid filename - /// (Originally from ../FSComp.txt:43) + /// (Originally from ..\FSComp.txt:43) static member buildInvalidFilename(a0 : System.String) = (212, GetStringFunc("buildInvalidFilename",",,,%s,,,") a0) /// '%s' is not a valid assembly name - /// (Originally from ../FSComp.txt:44) + /// (Originally from ..\FSComp.txt:44) static member buildInvalidAssemblyName(a0 : System.String) = (213, GetStringFunc("buildInvalidAssemblyName",",,,%s,,,") a0) /// Unrecognized privacy setting '%s' for managed resource, valid options are 'public' and 'private' - /// (Originally from ../FSComp.txt:45) + /// (Originally from ..\FSComp.txt:45) static member buildInvalidPrivacy(a0 : System.String) = (214, GetStringFunc("buildInvalidPrivacy",",,,%s,,,") a0) /// Multiple references to '%s.dll' are not permitted - /// (Originally from ../FSComp.txt:46) + /// (Originally from ..\FSComp.txt:46) static member buildMultipleReferencesNotAllowed(a0 : System.String) = (215, GetStringFunc("buildMultipleReferencesNotAllowed",",,,%s,,,") a0) /// Could not read version from mscorlib.dll - /// (Originally from ../FSComp.txt:47) + /// (Originally from ..\FSComp.txt:47) static member buildCouldNotReadVersionInfoFromMscorlib() = (GetStringFunc("buildCouldNotReadVersionInfoFromMscorlib",",,,") ) /// Unable to read assembly '%s' - /// (Originally from ../FSComp.txt:48) + /// (Originally from ..\FSComp.txt:48) static member buildCannotReadAssembly(a0 : System.String) = (218, GetStringFunc("buildCannotReadAssembly",",,,%s,,,") a0) /// Assembly resolution failure at or near this location - /// (Originally from ../FSComp.txt:49) + /// (Originally from ..\FSComp.txt:49) static member buildAssemblyResolutionFailed() = (220, GetStringFunc("buildAssemblyResolutionFailed",",,,") ) /// 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. - /// (Originally from ../FSComp.txt:50) + /// (Originally from ..\FSComp.txt:50) static member buildImplicitModuleIsNotLegalIdentifier(a0 : System.String, a1 : System.String) = (221, GetStringFunc("buildImplicitModuleIsNotLegalIdentifier",",,,%s,,,%s,,,") a0 a1) /// Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration. - /// (Originally from ../FSComp.txt:51) + /// (Originally from ..\FSComp.txt:51) static member buildMultiFileRequiresNamespaceOrModule() = (222, GetStringFunc("buildMultiFileRequiresNamespaceOrModule",",,,") ) /// Files in libraries or multiple-file applications must begin with a namespace or module declaration. When using a module declaration at the start of a file the '=' sign is not allowed. If this is a top-level module, consider removing the = to resolve this error. - /// (Originally from ../FSComp.txt:52) + /// (Originally from ..\FSComp.txt:52) static member noEqualSignAfterModule() = (222, GetStringFunc("noEqualSignAfterModule",",,,") ) /// This file contains multiple declarations of the form 'module SomeNamespace.SomeModule'. Only one declaration of this form is permitted in a file. Change your file to use an initial namespace declaration and/or use 'module ModuleName = ...' to define your modules. - /// (Originally from ../FSComp.txt:53) + /// (Originally from ..\FSComp.txt:53) static member buildMultipleToplevelModules() = (223, GetStringFunc("buildMultipleToplevelModules",",,,") ) /// Option requires parameter: %s - /// (Originally from ../FSComp.txt:54) + /// (Originally from ..\FSComp.txt:54) static member buildOptionRequiresParameter(a0 : System.String) = (224, GetStringFunc("buildOptionRequiresParameter",",,,%s,,,") a0) /// Source file '%s' could not be found - /// (Originally from ../FSComp.txt:55) + /// (Originally from ..\FSComp.txt:55) static member buildCouldNotFindSourceFile(a0 : System.String) = (225, GetStringFunc("buildCouldNotFindSourceFile",",,,%s,,,") a0) /// The file extension of '%s' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli. - /// (Originally from ../FSComp.txt:56) + /// (Originally from ..\FSComp.txt:56) static member buildInvalidSourceFileExtension(a0 : System.String) = (226, GetStringFunc("buildInvalidSourceFileExtension",",,,%s,,,") a0) /// Could not resolve assembly '%s' - /// (Originally from ../FSComp.txt:57) + /// (Originally from ..\FSComp.txt:57) static member buildCouldNotResolveAssembly(a0 : System.String) = (227, GetStringFunc("buildCouldNotResolveAssembly",",,,%s,,,") a0) /// Could not resolve assembly '%s' required by '%s' - /// (Originally from ../FSComp.txt:58) + /// (Originally from ..\FSComp.txt:58) static member buildCouldNotResolveAssemblyRequiredByFile(a0 : System.String, a1 : System.String) = (228, GetStringFunc("buildCouldNotResolveAssemblyRequiredByFile",",,,%s,,,%s,,,") a0 a1) /// Error opening binary file '%s': %s - /// (Originally from ../FSComp.txt:59) + /// (Originally from ..\FSComp.txt:59) static member buildErrorOpeningBinaryFile(a0 : System.String, a1 : System.String) = (229, GetStringFunc("buildErrorOpeningBinaryFile",",,,%s,,,%s,,,") a0 a1) /// The F#-compiled DLL '%s' needs to be recompiled to be used with this version of F# - /// (Originally from ../FSComp.txt:60) + /// (Originally from ..\FSComp.txt:60) static member buildDifferentVersionMustRecompile(a0 : System.String) = (231, GetStringFunc("buildDifferentVersionMustRecompile",",,,%s,,,") a0) /// Invalid directive. Expected '#I \"\"'. - /// (Originally from ../FSComp.txt:61) + /// (Originally from ..\FSComp.txt:61) static member buildInvalidHashIDirective() = (232, GetStringFunc("buildInvalidHashIDirective",",,,") ) /// Invalid directive. Expected '#r \"\"'. - /// (Originally from ../FSComp.txt:62) + /// (Originally from ..\FSComp.txt:62) static member buildInvalidHashrDirective() = (233, GetStringFunc("buildInvalidHashrDirective",",,,") ) /// Invalid directive. Expected '#load \"\" ... \"\"'. - /// (Originally from ../FSComp.txt:63) + /// (Originally from ..\FSComp.txt:63) static member buildInvalidHashloadDirective() = (234, GetStringFunc("buildInvalidHashloadDirective",",,,") ) /// Invalid directive. Expected '#time', '#time \"on\"' or '#time \"off\"'. - /// (Originally from ../FSComp.txt:64) + /// (Originally from ..\FSComp.txt:64) static member buildInvalidHashtimeDirective() = (235, GetStringFunc("buildInvalidHashtimeDirective",",,,") ) /// Directives inside modules are ignored - /// (Originally from ../FSComp.txt:65) + /// (Originally from ..\FSComp.txt:65) static member buildDirectivesInModulesAreIgnored() = (236, GetStringFunc("buildDirectivesInModulesAreIgnored",",,,") ) /// A signature for the file or module '%s' has already been specified - /// (Originally from ../FSComp.txt:66) + /// (Originally from ..\FSComp.txt:66) static member buildSignatureAlreadySpecified(a0 : System.String) = (237, GetStringFunc("buildSignatureAlreadySpecified",",,,%s,,,") a0) /// An implementation of file or module '%s' has already been given. Compilation order is significant in F# because of type inference. You may need to adjust the order of your files to place the signature file before the implementation. In Visual Studio files are type-checked in the order they appear in the project file, which can be edited manually or adjusted using the solution explorer. - /// (Originally from ../FSComp.txt:67) + /// (Originally from ..\FSComp.txt:67) static member buildImplementationAlreadyGivenDetail(a0 : System.String) = (238, GetStringFunc("buildImplementationAlreadyGivenDetail",",,,%s,,,") a0) /// An implementation of the file or module '%s' has already been given - /// (Originally from ../FSComp.txt:68) + /// (Originally from ..\FSComp.txt:68) static member buildImplementationAlreadyGiven(a0 : System.String) = (239, GetStringFunc("buildImplementationAlreadyGiven",",,,%s,,,") a0) /// The signature file '%s' does not have a corresponding implementation file. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match. - /// (Originally from ../FSComp.txt:69) + /// (Originally from ..\FSComp.txt:69) static member buildSignatureWithoutImplementation(a0 : System.String) = (240, GetStringFunc("buildSignatureWithoutImplementation",",,,%s,,,") a0) /// '%s' is not a valid integer argument - /// (Originally from ../FSComp.txt:70) + /// (Originally from ..\FSComp.txt:70) static member buildArgInvalidInt(a0 : System.String) = (241, GetStringFunc("buildArgInvalidInt",",,,%s,,,") a0) /// '%s' is not a valid floating point argument - /// (Originally from ../FSComp.txt:71) + /// (Originally from ..\FSComp.txt:71) static member buildArgInvalidFloat(a0 : System.String) = (242, GetStringFunc("buildArgInvalidFloat",",,,%s,,,") a0) /// Unrecognized option: '%s' - /// (Originally from ../FSComp.txt:72) + /// (Originally from ..\FSComp.txt:72) static member buildUnrecognizedOption(a0 : System.String) = (243, GetStringFunc("buildUnrecognizedOption",",,,%s,,,") a0) /// Invalid module or namespace name - /// (Originally from ../FSComp.txt:73) + /// (Originally from ..\FSComp.txt:73) static member buildInvalidModuleOrNamespaceName() = (244, GetStringFunc("buildInvalidModuleOrNamespaceName",",,,") ) /// Error reading/writing metadata for the F# compiled DLL '%s'. Was the DLL compiled with an earlier version of the F# compiler? (error: '%s'). - /// (Originally from ../FSComp.txt:74) + /// (Originally from ..\FSComp.txt:74) static member pickleErrorReadingWritingMetadata(a0 : System.String, a1 : System.String) = (GetStringFunc("pickleErrorReadingWritingMetadata",",,,%s,,,%s,,,") a0 a1) /// The type/module '%s' is not a concrete module or type - /// (Originally from ../FSComp.txt:75) + /// (Originally from ..\FSComp.txt:75) static member tastTypeOrModuleNotConcrete(a0 : System.String) = (245, GetStringFunc("tastTypeOrModuleNotConcrete",",,,%s,,,") a0) /// The type '%s' has an inline assembly code representation - /// (Originally from ../FSComp.txt:76) + /// (Originally from ..\FSComp.txt:76) static member tastTypeHasAssemblyCodeRepresentation(a0 : System.String) = (GetStringFunc("tastTypeHasAssemblyCodeRepresentation",",,,%s,,,") a0) /// A namespace and a module named '%s' both occur in two parts of this assembly - /// (Originally from ../FSComp.txt:77) + /// (Originally from ..\FSComp.txt:77) static member tastNamespaceAndModuleWithSameNameInAssembly(a0 : System.String) = (247, GetStringFunc("tastNamespaceAndModuleWithSameNameInAssembly",",,,%s,,,") a0) /// Two modules named '%s' occur in two parts of this assembly - /// (Originally from ../FSComp.txt:78) + /// (Originally from ..\FSComp.txt:78) static member tastTwoModulesWithSameNameInAssembly(a0 : System.String) = (248, GetStringFunc("tastTwoModulesWithSameNameInAssembly",",,,%s,,,") a0) /// Two type definitions named '%s' occur in namespace '%s' in two parts of this assembly - /// (Originally from ../FSComp.txt:79) + /// (Originally from ..\FSComp.txt:79) static member tastDuplicateTypeDefinitionInAssembly(a0 : System.String, a1 : System.String) = (249, GetStringFunc("tastDuplicateTypeDefinitionInAssembly",",,,%s,,,%s,,,") a0 a1) /// A module and a type definition named '%s' occur in namespace '%s' in two parts of this assembly - /// (Originally from ../FSComp.txt:80) + /// (Originally from ..\FSComp.txt:80) static member tastConflictingModuleAndTypeDefinitionInAssembly(a0 : System.String, a1 : System.String) = (250, GetStringFunc("tastConflictingModuleAndTypeDefinitionInAssembly",",,,%s,,,%s,,,") a0 a1) /// Invalid member signature encountered because of an earlier error - /// (Originally from ../FSComp.txt:81) + /// (Originally from ..\FSComp.txt:81) static member tastInvalidMemberSignature() = (251, GetStringFunc("tastInvalidMemberSignature",",,,") ) /// This value does not have a valid property setter type - /// (Originally from ../FSComp.txt:82) + /// (Originally from ..\FSComp.txt:82) static member tastValueDoesNotHaveSetterType() = (252, GetStringFunc("tastValueDoesNotHaveSetterType",",,,") ) /// Invalid form for a property getter. At least one '()' argument is required when using the explicit syntax. - /// (Originally from ../FSComp.txt:83) + /// (Originally from ..\FSComp.txt:83) static member tastInvalidFormForPropertyGetter() = (253, GetStringFunc("tastInvalidFormForPropertyGetter",",,,") ) /// Invalid form for a property setter. At least one argument is required. - /// (Originally from ../FSComp.txt:84) + /// (Originally from ..\FSComp.txt:84) static member tastInvalidFormForPropertySetter() = (254, GetStringFunc("tastInvalidFormForPropertySetter",",,,") ) /// Unexpected use of a byref-typed variable - /// (Originally from ../FSComp.txt:85) + /// (Originally from ..\FSComp.txt:85) static member tastUnexpectedByRef() = (255, GetStringFunc("tastUnexpectedByRef",",,,") ) /// A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...' /// (Originally from ..\FSComp.txt:86) static member tastValueMustBeMutable() = (256, GetStringFunc("tastValueMustBeMutable",",,,") ) /// Invalid mutation of a constant expression. Consider copying the expression to a mutable local, e.g. 'let mutable x = ...'. - /// (Originally from ../FSComp.txt:87) + /// (Originally from ..\FSComp.txt:87) static member tastInvalidMutationOfConstant() = (257, GetStringFunc("tastInvalidMutationOfConstant",",,,") ) /// The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed - /// (Originally from ../FSComp.txt:88) + /// (Originally from ..\FSComp.txt:88) static member tastValueHasBeenCopied() = (GetStringFunc("tastValueHasBeenCopied",",,,") ) /// Recursively defined values cannot appear directly as part of the construction of a tuple value within a recursive binding - /// (Originally from ../FSComp.txt:89) + /// (Originally from ..\FSComp.txt:89) static member tastRecursiveValuesMayNotBeInConstructionOfTuple() = (259, GetStringFunc("tastRecursiveValuesMayNotBeInConstructionOfTuple",",,,") ) /// Recursive values cannot appear directly as a construction of the type '%s' within a recursive binding. This feature has been removed from the F# language. Consider using a record instead. - /// (Originally from ../FSComp.txt:90) + /// (Originally from ..\FSComp.txt:90) static member tastRecursiveValuesMayNotAppearInConstructionOfType(a0 : System.String) = (260, GetStringFunc("tastRecursiveValuesMayNotAppearInConstructionOfType",",,,%s,,,") a0) /// Recursive values cannot be directly assigned to the non-mutable field '%s' of the type '%s' within a recursive binding. Consider using a mutable field instead. - /// (Originally from ../FSComp.txt:91) + /// (Originally from ..\FSComp.txt:91) static member tastRecursiveValuesMayNotBeAssignedToNonMutableField(a0 : System.String, a1 : System.String) = (261, GetStringFunc("tastRecursiveValuesMayNotBeAssignedToNonMutableField",",,,%s,,,%s,,,") a0 a1) /// Unexpected decode of AutoOpenAttribute - /// (Originally from ../FSComp.txt:92) + /// (Originally from ..\FSComp.txt:92) static member tastUnexpectedDecodeOfAutoOpenAttribute() = (GetStringFunc("tastUnexpectedDecodeOfAutoOpenAttribute",",,,") ) /// Unexpected decode of InternalsVisibleToAttribute - /// (Originally from ../FSComp.txt:93) + /// (Originally from ..\FSComp.txt:93) static member tastUnexpectedDecodeOfInternalsVisibleToAttribute() = (GetStringFunc("tastUnexpectedDecodeOfInternalsVisibleToAttribute",",,,") ) /// Unexpected decode of InterfaceDataVersionAttribute - /// (Originally from ../FSComp.txt:94) + /// (Originally from ..\FSComp.txt:94) static member tastUnexpectedDecodeOfInterfaceDataVersionAttribute() = (GetStringFunc("tastUnexpectedDecodeOfInterfaceDataVersionAttribute",",,,") ) /// Active patterns cannot return more than 7 possibilities - /// (Originally from ../FSComp.txt:95) + /// (Originally from ..\FSComp.txt:95) static member tastActivePatternsLimitedToSeven() = (265, GetStringFunc("tastActivePatternsLimitedToSeven",",,,") ) /// This is not a valid constant expression or custom attribute value - /// (Originally from ../FSComp.txt:96) + /// (Originally from ..\FSComp.txt:96) static member tastNotAConstantExpression() = (267, GetStringFunc("tastNotAConstantExpression",",,,") ) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe mutability attributes differ - /// (Originally from ../FSComp.txt:97) + /// (Originally from ..\FSComp.txt:97) static member ValueNotContainedMutabilityAttributesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityAttributesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe names differ - /// (Originally from ../FSComp.txt:98) + /// (Originally from ..\FSComp.txt:98) static member ValueNotContainedMutabilityNamesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityNamesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe compiled names differ - /// (Originally from ../FSComp.txt:99) + /// (Originally from ..\FSComp.txt:99) static member ValueNotContainedMutabilityCompiledNamesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityCompiledNamesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe display names differ - /// (Originally from ../FSComp.txt:100) + /// (Originally from ..\FSComp.txt:100) static member ValueNotContainedMutabilityDisplayNamesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityDisplayNamesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe accessibility specified in the signature is more than that specified in the implementation - /// (Originally from ../FSComp.txt:101) + /// (Originally from ..\FSComp.txt:101) static member ValueNotContainedMutabilityAccessibilityMore(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityAccessibilityMore",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe inline flags differ - /// (Originally from ../FSComp.txt:102) + /// (Originally from ..\FSComp.txt:102) static member ValueNotContainedMutabilityInlineFlagsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityInlineFlagsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe literal constant values and/or attributes differ - /// (Originally from ../FSComp.txt:103) + /// (Originally from ..\FSComp.txt:103) static member ValueNotContainedMutabilityLiteralConstantValuesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityLiteralConstantValuesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is a type function and the other is not. The signature requires explicit type parameters if they are present in the implementation. - /// (Originally from ../FSComp.txt:104) + /// (Originally from ..\FSComp.txt:104) static member ValueNotContainedMutabilityOneIsTypeFunction(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityOneIsTypeFunction",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe respective type parameter counts differ - /// (Originally from ../FSComp.txt:105) + /// (Originally from ..\FSComp.txt:105) static member ValueNotContainedMutabilityParameterCountsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityParameterCountsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe types differ - /// (Originally from ../FSComp.txt:106) + /// (Originally from ..\FSComp.txt:106) static member ValueNotContainedMutabilityTypesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityTypesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is an extension member and the other is not - /// (Originally from ../FSComp.txt:107) + /// (Originally from ..\FSComp.txt:107) static member ValueNotContainedMutabilityExtensionsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityExtensionsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nAn arity was not inferred for this value - /// (Originally from ../FSComp.txt:108) + /// (Originally from ..\FSComp.txt:108) static member ValueNotContainedMutabilityArityNotInferred(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityArityNotInferred",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe number of generic parameters in the signature and implementation differ (the signature declares %s but the implementation declares %s - /// (Originally from ../FSComp.txt:109) + /// (Originally from ..\FSComp.txt:109) static member ValueNotContainedMutabilityGenericParametersDiffer(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String, a4 : System.String) = (GetStringFunc("ValueNotContainedMutabilityGenericParametersDiffer",",,,%s,,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3 a4) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe generic parameters in the signature and implementation have different kinds. Perhaps there is a missing [] attribute. - /// (Originally from ../FSComp.txt:110) + /// (Originally from ..\FSComp.txt:110) static member ValueNotContainedMutabilityGenericParametersAreDifferentKinds(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityGenericParametersAreDifferentKinds",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe arities in the signature and implementation differ. The signature specifies that '%s' is function definition or lambda expression accepting at least %s argument(s), but the implementation is a computed function value. To declare that a computed function value is a permitted implementation simply parenthesize its type in the signature, e.g.\n\tval %s: int -> (int -> int)\ninstead of\n\tval %s: int -> int -> int. - /// (Originally from ../FSComp.txt:111) + /// (Originally from ..\FSComp.txt:111) static member ValueNotContainedMutabilityAritiesDiffer(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String, a4 : System.String, a5 : System.String, a6 : System.String) = (GetStringFunc("ValueNotContainedMutabilityAritiesDiffer",",,,%s,,,%s,,,%s,,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3 a4 a5 a6) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe CLI member names differ - /// (Originally from ../FSComp.txt:112) + /// (Originally from ..\FSComp.txt:112) static member ValueNotContainedMutabilityDotNetNamesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityDotNetNamesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is static and the other isn't - /// (Originally from ../FSComp.txt:113) + /// (Originally from ..\FSComp.txt:113) static member ValueNotContainedMutabilityStaticsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityStaticsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is virtual and the other isn't - /// (Originally from ../FSComp.txt:114) + /// (Originally from ..\FSComp.txt:114) static member ValueNotContainedMutabilityVirtualsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityVirtualsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is abstract and the other isn't - /// (Originally from ../FSComp.txt:115) + /// (Originally from ..\FSComp.txt:115) static member ValueNotContainedMutabilityAbstractsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityAbstractsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is final and the other isn't - /// (Originally from ../FSComp.txt:116) + /// (Originally from ..\FSComp.txt:116) static member ValueNotContainedMutabilityFinalsDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityFinalsDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is marked as an override and the other isn't - /// (Originally from ../FSComp.txt:117) + /// (Originally from ..\FSComp.txt:117) static member ValueNotContainedMutabilityOverridesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityOverridesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nOne is a constructor/property and the other is not - /// (Originally from ../FSComp.txt:118) + /// (Originally from ..\FSComp.txt:118) static member ValueNotContainedMutabilityOneIsConstructor(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityOneIsConstructor",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe compiled representation of this method is as a static member but the signature indicates its compiled representation is as an instance member - /// (Originally from ../FSComp.txt:119) + /// (Originally from ..\FSComp.txt:119) static member ValueNotContainedMutabilityStaticButInstance(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityStaticButInstance",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Module '%s' contains\n %s \nbut its signature specifies\n %s \nThe compiled representation of this method is as an instance member, but the signature indicates its compiled representation is as a static member - /// (Originally from ../FSComp.txt:120) + /// (Originally from ..\FSComp.txt:120) static member ValueNotContainedMutabilityInstanceButStatic(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ValueNotContainedMutabilityInstanceButStatic",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions in the signature and implementation are not compatible because the names differ. The type is called '%s' in the signature file but '%s' in implementation. - /// (Originally from ../FSComp.txt:121) + /// (Originally from ..\FSComp.txt:121) static member DefinitionsInSigAndImplNotCompatibleNamesDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (290, GetStringFunc("DefinitionsInSigAndImplNotCompatibleNamesDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the respective type parameter counts differ - /// (Originally from ../FSComp.txt:122) + /// (Originally from ..\FSComp.txt:122) static member DefinitionsInSigAndImplNotCompatibleParameterCountsDiffer(a0 : System.String, a1 : System.String) = (291, GetStringFunc("DefinitionsInSigAndImplNotCompatibleParameterCountsDiffer",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the accessibility specified in the signature is more than that specified in the implementation - /// (Originally from ../FSComp.txt:123) + /// (Originally from ..\FSComp.txt:123) static member DefinitionsInSigAndImplNotCompatibleAccessibilityDiffer(a0 : System.String, a1 : System.String) = (292, GetStringFunc("DefinitionsInSigAndImplNotCompatibleAccessibilityDiffer",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature requires that the type supports the interface %s but the interface has not been implemented - /// (Originally from ../FSComp.txt:124) + /// (Originally from ..\FSComp.txt:124) static member DefinitionsInSigAndImplNotCompatibleMissingInterface(a0 : System.String, a1 : System.String, a2 : System.String) = (293, GetStringFunc("DefinitionsInSigAndImplNotCompatibleMissingInterface",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation says this type may use nulls as a representation but the signature does not - /// (Originally from ../FSComp.txt:125) + /// (Originally from ..\FSComp.txt:125) static member DefinitionsInSigAndImplNotCompatibleImplementationSaysNull(a0 : System.String, a1 : System.String) = (294, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplementationSaysNull",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation says this type may use nulls as an extra value but the signature does not - /// (Originally from ../FSComp.txt:126) + /// (Originally from ..\FSComp.txt:126) static member DefinitionsInSigAndImplNotCompatibleImplementationSaysNull2(a0 : System.String, a1 : System.String) = (294, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplementationSaysNull2",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature says this type may use nulls as a representation but the implementation does not - /// (Originally from ../FSComp.txt:127) + /// (Originally from ..\FSComp.txt:127) static member DefinitionsInSigAndImplNotCompatibleSignatureSaysNull(a0 : System.String, a1 : System.String) = (295, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSignatureSaysNull",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature says this type may use nulls as an extra value but the implementation does not - /// (Originally from ../FSComp.txt:128) + /// (Originally from ..\FSComp.txt:128) static member DefinitionsInSigAndImplNotCompatibleSignatureSaysNull2(a0 : System.String, a1 : System.String) = (295, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSignatureSaysNull2",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation type is sealed but the signature implies it is not. Consider adding the [] attribute to the signature. - /// (Originally from ../FSComp.txt:129) + /// (Originally from ..\FSComp.txt:129) static member DefinitionsInSigAndImplNotCompatibleImplementationSealed(a0 : System.String, a1 : System.String) = (296, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplementationSealed",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation type is not sealed but signature implies it is. Consider adding the [] attribute to the implementation. - /// (Originally from ../FSComp.txt:130) + /// (Originally from ..\FSComp.txt:130) static member DefinitionsInSigAndImplNotCompatibleImplementationIsNotSealed(a0 : System.String, a1 : System.String) = (297, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplementationIsNotSealed",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation is an abstract class but the signature is not. Consider adding the [] attribute to the signature. - /// (Originally from ../FSComp.txt:131) + /// (Originally from ..\FSComp.txt:131) static member DefinitionsInSigAndImplNotCompatibleImplementationIsAbstract(a0 : System.String, a1 : System.String) = (298, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplementationIsAbstract",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature is an abstract class but the implementation is not. Consider adding the [] attribute to the implementation. - /// (Originally from ../FSComp.txt:132) + /// (Originally from ..\FSComp.txt:132) static member DefinitionsInSigAndImplNotCompatibleSignatureIsAbstract(a0 : System.String, a1 : System.String) = (299, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSignatureIsAbstract",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the types have different base types - /// (Originally from ../FSComp.txt:133) + /// (Originally from ..\FSComp.txt:133) static member DefinitionsInSigAndImplNotCompatibleTypesHaveDifferentBaseTypes(a0 : System.String, a1 : System.String) = (300, GetStringFunc("DefinitionsInSigAndImplNotCompatibleTypesHaveDifferentBaseTypes",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the number of %ss differ - /// (Originally from ../FSComp.txt:134) + /// (Originally from ..\FSComp.txt:134) static member DefinitionsInSigAndImplNotCompatibleNumbersDiffer(a0 : System.String, a1 : System.String, a2 : System.String) = (301, GetStringFunc("DefinitionsInSigAndImplNotCompatibleNumbersDiffer",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature defines the %s '%s' but the implementation does not (or does, but not in the same order) - /// (Originally from ../FSComp.txt:135) + /// (Originally from ..\FSComp.txt:135) static member DefinitionsInSigAndImplNotCompatibleSignatureDefinesButImplDoesNot(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (302, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSignatureDefinesButImplDoesNot",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation defines the %s '%s' but the signature does not (or does, but not in the same order) - /// (Originally from ../FSComp.txt:136) + /// (Originally from ..\FSComp.txt:136) static member DefinitionsInSigAndImplNotCompatibleImplDefinesButSignatureDoesNot(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (303, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplDefinesButSignatureDoesNot",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the implementation defines a struct but the signature defines a type with a hidden representation - /// (Originally from ../FSComp.txt:137) + /// (Originally from ..\FSComp.txt:137) static member DefinitionsInSigAndImplNotCompatibleImplDefinesStruct(a0 : System.String, a1 : System.String) = (304, GetStringFunc("DefinitionsInSigAndImplNotCompatibleImplDefinesStruct",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because a CLI type representation is being hidden by a signature - /// (Originally from ../FSComp.txt:138) + /// (Originally from ..\FSComp.txt:138) static member DefinitionsInSigAndImplNotCompatibleDotNetTypeRepresentationIsHidden(a0 : System.String, a1 : System.String) = (305, GetStringFunc("DefinitionsInSigAndImplNotCompatibleDotNetTypeRepresentationIsHidden",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because a type representation is being hidden by a signature - /// (Originally from ../FSComp.txt:139) + /// (Originally from ..\FSComp.txt:139) static member DefinitionsInSigAndImplNotCompatibleTypeIsHidden(a0 : System.String, a1 : System.String) = (306, GetStringFunc("DefinitionsInSigAndImplNotCompatibleTypeIsHidden",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the types are of different kinds - /// (Originally from ../FSComp.txt:140) + /// (Originally from ..\FSComp.txt:140) static member DefinitionsInSigAndImplNotCompatibleTypeIsDifferentKind(a0 : System.String, a1 : System.String) = (307, GetStringFunc("DefinitionsInSigAndImplNotCompatibleTypeIsDifferentKind",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the IL representations differ - /// (Originally from ../FSComp.txt:141) + /// (Originally from ..\FSComp.txt:141) static member DefinitionsInSigAndImplNotCompatibleILDiffer(a0 : System.String, a1 : System.String) = (308, GetStringFunc("DefinitionsInSigAndImplNotCompatibleILDiffer",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the representations differ - /// (Originally from ../FSComp.txt:142) + /// (Originally from ..\FSComp.txt:142) static member DefinitionsInSigAndImplNotCompatibleRepresentationsDiffer(a0 : System.String, a1 : System.String) = (309, GetStringFunc("DefinitionsInSigAndImplNotCompatibleRepresentationsDiffer",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the field %s was present in the implementation but not in the signature - /// (Originally from ../FSComp.txt:143) + /// (Originally from ..\FSComp.txt:143) static member DefinitionsInSigAndImplNotCompatibleFieldWasPresent(a0 : System.String, a1 : System.String, a2 : System.String) = (311, GetStringFunc("DefinitionsInSigAndImplNotCompatibleFieldWasPresent",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the order of the fields is different in the signature and implementation - /// (Originally from ../FSComp.txt:144) + /// (Originally from ..\FSComp.txt:144) static member DefinitionsInSigAndImplNotCompatibleFieldOrderDiffer(a0 : System.String, a1 : System.String) = (312, GetStringFunc("DefinitionsInSigAndImplNotCompatibleFieldOrderDiffer",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the field %s was required by the signature but was not specified by the implementation - /// (Originally from ../FSComp.txt:145) + /// (Originally from ..\FSComp.txt:145) static member DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified(a0 : System.String, a1 : System.String, a2 : System.String) = (313, GetStringFunc("DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the field '%s' was present in the implementation but not in the signature. Struct types must now reveal their fields in the signature for the type, though the fields may still be labelled 'private' or 'internal'. - /// (Originally from ../FSComp.txt:146) + /// (Originally from ..\FSComp.txt:146) static member DefinitionsInSigAndImplNotCompatibleFieldIsInImplButNotSig(a0 : System.String, a1 : System.String, a2 : System.String) = (314, GetStringFunc("DefinitionsInSigAndImplNotCompatibleFieldIsInImplButNotSig",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the abstract member '%s' was required by the signature but was not specified by the implementation - /// (Originally from ../FSComp.txt:147) + /// (Originally from ..\FSComp.txt:147) static member DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInImpl(a0 : System.String, a1 : System.String, a2 : System.String) = (315, GetStringFunc("DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInImpl",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the abstract member '%s' was present in the implementation but not in the signature - /// (Originally from ../FSComp.txt:148) + /// (Originally from ..\FSComp.txt:148) static member DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInSig(a0 : System.String, a1 : System.String, a2 : System.String) = (316, GetStringFunc("DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInSig",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature declares a %s while the implementation declares a %s - /// (Originally from ../FSComp.txt:149) + /// (Originally from ..\FSComp.txt:149) static member DefinitionsInSigAndImplNotCompatibleSignatureDeclaresDiffer(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (317, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSignatureDeclaresDiffer",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the abbreviations differ: %s versus %s - /// (Originally from ../FSComp.txt:150) + /// (Originally from ..\FSComp.txt:150) static member DefinitionsInSigAndImplNotCompatibleAbbreviationsDiffer(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (318, GetStringFunc("DefinitionsInSigAndImplNotCompatibleAbbreviationsDiffer",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// The %s definitions for type '%s' in the signature and implementation are not compatible because an abbreviation is being hidden by a signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. - /// (Originally from ../FSComp.txt:151) + /// (Originally from ..\FSComp.txt:151) static member DefinitionsInSigAndImplNotCompatibleAbbreviationHiddenBySig(a0 : System.String, a1 : System.String) = (319, GetStringFunc("DefinitionsInSigAndImplNotCompatibleAbbreviationHiddenBySig",",,,%s,,,%s,,,") a0 a1) /// The %s definitions for type '%s' in the signature and implementation are not compatible because the signature has an abbreviation while the implementation does not - /// (Originally from ../FSComp.txt:152) + /// (Originally from ..\FSComp.txt:152) static member DefinitionsInSigAndImplNotCompatibleSigHasAbbreviation(a0 : System.String, a1 : System.String) = (320, GetStringFunc("DefinitionsInSigAndImplNotCompatibleSigHasAbbreviation",",,,%s,,,%s,,,") a0 a1) /// The module contains the constructor\n %s \nbut its signature specifies\n %s \nThe names differ - /// (Originally from ../FSComp.txt:153) + /// (Originally from ..\FSComp.txt:153) static member ModuleContainsConstructorButNamesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ModuleContainsConstructorButNamesDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the constructor\n %s \nbut its signature specifies\n %s \nThe respective number of data fields differ - /// (Originally from ../FSComp.txt:154) + /// (Originally from ..\FSComp.txt:154) static member ModuleContainsConstructorButDataFieldsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ModuleContainsConstructorButDataFieldsDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the constructor\n %s \nbut its signature specifies\n %s \nThe types of the fields differ - /// (Originally from ../FSComp.txt:155) + /// (Originally from ..\FSComp.txt:155) static member ModuleContainsConstructorButTypesOfFieldsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ModuleContainsConstructorButTypesOfFieldsDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the constructor\n %s \nbut its signature specifies\n %s \nthe accessibility specified in the signature is more than that specified in the implementation - /// (Originally from ../FSComp.txt:156) + /// (Originally from ..\FSComp.txt:156) static member ModuleContainsConstructorButAccessibilityDiffers(a0 : System.String, a1 : System.String) = (GetStringFunc("ModuleContainsConstructorButAccessibilityDiffers",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nThe names differ - /// (Originally from ../FSComp.txt:157) + /// (Originally from ..\FSComp.txt:157) static member FieldNotContainedNamesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedNamesDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nthe accessibility specified in the signature is more than that specified in the implementation - /// (Originally from ../FSComp.txt:158) + /// (Originally from ..\FSComp.txt:158) static member FieldNotContainedAccessibilitiesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedAccessibilitiesDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nThe 'static' modifiers differ - /// (Originally from ../FSComp.txt:159) + /// (Originally from ..\FSComp.txt:159) static member FieldNotContainedStaticsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedStaticsDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nThe 'mutable' modifiers differ - /// (Originally from ../FSComp.txt:160) + /// (Originally from ..\FSComp.txt:160) static member FieldNotContainedMutablesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedMutablesDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nThe 'literal' modifiers differ - /// (Originally from ../FSComp.txt:161) + /// (Originally from ..\FSComp.txt:161) static member FieldNotContainedLiteralsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedLiteralsDiffer",",,,%s,,,%s,,,") a0 a1) /// The module contains the field\n %s \nbut its signature specifies\n %s \nThe types differ - /// (Originally from ../FSComp.txt:162) + /// (Originally from ..\FSComp.txt:162) static member FieldNotContainedTypesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("FieldNotContainedTypesDiffer",",,,%s,,,%s,,,") a0 a1) /// The implicit instantiation of a generic construct at or near this point could not be resolved because it could resolve to multiple unrelated types, e.g. '%s' and '%s'. Consider using type annotations to resolve the ambiguity - /// (Originally from ../FSComp.txt:163) + /// (Originally from ..\FSComp.txt:163) static member typrelCannotResolveImplicitGenericInstantiation(a0 : System.String, a1 : System.String) = (331, GetStringFunc("typrelCannotResolveImplicitGenericInstantiation",",,,%s,,,%s,,,") a0 a1) /// Could not resolve the ambiguity inherent in the use of a 'printf'-style format string - /// (Originally from ../FSComp.txt:164) + /// (Originally from ..\FSComp.txt:164) static member typrelCannotResolveAmbiguityInPrintf() = (333, GetStringFunc("typrelCannotResolveAmbiguityInPrintf",",,,") ) /// Could not resolve the ambiguity in the use of a generic construct with an 'enum' constraint at or near this position - /// (Originally from ../FSComp.txt:165) + /// (Originally from ..\FSComp.txt:165) static member typrelCannotResolveAmbiguityInEnum() = (334, GetStringFunc("typrelCannotResolveAmbiguityInEnum",",,,") ) /// Could not resolve the ambiguity in the use of a generic construct with a 'delegate' constraint at or near this position - /// (Originally from ../FSComp.txt:166) + /// (Originally from ..\FSComp.txt:166) static member typrelCannotResolveAmbiguityInDelegate() = (335, GetStringFunc("typrelCannotResolveAmbiguityInDelegate",",,,") ) /// Invalid value - /// (Originally from ../FSComp.txt:167) + /// (Originally from ..\FSComp.txt:167) static member typrelInvalidValue() = (337, GetStringFunc("typrelInvalidValue",",,,") ) /// The signature and implementation are not compatible because the respective type parameter counts differ - /// (Originally from ../FSComp.txt:168) + /// (Originally from ..\FSComp.txt:168) static member typrelSigImplNotCompatibleParamCountsDiffer() = (338, GetStringFunc("typrelSigImplNotCompatibleParamCountsDiffer",",,,") ) /// The signature and implementation are not compatible because the type parameter in the class/signature has a different compile-time requirement to the one in the member/implementation - /// (Originally from ../FSComp.txt:169) + /// (Originally from ..\FSComp.txt:169) static member typrelSigImplNotCompatibleCompileTimeRequirementsDiffer() = (339, GetStringFunc("typrelSigImplNotCompatibleCompileTimeRequirementsDiffer",",,,") ) /// The signature and implementation are not compatible because the declaration of the type parameter '%s' requires a constraint of the form %s - /// (Originally from ../FSComp.txt:170) + /// (Originally from ..\FSComp.txt:170) static member typrelSigImplNotCompatibleConstraintsDiffer(a0 : System.String, a1 : System.String) = (340, GetStringFunc("typrelSigImplNotCompatibleConstraintsDiffer",",,,%s,,,%s,,,") a0 a1) /// The signature and implementation are not compatible because the type parameter '%s' has a constraint of the form %s but the implementation does not. Either remove this constraint from the signature or add it to the implementation. - /// (Originally from ../FSComp.txt:171) + /// (Originally from ..\FSComp.txt:171) static member typrelSigImplNotCompatibleConstraintsDifferRemove(a0 : System.String, a1 : System.String) = (341, GetStringFunc("typrelSigImplNotCompatibleConstraintsDifferRemove",",,,%s,,,%s,,,") a0 a1) /// The type '%s' implements 'System.IComparable'. Consider also adding an explicit override for 'Object.Equals' - /// (Originally from ../FSComp.txt:172) + /// (Originally from ..\FSComp.txt:172) static member typrelTypeImplementsIComparableShouldOverrideObjectEquals(a0 : System.String) = (342, GetStringFunc("typrelTypeImplementsIComparableShouldOverrideObjectEquals",",,,%s,,,") a0) /// The type '%s' implements 'System.IComparable' explicitly but provides no corresponding override for 'Object.Equals'. An implementation of 'Object.Equals' has been automatically provided, implemented via 'System.IComparable'. Consider implementing the override 'Object.Equals' explicitly - /// (Originally from ../FSComp.txt:173) + /// (Originally from ..\FSComp.txt:173) static member typrelTypeImplementsIComparableDefaultObjectEqualsProvided(a0 : System.String) = (343, GetStringFunc("typrelTypeImplementsIComparableDefaultObjectEqualsProvided",",,,%s,,,") a0) /// The struct, record or union type '%s' has an explicit implementation of 'Object.GetHashCode' or 'Object.Equals'. You must apply the 'CustomEquality' attribute to the type - /// (Originally from ../FSComp.txt:174) + /// (Originally from ..\FSComp.txt:174) static member typrelExplicitImplementationOfGetHashCodeOrEquals(a0 : System.String) = (344, GetStringFunc("typrelExplicitImplementationOfGetHashCodeOrEquals",",,,%s,,,") a0) /// The struct, record or union type '%s' has an explicit implementation of 'Object.GetHashCode'. Consider implementing a matching override for 'Object.Equals(obj)' - /// (Originally from ../FSComp.txt:175) + /// (Originally from ..\FSComp.txt:175) static member typrelExplicitImplementationOfGetHashCode(a0 : System.String) = (345, GetStringFunc("typrelExplicitImplementationOfGetHashCode",",,,%s,,,") a0) /// The struct, record or union type '%s' has an explicit implementation of 'Object.Equals'. Consider implementing a matching override for 'Object.GetHashCode()' - /// (Originally from ../FSComp.txt:176) + /// (Originally from ..\FSComp.txt:176) static member typrelExplicitImplementationOfEquals(a0 : System.String) = (346, GetStringFunc("typrelExplicitImplementationOfEquals",",,,%s,,,") a0) /// The exception definitions are not compatible because a CLI exception mapping is being hidden by a signature. The exception mapping must be visible to other modules. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s - /// (Originally from ../FSComp.txt:177) + /// (Originally from ..\FSComp.txt:177) static member ExceptionDefsNotCompatibleHiddenBySignature(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleHiddenBySignature",",,,%s,,,%s,,,") a0 a1) /// The exception definitions are not compatible because the CLI representations differ. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s - /// (Originally from ../FSComp.txt:178) + /// (Originally from ..\FSComp.txt:178) static member ExceptionDefsNotCompatibleDotNetRepresentationsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleDotNetRepresentationsDiffer",",,,%s,,,%s,,,") a0 a1) /// The exception definitions are not compatible because the exception abbreviation is being hidden by the signature. The abbreviation must be visible to other CLI languages. Consider making the abbreviation visible in the signature. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:179) + /// (Originally from ..\FSComp.txt:179) static member ExceptionDefsNotCompatibleAbbreviationHiddenBySignature(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleAbbreviationHiddenBySignature",",,,%s,,,%s,,,") a0 a1) /// The exception definitions are not compatible because the exception abbreviations in the signature and implementation differ. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:180) + /// (Originally from ..\FSComp.txt:180) static member ExceptionDefsNotCompatibleSignaturesDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleSignaturesDiffer",",,,%s,,,%s,,,") a0 a1) /// The exception definitions are not compatible because the exception declarations differ. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:181) + /// (Originally from ..\FSComp.txt:181) static member ExceptionDefsNotCompatibleExceptionDeclarationsDiffer(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleExceptionDeclarationsDiffer",",,,%s,,,%s,,,") a0 a1) /// The exception definitions are not compatible because the field '%s' was required by the signature but was not specified by the implementation. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:182) + /// (Originally from ..\FSComp.txt:182) static member ExceptionDefsNotCompatibleFieldInSigButNotImpl(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleFieldInSigButNotImpl",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The exception definitions are not compatible because the field '%s' was present in the implementation but not in the signature. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:183) + /// (Originally from ..\FSComp.txt:183) static member ExceptionDefsNotCompatibleFieldInImplButNotSig(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleFieldInImplButNotSig",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The exception definitions are not compatible because the order of the fields is different in the signature and implementation. The module contains the exception definition\n %s \nbut its signature specifies\n\t%s. - /// (Originally from ../FSComp.txt:184) + /// (Originally from ..\FSComp.txt:184) static member ExceptionDefsNotCompatibleFieldOrderDiffers(a0 : System.String, a1 : System.String) = (GetStringFunc("ExceptionDefsNotCompatibleFieldOrderDiffers",",,,%s,,,%s,,,") a0 a1) /// The namespace or module attributes differ between signature and implementation - /// (Originally from ../FSComp.txt:185) + /// (Originally from ..\FSComp.txt:185) static member typrelModuleNamespaceAttributesDifferInSigAndImpl() = (355, GetStringFunc("typrelModuleNamespaceAttributesDifferInSigAndImpl",",,,") ) /// This method is over-constrained in its type parameters - /// (Originally from ../FSComp.txt:186) + /// (Originally from ..\FSComp.txt:186) static member typrelMethodIsOverconstrained() = (356, GetStringFunc("typrelMethodIsOverconstrained",",,,") ) /// No implementations of '%s' had the correct number of arguments and type parameters. The required signature is '%s'. - /// (Originally from ../FSComp.txt:187) + /// (Originally from ..\FSComp.txt:187) static member typrelOverloadNotFound(a0 : System.String, a1 : System.String) = (357, GetStringFunc("typrelOverloadNotFound",",,,%s,,,%s,,,") a0 a1) /// The override for '%s' was ambiguous - /// (Originally from ../FSComp.txt:188) + /// (Originally from ..\FSComp.txt:188) static member typrelOverrideWasAmbiguous(a0 : System.String) = (358, GetStringFunc("typrelOverrideWasAmbiguous",",,,%s,,,") a0) /// More than one override implements '%s' - /// (Originally from ../FSComp.txt:189) + /// (Originally from ..\FSComp.txt:189) static member typrelMoreThenOneOverride(a0 : System.String) = (359, GetStringFunc("typrelMoreThenOneOverride",",,,%s,,,") a0) /// The method '%s' is sealed and cannot be overridden - /// (Originally from ../FSComp.txt:190) + /// (Originally from ..\FSComp.txt:190) static member typrelMethodIsSealed(a0 : System.String) = (360, GetStringFunc("typrelMethodIsSealed",",,,%s,,,") a0) /// The override '%s' implements more than one abstract slot, e.g. '%s' and '%s' - /// (Originally from ../FSComp.txt:191) + /// (Originally from ..\FSComp.txt:191) static member typrelOverrideImplementsMoreThenOneSlot(a0 : System.String, a1 : System.String, a2 : System.String) = (361, GetStringFunc("typrelOverrideImplementsMoreThenOneSlot",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Duplicate or redundant interface - /// (Originally from ../FSComp.txt:192) + /// (Originally from ..\FSComp.txt:192) static member typrelDuplicateInterface() = (362, GetStringFunc("typrelDuplicateInterface",",,,") ) /// The interface '%s' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface. - /// (Originally from ../FSComp.txt:193) + /// (Originally from ..\FSComp.txt:193) static member typrelNeedExplicitImplementation(a0 : System.String) = (363, GetStringFunc("typrelNeedExplicitImplementation",",,,%s,,,") a0) /// A named argument has been assigned more than one value - /// (Originally from ../FSComp.txt:194) + /// (Originally from ..\FSComp.txt:194) static member typrelNamedArgumentHasBeenAssignedMoreThenOnce() = (364, GetStringFunc("typrelNamedArgumentHasBeenAssignedMoreThenOnce",",,,") ) /// No implementation was given for '%s' - /// (Originally from ../FSComp.txt:195) + /// (Originally from ..\FSComp.txt:195) static member typrelNoImplementationGiven(a0 : System.String) = (365, GetStringFunc("typrelNoImplementationGiven",",,,%s,,,") a0) /// No implementation was given for '%s'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'. - /// (Originally from ../FSComp.txt:196) + /// (Originally from ..\FSComp.txt:196) static member typrelNoImplementationGivenWithSuggestion(a0 : System.String) = (366, GetStringFunc("typrelNoImplementationGivenWithSuggestion",",,,%s,,,") a0) /// The member '%s' does not have the correct number of arguments. The required signature is '%s'. - /// (Originally from ../FSComp.txt:197) + /// (Originally from ..\FSComp.txt:197) static member typrelMemberDoesNotHaveCorrectNumberOfArguments(a0 : System.String, a1 : System.String) = (367, GetStringFunc("typrelMemberDoesNotHaveCorrectNumberOfArguments",",,,%s,,,%s,,,") a0 a1) /// The member '%s' does not have the correct number of method type parameters. The required signature is '%s'. - /// (Originally from ../FSComp.txt:198) + /// (Originally from ..\FSComp.txt:198) static member typrelMemberDoesNotHaveCorrectNumberOfTypeParameters(a0 : System.String, a1 : System.String) = (368, GetStringFunc("typrelMemberDoesNotHaveCorrectNumberOfTypeParameters",",,,%s,,,%s,,,") a0 a1) /// The member '%s' does not have the correct kinds of generic parameters. The required signature is '%s'. - /// (Originally from ../FSComp.txt:199) + /// (Originally from ..\FSComp.txt:199) static member typrelMemberDoesNotHaveCorrectKindsOfGenericParameters(a0 : System.String, a1 : System.String) = (369, GetStringFunc("typrelMemberDoesNotHaveCorrectKindsOfGenericParameters",",,,%s,,,%s,,,") a0 a1) /// The member '%s' cannot be used to implement '%s'. The required signature is '%s'. - /// (Originally from ../FSComp.txt:200) + /// (Originally from ..\FSComp.txt:200) static member typrelMemberCannotImplement(a0 : System.String, a1 : System.String, a2 : System.String) = (370, GetStringFunc("typrelMemberCannotImplement",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Error while parsing embedded IL - /// (Originally from ../FSComp.txt:201) + /// (Originally from ..\FSComp.txt:201) static member astParseEmbeddedILError() = (371, GetStringFunc("astParseEmbeddedILError",",,,") ) /// Error while parsing embedded IL type - /// (Originally from ../FSComp.txt:202) + /// (Originally from ..\FSComp.txt:202) static member astParseEmbeddedILTypeError() = (372, GetStringFunc("astParseEmbeddedILTypeError",",,,") ) /// This indexer notation has been removed from the F# language - /// (Originally from ../FSComp.txt:203) + /// (Originally from ..\FSComp.txt:203) static member astDeprecatedIndexerNotation() = (GetStringFunc("astDeprecatedIndexerNotation",",,,") ) /// Invalid expression on left of assignment - /// (Originally from ../FSComp.txt:204) + /// (Originally from ..\FSComp.txt:204) static member astInvalidExprLeftHandOfAssignment() = (374, GetStringFunc("astInvalidExprLeftHandOfAssignment",",,,") ) /// The 'ReferenceEquality' attribute cannot be used on structs. Consider using the 'StructuralEquality' attribute instead, or implement an override for 'System.Object.Equals(obj)'. - /// (Originally from ../FSComp.txt:205) + /// (Originally from ..\FSComp.txt:205) static member augNoRefEqualsOnStruct() = (376, GetStringFunc("augNoRefEqualsOnStruct",",,,") ) /// This type uses an invalid mix of the attributes 'NoEquality', 'ReferenceEquality', 'StructuralEquality', 'NoComparison' and 'StructuralComparison' - /// (Originally from ../FSComp.txt:206) + /// (Originally from ..\FSComp.txt:206) static member augInvalidAttrs() = (377, GetStringFunc("augInvalidAttrs",",,,") ) /// The 'NoEquality' attribute must be used in conjunction with the 'NoComparison' attribute - /// (Originally from ../FSComp.txt:207) + /// (Originally from ..\FSComp.txt:207) static member augNoEqualityNeedsNoComparison() = (378, GetStringFunc("augNoEqualityNeedsNoComparison",",,,") ) /// The 'StructuralComparison' attribute must be used in conjunction with the 'StructuralEquality' attribute - /// (Originally from ../FSComp.txt:208) + /// (Originally from ..\FSComp.txt:208) static member augStructCompNeedsStructEquality() = (379, GetStringFunc("augStructCompNeedsStructEquality",",,,") ) /// The 'StructuralEquality' attribute must be used in conjunction with the 'NoComparison' or 'StructuralComparison' attributes - /// (Originally from ../FSComp.txt:209) + /// (Originally from ..\FSComp.txt:209) static member augStructEqNeedsNoCompOrStructComp() = (380, GetStringFunc("augStructEqNeedsNoCompOrStructComp",",,,") ) /// A type cannot have both the 'ReferenceEquality' and 'StructuralEquality' or 'StructuralComparison' attributes - /// (Originally from ../FSComp.txt:210) + /// (Originally from ..\FSComp.txt:210) static member augTypeCantHaveRefEqAndStructAttrs() = (381, GetStringFunc("augTypeCantHaveRefEqAndStructAttrs",",,,") ) /// Only record, union, exception and struct types may be augmented with the 'ReferenceEquality', 'StructuralEquality' and 'StructuralComparison' attributes - /// (Originally from ../FSComp.txt:211) + /// (Originally from ..\FSComp.txt:211) static member augOnlyCertainTypesCanHaveAttrs() = (382, GetStringFunc("augOnlyCertainTypesCanHaveAttrs",",,,") ) /// A type with attribute 'ReferenceEquality' cannot have an explicit implementation of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - /// (Originally from ../FSComp.txt:212) + /// (Originally from ..\FSComp.txt:212) static member augRefEqCantHaveObjEquals() = (383, GetStringFunc("augRefEqCantHaveObjEquals",",,,") ) /// A type with attribute 'CustomEquality' must have an explicit implementation of at least one of 'Object.Equals(obj)', 'System.IEquatable<_>' or 'System.Collections.IStructuralEquatable' - /// (Originally from ../FSComp.txt:213) + /// (Originally from ..\FSComp.txt:213) static member augCustomEqNeedsObjEquals() = (384, GetStringFunc("augCustomEqNeedsObjEquals",",,,") ) /// A type with attribute 'CustomComparison' must have an explicit implementation of at least one of 'System.IComparable' or 'System.Collections.IStructuralComparable' - /// (Originally from ../FSComp.txt:214) + /// (Originally from ..\FSComp.txt:214) static member augCustomCompareNeedsIComp() = (385, GetStringFunc("augCustomCompareNeedsIComp",",,,") ) /// A type with attribute 'NoEquality' should not usually have an explicit implementation of 'Object.Equals(obj)'. Disable this warning if this is intentional for interoperability purposes - /// (Originally from ../FSComp.txt:215) + /// (Originally from ..\FSComp.txt:215) static member augNoEqNeedsNoObjEquals() = (386, GetStringFunc("augNoEqNeedsNoObjEquals",",,,") ) /// A type with attribute 'NoComparison' should not usually have an explicit implementation of 'System.IComparable', 'System.IComparable<_>' or 'System.Collections.IStructuralComparable'. Disable this warning if this is intentional for interoperability purposes - /// (Originally from ../FSComp.txt:216) + /// (Originally from ..\FSComp.txt:216) static member augNoCompCantImpIComp() = (386, GetStringFunc("augNoCompCantImpIComp",",,,") ) /// The 'CustomEquality' attribute must be used in conjunction with the 'NoComparison' or 'CustomComparison' attributes - /// (Originally from ../FSComp.txt:217) + /// (Originally from ..\FSComp.txt:217) static member augCustomEqNeedsNoCompOrCustomComp() = (387, GetStringFunc("augCustomEqNeedsNoCompOrCustomComp",",,,") ) /// Positional specifiers are not permitted in format strings - /// (Originally from ../FSComp.txt:218) + /// (Originally from ..\FSComp.txt:218) static member forPositionalSpecifiersNotPermitted() = (GetStringFunc("forPositionalSpecifiersNotPermitted",",,,") ) /// Missing format specifier - /// (Originally from ../FSComp.txt:219) + /// (Originally from ..\FSComp.txt:219) static member forMissingFormatSpecifier() = (GetStringFunc("forMissingFormatSpecifier",",,,") ) /// '%s' flag set twice - /// (Originally from ../FSComp.txt:220) + /// (Originally from ..\FSComp.txt:220) static member forFlagSetTwice(a0 : System.String) = (GetStringFunc("forFlagSetTwice",",,,%s,,,") a0) /// Prefix flag (' ' or '+') set twice - /// (Originally from ../FSComp.txt:221) + /// (Originally from ..\FSComp.txt:221) static member forPrefixFlagSpacePlusSetTwice() = (GetStringFunc("forPrefixFlagSpacePlusSetTwice",",,,") ) /// The # formatting modifier is invalid in F# - /// (Originally from ../FSComp.txt:222) + /// (Originally from ..\FSComp.txt:222) static member forHashSpecifierIsInvalid() = (GetStringFunc("forHashSpecifierIsInvalid",",,,") ) /// Bad precision in format specifier - /// (Originally from ../FSComp.txt:223) + /// (Originally from ..\FSComp.txt:223) static member forBadPrecision() = (GetStringFunc("forBadPrecision",",,,") ) /// Bad width in format specifier - /// (Originally from ../FSComp.txt:224) + /// (Originally from ..\FSComp.txt:224) static member forBadWidth() = (GetStringFunc("forBadWidth",",,,") ) /// '%s' format does not support '0' flag - /// (Originally from ../FSComp.txt:225) + /// (Originally from ..\FSComp.txt:225) static member forDoesNotSupportZeroFlag(a0 : System.String) = (GetStringFunc("forDoesNotSupportZeroFlag",",,,%s,,,") a0) /// Precision missing after the '.' - /// (Originally from ../FSComp.txt:226) + /// (Originally from ..\FSComp.txt:226) static member forPrecisionMissingAfterDot() = (GetStringFunc("forPrecisionMissingAfterDot",",,,") ) /// '%s' format does not support precision - /// (Originally from ../FSComp.txt:227) + /// (Originally from ..\FSComp.txt:227) static member forFormatDoesntSupportPrecision(a0 : System.String) = (GetStringFunc("forFormatDoesntSupportPrecision",",,,%s,,,") a0) /// Bad format specifier (after l or L): Expected ld,li,lo,lu,lx or lX. In F# code you can use %%d, %%x, %%o or %%u instead, which are overloaded to work with all basic integer types. - /// (Originally from ../FSComp.txt:228) + /// (Originally from ..\FSComp.txt:228) static member forBadFormatSpecifier() = (GetStringFunc("forBadFormatSpecifier",",,,") ) /// The 'l' or 'L' in this format specifier is unnecessary. In F# code you can use %%d, %%x, %%o or %%u instead, which are overloaded to work with all basic integer types. - /// (Originally from ../FSComp.txt:229) + /// (Originally from ..\FSComp.txt:229) static member forLIsUnnecessary() = (GetStringFunc("forLIsUnnecessary",",,,") ) /// The 'h' or 'H' in this format specifier is unnecessary. You can use %%d, %%x, %%o or %%u instead, which are overloaded to work with all basic integer types. - /// (Originally from ../FSComp.txt:230) + /// (Originally from ..\FSComp.txt:230) static member forHIsUnnecessary() = (GetStringFunc("forHIsUnnecessary",",,,") ) /// '%s' does not support prefix '%s' flag - /// (Originally from ../FSComp.txt:231) + /// (Originally from ..\FSComp.txt:231) static member forDoesNotSupportPrefixFlag(a0 : System.String, a1 : System.String) = (GetStringFunc("forDoesNotSupportPrefixFlag",",,,%s,,,%s,,,") a0 a1) /// Bad format specifier: '%s' - /// (Originally from ../FSComp.txt:232) + /// (Originally from ..\FSComp.txt:232) static member forBadFormatSpecifierGeneral(a0 : System.String) = (GetStringFunc("forBadFormatSpecifierGeneral",",,,%s,,,") a0) /// System.Environment.Exit did not exit - /// (Originally from ../FSComp.txt:233) + /// (Originally from ..\FSComp.txt:233) static member elSysEnvExitDidntExit() = (GetStringFunc("elSysEnvExitDidntExit",",,,") ) /// The treatment of this operator is now handled directly by the F# compiler and its meaning cannot be redefined - /// (Originally from ../FSComp.txt:234) + /// (Originally from ..\FSComp.txt:234) static member elDeprecatedOperator() = (GetStringFunc("elDeprecatedOperator",",,,") ) /// A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope. - /// (Originally from ../FSComp.txt:235) + /// (Originally from ..\FSComp.txt:235) static member chkProtectedOrBaseCalled() = (405, GetStringFunc("chkProtectedOrBaseCalled",",,,") ) /// The byref-typed variable '%s' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions. - /// (Originally from ../FSComp.txt:236) + /// (Originally from ..\FSComp.txt:236) static member chkByrefUsedInInvalidWay(a0 : System.String) = (406, GetStringFunc("chkByrefUsedInInvalidWay",",,,%s,,,") a0) /// The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls. - /// (Originally from ../FSComp.txt:237) + /// (Originally from ..\FSComp.txt:237) static member chkBaseUsedInInvalidWay() = (408, GetStringFunc("chkBaseUsedInInvalidWay",",,,") ) /// The variable '%s' is used in an invalid way - /// (Originally from ../FSComp.txt:238) + /// (Originally from ..\FSComp.txt:238) static member chkVariableUsedInInvalidWay(a0 : System.String) = (GetStringFunc("chkVariableUsedInInvalidWay",",,,%s,,,") a0) /// The type '%s' is less accessible than the value, member or type '%s' it is used in. - /// (Originally from ../FSComp.txt:239) + /// (Originally from ..\FSComp.txt:239) static member chkTypeLessAccessibleThanType(a0 : System.String, a1 : System.String) = (410, GetStringFunc("chkTypeLessAccessibleThanType",",,,%s,,,%s,,,") a0 a1) /// 'System.Void' can only be used as 'typeof' in F# - /// (Originally from ../FSComp.txt:240) + /// (Originally from ..\FSComp.txt:240) static member chkSystemVoidOnlyInTypeof() = (411, GetStringFunc("chkSystemVoidOnlyInTypeof",",,,") ) /// A type instantiation involves a byref type. This is not permitted by the rules of Common IL. - /// (Originally from ../FSComp.txt:241) + /// (Originally from ..\FSComp.txt:241) static member chkErrorUseOfByref() = (412, GetStringFunc("chkErrorUseOfByref",",,,") ) /// Calls to 'reraise' may only occur directly in a handler of a try-with - /// (Originally from ../FSComp.txt:242) + /// (Originally from ..\FSComp.txt:242) static member chkErrorContainsCallToRethrow() = (413, GetStringFunc("chkErrorContainsCallToRethrow",",,,") ) /// Expression-splicing operators may only be used within quotations - /// (Originally from ../FSComp.txt:243) + /// (Originally from ..\FSComp.txt:243) static member chkSplicingOnlyInQuotations() = (414, GetStringFunc("chkSplicingOnlyInQuotations",",,,") ) /// First-class uses of the expression-splicing operator are not permitted - /// (Originally from ../FSComp.txt:244) + /// (Originally from ..\FSComp.txt:244) static member chkNoFirstClassSplicing() = (415, GetStringFunc("chkNoFirstClassSplicing",",,,") ) /// First-class uses of the address-of operators are not permitted - /// (Originally from ../FSComp.txt:245) + /// (Originally from ..\FSComp.txt:245) static member chkNoFirstClassAddressOf() = (416, GetStringFunc("chkNoFirstClassAddressOf",",,,") ) /// First-class uses of the 'reraise' function is not permitted - /// (Originally from ../FSComp.txt:246) + /// (Originally from ..\FSComp.txt:246) static member chkNoFirstClassRethrow() = (417, GetStringFunc("chkNoFirstClassRethrow",",,,") ) /// The byref typed value '%s' cannot be used at this point - /// (Originally from ../FSComp.txt:247) + /// (Originally from ..\FSComp.txt:247) static member chkNoByrefAtThisPoint(a0 : System.String) = (418, GetStringFunc("chkNoByrefAtThisPoint",",,,%s,,,") a0) /// 'base' values may only be used to make direct calls to the base implementations of overridden members - /// (Originally from ../FSComp.txt:248) + /// (Originally from ..\FSComp.txt:248) static member chkLimitationsOfBaseKeyword() = (419, GetStringFunc("chkLimitationsOfBaseKeyword",",,,") ) /// Object constructors cannot directly use try/with and try/finally prior to the initialization of the object. This includes constructs such as 'for x in ...' that may elaborate to uses of these constructs. This is a limitation imposed by Common IL. - /// (Originally from ../FSComp.txt:249) + /// (Originally from ..\FSComp.txt:249) static member chkObjCtorsCantUseExceptionHandling() = (420, GetStringFunc("chkObjCtorsCantUseExceptionHandling",",,,") ) /// The address of the variable '%s' cannot be used at this point - /// (Originally from ../FSComp.txt:250) + /// (Originally from ..\FSComp.txt:250) static member chkNoAddressOfAtThisPoint(a0 : System.String) = (421, GetStringFunc("chkNoAddressOfAtThisPoint",",,,%s,,,") a0) /// The address of the static field '%s' cannot be used at this point - /// (Originally from ../FSComp.txt:251) + /// (Originally from ..\FSComp.txt:251) static member chkNoAddressStaticFieldAtThisPoint(a0 : System.String) = (422, GetStringFunc("chkNoAddressStaticFieldAtThisPoint",",,,%s,,,") a0) /// The address of the field '%s' cannot be used at this point - /// (Originally from ../FSComp.txt:252) + /// (Originally from ..\FSComp.txt:252) static member chkNoAddressFieldAtThisPoint(a0 : System.String) = (423, GetStringFunc("chkNoAddressFieldAtThisPoint",",,,%s,,,") a0) /// The address of an array element cannot be used at this point - /// (Originally from ../FSComp.txt:253) + /// (Originally from ..\FSComp.txt:253) static member chkNoAddressOfArrayElementAtThisPoint() = (424, GetStringFunc("chkNoAddressOfArrayElementAtThisPoint",",,,") ) /// The type of a first-class function cannot contain byrefs - /// (Originally from ../FSComp.txt:254) + /// (Originally from ..\FSComp.txt:254) static member chkFirstClassFuncNoByref() = (425, GetStringFunc("chkFirstClassFuncNoByref",",,,") ) /// A method return type would contain byrefs which is not permitted - /// (Originally from ../FSComp.txt:255) + /// (Originally from ..\FSComp.txt:255) static member chkReturnTypeNoByref() = (426, GetStringFunc("chkReturnTypeNoByref",",,,") ) /// Invalid custom attribute value (not a constant or literal) - /// (Originally from ../FSComp.txt:256) + /// (Originally from ..\FSComp.txt:256) static member chkInvalidCustAttrVal() = (428, GetStringFunc("chkInvalidCustAttrVal",",,,") ) /// The attribute type '%s' has 'AllowMultiple=false'. Multiple instances of this attribute cannot be attached to a single language element. - /// (Originally from ../FSComp.txt:257) + /// (Originally from ..\FSComp.txt:257) static member chkAttrHasAllowMultiFalse(a0 : System.String) = (429, GetStringFunc("chkAttrHasAllowMultiFalse",",,,%s,,,") a0) /// The member '%s' is used in an invalid way. A use of '%s' has been inferred prior to its definition at or near '%s'. This is an invalid forward reference. - /// (Originally from ../FSComp.txt:258) + /// (Originally from ..\FSComp.txt:258) static member chkMemberUsedInInvalidWay(a0 : System.String, a1 : System.String, a2 : System.String) = (430, GetStringFunc("chkMemberUsedInInvalidWay",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// A byref typed value would be stored here. Top-level let-bound byref values are not permitted. - /// (Originally from ../FSComp.txt:259) + /// (Originally from ..\FSComp.txt:259) static member chkNoByrefAsTopValue() = (431, GetStringFunc("chkNoByrefAsTopValue",",,,") ) /// [] terms cannot contain uses of the prefix splice operator '%%' - /// (Originally from ../FSComp.txt:260) + /// (Originally from ..\FSComp.txt:260) static member chkReflectedDefCantSplice() = (432, GetStringFunc("chkReflectedDefCantSplice",",,,") ) /// A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. - /// (Originally from ../FSComp.txt:261) + /// (Originally from ..\FSComp.txt:261) static member chkEntryPointUsage() = (433, GetStringFunc("chkEntryPointUsage",",,,") ) /// compiled form of the union case - /// (Originally from ../FSComp.txt:262) + /// (Originally from ..\FSComp.txt:262) static member chkUnionCaseCompiledForm() = (GetStringFunc("chkUnionCaseCompiledForm",",,,") ) /// default augmentation of the union case - /// (Originally from ../FSComp.txt:263) + /// (Originally from ..\FSComp.txt:263) static member chkUnionCaseDefaultAugmentation() = (GetStringFunc("chkUnionCaseDefaultAugmentation",",,,") ) /// The property '%s' has the same name as a method in type '%s'. - /// (Originally from ../FSComp.txt:264) + /// (Originally from ..\FSComp.txt:264) static member chkPropertySameNameMethod(a0 : System.String, a1 : System.String) = (434, GetStringFunc("chkPropertySameNameMethod",",,,%s,,,%s,,,") a0 a1) /// The property '%s' of type '%s' has a getter and a setter that do not match. If one is abstract then the other must be as well. - /// (Originally from ../FSComp.txt:265) + /// (Originally from ..\FSComp.txt:265) static member chkGetterSetterDoNotMatchAbstract(a0 : System.String, a1 : System.String) = (435, GetStringFunc("chkGetterSetterDoNotMatchAbstract",",,,%s,,,%s,,,") a0 a1) /// The property '%s' has the same name as another property in type '%s', but one takes indexer arguments and the other does not. You may be missing an indexer argument to one of your properties. - /// (Originally from ../FSComp.txt:266) + /// (Originally from ..\FSComp.txt:266) static member chkPropertySameNameIndexer(a0 : System.String, a1 : System.String) = (436, GetStringFunc("chkPropertySameNameIndexer",",,,%s,,,%s,,,") a0 a1) /// A type would store a byref typed value. This is not permitted by Common IL. - /// (Originally from ../FSComp.txt:267) + /// (Originally from ..\FSComp.txt:267) static member chkCantStoreByrefValue() = (437, GetStringFunc("chkCantStoreByrefValue",",,,") ) /// Duplicate method. The method '%s' has the same name and signature as another method in type '%s'. - /// (Originally from ../FSComp.txt:269) + /// (Originally from ..\FSComp.txt:269) static member chkDuplicateMethod(a0 : System.String, a1 : System.String) = (438, GetStringFunc("chkDuplicateMethod",",,,%s,,,%s,,,") a0 a1) /// Duplicate method. The method '%s' has the same name and signature as another method in type '%s' once tuples, functions, units of measure and/or provided types are erased. - /// (Originally from ../FSComp.txt:270) + /// (Originally from ..\FSComp.txt:270) static member chkDuplicateMethodWithSuffix(a0 : System.String, a1 : System.String) = (438, GetStringFunc("chkDuplicateMethodWithSuffix",",,,%s,,,%s,,,") a0 a1) /// The method '%s' has curried arguments but has the same name as another method in type '%s'. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments. - /// (Originally from ../FSComp.txt:271) + /// (Originally from ..\FSComp.txt:271) static member chkDuplicateMethodCurried(a0 : System.String, a1 : System.String) = (439, GetStringFunc("chkDuplicateMethodCurried",",,,%s,,,%s,,,") a0 a1) /// Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition', 'byref', 'CallerLineNumber', 'CallerMemberName', or 'CallerFilePath' arguments - /// (Originally from ../FSComp.txt:272) + /// (Originally from ..\FSComp.txt:272) static member chkCurriedMethodsCantHaveOutParams() = (440, GetStringFunc("chkCurriedMethodsCantHaveOutParams",",,,") ) /// Duplicate property. The property '%s' has the same name and signature as another property in type '%s'. - /// (Originally from ../FSComp.txt:273) + /// (Originally from ..\FSComp.txt:273) static member chkDuplicateProperty(a0 : System.String, a1 : System.String) = (441, GetStringFunc("chkDuplicateProperty",",,,%s,,,%s,,,") a0 a1) /// Duplicate property. The property '%s' has the same name and signature as another property in type '%s' once tuples, functions, units of measure and/or provided types are erased. - /// (Originally from ../FSComp.txt:274) + /// (Originally from ..\FSComp.txt:274) static member chkDuplicatePropertyWithSuffix(a0 : System.String, a1 : System.String) = (441, GetStringFunc("chkDuplicatePropertyWithSuffix",",,,%s,,,%s,,,") a0 a1) /// Duplicate method. The abstract method '%s' has the same name and signature as an abstract method in an inherited type. - /// (Originally from ../FSComp.txt:275) + /// (Originally from ..\FSComp.txt:275) static member chkDuplicateMethodInheritedType(a0 : System.String) = (442, GetStringFunc("chkDuplicateMethodInheritedType",",,,%s,,,") a0) /// Duplicate method. The abstract method '%s' has the same name and signature as an abstract method in an inherited type once tuples, functions, units of measure and/or provided types are erased. - /// (Originally from ../FSComp.txt:276) + /// (Originally from ..\FSComp.txt:276) static member chkDuplicateMethodInheritedTypeWithSuffix(a0 : System.String) = (442, GetStringFunc("chkDuplicateMethodInheritedTypeWithSuffix",",,,%s,,,") a0) /// This type implements the same interface at different generic instantiations '%s' and '%s'. This is not permitted in this version of F#. - /// (Originally from ../FSComp.txt:277) + /// (Originally from ..\FSComp.txt:277) static member chkMultipleGenericInterfaceInstantiations(a0 : System.String, a1 : System.String) = (443, GetStringFunc("chkMultipleGenericInterfaceInstantiations",",,,%s,,,%s,,,") a0 a1) /// The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check - /// (Originally from ../FSComp.txt:278) + /// (Originally from ..\FSComp.txt:278) static member chkValueWithDefaultValueMustHaveDefaultValue() = (444, GetStringFunc("chkValueWithDefaultValueMustHaveDefaultValue",",,,") ) /// The type abbreviation contains byrefs. This is not permitted by F#. - /// (Originally from ../FSComp.txt:279) + /// (Originally from ..\FSComp.txt:279) static member chkNoByrefInTypeAbbrev() = (445, GetStringFunc("chkNoByrefInTypeAbbrev",",,,") ) /// The variable '%s' is bound in a quotation but is used as part of a spliced expression. This is not permitted since it may escape its scope. - /// (Originally from ../FSComp.txt:280) + /// (Originally from ..\FSComp.txt:280) static member crefBoundVarUsedInSplice(a0 : System.String) = (446, GetStringFunc("crefBoundVarUsedInSplice",",,,%s,,,") a0) /// Quotations cannot contain uses of generic expressions - /// (Originally from ../FSComp.txt:281) + /// (Originally from ..\FSComp.txt:281) static member crefQuotationsCantContainGenericExprs() = (447, GetStringFunc("crefQuotationsCantContainGenericExprs",",,,") ) /// Quotations cannot contain function definitions that are inferred or declared to be generic. Consider adding some type constraints to make this a valid quoted expression. - /// (Originally from ../FSComp.txt:282) + /// (Originally from ..\FSComp.txt:282) static member crefQuotationsCantContainGenericFunctions() = (448, GetStringFunc("crefQuotationsCantContainGenericFunctions",",,,") ) /// Quotations cannot contain object expressions - /// (Originally from ../FSComp.txt:283) + /// (Originally from ..\FSComp.txt:283) static member crefQuotationsCantContainObjExprs() = (449, GetStringFunc("crefQuotationsCantContainObjExprs",",,,") ) /// Quotations cannot contain expressions that take the address of a field - /// (Originally from ../FSComp.txt:284) + /// (Originally from ..\FSComp.txt:284) static member crefQuotationsCantContainAddressOf() = (450, GetStringFunc("crefQuotationsCantContainAddressOf",",,,") ) /// Quotations cannot contain expressions that fetch static fields - /// (Originally from ../FSComp.txt:285) + /// (Originally from ..\FSComp.txt:285) static member crefQuotationsCantContainStaticFieldRef() = (451, GetStringFunc("crefQuotationsCantContainStaticFieldRef",",,,") ) /// Quotations cannot contain inline assembly code or pattern matching on arrays - /// (Originally from ../FSComp.txt:286) + /// (Originally from ..\FSComp.txt:286) static member crefQuotationsCantContainInlineIL() = (452, GetStringFunc("crefQuotationsCantContainInlineIL",",,,") ) /// Quotations cannot contain descending for loops - /// (Originally from ../FSComp.txt:287) + /// (Originally from ..\FSComp.txt:287) static member crefQuotationsCantContainDescendingForLoops() = (453, GetStringFunc("crefQuotationsCantContainDescendingForLoops",",,,") ) /// Quotations cannot contain expressions that fetch union case indexes - /// (Originally from ../FSComp.txt:288) + /// (Originally from ..\FSComp.txt:288) static member crefQuotationsCantFetchUnionIndexes() = (454, GetStringFunc("crefQuotationsCantFetchUnionIndexes",",,,") ) /// Quotations cannot contain expressions that set union case fields - /// (Originally from ../FSComp.txt:289) + /// (Originally from ..\FSComp.txt:289) static member crefQuotationsCantSetUnionFields() = (455, GetStringFunc("crefQuotationsCantSetUnionFields",",,,") ) /// Quotations cannot contain expressions that set fields in exception values - /// (Originally from ../FSComp.txt:290) + /// (Originally from ..\FSComp.txt:290) static member crefQuotationsCantSetExceptionFields() = (456, GetStringFunc("crefQuotationsCantSetExceptionFields",",,,") ) /// Quotations cannot contain expressions that require byref pointers - /// (Originally from ../FSComp.txt:291) + /// (Originally from ..\FSComp.txt:291) static member crefQuotationsCantRequireByref() = (457, GetStringFunc("crefQuotationsCantRequireByref",",,,") ) /// Quotations cannot contain expressions that make member constraint calls, or uses of operators that implicitly resolve to a member constraint call - /// (Originally from ../FSComp.txt:292) + /// (Originally from ..\FSComp.txt:292) static member crefQuotationsCantCallTraitMembers() = (458, GetStringFunc("crefQuotationsCantCallTraitMembers",",,,") ) /// Quotations cannot contain this kind of constant - /// (Originally from ../FSComp.txt:293) + /// (Originally from ..\FSComp.txt:293) static member crefQuotationsCantContainThisConstant() = (459, GetStringFunc("crefQuotationsCantContainThisConstant",",,,") ) /// Quotations cannot contain this kind of pattern match - /// (Originally from ../FSComp.txt:294) + /// (Originally from ..\FSComp.txt:294) static member crefQuotationsCantContainThisPatternMatch() = (460, GetStringFunc("crefQuotationsCantContainThisPatternMatch",",,,") ) /// Quotations cannot contain array pattern matching - /// (Originally from ../FSComp.txt:295) + /// (Originally from ..\FSComp.txt:295) static member crefQuotationsCantContainArrayPatternMatching() = (461, GetStringFunc("crefQuotationsCantContainArrayPatternMatching",",,,") ) /// Quotations cannot contain this kind of type - /// (Originally from ../FSComp.txt:296) + /// (Originally from ..\FSComp.txt:296) static member crefQuotationsCantContainThisType() = (462, GetStringFunc("crefQuotationsCantContainThisType",",,,") ) /// The declared type parameter '%s' cannot be used here since the type parameter cannot be resolved at compile time - /// (Originally from ../FSComp.txt:297) + /// (Originally from ..\FSComp.txt:297) static member csTypeCannotBeResolvedAtCompileTime(a0 : System.String) = (GetStringFunc("csTypeCannotBeResolvedAtCompileTime",",,,%s,,,") a0) /// This code is less generic than indicated by its annotations. A unit-of-measure specified using '_' has been determined to be '1', i.e. dimensionless. Consider making the code generic, or removing the use of '_'. - /// (Originally from ../FSComp.txt:298) + /// (Originally from ..\FSComp.txt:298) static member csCodeLessGeneric() = (464, GetStringFunc("csCodeLessGeneric",",,,") ) /// Type inference problem too complicated (maximum iteration depth reached). Consider adding further type annotations. - /// (Originally from ../FSComp.txt:299) + /// (Originally from ..\FSComp.txt:299) static member csTypeInferenceMaxDepth() = (465, GetStringFunc("csTypeInferenceMaxDepth",",,,") ) /// Expected arguments to an instance member - /// (Originally from ../FSComp.txt:300) + /// (Originally from ..\FSComp.txt:300) static member csExpectedArguments() = (GetStringFunc("csExpectedArguments",",,,") ) /// This indexer expects %d arguments but is here given %d - /// (Originally from ../FSComp.txt:301) + /// (Originally from ..\FSComp.txt:301) static member csIndexArgumentMismatch(a0 : System.Int32, a1 : System.Int32) = (GetStringFunc("csIndexArgumentMismatch",",,,%d,,,%d,,,") a0 a1) /// Expecting a type supporting the operator '%s' but given a function type. You may be missing an argument to a function. - /// (Originally from ../FSComp.txt:302) + /// (Originally from ..\FSComp.txt:302) static member csExpectTypeWithOperatorButGivenFunction(a0 : System.String) = (GetStringFunc("csExpectTypeWithOperatorButGivenFunction",",,,%s,,,") a0) /// Expecting a type supporting the operator '%s' but given a tuple type - /// (Originally from ../FSComp.txt:303) + /// (Originally from ..\FSComp.txt:303) static member csExpectTypeWithOperatorButGivenTuple(a0 : System.String) = (GetStringFunc("csExpectTypeWithOperatorButGivenTuple",",,,%s,,,") a0) /// None of the types '%s' support the operator '%s' - /// (Originally from ../FSComp.txt:304) + /// (Originally from ..\FSComp.txt:304) static member csTypesDoNotSupportOperator(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypesDoNotSupportOperator",",,,%s,,,%s,,,") a0 a1) /// The type '%s' does not support the operator '%s' - /// (Originally from ../FSComp.txt:305) + /// (Originally from ..\FSComp.txt:305) static member csTypeDoesNotSupportOperator(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypeDoesNotSupportOperator",",,,%s,,,%s,,,") a0 a1) /// None of the types '%s' support the operator '%s'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - /// (Originally from ../FSComp.txt:306) + /// (Originally from ..\FSComp.txt:306) static member csTypesDoNotSupportOperatorNullable(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypesDoNotSupportOperatorNullable",",,,%s,,,%s,,,") a0 a1) /// The type '%s' does not support the operator '%s'. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - /// (Originally from ../FSComp.txt:307) + /// (Originally from ..\FSComp.txt:307) static member csTypeDoesNotSupportOperatorNullable(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypeDoesNotSupportOperatorNullable",",,,%s,,,%s,,,") a0 a1) /// The type '%s' does not support a conversion to the type '%s' - /// (Originally from ../FSComp.txt:308) + /// (Originally from ..\FSComp.txt:308) static member csTypeDoesNotSupportConversion(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypeDoesNotSupportConversion",",,,%s,,,%s,,,") a0 a1) /// The type '%s' has a method '%s' (full name '%s'), but the method is static - /// (Originally from ../FSComp.txt:309) + /// (Originally from ..\FSComp.txt:309) static member csMethodFoundButIsStatic(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("csMethodFoundButIsStatic",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type '%s' has a method '%s' (full name '%s'), but the method is not static - /// (Originally from ../FSComp.txt:310) + /// (Originally from ..\FSComp.txt:310) static member csMethodFoundButIsNotStatic(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("csMethodFoundButIsNotStatic",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The constraints 'struct' and 'not struct' are inconsistent - /// (Originally from ../FSComp.txt:311) + /// (Originally from ..\FSComp.txt:311) static member csStructConstraintInconsistent() = (472, GetStringFunc("csStructConstraintInconsistent",",,,") ) /// The type '%s' does not have 'null' as a proper value - /// (Originally from ../FSComp.txt:312) + /// (Originally from ..\FSComp.txt:312) static member csTypeDoesNotHaveNull(a0 : System.String) = (GetStringFunc("csTypeDoesNotHaveNull",",,,%s,,,") a0) /// The type '%s' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'. - /// (Originally from ../FSComp.txt:313) + /// (Originally from ..\FSComp.txt:313) static member csNullableTypeDoesNotHaveNull(a0 : System.String) = (GetStringFunc("csNullableTypeDoesNotHaveNull",",,,%s,,,") a0) /// The type '%s' does not support the 'comparison' constraint because it has the 'NoComparison' attribute - /// (Originally from ../FSComp.txt:314) + /// (Originally from ..\FSComp.txt:314) static member csTypeDoesNotSupportComparison1(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportComparison1",",,,%s,,,") a0) /// The type '%s' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface - /// (Originally from ../FSComp.txt:315) + /// (Originally from ..\FSComp.txt:315) static member csTypeDoesNotSupportComparison2(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportComparison2",",,,%s,,,") a0) /// The type '%s' does not support the 'comparison' constraint because it is a record, union or struct with one or more structural element types which do not support the 'comparison' constraint. Either avoid the use of comparison with this type, or add the 'StructuralComparison' attribute to the type to determine which field type does not support comparison - /// (Originally from ../FSComp.txt:316) + /// (Originally from ..\FSComp.txt:316) static member csTypeDoesNotSupportComparison3(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportComparison3",",,,%s,,,") a0) /// The type '%s' does not support the 'equality' constraint because it has the 'NoEquality' attribute - /// (Originally from ../FSComp.txt:317) + /// (Originally from ..\FSComp.txt:317) static member csTypeDoesNotSupportEquality1(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportEquality1",",,,%s,,,") a0) /// The type '%s' does not support the 'equality' constraint because it is a function type - /// (Originally from ../FSComp.txt:318) + /// (Originally from ..\FSComp.txt:318) static member csTypeDoesNotSupportEquality2(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportEquality2",",,,%s,,,") a0) /// The type '%s' does not support the 'equality' constraint because it is a record, union or struct with one or more structural element types which do not support the 'equality' constraint. Either avoid the use of equality with this type, or add the 'StructuralEquality' attribute to the type to determine which field type does not support equality - /// (Originally from ../FSComp.txt:319) + /// (Originally from ..\FSComp.txt:319) static member csTypeDoesNotSupportEquality3(a0 : System.String) = (GetStringFunc("csTypeDoesNotSupportEquality3",",,,%s,,,") a0) /// The type '%s' is not a CLI enum type - /// (Originally from ../FSComp.txt:320) + /// (Originally from ..\FSComp.txt:320) static member csTypeIsNotEnumType(a0 : System.String) = (GetStringFunc("csTypeIsNotEnumType",",,,%s,,,") a0) /// The type '%s' has a non-standard delegate type - /// (Originally from ../FSComp.txt:321) + /// (Originally from ..\FSComp.txt:321) static member csTypeHasNonStandardDelegateType(a0 : System.String) = (GetStringFunc("csTypeHasNonStandardDelegateType",",,,%s,,,") a0) /// The type '%s' is not a CLI delegate type - /// (Originally from ../FSComp.txt:322) + /// (Originally from ..\FSComp.txt:322) static member csTypeIsNotDelegateType(a0 : System.String) = (GetStringFunc("csTypeIsNotDelegateType",",,,%s,,,") a0) /// This type parameter cannot be instantiated to 'Nullable'. This is a restriction imposed in order to ensure the meaning of 'null' in some CLI languages is not confusing when used in conjunction with 'Nullable' values. - /// (Originally from ../FSComp.txt:323) + /// (Originally from ..\FSComp.txt:323) static member csTypeParameterCannotBeNullable() = (GetStringFunc("csTypeParameterCannotBeNullable",",,,") ) /// A generic construct requires that the type '%s' is a CLI or F# struct type - /// (Originally from ../FSComp.txt:324) + /// (Originally from ..\FSComp.txt:324) static member csGenericConstructRequiresStructType(a0 : System.String) = (GetStringFunc("csGenericConstructRequiresStructType",",,,%s,,,") a0) /// A generic construct requires that the type '%s' is an unmanaged type - /// (Originally from ../FSComp.txt:325) + /// (Originally from ..\FSComp.txt:325) static member csGenericConstructRequiresUnmanagedType(a0 : System.String) = (GetStringFunc("csGenericConstructRequiresUnmanagedType",",,,%s,,,") a0) /// The type '%s' is not compatible with any of the types %s, arising from the use of a printf-style format string - /// (Originally from ../FSComp.txt:326) + /// (Originally from ..\FSComp.txt:326) static member csTypeNotCompatibleBecauseOfPrintf(a0 : System.String, a1 : System.String) = (GetStringFunc("csTypeNotCompatibleBecauseOfPrintf",",,,%s,,,%s,,,") a0 a1) /// A generic construct requires that the type '%s' have reference semantics, but it does not, i.e. it is a struct - /// (Originally from ../FSComp.txt:327) + /// (Originally from ..\FSComp.txt:327) static member csGenericConstructRequiresReferenceSemantics(a0 : System.String) = (GetStringFunc("csGenericConstructRequiresReferenceSemantics",",,,%s,,,") a0) /// A generic construct requires that the type '%s' be non-abstract - /// (Originally from ../FSComp.txt:328) + /// (Originally from ..\FSComp.txt:328) static member csGenericConstructRequiresNonAbstract(a0 : System.String) = (GetStringFunc("csGenericConstructRequiresNonAbstract",",,,%s,,,") a0) /// A generic construct requires that the type '%s' have a public default constructor - /// (Originally from ../FSComp.txt:329) + /// (Originally from ..\FSComp.txt:329) static member csGenericConstructRequiresPublicDefaultConstructor(a0 : System.String) = (GetStringFunc("csGenericConstructRequiresPublicDefaultConstructor",",,,%s,,,") a0) /// Type instantiation length mismatch - /// (Originally from ../FSComp.txt:330) + /// (Originally from ..\FSComp.txt:330) static member csTypeInstantiationLengthMismatch() = (483, GetStringFunc("csTypeInstantiationLengthMismatch",",,,") ) /// Optional arguments not permitted here - /// (Originally from ../FSComp.txt:331) + /// (Originally from ..\FSComp.txt:331) static member csOptionalArgumentNotPermittedHere() = (484, GetStringFunc("csOptionalArgumentNotPermittedHere",",,,") ) /// %s is not a static member - /// (Originally from ../FSComp.txt:332) + /// (Originally from ..\FSComp.txt:332) static member csMemberIsNotStatic(a0 : System.String) = (485, GetStringFunc("csMemberIsNotStatic",",,,%s,,,") a0) /// %s is not an instance member - /// (Originally from ../FSComp.txt:333) + /// (Originally from ..\FSComp.txt:333) static member csMemberIsNotInstance(a0 : System.String) = (486, GetStringFunc("csMemberIsNotInstance",",,,%s,,,") a0) /// Argument length mismatch - /// (Originally from ../FSComp.txt:334) + /// (Originally from ..\FSComp.txt:334) static member csArgumentLengthMismatch() = (487, GetStringFunc("csArgumentLengthMismatch",",,,") ) /// The argument types don't match - /// (Originally from ../FSComp.txt:335) + /// (Originally from ..\FSComp.txt:335) static member csArgumentTypesDoNotMatch() = (488, GetStringFunc("csArgumentTypesDoNotMatch",",,,") ) /// This method expects a CLI 'params' parameter in this position. 'params' is a way of passing a variable number of arguments to a method in languages such as C#. Consider passing an array for this argument - /// (Originally from ../FSComp.txt:336) + /// (Originally from ..\FSComp.txt:336) static member csMethodExpectsParams() = (489, GetStringFunc("csMethodExpectsParams",",,,") ) /// The member or object constructor '%s' is not %s - /// (Originally from ../FSComp.txt:337) + /// (Originally from ..\FSComp.txt:337) static member csMemberIsNotAccessible(a0 : System.String, a1 : System.String) = (490, GetStringFunc("csMemberIsNotAccessible",",,,%s,,,%s,,,") a0 a1) /// The member or object constructor '%s' is not %s. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions. - /// (Originally from ../FSComp.txt:338) + /// (Originally from ..\FSComp.txt:338) static member csMemberIsNotAccessible2(a0 : System.String, a1 : System.String) = (491, GetStringFunc("csMemberIsNotAccessible2",",,,%s,,,%s,,,") a0 a1) /// %s is not a static method - /// (Originally from ../FSComp.txt:339) + /// (Originally from ..\FSComp.txt:339) static member csMethodIsNotAStaticMethod(a0 : System.String) = (492, GetStringFunc("csMethodIsNotAStaticMethod",",,,%s,,,") a0) /// %s is not an instance method - /// (Originally from ../FSComp.txt:340) + /// (Originally from ..\FSComp.txt:340) static member csMethodIsNotAnInstanceMethod(a0 : System.String) = (493, GetStringFunc("csMethodIsNotAnInstanceMethod",",,,%s,,,") a0) /// The member or object constructor '%s' has no argument or settable return property '%s'. %s. - /// (Originally from ../FSComp.txt:341) + /// (Originally from ..\FSComp.txt:341) static member csMemberHasNoArgumentOrReturnProperty(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("csMemberHasNoArgumentOrReturnProperty",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The object constructor '%s' has no argument or settable return property '%s'. %s. - /// (Originally from ../FSComp.txt:342) + /// (Originally from ..\FSComp.txt:342) static member csCtorHasNoArgumentOrReturnProperty(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("csCtorHasNoArgumentOrReturnProperty",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The required signature is %s - /// (Originally from ../FSComp.txt:343) + /// (Originally from ..\FSComp.txt:343) static member csRequiredSignatureIs(a0 : System.String) = (495, GetStringFunc("csRequiredSignatureIs",",,,%s,,,") a0) /// The member or object constructor '%s' requires %d argument(s). The required signature is '%s'. - /// (Originally from ../FSComp.txt:344) + /// (Originally from ..\FSComp.txt:344) static member csMemberSignatureMismatch(a0 : System.String, a1 : System.Int32, a2 : System.String) = (496, GetStringFunc("csMemberSignatureMismatch",",,,%s,,,%d,,,%s,,,") a0 a1 a2) /// The member or object constructor '%s' requires %d additional argument(s). The required signature is '%s'. - /// (Originally from ../FSComp.txt:345) + /// (Originally from ..\FSComp.txt:345) static member csMemberSignatureMismatch2(a0 : System.String, a1 : System.Int32, a2 : System.String) = (497, GetStringFunc("csMemberSignatureMismatch2",",,,%s,,,%d,,,%s,,,") a0 a1 a2) /// The member or object constructor '%s' requires %d argument(s). The required signature is '%s'. Some names for missing arguments are %s. - /// (Originally from ../FSComp.txt:346) + /// (Originally from ..\FSComp.txt:346) static member csMemberSignatureMismatch3(a0 : System.String, a1 : System.Int32, a2 : System.String, a3 : System.String) = (498, GetStringFunc("csMemberSignatureMismatch3",",,,%s,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3) /// The member or object constructor '%s' requires %d additional argument(s). The required signature is '%s'. Some names for missing arguments are %s. - /// (Originally from ../FSComp.txt:347) + /// (Originally from ..\FSComp.txt:347) static member csMemberSignatureMismatch4(a0 : System.String, a1 : System.Int32, a2 : System.String, a3 : System.String) = (499, GetStringFunc("csMemberSignatureMismatch4",",,,%s,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3) /// The member or object constructor '%s' requires %d argument(s) but is here given %d unnamed and %d named argument(s). The required signature is '%s'. - /// (Originally from ../FSComp.txt:348) + /// (Originally from ..\FSComp.txt:348) static member csMemberSignatureMismatchArityNamed(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.Int32, a4 : System.String) = (500, GetStringFunc("csMemberSignatureMismatchArityNamed",",,,%s,,,%d,,,%d,,,%d,,,%s,,,") a0 a1 a2 a3 a4) /// The member or object constructor '%s' takes %d argument(s) but is here given %d. The required signature is '%s'. - /// (Originally from ../FSComp.txt:349) + /// (Originally from ..\FSComp.txt:349) static member csMemberSignatureMismatchArity(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String) = (501, GetStringFunc("csMemberSignatureMismatchArity",",,,%s,,,%d,,,%d,,,%s,,,") a0 a1 a2 a3) /// The object constructor '%s' takes %d argument(s) but is here given %d. The required signature is '%s'. - /// (Originally from ../FSComp.txt:350) + /// (Originally from ..\FSComp.txt:350) static member csCtorSignatureMismatchArity(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String) = (501, GetStringFunc("csCtorSignatureMismatchArity",",,,%s,,,%d,,,%d,,,%s,,,") a0 a1 a2 a3) /// The object constructor '%s' takes %d argument(s) but is here given %d. The required signature is '%s'. If some of the arguments are meant to assign values to properties, consider separating those arguments with a comma (','). - /// (Originally from ../FSComp.txt:351) + /// (Originally from ..\FSComp.txt:351) static member csCtorSignatureMismatchArityProp(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String) = (501, GetStringFunc("csCtorSignatureMismatchArityProp",",,,%s,,,%d,,,%d,,,%s,,,") a0 a1 a2 a3) /// The member or object constructor '%s' takes %d type argument(s) but is here given %d. The required signature is '%s'. - /// (Originally from ../FSComp.txt:352) + /// (Originally from ..\FSComp.txt:352) static member csMemberSignatureMismatchArityType(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String) = (502, GetStringFunc("csMemberSignatureMismatchArityType",",,,%s,,,%d,,,%d,,,%s,,,") a0 a1 a2 a3) /// A member or object constructor '%s' taking %d arguments is not accessible from this code location. All accessible versions of method '%s' take %d arguments. - /// (Originally from ../FSComp.txt:353) + /// (Originally from ..\FSComp.txt:353) static member csMemberNotAccessible(a0 : System.String, a1 : System.Int32, a2 : System.String, a3 : System.Int32) = (503, GetStringFunc("csMemberNotAccessible",",,,%s,,,%d,,,%s,,,%d,,,") a0 a1 a2 a3) /// Incorrect generic instantiation. No %s member named '%s' takes %d generic arguments. - /// (Originally from ../FSComp.txt:354) + /// (Originally from ..\FSComp.txt:354) static member csIncorrectGenericInstantiation(a0 : System.String, a1 : System.String, a2 : System.Int32) = (504, GetStringFunc("csIncorrectGenericInstantiation",",,,%s,,,%s,,,%d,,,") a0 a1 a2) /// The member or object constructor '%s' does not take %d argument(s). An overload was found taking %d arguments. - /// (Originally from ../FSComp.txt:355) + /// (Originally from ..\FSComp.txt:355) static member csMemberOverloadArityMismatch(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (505, GetStringFunc("csMemberOverloadArityMismatch",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// No %s member or object constructor named '%s' takes %d arguments - /// (Originally from ../FSComp.txt:356) + /// (Originally from ..\FSComp.txt:356) static member csNoMemberTakesTheseArguments(a0 : System.String, a1 : System.String, a2 : System.Int32) = (506, GetStringFunc("csNoMemberTakesTheseArguments",",,,%s,,,%s,,,%d,,,") a0 a1 a2) /// No %s member or object constructor named '%s' takes %d arguments. Note the call to this member also provides %d named arguments. - /// (Originally from ../FSComp.txt:357) + /// (Originally from ..\FSComp.txt:357) static member csNoMemberTakesTheseArguments2(a0 : System.String, a1 : System.String, a2 : System.Int32, a3 : System.Int32) = (507, GetStringFunc("csNoMemberTakesTheseArguments2",",,,%s,,,%s,,,%d,,,%d,,,") a0 a1 a2 a3) /// No %s member or object constructor named '%s' takes %d arguments. The named argument '%s' doesn't correspond to any argument or settable return property for any overload. - /// (Originally from ../FSComp.txt:358) + /// (Originally from ..\FSComp.txt:358) static member csNoMemberTakesTheseArguments3(a0 : System.String, a1 : System.String, a2 : System.Int32, a3 : System.String) = (508, GetStringFunc("csNoMemberTakesTheseArguments3",",,,%s,,,%s,,,%d,,,%s,,,") a0 a1 a2 a3) /// Method or object constructor '%s' not found - /// (Originally from ../FSComp.txt:359) + /// (Originally from ..\FSComp.txt:359) static member csMethodNotFound(a0 : System.String) = (509, GetStringFunc("csMethodNotFound",",,,%s,,,") a0) /// No overloads match for method '%s'. - /// (Originally from ../FSComp.txt:360) + /// (Originally from ..\FSComp.txt:360) static member csNoOverloadsFound(a0 : System.String) = (GetStringFunc("csNoOverloadsFound",",,,%s,,,") a0) /// A unique overload for method '%s' could not be determined based on type information prior to this program point. A type annotation may be needed. - /// (Originally from ../FSComp.txt:361) + /// (Originally from ..\FSComp.txt:361) static member csMethodIsOverloaded(a0 : System.String) = (GetStringFunc("csMethodIsOverloaded",",,,%s,,,") a0) /// Candidates: %s - /// (Originally from ../FSComp.txt:362) + /// (Originally from ..\FSComp.txt:362) static member csCandidates(a0 : System.String) = (GetStringFunc("csCandidates",",,,%s,,,") a0) /// The available overloads are shown below. - /// (Originally from ../FSComp.txt:363) + /// (Originally from ..\FSComp.txt:363) static member csSeeAvailableOverloads() = (GetStringFunc("csSeeAvailableOverloads",",,,") ) /// Accessibility modifiers are not permitted on 'do' bindings, but '%s' was given. - /// (Originally from ../FSComp.txt:364) + /// (Originally from ..\FSComp.txt:364) static member parsDoCannotHaveVisibilityDeclarations(a0 : System.String) = (512, GetStringFunc("parsDoCannotHaveVisibilityDeclarations",",,,%s,,,") a0) /// End of file in #if section begun at or after here - /// (Originally from ../FSComp.txt:365) + /// (Originally from ..\FSComp.txt:365) static member parsEofInHashIf() = (513, GetStringFunc("parsEofInHashIf",",,,") ) /// End of file in string begun at or before here - /// (Originally from ../FSComp.txt:366) + /// (Originally from ..\FSComp.txt:366) static member parsEofInString() = (514, GetStringFunc("parsEofInString",",,,") ) /// End of file in verbatim string begun at or before here - /// (Originally from ../FSComp.txt:367) + /// (Originally from ..\FSComp.txt:367) static member parsEofInVerbatimString() = (515, GetStringFunc("parsEofInVerbatimString",",,,") ) /// End of file in comment begun at or before here - /// (Originally from ../FSComp.txt:368) + /// (Originally from ..\FSComp.txt:368) static member parsEofInComment() = (516, GetStringFunc("parsEofInComment",",,,") ) /// End of file in string embedded in comment begun at or before here - /// (Originally from ../FSComp.txt:369) + /// (Originally from ..\FSComp.txt:369) static member parsEofInStringInComment() = (517, GetStringFunc("parsEofInStringInComment",",,,") ) /// End of file in verbatim string embedded in comment begun at or before here - /// (Originally from ../FSComp.txt:370) + /// (Originally from ..\FSComp.txt:370) static member parsEofInVerbatimStringInComment() = (518, GetStringFunc("parsEofInVerbatimStringInComment",",,,") ) /// End of file in IF-OCAML section begun at or before here - /// (Originally from ../FSComp.txt:371) + /// (Originally from ..\FSComp.txt:371) static member parsEofInIfOcaml() = (519, GetStringFunc("parsEofInIfOcaml",",,,") ) /// End of file in directive begun at or before here - /// (Originally from ../FSComp.txt:372) + /// (Originally from ..\FSComp.txt:372) static member parsEofInDirective() = (520, GetStringFunc("parsEofInDirective",",,,") ) /// No #endif found for #if or #else - /// (Originally from ../FSComp.txt:373) + /// (Originally from ..\FSComp.txt:373) static member parsNoHashEndIfFound() = (521, GetStringFunc("parsNoHashEndIfFound",",,,") ) /// Attributes have been ignored in this construct - /// (Originally from ../FSComp.txt:374) + /// (Originally from ..\FSComp.txt:374) static member parsAttributesIgnored() = (522, GetStringFunc("parsAttributesIgnored",",,,") ) /// 'use' bindings are not permitted in primary constructors - /// (Originally from ../FSComp.txt:375) + /// (Originally from ..\FSComp.txt:375) static member parsUseBindingsIllegalInImplicitClassConstructors() = (523, GetStringFunc("parsUseBindingsIllegalInImplicitClassConstructors",",,,") ) /// 'use' bindings are not permitted in modules and are treated as 'let' bindings - /// (Originally from ../FSComp.txt:376) + /// (Originally from ..\FSComp.txt:376) static member parsUseBindingsIllegalInModules() = (524, GetStringFunc("parsUseBindingsIllegalInModules",",,,") ) /// An integer for loop must use a simple identifier - /// (Originally from ../FSComp.txt:377) + /// (Originally from ..\FSComp.txt:377) static member parsIntegerForLoopRequiresSimpleIdentifier() = (525, GetStringFunc("parsIntegerForLoopRequiresSimpleIdentifier",",,,") ) /// At most one 'with' augmentation is permitted - /// (Originally from ../FSComp.txt:378) + /// (Originally from ..\FSComp.txt:378) static member parsOnlyOneWithAugmentationAllowed() = (526, GetStringFunc("parsOnlyOneWithAugmentationAllowed",",,,") ) /// A semicolon is not expected at this point - /// (Originally from ../FSComp.txt:379) + /// (Originally from ..\FSComp.txt:379) static member parsUnexpectedSemicolon() = (527, GetStringFunc("parsUnexpectedSemicolon",",,,") ) /// Unexpected end of input - /// (Originally from ../FSComp.txt:380) + /// (Originally from ..\FSComp.txt:380) static member parsUnexpectedEndOfFile() = (528, GetStringFunc("parsUnexpectedEndOfFile",",,,") ) /// Accessibility modifiers are not permitted here, but '%s' was given. - /// (Originally from ../FSComp.txt:381) + /// (Originally from ..\FSComp.txt:381) static member parsUnexpectedVisibilityDeclaration(a0 : System.String) = (529, GetStringFunc("parsUnexpectedVisibilityDeclaration",",,,%s,,,") a0) /// Only '#' compiler directives may occur prior to the first 'namespace' declaration - /// (Originally from ../FSComp.txt:382) + /// (Originally from ..\FSComp.txt:382) static member parsOnlyHashDirectivesAllowed() = (530, GetStringFunc("parsOnlyHashDirectivesAllowed",",,,") ) /// Accessibility modifiers should come immediately prior to the identifier naming a construct - /// (Originally from ../FSComp.txt:383) + /// (Originally from ..\FSComp.txt:383) static member parsVisibilityDeclarationsShouldComePriorToIdentifier() = (531, GetStringFunc("parsVisibilityDeclarationsShouldComePriorToIdentifier",",,,") ) /// Files should begin with either a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule', but not both. To define a module within a namespace use 'module SomeModule = ...' - /// (Originally from ../FSComp.txt:384) + /// (Originally from ..\FSComp.txt:384) static member parsNamespaceOrModuleNotBoth() = (532, GetStringFunc("parsNamespaceOrModuleNotBoth",",,,") ) /// A module abbreviation must be a simple name, not a path - /// (Originally from ../FSComp.txt:385) + /// (Originally from ..\FSComp.txt:385) static member parsModuleAbbreviationMustBeSimpleName() = (534, GetStringFunc("parsModuleAbbreviationMustBeSimpleName",",,,") ) /// Ignoring attributes on module abbreviation - /// (Originally from ../FSComp.txt:386) + /// (Originally from ..\FSComp.txt:386) static member parsIgnoreAttributesOnModuleAbbreviation() = (535, GetStringFunc("parsIgnoreAttributesOnModuleAbbreviation",",,,") ) /// The '%s' accessibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - /// (Originally from ../FSComp.txt:387) + /// (Originally from ..\FSComp.txt:387) static member parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate(a0 : System.String) = (536, GetStringFunc("parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate",",,,%s,,,") a0) /// The '%s' visibility attribute is not allowed on module abbreviation. Module abbreviations are always private. - /// (Originally from ../FSComp.txt:388) + /// (Originally from ..\FSComp.txt:388) static member parsIgnoreVisibilityOnModuleAbbreviationAlwaysPrivate(a0 : System.String) = (537, GetStringFunc("parsIgnoreVisibilityOnModuleAbbreviationAlwaysPrivate",",,,%s,,,") a0) /// Unclosed block - /// (Originally from ../FSComp.txt:389) + /// (Originally from ..\FSComp.txt:389) static member parsUnClosedBlockInHashLight() = (538, GetStringFunc("parsUnClosedBlockInHashLight",",,,") ) /// Unmatched 'begin' or 'struct' - /// (Originally from ../FSComp.txt:390) + /// (Originally from ..\FSComp.txt:390) static member parsUnmatchedBeginOrStruct() = (539, GetStringFunc("parsUnmatchedBeginOrStruct",",,,") ) /// A module name must be a simple name, not a path - /// (Originally from ../FSComp.txt:391) + /// (Originally from ..\FSComp.txt:391) static member parsModuleDefnMustBeSimpleName() = (541, GetStringFunc("parsModuleDefnMustBeSimpleName",",,,") ) /// Unexpected empty type moduleDefn list - /// (Originally from ../FSComp.txt:392) + /// (Originally from ..\FSComp.txt:392) static member parsUnexpectedEmptyModuleDefn() = (542, GetStringFunc("parsUnexpectedEmptyModuleDefn",",,,") ) /// Attributes should be placed before 'val' - /// (Originally from ../FSComp.txt:393) + /// (Originally from ..\FSComp.txt:393) static member parsAttributesMustComeBeforeVal() = (GetStringFunc("parsAttributesMustComeBeforeVal",",,,") ) /// Attributes are not permitted on interface implementations - /// (Originally from ../FSComp.txt:394) + /// (Originally from ..\FSComp.txt:394) static member parsAttributesAreNotPermittedOnInterfaceImplementations() = (543, GetStringFunc("parsAttributesAreNotPermittedOnInterfaceImplementations",",,,") ) /// Syntax error - /// (Originally from ../FSComp.txt:395) + /// (Originally from ..\FSComp.txt:395) static member parsSyntaxError() = (544, GetStringFunc("parsSyntaxError",",,,") ) /// Augmentations are not permitted on delegate type moduleDefns - /// (Originally from ../FSComp.txt:396) + /// (Originally from ..\FSComp.txt:396) static member parsAugmentationsIllegalOnDelegateType() = (545, GetStringFunc("parsAugmentationsIllegalOnDelegateType",",,,") ) /// Unmatched 'class', 'interface' or 'struct' - /// (Originally from ../FSComp.txt:397) + /// (Originally from ..\FSComp.txt:397) static member parsUnmatchedClassInterfaceOrStruct() = (546, GetStringFunc("parsUnmatchedClassInterfaceOrStruct",",,,") ) /// A type definition requires one or more members or other declarations. If you intend to define an empty class, struct or interface, then use 'type ... = class end', 'interface end' or 'struct end'. - /// (Originally from ../FSComp.txt:398) + /// (Originally from ..\FSComp.txt:398) static member parsEmptyTypeDefinition() = (547, GetStringFunc("parsEmptyTypeDefinition",",,,") ) /// Unmatched 'with' or badly formatted 'with' block - /// (Originally from ../FSComp.txt:399) + /// (Originally from ..\FSComp.txt:399) static member parsUnmatchedWith() = (550, GetStringFunc("parsUnmatchedWith",",,,") ) /// 'get', 'set' or 'get,set' required - /// (Originally from ../FSComp.txt:400) + /// (Originally from ..\FSComp.txt:400) static member parsGetOrSetRequired() = (551, GetStringFunc("parsGetOrSetRequired",",,,") ) /// Only class types may take value arguments - /// (Originally from ../FSComp.txt:401) + /// (Originally from ..\FSComp.txt:401) static member parsOnlyClassCanTakeValueArguments() = (552, GetStringFunc("parsOnlyClassCanTakeValueArguments",",,,") ) /// Unmatched 'begin' - /// (Originally from ../FSComp.txt:402) + /// (Originally from ..\FSComp.txt:402) static member parsUnmatchedBegin() = (553, GetStringFunc("parsUnmatchedBegin",",,,") ) /// Invalid declaration syntax - /// (Originally from ../FSComp.txt:403) + /// (Originally from ..\FSComp.txt:403) static member parsInvalidDeclarationSyntax() = (554, GetStringFunc("parsInvalidDeclarationSyntax",",,,") ) /// 'get' and/or 'set' required - /// (Originally from ../FSComp.txt:404) + /// (Originally from ..\FSComp.txt:404) static member parsGetAndOrSetRequired() = (555, GetStringFunc("parsGetAndOrSetRequired",",,,") ) /// Type annotations on property getters and setters must be given after the 'get()' or 'set(v)', e.g. 'with get() : string = ...' - /// (Originally from ../FSComp.txt:405) + /// (Originally from ..\FSComp.txt:405) static member parsTypeAnnotationsOnGetSet() = (556, GetStringFunc("parsTypeAnnotationsOnGetSet",",,,") ) /// A getter property is expected to be a function, e.g. 'get() = ...' or 'get(index) = ...' - /// (Originally from ../FSComp.txt:406) + /// (Originally from ..\FSComp.txt:406) static member parsGetterMustHaveAtLeastOneArgument() = (557, GetStringFunc("parsGetterMustHaveAtLeastOneArgument",",,,") ) /// Multiple accessibilities given for property getter or setter - /// (Originally from ../FSComp.txt:407) + /// (Originally from ..\FSComp.txt:407) static member parsMultipleAccessibilitiesForGetSet() = (558, GetStringFunc("parsMultipleAccessibilitiesForGetSet",",,,") ) /// Property setters must be defined using 'set value = ', 'set idx value = ' or 'set (idx1,...,idxN) value = ... ' - /// (Originally from ../FSComp.txt:408) + /// (Originally from ..\FSComp.txt:408) static member parsSetSyntax() = (559, GetStringFunc("parsSetSyntax",",,,") ) /// Interfaces always have the same visibility as the enclosing type - /// (Originally from ../FSComp.txt:409) + /// (Originally from ..\FSComp.txt:409) static member parsInterfacesHaveSameVisibilityAsEnclosingType() = (560, GetStringFunc("parsInterfacesHaveSameVisibilityAsEnclosingType",",,,") ) /// Accessibility modifiers are not allowed on this member. Abstract slots always have the same visibility as the enclosing type. - /// (Originally from ../FSComp.txt:410) + /// (Originally from ..\FSComp.txt:410) static member parsAccessibilityModsIllegalForAbstract() = (561, GetStringFunc("parsAccessibilityModsIllegalForAbstract",",,,") ) /// Attributes are not permitted on 'inherit' declarations - /// (Originally from ../FSComp.txt:411) + /// (Originally from ..\FSComp.txt:411) static member parsAttributesIllegalOnInherit() = (562, GetStringFunc("parsAttributesIllegalOnInherit",",,,") ) /// Accessibility modifiers are not permitted on an 'inherits' declaration - /// (Originally from ../FSComp.txt:412) + /// (Originally from ..\FSComp.txt:412) static member parsVisibilityIllegalOnInherit() = (563, GetStringFunc("parsVisibilityIllegalOnInherit",",,,") ) /// 'inherit' declarations cannot have 'as' bindings. To access members of the base class when overriding a method, the syntax 'base.SomeMember' may be used; 'base' is a keyword. Remove this 'as' binding. - /// (Originally from ../FSComp.txt:413) + /// (Originally from ..\FSComp.txt:413) static member parsInheritDeclarationsCannotHaveAsBindings() = (564, GetStringFunc("parsInheritDeclarationsCannotHaveAsBindings",",,,") ) /// Attributes are not allowed here - /// (Originally from ../FSComp.txt:414) + /// (Originally from ..\FSComp.txt:414) static member parsAttributesIllegalHere() = (565, GetStringFunc("parsAttributesIllegalHere",",,,") ) /// Accessibility modifiers are not permitted in this position for type abbreviations - /// (Originally from ../FSComp.txt:415) + /// (Originally from ..\FSComp.txt:415) static member parsTypeAbbreviationsCannotHaveVisibilityDeclarations() = (566, GetStringFunc("parsTypeAbbreviationsCannotHaveVisibilityDeclarations",",,,") ) /// Accessibility modifiers are not permitted in this position for enum types - /// (Originally from ../FSComp.txt:416) + /// (Originally from ..\FSComp.txt:416) static member parsEnumTypesCannotHaveVisibilityDeclarations() = (567, GetStringFunc("parsEnumTypesCannotHaveVisibilityDeclarations",",,,") ) /// All enum fields must be given values - /// (Originally from ../FSComp.txt:417) + /// (Originally from ..\FSComp.txt:417) static member parsAllEnumFieldsRequireValues() = (568, GetStringFunc("parsAllEnumFieldsRequireValues",",,,") ) /// Accessibility modifiers are not permitted on inline assembly code types - /// (Originally from ../FSComp.txt:418) + /// (Originally from ..\FSComp.txt:418) static member parsInlineAssemblyCannotHaveVisibilityDeclarations() = (569, GetStringFunc("parsInlineAssemblyCannotHaveVisibilityDeclarations",",,,") ) /// Unexpected identifier: '%s' - /// (Originally from ../FSComp.txt:419) + /// (Originally from ..\FSComp.txt:419) static member parsUnexpectedIdentifier(a0 : System.String) = (571, GetStringFunc("parsUnexpectedIdentifier",",,,%s,,,") a0) /// Accessibility modifiers are not permitted on union cases. Use 'type U = internal ...' or 'type U = private ...' to give an accessibility to the whole representation. - /// (Originally from ../FSComp.txt:420) + /// (Originally from ..\FSComp.txt:420) static member parsUnionCasesCannotHaveVisibilityDeclarations() = (572, GetStringFunc("parsUnionCasesCannotHaveVisibilityDeclarations",",,,") ) /// Accessibility modifiers are not permitted on enumeration fields - /// (Originally from ../FSComp.txt:421) + /// (Originally from ..\FSComp.txt:421) static member parsEnumFieldsCannotHaveVisibilityDeclarations() = (573, GetStringFunc("parsEnumFieldsCannotHaveVisibilityDeclarations",",,,") ) /// Consider using a separate record type instead - /// (Originally from ../FSComp.txt:422) + /// (Originally from ..\FSComp.txt:422) static member parsConsiderUsingSeparateRecordType() = (GetStringFunc("parsConsiderUsingSeparateRecordType",",,,") ) /// Accessibility modifiers are not permitted on record fields. Use 'type R = internal ...' or 'type R = private ...' to give an accessibility to the whole representation. - /// (Originally from ../FSComp.txt:423) + /// (Originally from ..\FSComp.txt:423) static member parsRecordFieldsCannotHaveVisibilityDeclarations() = (575, GetStringFunc("parsRecordFieldsCannotHaveVisibilityDeclarations",",,,") ) /// The declaration form 'let ... and ...' for non-recursive bindings is not used in F# code. Consider using a sequence of 'let' bindings - /// (Originally from ../FSComp.txt:424) + /// (Originally from ..\FSComp.txt:424) static member parsLetAndForNonRecBindings() = (576, GetStringFunc("parsLetAndForNonRecBindings",",,,") ) /// Unmatched '(' - /// (Originally from ../FSComp.txt:425) + /// (Originally from ..\FSComp.txt:425) static member parsUnmatchedParen() = (583, GetStringFunc("parsUnmatchedParen",",,,") ) /// Successive patterns should be separated by spaces or tupled - /// (Originally from ../FSComp.txt:426) + /// (Originally from ..\FSComp.txt:426) static member parsSuccessivePatternsShouldBeSpacedOrTupled() = (584, GetStringFunc("parsSuccessivePatternsShouldBeSpacedOrTupled",",,,") ) /// No matching 'in' found for this 'let' - /// (Originally from ../FSComp.txt:427) + /// (Originally from ..\FSComp.txt:427) static member parsNoMatchingInForLet() = (586, GetStringFunc("parsNoMatchingInForLet",",,,") ) /// Error in the return expression for this 'let'. Possible incorrect indentation. - /// (Originally from ../FSComp.txt:428) + /// (Originally from ..\FSComp.txt:428) static member parsErrorInReturnForLetIncorrectIndentation() = (587, GetStringFunc("parsErrorInReturnForLetIncorrectIndentation",",,,") ) /// The block following this '%s' is unfinished. Every code block is an expression and must have a result. '%s' cannot be the final code element in a block. Consider giving this block an explicit result. - /// (Originally from ../FSComp.txt:429) + /// (Originally from ..\FSComp.txt:429) static member parsExpectedExpressionAfterLet(a0 : System.String, a1 : System.String) = (588, GetStringFunc("parsExpectedExpressionAfterLet",",,,%s,,,%s,,,") a0 a1) /// Incomplete conditional. Expected 'if then ' or 'if then else '. - /// (Originally from ../FSComp.txt:430) + /// (Originally from ..\FSComp.txt:430) static member parsIncompleteIf() = (589, GetStringFunc("parsIncompleteIf",",,,") ) /// 'assert' may not be used as a first class value. Use 'assert ' instead. - /// (Originally from ../FSComp.txt:431) + /// (Originally from ..\FSComp.txt:431) static member parsAssertIsNotFirstClassValue() = (590, GetStringFunc("parsAssertIsNotFirstClassValue",",,,") ) /// Identifier expected - /// (Originally from ../FSComp.txt:432) + /// (Originally from ..\FSComp.txt:432) static member parsIdentifierExpected() = (594, GetStringFunc("parsIdentifierExpected",",,,") ) /// 'in' or '=' expected - /// (Originally from ../FSComp.txt:433) + /// (Originally from ..\FSComp.txt:433) static member parsInOrEqualExpected() = (595, GetStringFunc("parsInOrEqualExpected",",,,") ) /// The use of '->' in sequence and computation expressions is limited to the form 'for pat in expr -> expr'. Use the syntax 'for ... in ... do ... yield...' to generate elements in more complex sequence expressions. - /// (Originally from ../FSComp.txt:434) + /// (Originally from ..\FSComp.txt:434) static member parsArrowUseIsLimited() = (596, GetStringFunc("parsArrowUseIsLimited",",,,") ) /// Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized - /// (Originally from ../FSComp.txt:435) + /// (Originally from ..\FSComp.txt:435) static member parsSuccessiveArgsShouldBeSpacedOrTupled() = (597, GetStringFunc("parsSuccessiveArgsShouldBeSpacedOrTupled",",,,") ) /// Unmatched '[' - /// (Originally from ../FSComp.txt:436) + /// (Originally from ..\FSComp.txt:436) static member parsUnmatchedBracket() = (598, GetStringFunc("parsUnmatchedBracket",",,,") ) /// Missing qualification after '.' - /// (Originally from ../FSComp.txt:437) + /// (Originally from ..\FSComp.txt:437) static member parsMissingQualificationAfterDot() = (599, GetStringFunc("parsMissingQualificationAfterDot",",,,") ) /// In F# code you may use 'expr.[expr]'. A type annotation may be required to indicate the first expression is an array - /// (Originally from ../FSComp.txt:438) + /// (Originally from ..\FSComp.txt:438) static member parsParenFormIsForML() = (GetStringFunc("parsParenFormIsForML",",,,") ) /// Mismatched quotation, beginning with '%s' - /// (Originally from ../FSComp.txt:439) + /// (Originally from ..\FSComp.txt:439) static member parsMismatchedQuote(a0 : System.String) = (601, GetStringFunc("parsMismatchedQuote",",,,%s,,,") a0) /// Unmatched '%s' - /// (Originally from ../FSComp.txt:440) + /// (Originally from ..\FSComp.txt:440) static member parsUnmatched(a0 : System.String) = (602, GetStringFunc("parsUnmatched",",,,%s,,,") a0) /// Unmatched '[|' - /// (Originally from ../FSComp.txt:441) + /// (Originally from ..\FSComp.txt:441) static member parsUnmatchedBracketBar() = (603, GetStringFunc("parsUnmatchedBracketBar",",,,") ) /// Unmatched '{' - /// (Originally from ../FSComp.txt:442) + /// (Originally from ..\FSComp.txt:442) static member parsUnmatchedBrace() = (604, GetStringFunc("parsUnmatchedBrace",",,,") ) + /// Unmatched '{|' + /// (Originally from ..\FSComp.txt:443) + static member parsUnmatchedBraceBar() = (605, GetStringFunc("parsUnmatchedBraceBar",",,,") ) /// Field bindings must have the form 'id = expr;' - /// (Originally from ../FSComp.txt:443) + /// (Originally from ..\FSComp.txt:444) static member parsFieldBinding() = (609, GetStringFunc("parsFieldBinding",",,,") ) /// This member is not permitted in an object implementation - /// (Originally from ../FSComp.txt:444) + /// (Originally from ..\FSComp.txt:445) static member parsMemberIllegalInObjectImplementation() = (610, GetStringFunc("parsMemberIllegalInObjectImplementation",",,,") ) /// Missing function body - /// (Originally from ../FSComp.txt:445) + /// (Originally from ..\FSComp.txt:446) static member parsMissingFunctionBody() = (611, GetStringFunc("parsMissingFunctionBody",",,,") ) /// Syntax error in labelled type argument - /// (Originally from ../FSComp.txt:446) + /// (Originally from ..\FSComp.txt:447) static member parsSyntaxErrorInLabeledType() = (613, GetStringFunc("parsSyntaxErrorInLabeledType",",,,") ) /// Unexpected infix operator in type expression - /// (Originally from ../FSComp.txt:447) + /// (Originally from ..\FSComp.txt:448) static member parsUnexpectedInfixOperator() = (615, GetStringFunc("parsUnexpectedInfixOperator",",,,") ) /// The syntax '(typ,...,typ) ident' is not used in F# code. Consider using 'ident' instead - /// (Originally from ../FSComp.txt:448) + /// (Originally from ..\FSComp.txt:449) static member parsMultiArgumentGenericTypeFormDeprecated() = (GetStringFunc("parsMultiArgumentGenericTypeFormDeprecated",",,,") ) /// Invalid literal in type - /// (Originally from ../FSComp.txt:449) + /// (Originally from ..\FSComp.txt:450) static member parsInvalidLiteralInType() = (618, GetStringFunc("parsInvalidLiteralInType",",,,") ) /// Unexpected infix operator in unit-of-measure expression. Legal operators are '*', '/' and '^'. - /// (Originally from ../FSComp.txt:450) + /// (Originally from ..\FSComp.txt:451) static member parsUnexpectedOperatorForUnitOfMeasure() = (619, GetStringFunc("parsUnexpectedOperatorForUnitOfMeasure",",,,") ) /// Unexpected integer literal in unit-of-measure expression - /// (Originally from ../FSComp.txt:451) + /// (Originally from ..\FSComp.txt:452) static member parsUnexpectedIntegerLiteralForUnitOfMeasure() = (620, GetStringFunc("parsUnexpectedIntegerLiteralForUnitOfMeasure",",,,") ) /// Syntax error: unexpected type parameter specification - /// (Originally from ../FSComp.txt:452) + /// (Originally from ..\FSComp.txt:453) static member parsUnexpectedTypeParameter() = (621, GetStringFunc("parsUnexpectedTypeParameter",",,,") ) /// Mismatched quotation operator name, beginning with '%s' - /// (Originally from ../FSComp.txt:453) + /// (Originally from ..\FSComp.txt:454) static member parsMismatchedQuotationName(a0 : System.String) = (622, GetStringFunc("parsMismatchedQuotationName",",,,%s,,,") a0) /// Active pattern case identifiers must begin with an uppercase letter - /// (Originally from ../FSComp.txt:454) + /// (Originally from ..\FSComp.txt:455) static member parsActivePatternCaseMustBeginWithUpperCase() = (623, GetStringFunc("parsActivePatternCaseMustBeginWithUpperCase",",,,") ) /// The '|' character is not permitted in active pattern case identifiers - /// (Originally from ../FSComp.txt:455) + /// (Originally from ..\FSComp.txt:456) static member parsActivePatternCaseContainsPipe() = (624, GetStringFunc("parsActivePatternCaseContainsPipe",",,,") ) /// Denominator must not be 0 in unit-of-measure exponent - /// (Originally from ../FSComp.txt:456) + /// (Originally from ..\FSComp.txt:457) static member parsIllegalDenominatorForMeasureExponent() = (625, GetStringFunc("parsIllegalDenominatorForMeasureExponent",",,,") ) /// No '=' symbol should follow a 'namespace' declaration - /// (Originally from ../FSComp.txt:457) + /// (Originally from ..\FSComp.txt:458) static member parsNoEqualShouldFollowNamespace() = (GetStringFunc("parsNoEqualShouldFollowNamespace",",,,") ) /// The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end' - /// (Originally from ../FSComp.txt:458) + /// (Originally from ..\FSComp.txt:459) static member parsSyntaxModuleStructEndDeprecated() = (GetStringFunc("parsSyntaxModuleStructEndDeprecated",",,,") ) /// The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end' - /// (Originally from ../FSComp.txt:459) + /// (Originally from ..\FSComp.txt:460) static member parsSyntaxModuleSigEndDeprecated() = (GetStringFunc("parsSyntaxModuleSigEndDeprecated",",,,") ) /// A static field was used where an instance field is expected - /// (Originally from ../FSComp.txt:460) + /// (Originally from ..\FSComp.txt:461) static member tcStaticFieldUsedWhenInstanceFieldExpected() = (627, GetStringFunc("tcStaticFieldUsedWhenInstanceFieldExpected",",,,") ) /// Method '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:461) + /// (Originally from ..\FSComp.txt:462) static member tcMethodNotAccessible(a0 : System.String) = (629, GetStringFunc("tcMethodNotAccessible",",,,%s,,,") a0) /// Implicit product of measures following / - /// (Originally from ../FSComp.txt:463) + /// (Originally from ..\FSComp.txt:464) static member tcImplicitMeasureFollowingSlash() = (632, GetStringFunc("tcImplicitMeasureFollowingSlash",",,,") ) /// Unexpected SynMeasure.Anon - /// (Originally from ../FSComp.txt:464) + /// (Originally from ..\FSComp.txt:465) static member tcUnexpectedMeasureAnon() = (633, GetStringFunc("tcUnexpectedMeasureAnon",",,,") ) /// Non-zero constants cannot have generic units. For generic zero, write 0.0<_>. - /// (Originally from ../FSComp.txt:465) + /// (Originally from ..\FSComp.txt:466) static member tcNonZeroConstantCannotHaveGenericUnit() = (634, GetStringFunc("tcNonZeroConstantCannotHaveGenericUnit",",,,") ) /// In sequence expressions, results are generated using 'yield' - /// (Originally from ../FSComp.txt:466) + /// (Originally from ..\FSComp.txt:467) static member tcSeqResultsUseYield() = (635, GetStringFunc("tcSeqResultsUseYield",",,,") ) /// Unexpected big rational constant - /// (Originally from ../FSComp.txt:467) + /// (Originally from ..\FSComp.txt:468) static member tcUnexpectedBigRationalConstant() = (GetStringFunc("tcUnexpectedBigRationalConstant",",,,") ) /// Units-of-measure supported only on float, float32, decimal and signed integer types - /// (Originally from ../FSComp.txt:468) + /// (Originally from ..\FSComp.txt:469) static member tcInvalidTypeForUnitsOfMeasure() = (636, GetStringFunc("tcInvalidTypeForUnitsOfMeasure",",,,") ) /// Unexpected Const_uint16array - /// (Originally from ../FSComp.txt:469) + /// (Originally from ..\FSComp.txt:470) static member tcUnexpectedConstUint16Array() = (GetStringFunc("tcUnexpectedConstUint16Array",",,,") ) /// Unexpected Const_bytearray - /// (Originally from ../FSComp.txt:470) + /// (Originally from ..\FSComp.txt:471) static member tcUnexpectedConstByteArray() = (GetStringFunc("tcUnexpectedConstByteArray",",,,") ) /// A parameter with attributes must also be given a name, e.g. '[] Name : Type' - /// (Originally from ../FSComp.txt:471) + /// (Originally from ..\FSComp.txt:472) static member tcParameterRequiresName() = (640, GetStringFunc("tcParameterRequiresName",",,,") ) /// Return values cannot have names - /// (Originally from ../FSComp.txt:472) + /// (Originally from ..\FSComp.txt:473) static member tcReturnValuesCannotHaveNames() = (641, GetStringFunc("tcReturnValuesCannotHaveNames",",,,") ) /// MemberKind.PropertyGetSet only expected in parse trees - /// (Originally from ../FSComp.txt:473) + /// (Originally from ..\FSComp.txt:474) static member tcMemberKindPropertyGetSetNotExpected() = (GetStringFunc("tcMemberKindPropertyGetSetNotExpected",",,,") ) /// Namespaces cannot contain values. Consider using a module to hold your value declarations. - /// (Originally from ../FSComp.txt:474) + /// (Originally from ..\FSComp.txt:475) static member tcNamespaceCannotContainValues() = (201, GetStringFunc("tcNamespaceCannotContainValues",",,,") ) /// Namespaces cannot contain extension members except in the same file and namespace declaration group where the type is defined. Consider using a module to hold declarations of extension members. - /// (Originally from ../FSComp.txt:475) + /// (Originally from ..\FSComp.txt:476) static member tcNamespaceCannotContainExtensionMembers() = (644, GetStringFunc("tcNamespaceCannotContainExtensionMembers",",,,") ) /// Multiple visibility attributes have been specified for this identifier - /// (Originally from ../FSComp.txt:476) + /// (Originally from ..\FSComp.txt:477) static member tcMultipleVisibilityAttributes() = (645, GetStringFunc("tcMultipleVisibilityAttributes",",,,") ) /// Multiple visibility attributes have been specified for this identifier. 'let' bindings in classes are always private, as are any 'let' bindings inside expressions. - /// (Originally from ../FSComp.txt:477) + /// (Originally from ..\FSComp.txt:478) static member tcMultipleVisibilityAttributesWithLet() = (646, GetStringFunc("tcMultipleVisibilityAttributesWithLet",",,,") ) /// The name '(%s)' should not be used as a member name. To define comparison semantics for a type, implement the 'System.IComparable' interface. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ../FSComp.txt:478) + /// (Originally from ..\FSComp.txt:479) static member tcInvalidMethodNameForRelationalOperator(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMethodNameForRelationalOperator",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name. To define equality semantics for a type, override the 'Object.Equals' member. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ../FSComp.txt:479) + /// (Originally from ..\FSComp.txt:480) static member tcInvalidMethodNameForEquality(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMethodNameForEquality",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name. If defining a static member for use from other CLI languages then use the name '%s' instead. - /// (Originally from ../FSComp.txt:480) + /// (Originally from ..\FSComp.txt:481) static member tcInvalidMemberName(a0 : System.String, a1 : System.String) = (GetStringFunc("tcInvalidMemberName",",,,%s,,,%s,,,") a0 a1) /// The name '(%s)' should not be used as a member name because it is given a standard definition in the F# library over fixed types - /// (Originally from ../FSComp.txt:481) + /// (Originally from ..\FSComp.txt:482) static member tcInvalidMemberNameFixedTypes(a0 : System.String) = (GetStringFunc("tcInvalidMemberNameFixedTypes",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. To define overloaded comparison semantics for a particular type, implement the 'System.IComparable' interface in the definition of that type. - /// (Originally from ../FSComp.txt:482) + /// (Originally from ..\FSComp.txt:483) static member tcInvalidOperatorDefinitionRelational(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinitionRelational",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. To define equality semantics for a type, override the 'Object.Equals' member in the definition of that type. - /// (Originally from ../FSComp.txt:483) + /// (Originally from ..\FSComp.txt:484) static member tcInvalidOperatorDefinitionEquality(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinitionEquality",",,,%s,,,") a0) /// The '%s' operator should not normally be redefined. Consider using a different operator name - /// (Originally from ../FSComp.txt:484) + /// (Originally from ..\FSComp.txt:485) static member tcInvalidOperatorDefinition(a0 : System.String) = (GetStringFunc("tcInvalidOperatorDefinition",",,,%s,,,") a0) /// The '%s' operator cannot be redefined. Consider using a different operator name - /// (Originally from ../FSComp.txt:485) + /// (Originally from ..\FSComp.txt:486) static member tcInvalidIndexOperatorDefinition(a0 : System.String) = (GetStringFunc("tcInvalidIndexOperatorDefinition",",,,%s,,,") a0) /// Expected module or namespace parent %s - /// (Originally from ../FSComp.txt:486) + /// (Originally from ..\FSComp.txt:487) static member tcExpectModuleOrNamespaceParent(a0 : System.String) = (GetStringFunc("tcExpectModuleOrNamespaceParent",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IComparable' explicitly. You must apply the 'CustomComparison' attribute to the type. - /// (Originally from ../FSComp.txt:487) + /// (Originally from ..\FSComp.txt:488) static member tcImplementsIComparableExplicitly(a0 : System.String) = (647, GetStringFunc("tcImplementsIComparableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IComparable<_>' explicitly. You must apply the 'CustomComparison' attribute to the type, and should also provide a consistent implementation of the non-generic interface System.IComparable. - /// (Originally from ../FSComp.txt:488) + /// (Originally from ..\FSComp.txt:489) static member tcImplementsGenericIComparableExplicitly(a0 : System.String) = (648, GetStringFunc("tcImplementsGenericIComparableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IStructuralComparable' explicitly. Apply the 'CustomComparison' attribute to the type. - /// (Originally from ../FSComp.txt:489) + /// (Originally from ..\FSComp.txt:490) static member tcImplementsIStructuralComparableExplicitly(a0 : System.String) = (649, GetStringFunc("tcImplementsIStructuralComparableExplicitly",",,,%s,,,") a0) /// This record contains fields from inconsistent types - /// (Originally from ../FSComp.txt:490) + /// (Originally from ..\FSComp.txt:491) static member tcRecordFieldInconsistentTypes() = (656, GetStringFunc("tcRecordFieldInconsistentTypes",",,,") ) /// DLLImport stubs cannot be inlined - /// (Originally from ../FSComp.txt:491) + /// (Originally from ..\FSComp.txt:492) static member tcDllImportStubsCannotBeInlined() = (657, GetStringFunc("tcDllImportStubsCannotBeInlined",",,,") ) /// Structs may only bind a 'this' parameter at member declarations - /// (Originally from ../FSComp.txt:492) + /// (Originally from ..\FSComp.txt:493) static member tcStructsCanOnlyBindThisAtMemberDeclaration() = (658, GetStringFunc("tcStructsCanOnlyBindThisAtMemberDeclaration",",,,") ) /// Unexpected expression at recursive inference point - /// (Originally from ../FSComp.txt:493) + /// (Originally from ..\FSComp.txt:494) static member tcUnexpectedExprAtRecInfPoint() = (659, GetStringFunc("tcUnexpectedExprAtRecInfPoint",",,,") ) /// This code is less generic than required by its annotations because the explicit type variable '%s' could not be generalized. It was constrained to be '%s'. - /// (Originally from ../FSComp.txt:494) + /// (Originally from ..\FSComp.txt:495) static member tcLessGenericBecauseOfAnnotation(a0 : System.String, a1 : System.String) = (660, GetStringFunc("tcLessGenericBecauseOfAnnotation",",,,%s,,,%s,,,") a0 a1) /// One or more of the explicit class or function type variables for this binding could not be generalized, because they were constrained to other types - /// (Originally from ../FSComp.txt:495) + /// (Originally from ..\FSComp.txt:496) static member tcConstrainedTypeVariableCannotBeGeneralized() = (661, GetStringFunc("tcConstrainedTypeVariableCannotBeGeneralized",",,,") ) /// A generic type parameter has been used in a way that constrains it to always be '%s' - /// (Originally from ../FSComp.txt:496) + /// (Originally from ..\FSComp.txt:497) static member tcGenericParameterHasBeenConstrained(a0 : System.String) = (662, GetStringFunc("tcGenericParameterHasBeenConstrained",",,,%s,,,") a0) /// This type parameter has been used in a way that constrains it to always be '%s' - /// (Originally from ../FSComp.txt:497) + /// (Originally from ..\FSComp.txt:498) static member tcTypeParameterHasBeenConstrained(a0 : System.String) = (663, GetStringFunc("tcTypeParameterHasBeenConstrained",",,,%s,,,") a0) /// The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. \n\ttype taggedInt<'a> = int or\n\ttype swap<'a,'b> = 'b * 'a.\nConsider declaring the type parameters for this value explicitly, e.g.\n\tlet f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x). - /// (Originally from ../FSComp.txt:498) + /// (Originally from ..\FSComp.txt:499) static member tcTypeParametersInferredAreNotStable() = (664, GetStringFunc("tcTypeParametersInferredAreNotStable",",,,") ) /// Explicit type parameters may only be used on module or member bindings - /// (Originally from ../FSComp.txt:499) + /// (Originally from ..\FSComp.txt:500) static member tcExplicitTypeParameterInvalid() = (665, GetStringFunc("tcExplicitTypeParameterInvalid",",,,") ) /// You must explicitly declare either all or no type parameters when overriding a generic abstract method - /// (Originally from ../FSComp.txt:500) + /// (Originally from ..\FSComp.txt:501) static member tcOverridingMethodRequiresAllOrNoTypeParameters() = (666, GetStringFunc("tcOverridingMethodRequiresAllOrNoTypeParameters",",,,") ) /// The field labels and expected type of this record expression or pattern do not uniquely determine a corresponding record type - /// (Originally from ../FSComp.txt:501) + /// (Originally from ..\FSComp.txt:502) static member tcFieldsDoNotDetermineUniqueRecordType() = (667, GetStringFunc("tcFieldsDoNotDetermineUniqueRecordType",",,,") ) /// The field '%s' appears twice in this record expression or pattern - /// (Originally from ../FSComp.txt:502) + /// (Originally from ..\FSComp.txt:503) static member tcFieldAppearsTwiceInRecord(a0 : System.String) = (668, GetStringFunc("tcFieldAppearsTwiceInRecord",",,,%s,,,") a0) /// Unknown union case - /// (Originally from ../FSComp.txt:503) + /// (Originally from ..\FSComp.txt:504) static member tcUnknownUnion() = (669, GetStringFunc("tcUnknownUnion",",,,") ) /// This code is not sufficiently generic. The type variable %s could not be generalized because it would escape its scope. - /// (Originally from ../FSComp.txt:504) + /// (Originally from ..\FSComp.txt:505) static member tcNotSufficientlyGenericBecauseOfScope(a0 : System.String) = (670, GetStringFunc("tcNotSufficientlyGenericBecauseOfScope",",,,%s,,,") a0) /// A property cannot have explicit type parameters. Consider using a method instead. - /// (Originally from ../FSComp.txt:505) + /// (Originally from ..\FSComp.txt:506) static member tcPropertyRequiresExplicitTypeParameters() = (671, GetStringFunc("tcPropertyRequiresExplicitTypeParameters",",,,") ) /// A constructor cannot have explicit type parameters. Consider using a static construction method instead. - /// (Originally from ../FSComp.txt:506) + /// (Originally from ..\FSComp.txt:507) static member tcConstructorCannotHaveTypeParameters() = (672, GetStringFunc("tcConstructorCannotHaveTypeParameters",",,,") ) /// This instance member needs a parameter to represent the object being invoked. Make the member static or use the notation 'member x.Member(args) = ...'. - /// (Originally from ../FSComp.txt:507) + /// (Originally from ..\FSComp.txt:508) static member tcInstanceMemberRequiresTarget() = (673, GetStringFunc("tcInstanceMemberRequiresTarget",",,,") ) /// Unexpected source-level property specification in syntax tree - /// (Originally from ../FSComp.txt:508) + /// (Originally from ..\FSComp.txt:509) static member tcUnexpectedPropertyInSyntaxTree() = (674, GetStringFunc("tcUnexpectedPropertyInSyntaxTree",",,,") ) /// A static initializer requires an argument - /// (Originally from ../FSComp.txt:509) + /// (Originally from ..\FSComp.txt:510) static member tcStaticInitializerRequiresArgument() = (675, GetStringFunc("tcStaticInitializerRequiresArgument",",,,") ) /// An object constructor requires an argument - /// (Originally from ../FSComp.txt:510) + /// (Originally from ..\FSComp.txt:511) static member tcObjectConstructorRequiresArgument() = (676, GetStringFunc("tcObjectConstructorRequiresArgument",",,,") ) /// This static member should not have a 'this' parameter. Consider using the notation 'member Member(args) = ...'. - /// (Originally from ../FSComp.txt:511) + /// (Originally from ..\FSComp.txt:512) static member tcStaticMemberShouldNotHaveThis() = (677, GetStringFunc("tcStaticMemberShouldNotHaveThis",",,,") ) /// An explicit static initializer should use the syntax 'static new(args) = expr' - /// (Originally from ../FSComp.txt:512) + /// (Originally from ..\FSComp.txt:513) static member tcExplicitStaticInitializerSyntax() = (678, GetStringFunc("tcExplicitStaticInitializerSyntax",",,,") ) /// An explicit object constructor should use the syntax 'new(args) = expr' - /// (Originally from ../FSComp.txt:513) + /// (Originally from ..\FSComp.txt:514) static member tcExplicitObjectConstructorSyntax() = (679, GetStringFunc("tcExplicitObjectConstructorSyntax",",,,") ) /// Unexpected source-level property specification - /// (Originally from ../FSComp.txt:514) + /// (Originally from ..\FSComp.txt:515) static member tcUnexpectedPropertySpec() = (680, GetStringFunc("tcUnexpectedPropertySpec",",,,") ) /// This form of object expression is not used in F#. Use 'member this.MemberName ... = ...' to define member implementations in object expressions. - /// (Originally from ../FSComp.txt:515) + /// (Originally from ..\FSComp.txt:516) static member tcObjectExpressionFormDeprecated() = (GetStringFunc("tcObjectExpressionFormDeprecated",",,,") ) /// Invalid declaration - /// (Originally from ../FSComp.txt:516) + /// (Originally from ..\FSComp.txt:517) static member tcInvalidDeclaration() = (682, GetStringFunc("tcInvalidDeclaration",",,,") ) /// Attributes are not allowed within patterns - /// (Originally from ../FSComp.txt:517) + /// (Originally from ..\FSComp.txt:518) static member tcAttributesInvalidInPatterns() = (683, GetStringFunc("tcAttributesInvalidInPatterns",",,,") ) /// The generic function '%s' must be given explicit type argument(s) - /// (Originally from ../FSComp.txt:518) + /// (Originally from ..\FSComp.txt:519) static member tcFunctionRequiresExplicitTypeArguments(a0 : System.String) = (685, GetStringFunc("tcFunctionRequiresExplicitTypeArguments",",,,%s,,,") a0) /// The method or function '%s' should not be given explicit type argument(s) because it does not declare its type parameters explicitly - /// (Originally from ../FSComp.txt:519) + /// (Originally from ..\FSComp.txt:520) static member tcDoesNotAllowExplicitTypeArguments(a0 : System.String) = (686, GetStringFunc("tcDoesNotAllowExplicitTypeArguments",",,,%s,,,") a0) /// This value, type or method expects %d type parameter(s) but was given %d - /// (Originally from ../FSComp.txt:520) + /// (Originally from ..\FSComp.txt:521) static member tcTypeParameterArityMismatch(a0 : System.Int32, a1 : System.Int32) = (687, GetStringFunc("tcTypeParameterArityMismatch",",,,%d,,,%d,,,") a0 a1) /// The default, zero-initializing constructor of a struct type may only be used if all the fields of the struct type admit default initialization - /// (Originally from ../FSComp.txt:521) + /// (Originally from ..\FSComp.txt:522) static member tcDefaultStructConstructorCall() = (688, GetStringFunc("tcDefaultStructConstructorCall",",,,") ) /// Couldn't find Dispose on IDisposable, or it was overloaded - /// (Originally from ../FSComp.txt:522) + /// (Originally from ..\FSComp.txt:523) static member tcCouldNotFindIDisposable() = (GetStringFunc("tcCouldNotFindIDisposable",",,,") ) /// This value is not a literal and cannot be used in a pattern - /// (Originally from ../FSComp.txt:523) + /// (Originally from ..\FSComp.txt:524) static member tcNonLiteralCannotBeUsedInPattern() = (689, GetStringFunc("tcNonLiteralCannotBeUsedInPattern",",,,") ) /// This field is readonly - /// (Originally from ../FSComp.txt:524) + /// (Originally from ..\FSComp.txt:525) static member tcFieldIsReadonly() = (690, GetStringFunc("tcFieldIsReadonly",",,,") ) /// Named arguments must appear after all other arguments - /// (Originally from ../FSComp.txt:525) + /// (Originally from ..\FSComp.txt:526) static member tcNameArgumentsMustAppearLast() = (691, GetStringFunc("tcNameArgumentsMustAppearLast",",,,") ) /// This function value is being used to construct a delegate type whose signature includes a byref argument. You must use an explicit lambda expression taking %d arguments. - /// (Originally from ../FSComp.txt:526) + /// (Originally from ..\FSComp.txt:527) static member tcFunctionRequiresExplicitLambda(a0 : System.Int32) = (692, GetStringFunc("tcFunctionRequiresExplicitLambda",",,,%d,,,") a0) /// The type '%s' is not a type whose values can be enumerated with this syntax, i.e. is not compatible with either seq<_>, IEnumerable<_> or IEnumerable and does not have a GetEnumerator method - /// (Originally from ../FSComp.txt:527) + /// (Originally from ..\FSComp.txt:528) static member tcTypeCannotBeEnumerated(a0 : System.String) = (693, GetStringFunc("tcTypeCannotBeEnumerated",",,,%s,,,") a0) /// This recursive binding uses an invalid mixture of recursive forms - /// (Originally from ../FSComp.txt:528) + /// (Originally from ..\FSComp.txt:529) static member tcInvalidMixtureOfRecursiveForms() = (695, GetStringFunc("tcInvalidMixtureOfRecursiveForms",",,,") ) /// This is not a valid object construction expression. Explicit object constructors must either call an alternate constructor or initialize all fields of the object and specify a call to a super class constructor. - /// (Originally from ../FSComp.txt:529) + /// (Originally from ..\FSComp.txt:530) static member tcInvalidObjectConstructionExpression() = (696, GetStringFunc("tcInvalidObjectConstructionExpression",",,,") ) /// Invalid constraint - /// (Originally from ../FSComp.txt:530) + /// (Originally from ..\FSComp.txt:531) static member tcInvalidConstraint() = (697, GetStringFunc("tcInvalidConstraint",",,,") ) /// Invalid constraint: the type used for the constraint is sealed, which means the constraint could only be satisfied by at most one solution - /// (Originally from ../FSComp.txt:531) + /// (Originally from ..\FSComp.txt:532) static member tcInvalidConstraintTypeSealed() = (698, GetStringFunc("tcInvalidConstraintTypeSealed",",,,") ) /// An 'enum' constraint must be of the form 'enum' - /// (Originally from ../FSComp.txt:532) + /// (Originally from ..\FSComp.txt:533) static member tcInvalidEnumConstraint() = (699, GetStringFunc("tcInvalidEnumConstraint",",,,") ) /// 'new' constraints must take one argument of type 'unit' and return the constructed type - /// (Originally from ../FSComp.txt:533) + /// (Originally from ..\FSComp.txt:534) static member tcInvalidNewConstraint() = (700, GetStringFunc("tcInvalidNewConstraint",",,,") ) /// This property has an invalid type. Properties taking multiple indexer arguments should have types of the form 'ty1 * ty2 -> ty3'. Properties returning functions should have types of the form '(ty1 -> ty2)'. - /// (Originally from ../FSComp.txt:534) + /// (Originally from ..\FSComp.txt:535) static member tcInvalidPropertyType() = (701, GetStringFunc("tcInvalidPropertyType",",,,") ) /// Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [] attribute. - /// (Originally from ../FSComp.txt:535) + /// (Originally from ..\FSComp.txt:536) static member tcExpectedUnitOfMeasureMarkWithAttribute() = (702, GetStringFunc("tcExpectedUnitOfMeasureMarkWithAttribute",",,,") ) /// Expected type parameter, not unit-of-measure parameter - /// (Originally from ../FSComp.txt:536) + /// (Originally from ..\FSComp.txt:537) static member tcExpectedTypeParameter() = (703, GetStringFunc("tcExpectedTypeParameter",",,,") ) /// Expected type, not unit-of-measure - /// (Originally from ../FSComp.txt:537) + /// (Originally from ..\FSComp.txt:538) static member tcExpectedTypeNotUnitOfMeasure() = (704, GetStringFunc("tcExpectedTypeNotUnitOfMeasure",",,,") ) /// Expected unit-of-measure, not type - /// (Originally from ../FSComp.txt:538) + /// (Originally from ..\FSComp.txt:539) static member tcExpectedUnitOfMeasureNotType() = (705, GetStringFunc("tcExpectedUnitOfMeasureNotType",",,,") ) /// Units-of-measure cannot be used as prefix arguments to a type. Rewrite as postfix arguments in angle brackets. - /// (Originally from ../FSComp.txt:539) + /// (Originally from ..\FSComp.txt:540) static member tcInvalidUnitsOfMeasurePrefix() = (706, GetStringFunc("tcInvalidUnitsOfMeasurePrefix",",,,") ) /// Unit-of-measure cannot be used in type constructor application - /// (Originally from ../FSComp.txt:540) + /// (Originally from ..\FSComp.txt:541) static member tcUnitsOfMeasureInvalidInTypeConstructor() = (707, GetStringFunc("tcUnitsOfMeasureInvalidInTypeConstructor",",,,") ) /// This control construct may only be used if the computation expression builder defines a '%s' method - /// (Originally from ../FSComp.txt:541) + /// (Originally from ..\FSComp.txt:542) static member tcRequireBuilderMethod(a0 : System.String) = (708, GetStringFunc("tcRequireBuilderMethod",",,,%s,,,") a0) /// This type has no nested types - /// (Originally from ../FSComp.txt:542) + /// (Originally from ..\FSComp.txt:543) static member tcTypeHasNoNestedTypes() = (709, GetStringFunc("tcTypeHasNoNestedTypes",",,,") ) /// Unexpected %s in type expression - /// (Originally from ../FSComp.txt:543) + /// (Originally from ..\FSComp.txt:544) static member tcUnexpectedSymbolInTypeExpression(a0 : System.String) = (711, GetStringFunc("tcUnexpectedSymbolInTypeExpression",",,,%s,,,") a0) /// Type parameter cannot be used as type constructor - /// (Originally from ../FSComp.txt:544) + /// (Originally from ..\FSComp.txt:545) static member tcTypeParameterInvalidAsTypeConstructor() = (712, GetStringFunc("tcTypeParameterInvalidAsTypeConstructor",",,,") ) /// Illegal syntax in type expression - /// (Originally from ../FSComp.txt:545) + /// (Originally from ..\FSComp.txt:546) static member tcIllegalSyntaxInTypeExpression() = (713, GetStringFunc("tcIllegalSyntaxInTypeExpression",",,,") ) /// Anonymous unit-of-measure cannot be nested inside another unit-of-measure expression - /// (Originally from ../FSComp.txt:546) + /// (Originally from ..\FSComp.txt:547) static member tcAnonymousUnitsOfMeasureCannotBeNested() = (714, GetStringFunc("tcAnonymousUnitsOfMeasureCannotBeNested",",,,") ) /// Anonymous type variables are not permitted in this declaration - /// (Originally from ../FSComp.txt:547) + /// (Originally from ..\FSComp.txt:548) static member tcAnonymousTypeInvalidInDeclaration() = (715, GetStringFunc("tcAnonymousTypeInvalidInDeclaration",",,,") ) /// Unexpected / in type - /// (Originally from ../FSComp.txt:548) + /// (Originally from ..\FSComp.txt:549) static member tcUnexpectedSlashInType() = (716, GetStringFunc("tcUnexpectedSlashInType",",,,") ) /// Unexpected type arguments - /// (Originally from ../FSComp.txt:549) + /// (Originally from ..\FSComp.txt:550) static member tcUnexpectedTypeArguments() = (717, GetStringFunc("tcUnexpectedTypeArguments",",,,") ) /// Optional arguments are only permitted on type members - /// (Originally from ../FSComp.txt:550) + /// (Originally from ..\FSComp.txt:551) static member tcOptionalArgsOnlyOnMembers() = (718, GetStringFunc("tcOptionalArgsOnlyOnMembers",",,,") ) /// Name '%s' not bound in pattern context - /// (Originally from ../FSComp.txt:551) + /// (Originally from ..\FSComp.txt:552) static member tcNameNotBoundInPattern(a0 : System.String) = (719, GetStringFunc("tcNameNotBoundInPattern",",,,%s,,,") a0) /// Non-primitive numeric literal constants cannot be used in pattern matches because they can be mapped to multiple different types through the use of a NumericLiteral module. Consider using replacing with a variable, and use 'when = ' at the end of the match clause. - /// (Originally from ../FSComp.txt:552) + /// (Originally from ..\FSComp.txt:553) static member tcInvalidNonPrimitiveLiteralInPatternMatch() = (720, GetStringFunc("tcInvalidNonPrimitiveLiteralInPatternMatch",",,,") ) /// Type arguments cannot be specified here - /// (Originally from ../FSComp.txt:553) + /// (Originally from ..\FSComp.txt:554) static member tcInvalidTypeArgumentUsage() = (721, GetStringFunc("tcInvalidTypeArgumentUsage",",,,") ) /// Only active patterns returning exactly one result may accept arguments - /// (Originally from ../FSComp.txt:554) + /// (Originally from ..\FSComp.txt:555) static member tcRequireActivePatternWithOneResult() = (722, GetStringFunc("tcRequireActivePatternWithOneResult",",,,") ) /// Invalid argument to parameterized pattern label - /// (Originally from ../FSComp.txt:555) + /// (Originally from ..\FSComp.txt:556) static member tcInvalidArgForParameterizedPattern() = (723, GetStringFunc("tcInvalidArgForParameterizedPattern",",,,") ) /// Internal error. Invalid index into active pattern array - /// (Originally from ../FSComp.txt:556) + /// (Originally from ..\FSComp.txt:557) static member tcInvalidIndexIntoActivePatternArray() = (724, GetStringFunc("tcInvalidIndexIntoActivePatternArray",",,,") ) /// This union case does not take arguments - /// (Originally from ../FSComp.txt:557) + /// (Originally from ..\FSComp.txt:558) static member tcUnionCaseDoesNotTakeArguments() = (725, GetStringFunc("tcUnionCaseDoesNotTakeArguments",",,,") ) /// This union case takes one argument - /// (Originally from ../FSComp.txt:558) + /// (Originally from ..\FSComp.txt:559) static member tcUnionCaseRequiresOneArgument() = (726, GetStringFunc("tcUnionCaseRequiresOneArgument",",,,") ) /// This union case expects %d arguments in tupled form - /// (Originally from ../FSComp.txt:559) + /// (Originally from ..\FSComp.txt:560) static member tcUnionCaseExpectsTupledArguments(a0 : System.Int32) = (727, GetStringFunc("tcUnionCaseExpectsTupledArguments",",,,%d,,,") a0) /// Field '%s' is not static - /// (Originally from ../FSComp.txt:560) + /// (Originally from ..\FSComp.txt:561) static member tcFieldIsNotStatic(a0 : System.String) = (728, GetStringFunc("tcFieldIsNotStatic",",,,%s,,,") a0) /// This field is not a literal and cannot be used in a pattern - /// (Originally from ../FSComp.txt:561) + /// (Originally from ..\FSComp.txt:562) static member tcFieldNotLiteralCannotBeUsedInPattern() = (729, GetStringFunc("tcFieldNotLiteralCannotBeUsedInPattern",",,,") ) /// This is not a variable, constant, active recognizer or literal - /// (Originally from ../FSComp.txt:562) + /// (Originally from ..\FSComp.txt:563) static member tcRequireVarConstRecogOrLiteral() = (730, GetStringFunc("tcRequireVarConstRecogOrLiteral",",,,") ) /// This is not a valid pattern - /// (Originally from ../FSComp.txt:563) + /// (Originally from ..\FSComp.txt:564) static member tcInvalidPattern() = (731, GetStringFunc("tcInvalidPattern",",,,") ) /// Character range matches have been removed in F#. Consider using a 'when' pattern guard instead. - /// (Originally from ../FSComp.txt:564) + /// (Originally from ..\FSComp.txt:565) static member tcUseWhenPatternGuard() = (GetStringFunc("tcUseWhenPatternGuard",",,,") ) /// Illegal pattern - /// (Originally from ../FSComp.txt:565) + /// (Originally from ..\FSComp.txt:566) static member tcIllegalPattern() = (733, GetStringFunc("tcIllegalPattern",",,,") ) /// Syntax error - unexpected '?' symbol - /// (Originally from ../FSComp.txt:566) + /// (Originally from ..\FSComp.txt:567) static member tcSyntaxErrorUnexpectedQMark() = (734, GetStringFunc("tcSyntaxErrorUnexpectedQMark",",,,") ) /// Expected %d expressions, got %d - /// (Originally from ../FSComp.txt:567) + /// (Originally from ..\FSComp.txt:568) static member tcExpressionCountMisMatch(a0 : System.Int32, a1 : System.Int32) = (735, GetStringFunc("tcExpressionCountMisMatch",",,,%d,,,%d,,,") a0 a1) /// TcExprUndelayed: delayed - /// (Originally from ../FSComp.txt:568) + /// (Originally from ..\FSComp.txt:569) static member tcExprUndelayed() = (736, GetStringFunc("tcExprUndelayed",",,,") ) /// This expression form may only be used in sequence and computation expressions - /// (Originally from ../FSComp.txt:569) + /// (Originally from ..\FSComp.txt:570) static member tcExpressionRequiresSequence() = (737, GetStringFunc("tcExpressionRequiresSequence",",,,") ) /// Invalid object expression. Objects without overrides or interfaces should use the expression form 'new Type(args)' without braces. - /// (Originally from ../FSComp.txt:570) + /// (Originally from ..\FSComp.txt:571) static member tcInvalidObjectExpressionSyntaxForm() = (738, GetStringFunc("tcInvalidObjectExpressionSyntaxForm",",,,") ) /// Invalid object, sequence or record expression - /// (Originally from ../FSComp.txt:571) + /// (Originally from ..\FSComp.txt:572) static member tcInvalidObjectSequenceOrRecordExpression() = (739, GetStringFunc("tcInvalidObjectSequenceOrRecordExpression",",,,") ) /// Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq { ... }' - /// (Originally from ../FSComp.txt:572) + /// (Originally from ..\FSComp.txt:573) static member tcInvalidSequenceExpressionSyntaxForm() = (740, GetStringFunc("tcInvalidSequenceExpressionSyntaxForm",",,,") ) /// This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - /// (Originally from ../FSComp.txt:573) + /// (Originally from ..\FSComp.txt:574) static member tcExpressionWithIfRequiresParenthesis() = (GetStringFunc("tcExpressionWithIfRequiresParenthesis",",,,") ) /// Unable to parse format string '%s' - /// (Originally from ../FSComp.txt:574) + /// (Originally from ..\FSComp.txt:575) static member tcUnableToParseFormatString(a0 : System.String) = (741, GetStringFunc("tcUnableToParseFormatString",",,,%s,,,") a0) /// This list expression exceeds the maximum size for list literals. Use an array for larger literals and call Array.ToList. - /// (Originally from ../FSComp.txt:575) + /// (Originally from ..\FSComp.txt:576) static member tcListLiteralMaxSize() = (742, GetStringFunc("tcListLiteralMaxSize",",,,") ) /// The expression form 'expr then expr' may only be used as part of an explicit object constructor - /// (Originally from ../FSComp.txt:576) + /// (Originally from ..\FSComp.txt:577) static member tcExpressionFormRequiresObjectConstructor() = (743, GetStringFunc("tcExpressionFormRequiresObjectConstructor",",,,") ) /// Named arguments cannot be given to member trait calls - /// (Originally from ../FSComp.txt:577) + /// (Originally from ..\FSComp.txt:578) static member tcNamedArgumentsCannotBeUsedInMemberTraits() = (744, GetStringFunc("tcNamedArgumentsCannotBeUsedInMemberTraits",",,,") ) /// This is not a valid name for an enumeration case - /// (Originally from ../FSComp.txt:578) + /// (Originally from ..\FSComp.txt:579) static member tcNotValidEnumCaseName() = (745, GetStringFunc("tcNotValidEnumCaseName",",,,") ) /// This field is not mutable - /// (Originally from ../FSComp.txt:579) + /// (Originally from ..\FSComp.txt:580) static member tcFieldIsNotMutable() = (746, GetStringFunc("tcFieldIsNotMutable",",,,") ) /// This construct may only be used within list, array and sequence expressions, e.g. expressions of the form 'seq { ... }', '[ ... ]' or '[| ... |]'. These use the syntax 'for ... in ... do ... yield...' to generate elements - /// (Originally from ../FSComp.txt:580) + /// (Originally from ..\FSComp.txt:581) static member tcConstructRequiresListArrayOrSequence() = (747, GetStringFunc("tcConstructRequiresListArrayOrSequence",",,,") ) /// This construct may only be used within computation expressions. To return a value from an ordinary function simply write the expression without 'return'. - /// (Originally from ../FSComp.txt:581) + /// (Originally from ..\FSComp.txt:582) static member tcConstructRequiresComputationExpressions() = (748, GetStringFunc("tcConstructRequiresComputationExpressions",",,,") ) /// This construct may only be used within sequence or computation expressions - /// (Originally from ../FSComp.txt:582) + /// (Originally from ..\FSComp.txt:583) static member tcConstructRequiresSequenceOrComputations() = (749, GetStringFunc("tcConstructRequiresSequenceOrComputations",",,,") ) /// This construct may only be used within computation expressions - /// (Originally from ../FSComp.txt:583) + /// (Originally from ..\FSComp.txt:584) static member tcConstructRequiresComputationExpression() = (750, GetStringFunc("tcConstructRequiresComputationExpression",",,,") ) /// Invalid indexer expression - /// (Originally from ../FSComp.txt:584) + /// (Originally from ..\FSComp.txt:585) static member tcInvalidIndexerExpression() = (751, GetStringFunc("tcInvalidIndexerExpression",",,,") ) /// The operator 'expr.[idx]' has been used on an object of indeterminate type based on information prior to this program point. Consider adding further type constraints - /// (Originally from ../FSComp.txt:585) + /// (Originally from ..\FSComp.txt:586) static member tcObjectOfIndeterminateTypeUsedRequireTypeConstraint() = (752, GetStringFunc("tcObjectOfIndeterminateTypeUsedRequireTypeConstraint",",,,") ) /// Cannot inherit from a variable type - /// (Originally from ../FSComp.txt:586) + /// (Originally from ..\FSComp.txt:587) static member tcCannotInheritFromVariableType() = (753, GetStringFunc("tcCannotInheritFromVariableType",",,,") ) /// Calls to object constructors on type parameters cannot be given arguments - /// (Originally from ../FSComp.txt:587) + /// (Originally from ..\FSComp.txt:588) static member tcObjectConstructorsOnTypeParametersCannotTakeArguments() = (754, GetStringFunc("tcObjectConstructorsOnTypeParametersCannotTakeArguments",",,,") ) /// The 'CompiledName' attribute cannot be used with this language element - /// (Originally from ../FSComp.txt:588) + /// (Originally from ..\FSComp.txt:589) static member tcCompiledNameAttributeMisused() = (755, GetStringFunc("tcCompiledNameAttributeMisused",",,,") ) /// '%s' may only be used with named types - /// (Originally from ../FSComp.txt:589) + /// (Originally from ..\FSComp.txt:590) static member tcNamedTypeRequired(a0 : System.String) = (756, GetStringFunc("tcNamedTypeRequired",",,,%s,,,") a0) /// 'inherit' cannot be used on interface types. Consider implementing the interface by using 'interface ... with ... end' instead. - /// (Originally from ../FSComp.txt:590) + /// (Originally from ..\FSComp.txt:591) static member tcInheritCannotBeUsedOnInterfaceType() = (757, GetStringFunc("tcInheritCannotBeUsedOnInterfaceType",",,,") ) /// 'new' cannot be used on interface types. Consider using an object expression '{ new ... with ... }' instead. - /// (Originally from ../FSComp.txt:591) + /// (Originally from ..\FSComp.txt:592) static member tcNewCannotBeUsedOnInterfaceType() = (758, GetStringFunc("tcNewCannotBeUsedOnInterfaceType",",,,") ) /// Instances of this type cannot be created since it has been marked abstract or not all methods have been given implementations. Consider using an object expression '{ new ... with ... }' instead. - /// (Originally from ../FSComp.txt:592) + /// (Originally from ..\FSComp.txt:593) static member tcAbstractTypeCannotBeInstantiated() = (759, GetStringFunc("tcAbstractTypeCannotBeInstantiated",",,,") ) /// It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type(args)', rather than 'Type(args)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value - /// (Originally from ../FSComp.txt:593) + /// (Originally from ..\FSComp.txt:594) static member tcIDisposableTypeShouldUseNew() = (760, GetStringFunc("tcIDisposableTypeShouldUseNew",",,,") ) /// '%s' may only be used to construct object types - /// (Originally from ../FSComp.txt:594) + /// (Originally from ..\FSComp.txt:595) static member tcSyntaxCanOnlyBeUsedToCreateObjectTypes(a0 : System.String) = (761, GetStringFunc("tcSyntaxCanOnlyBeUsedToCreateObjectTypes",",,,%s,,,") a0) /// Constructors for the type '%s' must directly or indirectly call its implicit object constructor. Use a call to the implicit object constructor instead of a record expression. - /// (Originally from ../FSComp.txt:595) + /// (Originally from ..\FSComp.txt:596) static member tcConstructorRequiresCall(a0 : System.String) = (762, GetStringFunc("tcConstructorRequiresCall",",,,%s,,,") a0) /// The field '%s' has been given a value, but is not present in the type '%s' - /// (Originally from ../FSComp.txt:596) + /// (Originally from ..\FSComp.txt:597) static member tcUndefinedField(a0 : System.String, a1 : System.String) = (763, GetStringFunc("tcUndefinedField",",,,%s,,,%s,,,") a0 a1) /// No assignment given for field '%s' of type '%s' - /// (Originally from ../FSComp.txt:597) + /// (Originally from ..\FSComp.txt:598) static member tcFieldRequiresAssignment(a0 : System.String, a1 : System.String) = (764, GetStringFunc("tcFieldRequiresAssignment",",,,%s,,,%s,,,") a0 a1) /// Extraneous fields have been given values - /// (Originally from ../FSComp.txt:598) + /// (Originally from ..\FSComp.txt:599) static member tcExtraneousFieldsGivenValues() = (765, GetStringFunc("tcExtraneousFieldsGivenValues",",,,") ) /// Only overrides of abstract and virtual members may be specified in object expressions - /// (Originally from ../FSComp.txt:599) + /// (Originally from ..\FSComp.txt:600) static member tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual() = (766, GetStringFunc("tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual",",,,") ) /// The member '%s' does not correspond to any abstract or virtual method available to override or implement. - /// (Originally from ../FSComp.txt:600) + /// (Originally from ..\FSComp.txt:601) static member tcNoAbstractOrVirtualMemberFound(a0 : System.String) = (767, GetStringFunc("tcNoAbstractOrVirtualMemberFound",",,,%s,,,") a0) /// The type %s contains the member '%s' but it is not a virtual or abstract method that is available to override or implement. - /// (Originally from ../FSComp.txt:601) + /// (Originally from ..\FSComp.txt:602) static member tcMemberFoundIsNotAbstractOrVirtual(a0 : System.String, a1 : System.String) = (767, GetStringFunc("tcMemberFoundIsNotAbstractOrVirtual",",,,%s,,,%s,,,") a0 a1) /// The member '%s' does not accept the correct number of arguments. %d argument(s) are expected, but %d were given. The required signature is '%s'.%s - /// (Originally from ../FSComp.txt:602) + /// (Originally from ..\FSComp.txt:603) static member tcArgumentArityMismatch(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String, a4 : System.String) = (768, GetStringFunc("tcArgumentArityMismatch",",,,%s,,,%d,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3 a4) /// The member '%s' does not accept the correct number of arguments. One overload accepts %d arguments, but %d were given. The required signature is '%s'.%s - /// (Originally from ../FSComp.txt:603) + /// (Originally from ..\FSComp.txt:604) static member tcArgumentArityMismatchOneOverload(a0 : System.String, a1 : System.Int32, a2 : System.Int32, a3 : System.String, a4 : System.String) = (769, GetStringFunc("tcArgumentArityMismatchOneOverload",",,,%s,,,%d,,,%d,,,%s,,,%s,,,") a0 a1 a2 a3 a4) /// A simple method name is required here - /// (Originally from ../FSComp.txt:604) + /// (Originally from ..\FSComp.txt:605) static member tcSimpleMethodNameRequired() = (770, GetStringFunc("tcSimpleMethodNameRequired",",,,") ) /// The types System.ValueType, System.Enum, System.Delegate, System.MulticastDelegate and System.Array cannot be used as super types in an object expression or class - /// (Originally from ../FSComp.txt:605) + /// (Originally from ..\FSComp.txt:606) static member tcPredefinedTypeCannotBeUsedAsSuperType() = (771, GetStringFunc("tcPredefinedTypeCannotBeUsedAsSuperType",",,,") ) /// 'new' must be used with a named type - /// (Originally from ../FSComp.txt:606) + /// (Originally from ..\FSComp.txt:607) static member tcNewMustBeUsedWithNamedType() = (772, GetStringFunc("tcNewMustBeUsedWithNamedType",",,,") ) /// Cannot create an extension of a sealed type - /// (Originally from ../FSComp.txt:607) + /// (Originally from ..\FSComp.txt:608) static member tcCannotCreateExtensionOfSealedType() = (773, GetStringFunc("tcCannotCreateExtensionOfSealedType",",,,") ) /// No arguments may be given when constructing a record value - /// (Originally from ../FSComp.txt:608) + /// (Originally from ..\FSComp.txt:609) static member tcNoArgumentsForRecordValue() = (774, GetStringFunc("tcNoArgumentsForRecordValue",",,,") ) /// Interface implementations cannot be given on construction expressions - /// (Originally from ../FSComp.txt:609) + /// (Originally from ..\FSComp.txt:610) static member tcNoInterfaceImplementationForConstructionExpression() = (775, GetStringFunc("tcNoInterfaceImplementationForConstructionExpression",",,,") ) /// Object construction expressions may only be used to implement constructors in class types - /// (Originally from ../FSComp.txt:610) + /// (Originally from ..\FSComp.txt:611) static member tcObjectConstructionCanOnlyBeUsedInClassTypes() = (776, GetStringFunc("tcObjectConstructionCanOnlyBeUsedInClassTypes",",,,") ) /// Only simple bindings of the form 'id = expr' can be used in construction expressions - /// (Originally from ../FSComp.txt:611) + /// (Originally from ..\FSComp.txt:612) static member tcOnlySimpleBindingsCanBeUsedInConstructionExpressions() = (777, GetStringFunc("tcOnlySimpleBindingsCanBeUsedInConstructionExpressions",",,,") ) /// Objects must be initialized by an object construction expression that calls an inherited object constructor and assigns a value to each field - /// (Originally from ../FSComp.txt:612) + /// (Originally from ..\FSComp.txt:613) static member tcObjectsMustBeInitializedWithObjectExpression() = (778, GetStringFunc("tcObjectsMustBeInitializedWithObjectExpression",",,,") ) /// Expected an interface type - /// (Originally from ../FSComp.txt:613) + /// (Originally from ..\FSComp.txt:614) static member tcExpectedInterfaceType() = (779, GetStringFunc("tcExpectedInterfaceType",",,,") ) /// Constructor expressions for interfaces do not take arguments - /// (Originally from ../FSComp.txt:614) + /// (Originally from ..\FSComp.txt:615) static member tcConstructorForInterfacesDoNotTakeArguments() = (780, GetStringFunc("tcConstructorForInterfacesDoNotTakeArguments",",,,") ) /// This object constructor requires arguments - /// (Originally from ../FSComp.txt:615) + /// (Originally from ..\FSComp.txt:616) static member tcConstructorRequiresArguments() = (781, GetStringFunc("tcConstructorRequiresArguments",",,,") ) /// 'new' may only be used with object constructors - /// (Originally from ../FSComp.txt:616) + /// (Originally from ..\FSComp.txt:617) static member tcNewRequiresObjectConstructor() = (782, GetStringFunc("tcNewRequiresObjectConstructor",",,,") ) /// At least one override did not correctly implement its corresponding abstract member - /// (Originally from ../FSComp.txt:617) + /// (Originally from ..\FSComp.txt:618) static member tcAtLeastOneOverrideIsInvalid() = (783, GetStringFunc("tcAtLeastOneOverrideIsInvalid",",,,") ) /// This numeric literal requires that a module '%s' defining functions FromZero, FromOne, FromInt32, FromInt64 and FromString be in scope - /// (Originally from ../FSComp.txt:618) + /// (Originally from ..\FSComp.txt:619) static member tcNumericLiteralRequiresModule(a0 : System.String) = (784, GetStringFunc("tcNumericLiteralRequiresModule",",,,%s,,,") a0) /// Invalid record construction - /// (Originally from ../FSComp.txt:619) + /// (Originally from ..\FSComp.txt:620) static member tcInvalidRecordConstruction() = (785, GetStringFunc("tcInvalidRecordConstruction",",,,") ) /// The expression form { expr with ... } may only be used with record types. To build object types use { new Type(...) with ... } - /// (Originally from ../FSComp.txt:620) + /// (Originally from ..\FSComp.txt:621) static member tcExpressionFormRequiresRecordTypes() = (786, GetStringFunc("tcExpressionFormRequiresRecordTypes",",,,") ) /// The inherited type is not an object model type - /// (Originally from ../FSComp.txt:621) + /// (Originally from ..\FSComp.txt:622) static member tcInheritedTypeIsNotObjectModelType() = (787, GetStringFunc("tcInheritedTypeIsNotObjectModelType",",,,") ) /// Object construction expressions (i.e. record expressions with inheritance specifications) may only be used to implement constructors in object model types. Use 'new ObjectType(args)' to construct instances of object model types outside of constructors - /// (Originally from ../FSComp.txt:622) + /// (Originally from ..\FSComp.txt:623) static member tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes() = (788, GetStringFunc("tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes",",,,") ) /// '{ }' is not a valid expression. Records must include at least one field. Empty sequences are specified by using Seq.empty or an empty list '[]'. - /// (Originally from ../FSComp.txt:623) + /// (Originally from ..\FSComp.txt:624) static member tcEmptyRecordInvalid() = (789, GetStringFunc("tcEmptyRecordInvalid",",,,") ) /// This type is not a record type. Values of class and struct types must be created using calls to object constructors. - /// (Originally from ../FSComp.txt:624) + /// (Originally from ..\FSComp.txt:625) static member tcTypeIsNotARecordTypeNeedConstructor() = (790, GetStringFunc("tcTypeIsNotARecordTypeNeedConstructor",",,,") ) /// This type is not a record type - /// (Originally from ../FSComp.txt:625) + /// (Originally from ..\FSComp.txt:626) static member tcTypeIsNotARecordType() = (791, GetStringFunc("tcTypeIsNotARecordType",",,,") ) /// This construct is ambiguous as part of a computation expression. Nested expressions may be written using 'let _ = (...)' and nested computations using 'let! res = builder { ... }'. - /// (Originally from ../FSComp.txt:626) + /// (Originally from ..\FSComp.txt:627) static member tcConstructIsAmbiguousInComputationExpression() = (792, GetStringFunc("tcConstructIsAmbiguousInComputationExpression",",,,") ) /// This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {... }'. - /// (Originally from ../FSComp.txt:627) + /// (Originally from ..\FSComp.txt:628) static member tcConstructIsAmbiguousInSequenceExpression() = (793, GetStringFunc("tcConstructIsAmbiguousInSequenceExpression",",,,") ) /// 'do!' cannot be used within sequence expressions - /// (Originally from ../FSComp.txt:628) + /// (Originally from ..\FSComp.txt:629) static member tcDoBangIllegalInSequenceExpression() = (794, GetStringFunc("tcDoBangIllegalInSequenceExpression",",,,") ) /// The use of 'let! x = coll' in sequence expressions is not permitted. Use 'for x in coll' instead. - /// (Originally from ../FSComp.txt:629) + /// (Originally from ..\FSComp.txt:630) static member tcUseForInSequenceExpression() = (795, GetStringFunc("tcUseForInSequenceExpression",",,,") ) /// 'try'/'with' cannot be used within sequence expressions - /// (Originally from ../FSComp.txt:630) + /// (Originally from ..\FSComp.txt:631) static member tcTryIllegalInSequenceExpression() = (796, GetStringFunc("tcTryIllegalInSequenceExpression",",,,") ) /// In sequence expressions, multiple results are generated using 'yield!' - /// (Originally from ../FSComp.txt:631) + /// (Originally from ..\FSComp.txt:632) static member tcUseYieldBangForMultipleResults() = (797, GetStringFunc("tcUseYieldBangForMultipleResults",",,,") ) /// Invalid assignment - /// (Originally from ../FSComp.txt:632) + /// (Originally from ..\FSComp.txt:633) static member tcInvalidAssignment() = (799, GetStringFunc("tcInvalidAssignment",",,,") ) /// Invalid use of a type name - /// (Originally from ../FSComp.txt:633) + /// (Originally from ..\FSComp.txt:634) static member tcInvalidUseOfTypeName() = (800, GetStringFunc("tcInvalidUseOfTypeName",",,,") ) /// This type has no accessible object constructors - /// (Originally from ../FSComp.txt:634) + /// (Originally from ..\FSComp.txt:635) static member tcTypeHasNoAccessibleConstructor() = (801, GetStringFunc("tcTypeHasNoAccessibleConstructor",",,,") ) /// Invalid use of an interface type - /// (Originally from ../FSComp.txt:637) + /// (Originally from ..\FSComp.txt:638) static member tcInvalidUseOfInterfaceType() = (804, GetStringFunc("tcInvalidUseOfInterfaceType",",,,") ) /// Invalid use of a delegate constructor. Use the syntax 'new Type(args)' or just 'Type(args)'. - /// (Originally from ../FSComp.txt:638) + /// (Originally from ..\FSComp.txt:639) static member tcInvalidUseOfDelegate() = (805, GetStringFunc("tcInvalidUseOfDelegate",",,,") ) /// Property '%s' is not static - /// (Originally from ../FSComp.txt:639) + /// (Originally from ..\FSComp.txt:640) static member tcPropertyIsNotStatic(a0 : System.String) = (806, GetStringFunc("tcPropertyIsNotStatic",",,,%s,,,") a0) /// Property '%s' is not readable - /// (Originally from ../FSComp.txt:640) + /// (Originally from ..\FSComp.txt:641) static member tcPropertyIsNotReadable(a0 : System.String) = (807, GetStringFunc("tcPropertyIsNotReadable",",,,%s,,,") a0) /// This lookup cannot be used here - /// (Originally from ../FSComp.txt:641) + /// (Originally from ..\FSComp.txt:642) static member tcLookupMayNotBeUsedHere() = (808, GetStringFunc("tcLookupMayNotBeUsedHere",",,,") ) /// Property '%s' is static - /// (Originally from ../FSComp.txt:642) + /// (Originally from ..\FSComp.txt:643) static member tcPropertyIsStatic(a0 : System.String) = (809, GetStringFunc("tcPropertyIsStatic",",,,%s,,,") a0) /// Property '%s' cannot be set - /// (Originally from ../FSComp.txt:643) + /// (Originally from ..\FSComp.txt:644) static member tcPropertyCannotBeSet1(a0 : System.String) = (810, GetStringFunc("tcPropertyCannotBeSet1",",,,%s,,,") a0) /// Constructors must be applied to arguments and cannot be used as first-class values. If necessary use an anonymous function '(fun arg1 ... argN -> new Type(arg1,...,argN))'. - /// (Originally from ../FSComp.txt:644) + /// (Originally from ..\FSComp.txt:645) static member tcConstructorsCannotBeFirstClassValues() = (811, GetStringFunc("tcConstructorsCannotBeFirstClassValues",",,,") ) /// The syntax 'expr.id' may only be used with record labels, properties and fields - /// (Originally from ../FSComp.txt:645) + /// (Originally from ..\FSComp.txt:646) static member tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields() = (812, GetStringFunc("tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields",",,,") ) /// Event '%s' is static - /// (Originally from ../FSComp.txt:646) + /// (Originally from ..\FSComp.txt:647) static member tcEventIsStatic(a0 : System.String) = (813, GetStringFunc("tcEventIsStatic",",,,%s,,,") a0) /// Event '%s' is not static - /// (Originally from ../FSComp.txt:647) + /// (Originally from ..\FSComp.txt:648) static member tcEventIsNotStatic(a0 : System.String) = (814, GetStringFunc("tcEventIsNotStatic",",,,%s,,,") a0) /// The named argument '%s' did not match any argument or mutable property - /// (Originally from ../FSComp.txt:648) + /// (Originally from ..\FSComp.txt:649) static member tcNamedArgumentDidNotMatch(a0 : System.String) = (815, GetStringFunc("tcNamedArgumentDidNotMatch",",,,%s,,,") a0) /// One or more of the overloads of this method has curried arguments. Consider redesigning these members to take arguments in tupled form. - /// (Originally from ../FSComp.txt:649) + /// (Originally from ..\FSComp.txt:650) static member tcOverloadsCannotHaveCurriedArguments() = (816, GetStringFunc("tcOverloadsCannotHaveCurriedArguments",",,,") ) /// The unnamed arguments do not form a prefix of the arguments of the method called - /// (Originally from ../FSComp.txt:650) + /// (Originally from ..\FSComp.txt:651) static member tcUnnamedArgumentsDoNotFormPrefix() = (GetStringFunc("tcUnnamedArgumentsDoNotFormPrefix",",,,") ) /// Static optimization conditionals are only for use within the F# library - /// (Originally from ../FSComp.txt:651) + /// (Originally from ..\FSComp.txt:652) static member tcStaticOptimizationConditionalsOnlyForFSharpLibrary() = (817, GetStringFunc("tcStaticOptimizationConditionalsOnlyForFSharpLibrary",",,,") ) /// The corresponding formal argument is not optional - /// (Originally from ../FSComp.txt:652) + /// (Originally from ..\FSComp.txt:653) static member tcFormalArgumentIsNotOptional() = (818, GetStringFunc("tcFormalArgumentIsNotOptional",",,,") ) /// Invalid optional assignment to a property or field - /// (Originally from ../FSComp.txt:653) + /// (Originally from ..\FSComp.txt:654) static member tcInvalidOptionalAssignmentToPropertyOrField() = (819, GetStringFunc("tcInvalidOptionalAssignmentToPropertyOrField",",,,") ) /// A delegate constructor must be passed a single function value - /// (Originally from ../FSComp.txt:654) + /// (Originally from ..\FSComp.txt:655) static member tcDelegateConstructorMustBePassed() = (820, GetStringFunc("tcDelegateConstructorMustBePassed",",,,") ) /// A binding cannot be marked both 'use' and 'rec' - /// (Originally from ../FSComp.txt:655) + /// (Originally from ..\FSComp.txt:656) static member tcBindingCannotBeUseAndRec() = (821, GetStringFunc("tcBindingCannotBeUseAndRec",",,,") ) /// The 'VolatileField' attribute may only be used on 'let' bindings in classes - /// (Originally from ../FSComp.txt:656) + /// (Originally from ..\FSComp.txt:657) static member tcVolatileOnlyOnClassLetBindings() = (823, GetStringFunc("tcVolatileOnlyOnClassLetBindings",",,,") ) /// Attributes are not permitted on 'let' bindings in expressions - /// (Originally from ../FSComp.txt:657) + /// (Originally from ..\FSComp.txt:658) static member tcAttributesAreNotPermittedOnLetBindings() = (824, GetStringFunc("tcAttributesAreNotPermittedOnLetBindings",",,,") ) /// The 'DefaultValue' attribute may only be used on 'val' declarations - /// (Originally from ../FSComp.txt:658) + /// (Originally from ..\FSComp.txt:659) static member tcDefaultValueAttributeRequiresVal() = (825, GetStringFunc("tcDefaultValueAttributeRequiresVal",",,,") ) /// The 'ConditionalAttribute' attribute may only be used on members - /// (Originally from ../FSComp.txt:659) + /// (Originally from ..\FSComp.txt:660) static member tcConditionalAttributeRequiresMembers() = (826, GetStringFunc("tcConditionalAttributeRequiresMembers",",,,") ) /// This is not a valid name for an active pattern - /// (Originally from ../FSComp.txt:660) + /// (Originally from ..\FSComp.txt:661) static member tcInvalidActivePatternName() = (827, GetStringFunc("tcInvalidActivePatternName",",,,") ) /// The 'EntryPointAttribute' attribute may only be used on function definitions in modules - /// (Originally from ../FSComp.txt:661) + /// (Originally from ..\FSComp.txt:662) static member tcEntryPointAttributeRequiresFunctionInModule() = (828, GetStringFunc("tcEntryPointAttributeRequiresFunctionInModule",",,,") ) /// Mutable values cannot be marked 'inline' - /// (Originally from ../FSComp.txt:662) + /// (Originally from ..\FSComp.txt:663) static member tcMutableValuesCannotBeInline() = (829, GetStringFunc("tcMutableValuesCannotBeInline",",,,") ) /// Mutable values cannot have generic parameters - /// (Originally from ../FSComp.txt:663) + /// (Originally from ..\FSComp.txt:664) static member tcMutableValuesMayNotHaveGenericParameters() = (830, GetStringFunc("tcMutableValuesMayNotHaveGenericParameters",",,,") ) /// Mutable function values should be written 'let mutable f = (fun args -> ...)' - /// (Originally from ../FSComp.txt:664) + /// (Originally from ..\FSComp.txt:665) static member tcMutableValuesSyntax() = (831, GetStringFunc("tcMutableValuesSyntax",",,,") ) /// Only functions may be marked 'inline' - /// (Originally from ../FSComp.txt:665) + /// (Originally from ..\FSComp.txt:666) static member tcOnlyFunctionsCanBeInline() = (832, GetStringFunc("tcOnlyFunctionsCanBeInline",",,,") ) /// A literal value cannot be given the [] or [] attributes - /// (Originally from ../FSComp.txt:666) + /// (Originally from ..\FSComp.txt:667) static member tcIllegalAttributesForLiteral() = (833, GetStringFunc("tcIllegalAttributesForLiteral",",,,") ) /// A literal value cannot be marked 'mutable' - /// (Originally from ../FSComp.txt:667) + /// (Originally from ..\FSComp.txt:668) static member tcLiteralCannotBeMutable() = (834, GetStringFunc("tcLiteralCannotBeMutable",",,,") ) /// A literal value cannot be marked 'inline' - /// (Originally from ../FSComp.txt:668) + /// (Originally from ..\FSComp.txt:669) static member tcLiteralCannotBeInline() = (835, GetStringFunc("tcLiteralCannotBeInline",",,,") ) /// Literal values cannot have generic parameters - /// (Originally from ../FSComp.txt:669) + /// (Originally from ..\FSComp.txt:670) static member tcLiteralCannotHaveGenericParameters() = (836, GetStringFunc("tcLiteralCannotHaveGenericParameters",",,,") ) /// This is not a valid constant expression - /// (Originally from ../FSComp.txt:670) + /// (Originally from ..\FSComp.txt:671) static member tcInvalidConstantExpression() = (837, GetStringFunc("tcInvalidConstantExpression",",,,") ) /// This type is not accessible from this code location - /// (Originally from ../FSComp.txt:671) + /// (Originally from ..\FSComp.txt:672) static member tcTypeIsInaccessible() = (838, GetStringFunc("tcTypeIsInaccessible",",,,") ) /// Unexpected condition in imported assembly: failed to decode AttributeUsage attribute - /// (Originally from ../FSComp.txt:672) + /// (Originally from ..\FSComp.txt:673) static member tcUnexpectedConditionInImportedAssembly() = (839, GetStringFunc("tcUnexpectedConditionInImportedAssembly",",,,") ) /// Unrecognized attribute target. Valid attribute targets are 'assembly', 'module', 'type', 'method', 'property', 'return', 'param', 'field', 'event', 'constructor'. - /// (Originally from ../FSComp.txt:673) + /// (Originally from ..\FSComp.txt:674) static member tcUnrecognizedAttributeTarget() = (840, GetStringFunc("tcUnrecognizedAttributeTarget",",,,") ) /// This attribute is not valid for use on this language element. Assembly attributes should be attached to a 'do ()' declaration, if necessary within an F# module. - /// (Originally from ../FSComp.txt:674) + /// (Originally from ..\FSComp.txt:675) static member tcAttributeIsNotValidForLanguageElementUseDo() = (841, GetStringFunc("tcAttributeIsNotValidForLanguageElementUseDo",",,,") ) /// This attribute is not valid for use on this language element - /// (Originally from ../FSComp.txt:675) + /// (Originally from ..\FSComp.txt:676) static member tcAttributeIsNotValidForLanguageElement() = (842, GetStringFunc("tcAttributeIsNotValidForLanguageElement",",,,") ) /// Optional arguments cannot be used in custom attributes - /// (Originally from ../FSComp.txt:676) + /// (Originally from ..\FSComp.txt:677) static member tcOptionalArgumentsCannotBeUsedInCustomAttribute() = (843, GetStringFunc("tcOptionalArgumentsCannotBeUsedInCustomAttribute",",,,") ) /// This property cannot be set - /// (Originally from ../FSComp.txt:677) + /// (Originally from ..\FSComp.txt:678) static member tcPropertyCannotBeSet0() = (844, GetStringFunc("tcPropertyCannotBeSet0",",,,") ) /// This property or field was not found on this custom attribute type - /// (Originally from ../FSComp.txt:678) + /// (Originally from ..\FSComp.txt:679) static member tcPropertyOrFieldNotFoundInAttribute() = (845, GetStringFunc("tcPropertyOrFieldNotFoundInAttribute",",,,") ) /// A custom attribute must be a reference type - /// (Originally from ../FSComp.txt:679) + /// (Originally from ..\FSComp.txt:680) static member tcCustomAttributeMustBeReferenceType() = (846, GetStringFunc("tcCustomAttributeMustBeReferenceType",",,,") ) /// The number of args for a custom attribute does not match the expected number of args for the attribute constructor - /// (Originally from ../FSComp.txt:680) + /// (Originally from ..\FSComp.txt:681) static member tcCustomAttributeArgumentMismatch() = (847, GetStringFunc("tcCustomAttributeArgumentMismatch",",,,") ) /// A custom attribute must invoke an object constructor - /// (Originally from ../FSComp.txt:681) + /// (Originally from ..\FSComp.txt:682) static member tcCustomAttributeMustInvokeConstructor() = (848, GetStringFunc("tcCustomAttributeMustInvokeConstructor",",,,") ) /// Attribute expressions must be calls to object constructors - /// (Originally from ../FSComp.txt:682) + /// (Originally from ..\FSComp.txt:683) static member tcAttributeExpressionsMustBeConstructorCalls() = (849, GetStringFunc("tcAttributeExpressionsMustBeConstructorCalls",",,,") ) /// This attribute cannot be used in this version of F# - /// (Originally from ../FSComp.txt:683) + /// (Originally from ..\FSComp.txt:684) static member tcUnsupportedAttribute() = (850, GetStringFunc("tcUnsupportedAttribute",",,,") ) /// Invalid inline specification - /// (Originally from ../FSComp.txt:684) + /// (Originally from ..\FSComp.txt:685) static member tcInvalidInlineSpecification() = (851, GetStringFunc("tcInvalidInlineSpecification",",,,") ) /// 'use' bindings must be of the form 'use = ' - /// (Originally from ../FSComp.txt:685) + /// (Originally from ..\FSComp.txt:686) static member tcInvalidUseBinding() = (852, GetStringFunc("tcInvalidUseBinding",",,,") ) /// Abstract members are not permitted in an augmentation - they must be defined as part of the type itself - /// (Originally from ../FSComp.txt:686) + /// (Originally from ..\FSComp.txt:687) static member tcAbstractMembersIllegalInAugmentation() = (853, GetStringFunc("tcAbstractMembersIllegalInAugmentation",",,,") ) /// Method overrides and interface implementations are not permitted here - /// (Originally from ../FSComp.txt:687) + /// (Originally from ..\FSComp.txt:688) static member tcMethodOverridesIllegalHere() = (854, GetStringFunc("tcMethodOverridesIllegalHere",",,,") ) /// No abstract or interface member was found that corresponds to this override - /// (Originally from ../FSComp.txt:688) + /// (Originally from ..\FSComp.txt:689) static member tcNoMemberFoundForOverride() = (855, GetStringFunc("tcNoMemberFoundForOverride",",,,") ) /// This override takes a different number of arguments to the corresponding abstract member. The following abstract members were found:%s - /// (Originally from ../FSComp.txt:689) + /// (Originally from ..\FSComp.txt:690) static member tcOverrideArityMismatch(a0 : System.String) = (856, GetStringFunc("tcOverrideArityMismatch",",,,%s,,,") a0) /// This method already has a default implementation - /// (Originally from ../FSComp.txt:690) + /// (Originally from ..\FSComp.txt:691) static member tcDefaultImplementationAlreadyExists() = (857, GetStringFunc("tcDefaultImplementationAlreadyExists",",,,") ) /// The method implemented by this default is ambiguous - /// (Originally from ../FSComp.txt:691) + /// (Originally from ..\FSComp.txt:692) static member tcDefaultAmbiguous() = (858, GetStringFunc("tcDefaultAmbiguous",",,,") ) /// No abstract property was found that corresponds to this override - /// (Originally from ../FSComp.txt:692) + /// (Originally from ..\FSComp.txt:693) static member tcNoPropertyFoundForOverride() = (859, GetStringFunc("tcNoPropertyFoundForOverride",",,,") ) /// This property overrides or implements an abstract property but the abstract property doesn't have a corresponding %s - /// (Originally from ../FSComp.txt:693) + /// (Originally from ..\FSComp.txt:694) static member tcAbstractPropertyMissingGetOrSet(a0 : System.String) = (860, GetStringFunc("tcAbstractPropertyMissingGetOrSet",",,,%s,,,") a0) /// Invalid signature for set member - /// (Originally from ../FSComp.txt:694) + /// (Originally from ..\FSComp.txt:695) static member tcInvalidSignatureForSet() = (861, GetStringFunc("tcInvalidSignatureForSet",",,,") ) /// This new member hides the abstract member '%s'. Rename the member or use 'override' instead. - /// (Originally from ../FSComp.txt:695) + /// (Originally from ..\FSComp.txt:696) static member tcNewMemberHidesAbstractMember(a0 : System.String) = (864, GetStringFunc("tcNewMemberHidesAbstractMember",",,,%s,,,") a0) /// This new member hides the abstract member '%s' once tuples, functions, units of measure and/or provided types are erased. Rename the member or use 'override' instead. - /// (Originally from ../FSComp.txt:696) + /// (Originally from ..\FSComp.txt:697) static member tcNewMemberHidesAbstractMemberWithSuffix(a0 : System.String) = (864, GetStringFunc("tcNewMemberHidesAbstractMemberWithSuffix",",,,%s,,,") a0) /// Interfaces cannot contain definitions of static initializers - /// (Originally from ../FSComp.txt:697) + /// (Originally from ..\FSComp.txt:698) static member tcStaticInitializersIllegalInInterface() = (865, GetStringFunc("tcStaticInitializersIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of object constructors - /// (Originally from ../FSComp.txt:698) + /// (Originally from ..\FSComp.txt:699) static member tcObjectConstructorsIllegalInInterface() = (866, GetStringFunc("tcObjectConstructorsIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of member overrides - /// (Originally from ../FSComp.txt:699) + /// (Originally from ..\FSComp.txt:700) static member tcMemberOverridesIllegalInInterface() = (867, GetStringFunc("tcMemberOverridesIllegalInInterface",",,,") ) /// Interfaces cannot contain definitions of concrete members. You may need to define a constructor on your type to indicate that the type is a class. - /// (Originally from ../FSComp.txt:700) + /// (Originally from ..\FSComp.txt:701) static member tcConcreteMembersIllegalInInterface() = (868, GetStringFunc("tcConcreteMembersIllegalInInterface",",,,") ) /// Constructors cannot be specified in exception augmentations - /// (Originally from ../FSComp.txt:701) + /// (Originally from ..\FSComp.txt:702) static member tcConstructorsDisallowedInExceptionAugmentation() = (869, GetStringFunc("tcConstructorsDisallowedInExceptionAugmentation",",,,") ) /// Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. - /// (Originally from ../FSComp.txt:702) + /// (Originally from ..\FSComp.txt:703) static member tcStructsCannotHaveConstructorWithNoArguments() = (870, GetStringFunc("tcStructsCannotHaveConstructorWithNoArguments",",,,") ) /// Constructors cannot be defined for this type - /// (Originally from ../FSComp.txt:703) + /// (Originally from ..\FSComp.txt:704) static member tcConstructorsIllegalForThisType() = (871, GetStringFunc("tcConstructorsIllegalForThisType",",,,") ) /// Recursive bindings that include member specifications can only occur as a direct augmentation of a type - /// (Originally from ../FSComp.txt:704) + /// (Originally from ..\FSComp.txt:705) static member tcRecursiveBindingsWithMembersMustBeDirectAugmentation() = (872, GetStringFunc("tcRecursiveBindingsWithMembersMustBeDirectAugmentation",",,,") ) /// Only simple variable patterns can be bound in 'let rec' constructs - /// (Originally from ../FSComp.txt:705) + /// (Originally from ..\FSComp.txt:706) static member tcOnlySimplePatternsInLetRec() = (873, GetStringFunc("tcOnlySimplePatternsInLetRec",",,,") ) /// Only record fields and simple, non-recursive 'let' bindings may be marked mutable - /// (Originally from ../FSComp.txt:706) + /// (Originally from ..\FSComp.txt:707) static member tcOnlyRecordFieldsAndSimpleLetCanBeMutable() = (874, GetStringFunc("tcOnlyRecordFieldsAndSimpleLetCanBeMutable",",,,") ) /// This member is not sufficiently generic - /// (Originally from ../FSComp.txt:707) + /// (Originally from ..\FSComp.txt:708) static member tcMemberIsNotSufficientlyGeneric() = (875, GetStringFunc("tcMemberIsNotSufficientlyGeneric",",,,") ) /// A declaration may only be the [] attribute if a constant value is also given, e.g. 'val x : int = 1' - /// (Originally from ../FSComp.txt:708) + /// (Originally from ..\FSComp.txt:709) static member tcLiteralAttributeRequiresConstantValue() = (876, GetStringFunc("tcLiteralAttributeRequiresConstantValue",",,,") ) /// A declaration may only be given a value in a signature if the declaration has the [] attribute - /// (Originally from ../FSComp.txt:709) + /// (Originally from ..\FSComp.txt:710) static member tcValueInSignatureRequiresLiteralAttribute() = (877, GetStringFunc("tcValueInSignatureRequiresLiteralAttribute",",,,") ) /// Thread-static and context-static variables must be static and given the [] attribute to indicate that the value is initialized to the default value on each new thread - /// (Originally from ../FSComp.txt:710) + /// (Originally from ..\FSComp.txt:711) static member tcThreadStaticAndContextStaticMustBeStatic() = (878, GetStringFunc("tcThreadStaticAndContextStaticMustBeStatic",",,,") ) /// Volatile fields must be marked 'mutable' and cannot be thread-static - /// (Originally from ../FSComp.txt:711) + /// (Originally from ..\FSComp.txt:712) static member tcVolatileFieldsMustBeMutable() = (879, GetStringFunc("tcVolatileFieldsMustBeMutable",",,,") ) /// Uninitialized 'val' fields must be mutable and marked with the '[]' attribute. Consider using a 'let' binding instead of a 'val' field. - /// (Originally from ../FSComp.txt:712) + /// (Originally from ..\FSComp.txt:713) static member tcUninitializedValFieldsMustBeMutable() = (880, GetStringFunc("tcUninitializedValFieldsMustBeMutable",",,,") ) /// Static 'val' fields in types must be mutable, private and marked with the '[]' attribute. They are initialized to the 'null' or 'zero' value for their type. Consider also using a 'static let mutable' binding in a class type. - /// (Originally from ../FSComp.txt:713) + /// (Originally from ..\FSComp.txt:714) static member tcStaticValFieldsMustBeMutableAndPrivate() = (881, GetStringFunc("tcStaticValFieldsMustBeMutableAndPrivate",",,,") ) /// This field requires a name - /// (Originally from ../FSComp.txt:714) + /// (Originally from ..\FSComp.txt:715) static member tcFieldRequiresName() = (882, GetStringFunc("tcFieldRequiresName",",,,") ) /// Invalid namespace, module, type or union case name - /// (Originally from ../FSComp.txt:715) + /// (Originally from ..\FSComp.txt:716) static member tcInvalidNamespaceModuleTypeUnionName() = (883, GetStringFunc("tcInvalidNamespaceModuleTypeUnionName",",,,") ) /// Explicit type declarations for constructors must be of the form 'ty1 * ... * tyN -> resTy'. Parentheses may be required around 'resTy' - /// (Originally from ../FSComp.txt:716) + /// (Originally from ..\FSComp.txt:717) static member tcIllegalFormForExplicitTypeDeclaration() = (884, GetStringFunc("tcIllegalFormForExplicitTypeDeclaration",",,,") ) /// Return types of union cases must be identical to the type being defined, up to abbreviations - /// (Originally from ../FSComp.txt:717) + /// (Originally from ..\FSComp.txt:718) static member tcReturnTypesForUnionMustBeSameAsType() = (885, GetStringFunc("tcReturnTypesForUnionMustBeSameAsType",",,,") ) /// This is not a valid value for an enumeration literal - /// (Originally from ../FSComp.txt:718) + /// (Originally from ..\FSComp.txt:719) static member tcInvalidEnumerationLiteral() = (886, GetStringFunc("tcInvalidEnumerationLiteral",",,,") ) /// The type '%s' is not an interface type - /// (Originally from ../FSComp.txt:719) + /// (Originally from ..\FSComp.txt:720) static member tcTypeIsNotInterfaceType1(a0 : System.String) = (887, GetStringFunc("tcTypeIsNotInterfaceType1",",,,%s,,,") a0) /// Duplicate specification of an interface - /// (Originally from ../FSComp.txt:720) + /// (Originally from ..\FSComp.txt:721) static member tcDuplicateSpecOfInterface() = (888, GetStringFunc("tcDuplicateSpecOfInterface",",,,") ) /// A field/val declaration is not permitted here - /// (Originally from ../FSComp.txt:721) + /// (Originally from ..\FSComp.txt:722) static member tcFieldValIllegalHere() = (889, GetStringFunc("tcFieldValIllegalHere",",,,") ) /// A inheritance declaration is not permitted here - /// (Originally from ../FSComp.txt:722) + /// (Originally from ..\FSComp.txt:723) static member tcInheritIllegalHere() = (890, GetStringFunc("tcInheritIllegalHere",",,,") ) /// This declaration opens the module '%s', which is marked as 'RequireQualifiedAccess'. Adjust your code to use qualified references to the elements of the module instead, e.g. 'List.map' instead of 'map'. This change will ensure that your code is robust as new constructs are added to libraries. - /// (Originally from ../FSComp.txt:723) + /// (Originally from ..\FSComp.txt:724) static member tcModuleRequiresQualifiedAccess(a0 : System.String) = (892, GetStringFunc("tcModuleRequiresQualifiedAccess",",,,%s,,,") a0) /// This declaration opens the namespace or module '%s' through a partially qualified path. Adjust this code to use the full path of the namespace. This change will make your code more robust as new constructs are added to the F# and CLI libraries. - /// (Originally from ../FSComp.txt:724) + /// (Originally from ..\FSComp.txt:725) static member tcOpenUsedWithPartiallyQualifiedPath(a0 : System.String) = (893, GetStringFunc("tcOpenUsedWithPartiallyQualifiedPath",",,,%s,,,") a0) /// Local class bindings cannot be marked inline. Consider lifting the definition out of the class or else do not mark it as inline. - /// (Originally from ../FSComp.txt:725) + /// (Originally from ..\FSComp.txt:726) static member tcLocalClassBindingsCannotBeInline() = (894, GetStringFunc("tcLocalClassBindingsCannotBeInline",",,,") ) /// Type abbreviations cannot have members - /// (Originally from ../FSComp.txt:726) + /// (Originally from ..\FSComp.txt:727) static member tcTypeAbbreviationsMayNotHaveMembers() = (895, GetStringFunc("tcTypeAbbreviationsMayNotHaveMembers",",,,") ) /// As of F# 4.1, the accessibility of type abbreviations is checked at compile-time. Consider changing the accessibility of the type abbreviation. Ignoring this warning might lead to runtime errors. - /// (Originally from ../FSComp.txt:727) + /// (Originally from ..\FSComp.txt:728) static member tcTypeAbbreviationsCheckedAtCompileTime() = (GetStringFunc("tcTypeAbbreviationsCheckedAtCompileTime",",,,") ) /// Enumerations cannot have members - /// (Originally from ../FSComp.txt:728) + /// (Originally from ..\FSComp.txt:729) static member tcEnumerationsMayNotHaveMembers() = (896, GetStringFunc("tcEnumerationsMayNotHaveMembers",",,,") ) /// Measure declarations may have only static members - /// (Originally from ../FSComp.txt:729) + /// (Originally from ..\FSComp.txt:730) static member tcMeasureDeclarationsRequireStaticMembers() = (897, GetStringFunc("tcMeasureDeclarationsRequireStaticMembers",",,,") ) /// Structs cannot contain 'do' bindings because the default constructor for structs would not execute these bindings - /// (Originally from ../FSComp.txt:730) + /// (Originally from ..\FSComp.txt:731) static member tcStructsMayNotContainDoBindings() = (GetStringFunc("tcStructsMayNotContainDoBindings",",,,") ) /// Structs cannot contain value definitions because the default constructor for structs will not execute these bindings. Consider adding additional arguments to the primary constructor for the type. - /// (Originally from ../FSComp.txt:731) + /// (Originally from ..\FSComp.txt:732) static member tcStructsMayNotContainLetBindings() = (901, GetStringFunc("tcStructsMayNotContainLetBindings",",,,") ) /// Static value definitions may only be used in types with a primary constructor. Consider adding arguments to the type definition, e.g. 'type X(args) = ...'. - /// (Originally from ../FSComp.txt:732) + /// (Originally from ..\FSComp.txt:733) static member tcStaticLetBindingsRequireClassesWithImplicitConstructors() = (902, GetStringFunc("tcStaticLetBindingsRequireClassesWithImplicitConstructors",",,,") ) /// Measure declarations may have only static members: constructors are not available - /// (Originally from ../FSComp.txt:733) + /// (Originally from ..\FSComp.txt:734) static member tcMeasureDeclarationsRequireStaticMembersNotConstructors() = (904, GetStringFunc("tcMeasureDeclarationsRequireStaticMembersNotConstructors",",,,") ) /// A member and a local class binding both have the name '%s' - /// (Originally from ../FSComp.txt:734) + /// (Originally from ..\FSComp.txt:735) static member tcMemberAndLocalClassBindingHaveSameName(a0 : System.String) = (905, GetStringFunc("tcMemberAndLocalClassBindingHaveSameName",",,,%s,,,") a0) /// Type abbreviations cannot have interface declarations - /// (Originally from ../FSComp.txt:735) + /// (Originally from ..\FSComp.txt:736) static member tcTypeAbbreviationsCannotHaveInterfaceDeclaration() = (906, GetStringFunc("tcTypeAbbreviationsCannotHaveInterfaceDeclaration",",,,") ) /// Enumerations cannot have interface declarations - /// (Originally from ../FSComp.txt:736) + /// (Originally from ..\FSComp.txt:737) static member tcEnumerationsCannotHaveInterfaceDeclaration() = (907, GetStringFunc("tcEnumerationsCannotHaveInterfaceDeclaration",",,,") ) /// This type is not an interface type - /// (Originally from ../FSComp.txt:737) + /// (Originally from ..\FSComp.txt:738) static member tcTypeIsNotInterfaceType0() = (908, GetStringFunc("tcTypeIsNotInterfaceType0",",,,") ) /// All implemented interfaces should be declared on the initial declaration of the type - /// (Originally from ../FSComp.txt:738) + /// (Originally from ..\FSComp.txt:739) static member tcAllImplementedInterfacesShouldBeDeclared() = (909, GetStringFunc("tcAllImplementedInterfacesShouldBeDeclared",",,,") ) /// A default implementation of this interface has already been added because the explicit implementation of the interface was not specified at the definition of the type - /// (Originally from ../FSComp.txt:739) + /// (Originally from ..\FSComp.txt:740) static member tcDefaultImplementationForInterfaceHasAlreadyBeenAdded() = (910, GetStringFunc("tcDefaultImplementationForInterfaceHasAlreadyBeenAdded",",,,") ) /// This member is not permitted in an interface implementation - /// (Originally from ../FSComp.txt:740) + /// (Originally from ..\FSComp.txt:741) static member tcMemberNotPermittedInInterfaceImplementation() = (911, GetStringFunc("tcMemberNotPermittedInInterfaceImplementation",",,,") ) /// This declaration element is not permitted in an augmentation - /// (Originally from ../FSComp.txt:741) + /// (Originally from ..\FSComp.txt:742) static member tcDeclarationElementNotPermittedInAugmentation() = (912, GetStringFunc("tcDeclarationElementNotPermittedInAugmentation",",,,") ) /// Types cannot contain nested type definitions - /// (Originally from ../FSComp.txt:742) + /// (Originally from ..\FSComp.txt:743) static member tcTypesCannotContainNestedTypes() = (913, GetStringFunc("tcTypesCannotContainNestedTypes",",,,") ) /// type, exception or module - /// (Originally from ../FSComp.txt:743) + /// (Originally from ..\FSComp.txt:744) static member tcTypeExceptionOrModule() = (GetStringFunc("tcTypeExceptionOrModule",",,,") ) /// type or module - /// (Originally from ../FSComp.txt:744) + /// (Originally from ..\FSComp.txt:745) static member tcTypeOrModule() = (GetStringFunc("tcTypeOrModule",",,,") ) /// The struct, record or union type '%s' implements the interface 'System.IStructuralEquatable' explicitly. Apply the 'CustomEquality' attribute to the type. - /// (Originally from ../FSComp.txt:745) + /// (Originally from ..\FSComp.txt:746) static member tcImplementsIStructuralEquatableExplicitly(a0 : System.String) = (914, GetStringFunc("tcImplementsIStructuralEquatableExplicitly",",,,%s,,,") a0) /// The struct, record or union type '%s' implements the interface 'System.IEquatable<_>' explicitly. Apply the 'CustomEquality' attribute to the type and provide a consistent implementation of the non-generic override 'System.Object.Equals(obj)'. - /// (Originally from ../FSComp.txt:746) + /// (Originally from ..\FSComp.txt:747) static member tcImplementsIEquatableExplicitly(a0 : System.String) = (915, GetStringFunc("tcImplementsIEquatableExplicitly",",,,%s,,,") a0) /// Explicit type specifications cannot be used for exception constructors - /// (Originally from ../FSComp.txt:747) + /// (Originally from ..\FSComp.txt:748) static member tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors() = (916, GetStringFunc("tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors",",,,") ) /// Exception abbreviations should not have argument lists - /// (Originally from ../FSComp.txt:748) + /// (Originally from ..\FSComp.txt:749) static member tcExceptionAbbreviationsShouldNotHaveArgumentList() = (917, GetStringFunc("tcExceptionAbbreviationsShouldNotHaveArgumentList",",,,") ) /// Abbreviations for Common IL exceptions cannot take arguments - /// (Originally from ../FSComp.txt:749) + /// (Originally from ..\FSComp.txt:750) static member tcAbbreviationsFordotNetExceptionsCannotTakeArguments() = (918, GetStringFunc("tcAbbreviationsFordotNetExceptionsCannotTakeArguments",",,,") ) /// Exception abbreviations must refer to existing exceptions or F# types deriving from System.Exception - /// (Originally from ../FSComp.txt:750) + /// (Originally from ..\FSComp.txt:751) static member tcExceptionAbbreviationsMustReferToValidExceptions() = (919, GetStringFunc("tcExceptionAbbreviationsMustReferToValidExceptions",",,,") ) /// Abbreviations for Common IL exception types must have a matching object constructor - /// (Originally from ../FSComp.txt:751) + /// (Originally from ..\FSComp.txt:752) static member tcAbbreviationsFordotNetExceptionsMustHaveMatchingObjectConstructor() = (920, GetStringFunc("tcAbbreviationsFordotNetExceptionsMustHaveMatchingObjectConstructor",",,,") ) /// Not an exception - /// (Originally from ../FSComp.txt:752) + /// (Originally from ..\FSComp.txt:753) static member tcNotAnException() = (921, GetStringFunc("tcNotAnException",",,,") ) /// Invalid module name - /// (Originally from ../FSComp.txt:754) + /// (Originally from ..\FSComp.txt:755) static member tcInvalidModuleName() = (924, GetStringFunc("tcInvalidModuleName",",,,") ) /// Invalid type extension - /// (Originally from ../FSComp.txt:755) + /// (Originally from ..\FSComp.txt:756) static member tcInvalidTypeExtension() = (925, GetStringFunc("tcInvalidTypeExtension",",,,") ) /// The attributes of this type specify multiple kinds for the type - /// (Originally from ../FSComp.txt:756) + /// (Originally from ..\FSComp.txt:757) static member tcAttributesOfTypeSpecifyMultipleKindsForType() = (926, GetStringFunc("tcAttributesOfTypeSpecifyMultipleKindsForType",",,,") ) /// The kind of the type specified by its attributes does not match the kind implied by its definition - /// (Originally from ../FSComp.txt:757) + /// (Originally from ..\FSComp.txt:758) static member tcKindOfTypeSpecifiedDoesNotMatchDefinition() = (927, GetStringFunc("tcKindOfTypeSpecifiedDoesNotMatchDefinition",",,,") ) /// Measure definitions cannot have type parameters - /// (Originally from ../FSComp.txt:758) + /// (Originally from ..\FSComp.txt:759) static member tcMeasureDefinitionsCannotHaveTypeParameters() = (928, GetStringFunc("tcMeasureDefinitionsCannotHaveTypeParameters",",,,") ) /// This type requires a definition - /// (Originally from ../FSComp.txt:759) + /// (Originally from ..\FSComp.txt:760) static member tcTypeRequiresDefinition() = (929, GetStringFunc("tcTypeRequiresDefinition",",,,") ) /// This type abbreviation has one or more declared type parameters that do not appear in the type being abbreviated. Type abbreviations must use all declared type parameters in the type being abbreviated. Consider removing one or more type parameters, or use a concrete type definition that wraps an underlying type, such as 'type C<'a> = C of ...'. - /// (Originally from ../FSComp.txt:760) + /// (Originally from ..\FSComp.txt:761) static member tcTypeAbbreviationHasTypeParametersMissingOnType() = (GetStringFunc("tcTypeAbbreviationHasTypeParametersMissingOnType",",,,") ) /// Structs, interfaces, enums and delegates cannot inherit from other types - /// (Originally from ../FSComp.txt:761) + /// (Originally from ..\FSComp.txt:762) static member tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes() = (931, GetStringFunc("tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes",",,,") ) /// Types cannot inherit from multiple concrete types - /// (Originally from ../FSComp.txt:762) + /// (Originally from ..\FSComp.txt:763) static member tcTypesCannotInheritFromMultipleConcreteTypes() = (932, GetStringFunc("tcTypesCannotInheritFromMultipleConcreteTypes",",,,") ) /// Records, union, abbreviations and struct types cannot have the 'AllowNullLiteral' attribute - /// (Originally from ../FSComp.txt:763) + /// (Originally from ..\FSComp.txt:764) static member tcRecordsUnionsAbbreviationsStructsMayNotHaveAllowNullLiteralAttribute() = (934, GetStringFunc("tcRecordsUnionsAbbreviationsStructsMayNotHaveAllowNullLiteralAttribute",",,,") ) /// Types with the 'AllowNullLiteral' attribute may only inherit from or implement types which also allow the use of the null literal - /// (Originally from ../FSComp.txt:764) + /// (Originally from ..\FSComp.txt:765) static member tcAllowNullTypesMayOnlyInheritFromAllowNullTypes() = (935, GetStringFunc("tcAllowNullTypesMayOnlyInheritFromAllowNullTypes",",,,") ) /// Generic types cannot be given the 'StructLayout' attribute - /// (Originally from ../FSComp.txt:765) + /// (Originally from ..\FSComp.txt:766) static member tcGenericTypesCannotHaveStructLayout() = (936, GetStringFunc("tcGenericTypesCannotHaveStructLayout",",,,") ) /// Only structs and classes without primary constructors may be given the 'StructLayout' attribute - /// (Originally from ../FSComp.txt:766) + /// (Originally from ..\FSComp.txt:767) static member tcOnlyStructsCanHaveStructLayout() = (937, GetStringFunc("tcOnlyStructsCanHaveStructLayout",",,,") ) /// The representation of this type is hidden by the signature. It must be given an attribute such as [], [] or [] to indicate the characteristics of the type. - /// (Originally from ../FSComp.txt:767) + /// (Originally from ..\FSComp.txt:768) static member tcRepresentationOfTypeHiddenBySignature() = (938, GetStringFunc("tcRepresentationOfTypeHiddenBySignature",",,,") ) /// Only classes may be given the 'AbstractClass' attribute - /// (Originally from ../FSComp.txt:768) + /// (Originally from ..\FSComp.txt:769) static member tcOnlyClassesCanHaveAbstract() = (939, GetStringFunc("tcOnlyClassesCanHaveAbstract",",,,") ) /// Only types representing units-of-measure may be given the 'Measure' attribute - /// (Originally from ../FSComp.txt:769) + /// (Originally from ..\FSComp.txt:770) static member tcOnlyTypesRepresentingUnitsOfMeasureCanHaveMeasure() = (940, GetStringFunc("tcOnlyTypesRepresentingUnitsOfMeasureCanHaveMeasure",",,,") ) /// Accessibility modifiers are not permitted on overrides or interface implementations - /// (Originally from ../FSComp.txt:770) + /// (Originally from ..\FSComp.txt:771) static member tcOverridesCannotHaveVisibilityDeclarations() = (941, GetStringFunc("tcOverridesCannotHaveVisibilityDeclarations",",,,") ) /// Discriminated union types are always sealed - /// (Originally from ../FSComp.txt:771) + /// (Originally from ..\FSComp.txt:772) static member tcTypesAreAlwaysSealedDU() = (942, GetStringFunc("tcTypesAreAlwaysSealedDU",",,,") ) /// Record types are always sealed - /// (Originally from ../FSComp.txt:772) + /// (Originally from ..\FSComp.txt:773) static member tcTypesAreAlwaysSealedRecord() = (942, GetStringFunc("tcTypesAreAlwaysSealedRecord",",,,") ) /// Assembly code types are always sealed - /// (Originally from ../FSComp.txt:773) + /// (Originally from ..\FSComp.txt:774) static member tcTypesAreAlwaysSealedAssemblyCode() = (942, GetStringFunc("tcTypesAreAlwaysSealedAssemblyCode",",,,") ) /// Struct types are always sealed - /// (Originally from ../FSComp.txt:774) + /// (Originally from ..\FSComp.txt:775) static member tcTypesAreAlwaysSealedStruct() = (942, GetStringFunc("tcTypesAreAlwaysSealedStruct",",,,") ) /// Delegate types are always sealed - /// (Originally from ../FSComp.txt:775) + /// (Originally from ..\FSComp.txt:776) static member tcTypesAreAlwaysSealedDelegate() = (942, GetStringFunc("tcTypesAreAlwaysSealedDelegate",",,,") ) /// Enum types are always sealed - /// (Originally from ../FSComp.txt:776) + /// (Originally from ..\FSComp.txt:777) static member tcTypesAreAlwaysSealedEnum() = (942, GetStringFunc("tcTypesAreAlwaysSealedEnum",",,,") ) /// Interface types and delegate types cannot contain fields - /// (Originally from ../FSComp.txt:777) + /// (Originally from ..\FSComp.txt:778) static member tcInterfaceTypesAndDelegatesCannotContainFields() = (943, GetStringFunc("tcInterfaceTypesAndDelegatesCannotContainFields",",,,") ) /// Abbreviated types cannot be given the 'Sealed' attribute - /// (Originally from ../FSComp.txt:778) + /// (Originally from ..\FSComp.txt:779) static member tcAbbreviatedTypesCannotBeSealed() = (944, GetStringFunc("tcAbbreviatedTypesCannotBeSealed",",,,") ) /// Cannot inherit a sealed type - /// (Originally from ../FSComp.txt:779) + /// (Originally from ..\FSComp.txt:780) static member tcCannotInheritFromSealedType() = (945, GetStringFunc("tcCannotInheritFromSealedType",",,,") ) /// Cannot inherit from interface type. Use interface ... with instead. - /// (Originally from ../FSComp.txt:780) + /// (Originally from ..\FSComp.txt:781) static member tcCannotInheritFromInterfaceType() = (946, GetStringFunc("tcCannotInheritFromInterfaceType",",,,") ) /// Struct types cannot contain abstract members - /// (Originally from ../FSComp.txt:781) + /// (Originally from ..\FSComp.txt:782) static member tcStructTypesCannotContainAbstractMembers() = (947, GetStringFunc("tcStructTypesCannotContainAbstractMembers",",,,") ) /// Interface types cannot be sealed - /// (Originally from ../FSComp.txt:782) + /// (Originally from ..\FSComp.txt:783) static member tcInterfaceTypesCannotBeSealed() = (948, GetStringFunc("tcInterfaceTypesCannotBeSealed",",,,") ) /// Delegate specifications must be of the form 'typ -> typ' - /// (Originally from ../FSComp.txt:783) + /// (Originally from ..\FSComp.txt:784) static member tcInvalidDelegateSpecification() = (949, GetStringFunc("tcInvalidDelegateSpecification",",,,") ) /// Delegate specifications must not be curried types. Use 'typ * ... * typ -> typ' for multi-argument delegates, and 'typ -> (typ -> typ)' for delegates returning function values. - /// (Originally from ../FSComp.txt:784) + /// (Originally from ..\FSComp.txt:785) static member tcDelegatesCannotBeCurried() = (950, GetStringFunc("tcDelegatesCannotBeCurried",",,,") ) /// Literal enumerations must have type int, uint, int16, uint16, int64, uint64, byte, sbyte or char - /// (Originally from ../FSComp.txt:785) + /// (Originally from ..\FSComp.txt:786) static member tcInvalidTypeForLiteralEnumeration() = (951, GetStringFunc("tcInvalidTypeForLiteralEnumeration",",,,") ) /// This type definition involves an immediate cyclic reference through an abbreviation - /// (Originally from ../FSComp.txt:787) + /// (Originally from ..\FSComp.txt:788) static member tcTypeDefinitionIsCyclic() = (953, GetStringFunc("tcTypeDefinitionIsCyclic",",,,") ) /// This type definition involves an immediate cyclic reference through a struct field or inheritance relation - /// (Originally from ../FSComp.txt:788) + /// (Originally from ..\FSComp.txt:789) static member tcTypeDefinitionIsCyclicThroughInheritance() = (954, GetStringFunc("tcTypeDefinitionIsCyclicThroughInheritance",",,,") ) /// The syntax 'type X with ...' is reserved for augmentations. Types whose representations are hidden but which have members are now declared in signatures using 'type X = ...'. You may also need to add the '[] attribute to the type definition in the signature - /// (Originally from ../FSComp.txt:789) + /// (Originally from ..\FSComp.txt:790) static member tcReservedSyntaxForAugmentation() = (GetStringFunc("tcReservedSyntaxForAugmentation",",,,") ) /// Members that extend interface, delegate or enum types must be placed in a module separate to the definition of the type. This module must either have the AutoOpen attribute or be opened explicitly by client code to bring the extension members into scope. - /// (Originally from ../FSComp.txt:790) + /// (Originally from ..\FSComp.txt:791) static member tcMembersThatExtendInterfaceMustBePlacedInSeparateModule() = (956, GetStringFunc("tcMembersThatExtendInterfaceMustBePlacedInSeparateModule",",,,") ) /// One or more of the declared type parameters for this type extension have a missing or wrong type constraint not matching the original type constraints on '%s' - /// (Originally from ../FSComp.txt:791) + /// (Originally from ..\FSComp.txt:792) static member tcDeclaredTypeParametersForExtensionDoNotMatchOriginal(a0 : System.String) = (957, GetStringFunc("tcDeclaredTypeParametersForExtensionDoNotMatchOriginal",",,,%s,,,") a0) /// Type definitions may only have one 'inherit' specification and it must be the first declaration - /// (Originally from ../FSComp.txt:792) + /// (Originally from ..\FSComp.txt:793) static member tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit() = (959, GetStringFunc("tcTypeDefinitionsWithImplicitConstructionMustHaveOneInherit",",,,") ) /// 'let' and 'do' bindings must come before member and interface definitions in type definitions - /// (Originally from ../FSComp.txt:793) + /// (Originally from ..\FSComp.txt:794) static member tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers() = (960, GetStringFunc("tcTypeDefinitionsWithImplicitConstructionMustHaveLocalBindingsBeforeMembers",",,,") ) /// This 'inherit' declaration specifies the inherited type but no arguments. Consider supplying arguments, e.g. 'inherit BaseType(args)'. - /// (Originally from ../FSComp.txt:794) + /// (Originally from ..\FSComp.txt:795) static member tcInheritDeclarationMissingArguments() = (961, GetStringFunc("tcInheritDeclarationMissingArguments",",,,") ) /// This 'inherit' declaration has arguments, but is not in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ../FSComp.txt:795) + /// (Originally from ..\FSComp.txt:796) static member tcInheritConstructionCallNotPartOfImplicitSequence() = (962, GetStringFunc("tcInheritConstructionCallNotPartOfImplicitSequence",",,,") ) /// This definition may only be used in a type with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ../FSComp.txt:796) + /// (Originally from ..\FSComp.txt:797) static member tcLetAndDoRequiresImplicitConstructionSequence() = (963, GetStringFunc("tcLetAndDoRequiresImplicitConstructionSequence",",,,") ) /// Type abbreviations cannot have augmentations - /// (Originally from ../FSComp.txt:797) + /// (Originally from ..\FSComp.txt:798) static member tcTypeAbbreviationsCannotHaveAugmentations() = (964, GetStringFunc("tcTypeAbbreviationsCannotHaveAugmentations",",,,") ) /// The path '%s' is a namespace. A module abbreviation may not abbreviate a namespace. - /// (Originally from ../FSComp.txt:798) + /// (Originally from ..\FSComp.txt:799) static member tcModuleAbbreviationForNamespace(a0 : System.String) = (965, GetStringFunc("tcModuleAbbreviationForNamespace",",,,%s,,,") a0) /// The type '%s' is used in an invalid way. A value prior to '%s' has an inferred type involving '%s', which is an invalid forward reference. - /// (Originally from ../FSComp.txt:799) + /// (Originally from ..\FSComp.txt:800) static member tcTypeUsedInInvalidWay(a0 : System.String, a1 : System.String, a2 : System.String) = (966, GetStringFunc("tcTypeUsedInInvalidWay",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The member '%s' is used in an invalid way. A use of '%s' has been inferred prior to the definition of '%s', which is an invalid forward reference. - /// (Originally from ../FSComp.txt:800) + /// (Originally from ..\FSComp.txt:801) static member tcMemberUsedInInvalidWay(a0 : System.String, a1 : System.String, a2 : System.String) = (967, GetStringFunc("tcMemberUsedInInvalidWay",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The attribute 'AutoOpen(\"%s\")' in the assembly '%s' did not refer to a valid module or namespace in that assembly and has been ignored - /// (Originally from ../FSComp.txt:803) + /// (Originally from ..\FSComp.txt:804) static member tcAttributeAutoOpenWasIgnored(a0 : System.String, a1 : System.String) = (970, GetStringFunc("tcAttributeAutoOpenWasIgnored",",,,%s,,,%s,,,") a0 a1) /// Undefined value '%s' - /// (Originally from ../FSComp.txt:804) + /// (Originally from ..\FSComp.txt:805) static member ilUndefinedValue(a0 : System.String) = (971, GetStringFunc("ilUndefinedValue",",,,%s,,,") a0) /// Label %s not found - /// (Originally from ../FSComp.txt:805) + /// (Originally from ..\FSComp.txt:806) static member ilLabelNotFound(a0 : System.String) = (972, GetStringFunc("ilLabelNotFound",",,,%s,,,") a0) /// Incorrect number of type arguments to local call - /// (Originally from ../FSComp.txt:806) + /// (Originally from ..\FSComp.txt:807) static member ilIncorrectNumberOfTypeArguments() = (973, GetStringFunc("ilIncorrectNumberOfTypeArguments",",,,") ) /// Dynamic invocation of %s is not supported - /// (Originally from ../FSComp.txt:807) + /// (Originally from ..\FSComp.txt:808) static member ilDynamicInvocationNotSupported(a0 : System.String) = (GetStringFunc("ilDynamicInvocationNotSupported",",,,%s,,,") a0) /// Taking the address of a literal field is invalid - /// (Originally from ../FSComp.txt:808) + /// (Originally from ..\FSComp.txt:809) static member ilAddressOfLiteralFieldIsInvalid() = (975, GetStringFunc("ilAddressOfLiteralFieldIsInvalid",",,,") ) /// This operation involves taking the address of a value '%s' represented using a local variable or other special representation. This is invalid. - /// (Originally from ../FSComp.txt:809) + /// (Originally from ..\FSComp.txt:810) static member ilAddressOfValueHereIsInvalid(a0 : System.String) = (976, GetStringFunc("ilAddressOfValueHereIsInvalid",",,,%s,,,") a0) /// Custom marshallers cannot be specified in F# code. Consider using a C# helper function. - /// (Originally from ../FSComp.txt:810) + /// (Originally from ..\FSComp.txt:811) static member ilCustomMarshallersCannotBeUsedInFSharp() = (980, GetStringFunc("ilCustomMarshallersCannotBeUsedInFSharp",",,,") ) /// The MarshalAs attribute could not be decoded - /// (Originally from ../FSComp.txt:811) + /// (Originally from ..\FSComp.txt:812) static member ilMarshalAsAttributeCannotBeDecoded() = (981, GetStringFunc("ilMarshalAsAttributeCannotBeDecoded",",,,") ) /// The signature for this external function contains type parameters. Constrain the argument and return types to indicate the types of the corresponding C function. - /// (Originally from ../FSComp.txt:812) + /// (Originally from ..\FSComp.txt:813) static member ilSignatureForExternalFunctionContainsTypeParameters() = (982, GetStringFunc("ilSignatureForExternalFunctionContainsTypeParameters",",,,") ) /// The DllImport attribute could not be decoded - /// (Originally from ../FSComp.txt:813) + /// (Originally from ..\FSComp.txt:814) static member ilDllImportAttributeCouldNotBeDecoded() = (983, GetStringFunc("ilDllImportAttributeCouldNotBeDecoded",",,,") ) /// Literal fields cannot be set - /// (Originally from ../FSComp.txt:814) + /// (Originally from ..\FSComp.txt:815) static member ilLiteralFieldsCannotBeSet() = (984, GetStringFunc("ilLiteralFieldsCannotBeSet",",,,") ) /// GenSetStorage: %s was represented as a static method but was not an appropriate lambda expression - /// (Originally from ../FSComp.txt:815) + /// (Originally from ..\FSComp.txt:816) static member ilStaticMethodIsNotLambda(a0 : System.String) = (985, GetStringFunc("ilStaticMethodIsNotLambda",",,,%s,,,") a0) /// Mutable variables cannot escape their method - /// (Originally from ../FSComp.txt:816) + /// (Originally from ..\FSComp.txt:817) static member ilMutableVariablesCannotEscapeMethod() = (986, GetStringFunc("ilMutableVariablesCannotEscapeMethod",",,,") ) /// Compiler error: unexpected unrealized value - /// (Originally from ../FSComp.txt:817) + /// (Originally from ..\FSComp.txt:818) static member ilUnexpectedUnrealizedValue() = (987, GetStringFunc("ilUnexpectedUnrealizedValue",",,,") ) /// Main module of program is empty: nothing will happen when it is run - /// (Originally from ../FSComp.txt:818) + /// (Originally from ..\FSComp.txt:819) static member ilMainModuleEmpty() = (988, GetStringFunc("ilMainModuleEmpty",",,,") ) /// This type cannot be used for a literal field - /// (Originally from ../FSComp.txt:819) + /// (Originally from ..\FSComp.txt:820) static member ilTypeCannotBeUsedForLiteralField() = (989, GetStringFunc("ilTypeCannotBeUsedForLiteralField",",,,") ) /// Unexpected GetSet annotation on a property - /// (Originally from ../FSComp.txt:820) + /// (Originally from ..\FSComp.txt:821) static member ilUnexpectedGetSetAnnotation() = (990, GetStringFunc("ilUnexpectedGetSetAnnotation",",,,") ) /// The FieldOffset attribute could not be decoded - /// (Originally from ../FSComp.txt:821) + /// (Originally from ..\FSComp.txt:822) static member ilFieldOffsetAttributeCouldNotBeDecoded() = (991, GetStringFunc("ilFieldOffsetAttributeCouldNotBeDecoded",",,,") ) /// The StructLayout attribute could not be decoded - /// (Originally from ../FSComp.txt:822) + /// (Originally from ..\FSComp.txt:823) static member ilStructLayoutAttributeCouldNotBeDecoded() = (992, GetStringFunc("ilStructLayoutAttributeCouldNotBeDecoded",",,,") ) /// The DefaultAugmentation attribute could not be decoded - /// (Originally from ../FSComp.txt:823) + /// (Originally from ..\FSComp.txt:824) static member ilDefaultAugmentationAttributeCouldNotBeDecoded() = (993, GetStringFunc("ilDefaultAugmentationAttributeCouldNotBeDecoded",",,,") ) /// Reflected definitions cannot contain uses of the prefix splice operator '%%' - /// (Originally from ../FSComp.txt:824) + /// (Originally from ..\FSComp.txt:825) static member ilReflectedDefinitionsCannotUseSliceOperator() = (994, GetStringFunc("ilReflectedDefinitionsCannotUseSliceOperator",",,,") ) /// Problem with codepage '%d': %s - /// (Originally from ../FSComp.txt:825) + /// (Originally from ..\FSComp.txt:826) static member optsProblemWithCodepage(a0 : System.Int32, a1 : System.String) = (1000, GetStringFunc("optsProblemWithCodepage",",,,%d,,,%s,,,") a0 a1) /// Copyright (c) Microsoft Corporation. All Rights Reserved. - /// (Originally from ../FSComp.txt:826) + /// (Originally from ..\FSComp.txt:827) static member optsCopyright() = (GetStringFunc("optsCopyright",",,,") ) /// Freely distributed under the MIT Open Source License. https://github.com/Microsoft/visualfsharp/blob/master/License.txt - /// (Originally from ../FSComp.txt:827) + /// (Originally from ..\FSComp.txt:828) static member optsCopyrightCommunity() = (GetStringFunc("optsCopyrightCommunity",",,,") ) /// Name of the output file (Short form: -o) - /// (Originally from ../FSComp.txt:828) + /// (Originally from ..\FSComp.txt:829) static member optsNameOfOutputFile() = (GetStringFunc("optsNameOfOutputFile",",,,") ) /// Build a console executable - /// (Originally from ../FSComp.txt:829) + /// (Originally from ..\FSComp.txt:830) static member optsBuildConsole() = (GetStringFunc("optsBuildConsole",",,,") ) /// Build a Windows executable - /// (Originally from ../FSComp.txt:830) + /// (Originally from ..\FSComp.txt:831) static member optsBuildWindows() = (GetStringFunc("optsBuildWindows",",,,") ) /// Build a library (Short form: -a) - /// (Originally from ../FSComp.txt:831) + /// (Originally from ..\FSComp.txt:832) static member optsBuildLibrary() = (GetStringFunc("optsBuildLibrary",",,,") ) /// Build a module that can be added to another assembly - /// (Originally from ../FSComp.txt:832) + /// (Originally from ..\FSComp.txt:833) static member optsBuildModule() = (GetStringFunc("optsBuildModule",",,,") ) /// Delay-sign the assembly using only the public portion of the strong name key - /// (Originally from ../FSComp.txt:833) + /// (Originally from ..\FSComp.txt:834) static member optsDelaySign() = (GetStringFunc("optsDelaySign",",,,") ) /// Public-sign the assembly using only the public portion of the strong name key, and mark the assembly as signed - /// (Originally from ../FSComp.txt:834) + /// (Originally from ..\FSComp.txt:835) static member optsPublicSign() = (GetStringFunc("optsPublicSign",",,,") ) /// Write the xmldoc of the assembly to the given file - /// (Originally from ../FSComp.txt:835) + /// (Originally from ..\FSComp.txt:836) static member optsWriteXml() = (GetStringFunc("optsWriteXml",",,,") ) /// Specify a strong name key file - /// (Originally from ../FSComp.txt:836) + /// (Originally from ..\FSComp.txt:837) static member optsStrongKeyFile() = (GetStringFunc("optsStrongKeyFile",",,,") ) /// Specify a strong name key container - /// (Originally from ../FSComp.txt:837) + /// (Originally from ..\FSComp.txt:838) static member optsStrongKeyContainer() = (GetStringFunc("optsStrongKeyContainer",",,,") ) /// Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The default is anycpu. - /// (Originally from ../FSComp.txt:838) + /// (Originally from ..\FSComp.txt:839) static member optsPlatform() = (GetStringFunc("optsPlatform",",,,") ) /// Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility. - /// (Originally from ../FSComp.txt:839) + /// (Originally from ..\FSComp.txt:840) static member optsNoOpt() = (GetStringFunc("optsNoOpt",",,,") ) /// Don't add a resource to the generated assembly containing F#-specific metadata - /// (Originally from ../FSComp.txt:840) + /// (Originally from ..\FSComp.txt:841) static member optsNoInterface() = (GetStringFunc("optsNoInterface",",,,") ) /// Print the inferred interface of the assembly to a file - /// (Originally from ../FSComp.txt:841) + /// (Originally from ..\FSComp.txt:842) static member optsSig() = (GetStringFunc("optsSig",",,,") ) /// Reference an assembly (Short form: -r) - /// (Originally from ../FSComp.txt:842) + /// (Originally from ..\FSComp.txt:843) static member optsReference() = (GetStringFunc("optsReference",",,,") ) /// Specify a Win32 resource file (.res) - /// (Originally from ../FSComp.txt:843) + /// (Originally from ..\FSComp.txt:844) static member optsWin32res() = (GetStringFunc("optsWin32res",",,,") ) /// Specify a Win32 manifest file - /// (Originally from ../FSComp.txt:844) + /// (Originally from ..\FSComp.txt:845) static member optsWin32manifest() = (GetStringFunc("optsWin32manifest",",,,") ) /// Do not include the default Win32 manifest - /// (Originally from ../FSComp.txt:845) + /// (Originally from ..\FSComp.txt:846) static member optsNowin32manifest() = (GetStringFunc("optsNowin32manifest",",,,") ) /// Embed all source files in the portable PDB file - /// (Originally from ../FSComp.txt:846) + /// (Originally from ..\FSComp.txt:847) static member optsEmbedAllSource() = (GetStringFunc("optsEmbedAllSource",",,,") ) /// Embed specific source files in the portable PDB file - /// (Originally from ../FSComp.txt:847) + /// (Originally from ..\FSComp.txt:848) static member optsEmbedSource() = (GetStringFunc("optsEmbedSource",",,,") ) /// Source link information file to embed in the portable PDB file - /// (Originally from ../FSComp.txt:848) + /// (Originally from ..\FSComp.txt:849) static member optsSourceLink() = (GetStringFunc("optsSourceLink",",,,") ) /// --embed switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - /// (Originally from ../FSComp.txt:849) + /// (Originally from ..\FSComp.txt:850) static member optsEmbeddedSourceRequirePortablePDBs() = (1501, GetStringFunc("optsEmbeddedSourceRequirePortablePDBs",",,,") ) /// --sourcelink switch only supported when emitting a Portable PDB (--debug:portable or --debug:embedded) - /// (Originally from ../FSComp.txt:850) + /// (Originally from ..\FSComp.txt:851) static member optsSourceLinkRequirePortablePDBs() = (1502, GetStringFunc("optsSourceLinkRequirePortablePDBs",",,,") ) /// Source file is too large to embed in a portable PDB - /// (Originally from ../FSComp.txt:851) + /// (Originally from ..\FSComp.txt:852) static member srcFileTooLarge() = (GetStringFunc("srcFileTooLarge",",,,") ) /// Embed the specified managed resource - /// (Originally from ../FSComp.txt:852) + /// (Originally from ..\FSComp.txt:853) static member optsResource() = (GetStringFunc("optsResource",",,,") ) /// Link the specified resource to this assembly where the resinfo format is [,[,public|private]] - /// (Originally from ../FSComp.txt:853) + /// (Originally from ..\FSComp.txt:854) static member optsLinkresource() = (GetStringFunc("optsLinkresource",",,,") ) /// Emit debug information (Short form: -g) - /// (Originally from ../FSComp.txt:854) + /// (Originally from ..\FSComp.txt:855) static member optsDebugPM() = (GetStringFunc("optsDebugPM",",,,") ) /// Specify debugging type: full, portable, embedded, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file). - /// (Originally from ../FSComp.txt:855) + /// (Originally from ..\FSComp.txt:856) static member optsDebug(a0 : System.String) = (GetStringFunc("optsDebug",",,,%s,,,") a0) /// Enable optimizations (Short form: -O) - /// (Originally from ../FSComp.txt:856) + /// (Originally from ..\FSComp.txt:857) static member optsOptimize() = (GetStringFunc("optsOptimize",",,,") ) /// Enable or disable tailcalls - /// (Originally from ../FSComp.txt:857) + /// (Originally from ..\FSComp.txt:858) static member optsTailcalls() = (GetStringFunc("optsTailcalls",",,,") ) /// Produce a deterministic assembly (including module version GUID and timestamp) - /// (Originally from ../FSComp.txt:858) + /// (Originally from ..\FSComp.txt:859) static member optsDeterministic() = (GetStringFunc("optsDeterministic",",,,") ) /// Enable or disable cross-module optimizations - /// (Originally from ../FSComp.txt:859) + /// (Originally from ..\FSComp.txt:860) static member optsCrossoptimize() = (GetStringFunc("optsCrossoptimize",",,,") ) /// Report all warnings as errors - /// (Originally from ../FSComp.txt:860) + /// (Originally from ..\FSComp.txt:861) static member optsWarnaserrorPM() = (GetStringFunc("optsWarnaserrorPM",",,,") ) /// Report specific warnings as errors - /// (Originally from ../FSComp.txt:861) + /// (Originally from ..\FSComp.txt:862) static member optsWarnaserror() = (GetStringFunc("optsWarnaserror",",,,") ) /// Set a warning level (0-5) - /// (Originally from ../FSComp.txt:862) + /// (Originally from ..\FSComp.txt:863) static member optsWarn() = (GetStringFunc("optsWarn",",,,") ) /// Disable specific warning messages - /// (Originally from ../FSComp.txt:863) + /// (Originally from ..\FSComp.txt:864) static member optsNowarn() = (GetStringFunc("optsNowarn",",,,") ) /// Enable specific warnings that may be off by default - /// (Originally from ../FSComp.txt:864) + /// (Originally from ..\FSComp.txt:865) static member optsWarnOn() = (GetStringFunc("optsWarnOn",",,,") ) /// Generate overflow checks - /// (Originally from ../FSComp.txt:865) + /// (Originally from ..\FSComp.txt:866) static member optsChecked() = (GetStringFunc("optsChecked",",,,") ) /// Define conditional compilation symbols (Short form: -d) - /// (Originally from ../FSComp.txt:866) + /// (Originally from ..\FSComp.txt:867) static member optsDefine() = (GetStringFunc("optsDefine",",,,") ) /// Ignore ML compatibility warnings - /// (Originally from ../FSComp.txt:867) + /// (Originally from ..\FSComp.txt:868) static member optsMlcompatibility() = (GetStringFunc("optsMlcompatibility",",,,") ) /// Suppress compiler copyright message - /// (Originally from ../FSComp.txt:868) + /// (Originally from ..\FSComp.txt:869) static member optsNologo() = (GetStringFunc("optsNologo",",,,") ) /// Display this usage message (Short form: -?) - /// (Originally from ../FSComp.txt:869) + /// (Originally from ..\FSComp.txt:870) static member optsHelp() = (GetStringFunc("optsHelp",",,,") ) /// Read response file for more options - /// (Originally from ../FSComp.txt:870) + /// (Originally from ..\FSComp.txt:871) static member optsResponseFile() = (GetStringFunc("optsResponseFile",",,,") ) /// Specify the codepage used to read source files - /// (Originally from ../FSComp.txt:871) + /// (Originally from ..\FSComp.txt:872) static member optsCodepage() = (GetStringFunc("optsCodepage",",,,") ) /// Output messages in UTF-8 encoding - /// (Originally from ../FSComp.txt:872) + /// (Originally from ..\FSComp.txt:873) static member optsUtf8output() = (GetStringFunc("optsUtf8output",",,,") ) /// Output messages with fully qualified paths - /// (Originally from ../FSComp.txt:873) + /// (Originally from ..\FSComp.txt:874) static member optsFullpaths() = (GetStringFunc("optsFullpaths",",,,") ) /// Specify a directory for the include path which is used to resolve source files and assemblies (Short form: -I) - /// (Originally from ../FSComp.txt:874) + /// (Originally from ..\FSComp.txt:875) static member optsLib() = (GetStringFunc("optsLib",",,,") ) /// Base address for the library to be built - /// (Originally from ../FSComp.txt:875) + /// (Originally from ..\FSComp.txt:876) static member optsBaseaddress() = (GetStringFunc("optsBaseaddress",",,,") ) /// Do not reference the default CLI assemblies by default - /// (Originally from ../FSComp.txt:876) + /// (Originally from ..\FSComp.txt:877) static member optsNoframework() = (GetStringFunc("optsNoframework",",,,") ) /// Statically link the F# library and all referenced DLLs that depend on it into the assembly being generated - /// (Originally from ../FSComp.txt:877) + /// (Originally from ..\FSComp.txt:878) static member optsStandalone() = (GetStringFunc("optsStandalone",",,,") ) /// Statically link the given assembly and all referenced DLLs that depend on this assembly. Use an assembly name e.g. mylib, not a DLL name. - /// (Originally from ../FSComp.txt:878) + /// (Originally from ..\FSComp.txt:879) static member optsStaticlink() = (GetStringFunc("optsStaticlink",",,,") ) /// Use a resident background compilation service to improve compiler startup times. - /// (Originally from ../FSComp.txt:879) + /// (Originally from ..\FSComp.txt:880) static member optsResident() = (GetStringFunc("optsResident",",,,") ) /// Name the output debug file - /// (Originally from ../FSComp.txt:880) + /// (Originally from ..\FSComp.txt:881) static member optsPdb() = (GetStringFunc("optsPdb",",,,") ) /// Resolve assembly references using directory-based rules rather than MSBuild resolution - /// (Originally from ../FSComp.txt:881) + /// (Originally from ..\FSComp.txt:882) static member optsSimpleresolution() = (GetStringFunc("optsSimpleresolution",",,,") ) /// Unrecognized target '%s', expected 'exe', 'winexe', 'library' or 'module' - /// (Originally from ../FSComp.txt:882) + /// (Originally from ..\FSComp.txt:883) static member optsUnrecognizedTarget(a0 : System.String) = (1048, GetStringFunc("optsUnrecognizedTarget",",,,%s,,,") a0) /// Unrecognized debug type '%s', expected 'pdbonly' or 'full' - /// (Originally from ../FSComp.txt:883) + /// (Originally from ..\FSComp.txt:884) static member optsUnrecognizedDebugType(a0 : System.String) = (1049, GetStringFunc("optsUnrecognizedDebugType",",,,%s,,,") a0) /// Invalid warning level '%d' - /// (Originally from ../FSComp.txt:884) + /// (Originally from ..\FSComp.txt:885) static member optsInvalidWarningLevel(a0 : System.Int32) = (1050, GetStringFunc("optsInvalidWarningLevel",",,,%d,,,") a0) /// Short form of '%s' - /// (Originally from ../FSComp.txt:885) + /// (Originally from ..\FSComp.txt:886) static member optsShortFormOf(a0 : System.String) = (GetStringFunc("optsShortFormOf",",,,%s,,,") a0) /// The command-line option '--cliroot' has been deprecated. Use an explicit reference to a specific copy of mscorlib.dll instead. - /// (Originally from ../FSComp.txt:886) + /// (Originally from ..\FSComp.txt:887) static member optsClirootDeprecatedMsg() = (GetStringFunc("optsClirootDeprecatedMsg",",,,") ) /// Use to override where the compiler looks for mscorlib.dll and framework components - /// (Originally from ../FSComp.txt:887) + /// (Originally from ..\FSComp.txt:888) static member optsClirootDescription() = (GetStringFunc("optsClirootDescription",",,,") ) /// - OUTPUT FILES - - /// (Originally from ../FSComp.txt:888) + /// (Originally from ..\FSComp.txt:889) static member optsHelpBannerOutputFiles() = (GetStringFunc("optsHelpBannerOutputFiles",",,,") ) /// - INPUT FILES - - /// (Originally from ../FSComp.txt:889) + /// (Originally from ..\FSComp.txt:890) static member optsHelpBannerInputFiles() = (GetStringFunc("optsHelpBannerInputFiles",",,,") ) /// - RESOURCES - - /// (Originally from ../FSComp.txt:890) + /// (Originally from ..\FSComp.txt:891) static member optsHelpBannerResources() = (GetStringFunc("optsHelpBannerResources",",,,") ) /// - CODE GENERATION - - /// (Originally from ../FSComp.txt:891) + /// (Originally from ..\FSComp.txt:892) static member optsHelpBannerCodeGen() = (GetStringFunc("optsHelpBannerCodeGen",",,,") ) /// - ADVANCED - - /// (Originally from ../FSComp.txt:892) + /// (Originally from ..\FSComp.txt:893) static member optsHelpBannerAdvanced() = (GetStringFunc("optsHelpBannerAdvanced",",,,") ) /// - MISCELLANEOUS - - /// (Originally from ../FSComp.txt:893) + /// (Originally from ..\FSComp.txt:894) static member optsHelpBannerMisc() = (GetStringFunc("optsHelpBannerMisc",",,,") ) /// - LANGUAGE - - /// (Originally from ../FSComp.txt:894) + /// (Originally from ..\FSComp.txt:895) static member optsHelpBannerLanguage() = (GetStringFunc("optsHelpBannerLanguage",",,,") ) /// - ERRORS AND WARNINGS - - /// (Originally from ../FSComp.txt:895) + /// (Originally from ..\FSComp.txt:896) static member optsHelpBannerErrsAndWarns() = (GetStringFunc("optsHelpBannerErrsAndWarns",",,,") ) /// Unknown --test argument: '%s' - /// (Originally from ../FSComp.txt:896) + /// (Originally from ..\FSComp.txt:897) static member optsUnknownArgumentToTheTestSwitch(a0 : System.String) = (1063, GetStringFunc("optsUnknownArgumentToTheTestSwitch",",,,%s,,,") a0) /// Unrecognized platform '%s', valid values are 'x86', 'x64', 'Itanium', 'anycpu32bitpreferred', and 'anycpu' - /// (Originally from ../FSComp.txt:897) + /// (Originally from ..\FSComp.txt:898) static member optsUnknownPlatform(a0 : System.String) = (1064, GetStringFunc("optsUnknownPlatform",",,,%s,,,") a0) /// The command-line option '%s' is for test purposes only - /// (Originally from ../FSComp.txt:898) + /// (Originally from ..\FSComp.txt:899) static member optsInternalNoDescription(a0 : System.String) = (GetStringFunc("optsInternalNoDescription",",,,%s,,,") a0) /// The command-line option '%s' has been deprecated - /// (Originally from ../FSComp.txt:899) + /// (Originally from ..\FSComp.txt:900) static member optsDCLONoDescription(a0 : System.String) = (GetStringFunc("optsDCLONoDescription",",,,%s,,,") a0) /// The command-line option '%s' has been deprecated. Use '%s' instead. - /// (Originally from ../FSComp.txt:900) + /// (Originally from ..\FSComp.txt:901) static member optsDCLODeprecatedSuggestAlternative(a0 : System.String, a1 : System.String) = (GetStringFunc("optsDCLODeprecatedSuggestAlternative",",,,%s,,,%s,,,") a0 a1) /// The command-line option '%s' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe. - /// (Originally from ../FSComp.txt:901) + /// (Originally from ..\FSComp.txt:902) static member optsDCLOHtmlDoc(a0 : System.String) = (GetStringFunc("optsDCLOHtmlDoc",",,,%s,,,") a0) /// Output warning and error messages in color - /// (Originally from ../FSComp.txt:902) + /// (Originally from ..\FSComp.txt:903) static member optsConsoleColors() = (GetStringFunc("optsConsoleColors",",,,") ) /// Enable high-entropy ASLR - /// (Originally from ../FSComp.txt:903) + /// (Originally from ..\FSComp.txt:904) static member optsUseHighEntropyVA() = (GetStringFunc("optsUseHighEntropyVA",",,,") ) /// Specify subsystem version of this assembly - /// (Originally from ../FSComp.txt:904) + /// (Originally from ..\FSComp.txt:905) static member optsSubSystemVersion() = (GetStringFunc("optsSubSystemVersion",",,,") ) /// Specify target framework profile of this assembly. Valid values are mscorlib, netcore or netstandard. Default - mscorlib - /// (Originally from ../FSComp.txt:905) + /// (Originally from ..\FSComp.txt:906) static member optsTargetProfile() = (GetStringFunc("optsTargetProfile",",,,") ) /// Emit debug information in quotations - /// (Originally from ../FSComp.txt:906) + /// (Originally from ..\FSComp.txt:907) static member optsEmitDebugInfoInQuotations() = (GetStringFunc("optsEmitDebugInfoInQuotations",",,,") ) /// Specify the preferred output language culture name (e.g. es-ES, ja-JP) - /// (Originally from ../FSComp.txt:907) + /// (Originally from ..\FSComp.txt:908) static member optsPreferredUiLang() = (GetStringFunc("optsPreferredUiLang",",,,") ) /// Don't copy FSharp.Core.dll along the produced binaries - /// (Originally from ../FSComp.txt:908) + /// (Originally from ..\FSComp.txt:909) static member optsNoCopyFsharpCore() = (GetStringFunc("optsNoCopyFsharpCore",",,,") ) /// Invalid version '%s' for '--subsystemversion'. The version must be 4.00 or greater. - /// (Originally from ../FSComp.txt:909) + /// (Originally from ..\FSComp.txt:910) static member optsInvalidSubSystemVersion(a0 : System.String) = (1051, GetStringFunc("optsInvalidSubSystemVersion",",,,%s,,,") a0) /// Invalid value '%s' for '--targetprofile', valid values are 'mscorlib', 'netcore' or 'netstandard'. - /// (Originally from ../FSComp.txt:910) + /// (Originally from ..\FSComp.txt:911) static member optsInvalidTargetProfile(a0 : System.String) = (1052, GetStringFunc("optsInvalidTargetProfile",",,,%s,,,") a0) /// Full name - /// (Originally from ../FSComp.txt:911) + /// (Originally from ..\FSComp.txt:912) static member typeInfoFullName() = (GetStringFunc("typeInfoFullName",",,,") ) /// and %d other overloads - /// (Originally from ../FSComp.txt:915) + /// (Originally from ..\FSComp.txt:916) static member typeInfoOtherOverloads(a0 : System.Int32) = (GetStringFunc("typeInfoOtherOverloads",",,,%d,,,") a0) /// union case - /// (Originally from ../FSComp.txt:916) + /// (Originally from ..\FSComp.txt:917) static member typeInfoUnionCase() = (GetStringFunc("typeInfoUnionCase",",,,") ) /// active pattern result - /// (Originally from ../FSComp.txt:917) + /// (Originally from ..\FSComp.txt:918) static member typeInfoActivePatternResult() = (GetStringFunc("typeInfoActivePatternResult",",,,") ) /// active recognizer - /// (Originally from ../FSComp.txt:918) + /// (Originally from ..\FSComp.txt:919) static member typeInfoActiveRecognizer() = (GetStringFunc("typeInfoActiveRecognizer",",,,") ) /// field - /// (Originally from ../FSComp.txt:919) + /// (Originally from ..\FSComp.txt:920) static member typeInfoField() = (GetStringFunc("typeInfoField",",,,") ) /// event - /// (Originally from ../FSComp.txt:920) + /// (Originally from ..\FSComp.txt:921) static member typeInfoEvent() = (GetStringFunc("typeInfoEvent",",,,") ) /// property - /// (Originally from ../FSComp.txt:921) + /// (Originally from ..\FSComp.txt:922) static member typeInfoProperty() = (GetStringFunc("typeInfoProperty",",,,") ) /// extension - /// (Originally from ../FSComp.txt:922) + /// (Originally from ..\FSComp.txt:923) static member typeInfoExtension() = (GetStringFunc("typeInfoExtension",",,,") ) /// custom operation - /// (Originally from ../FSComp.txt:923) + /// (Originally from ..\FSComp.txt:924) static member typeInfoCustomOperation() = (GetStringFunc("typeInfoCustomOperation",",,,") ) /// argument - /// (Originally from ../FSComp.txt:924) + /// (Originally from ..\FSComp.txt:925) static member typeInfoArgument() = (GetStringFunc("typeInfoArgument",",,,") ) /// anonymous record field /// (Originally from ..\FSComp.txt:926) static member typeInfoAnonRecdField() = (GetStringFunc("typeInfoAnonRecdField",",,,") ) /// patvar - /// (Originally from ../FSComp.txt:925) + /// (Originally from ..\FSComp.txt:927) static member typeInfoPatternVariable() = (GetStringFunc("typeInfoPatternVariable",",,,") ) /// namespace - /// (Originally from ../FSComp.txt:926) + /// (Originally from ..\FSComp.txt:928) static member typeInfoNamespace() = (GetStringFunc("typeInfoNamespace",",,,") ) /// module - /// (Originally from ../FSComp.txt:927) + /// (Originally from ..\FSComp.txt:929) static member typeInfoModule() = (GetStringFunc("typeInfoModule",",,,") ) /// namespace/module - /// (Originally from ../FSComp.txt:928) + /// (Originally from ..\FSComp.txt:930) static member typeInfoNamespaceOrModule() = (GetStringFunc("typeInfoNamespaceOrModule",",,,") ) /// from %s - /// (Originally from ../FSComp.txt:929) + /// (Originally from ..\FSComp.txt:931) static member typeInfoFromFirst(a0 : System.String) = (GetStringFunc("typeInfoFromFirst",",,,%s,,,") a0) /// also from %s - /// (Originally from ../FSComp.txt:930) + /// (Originally from ..\FSComp.txt:932) static member typeInfoFromNext(a0 : System.String) = (GetStringFunc("typeInfoFromNext",",,,%s,,,") a0) /// generated property - /// (Originally from ../FSComp.txt:931) + /// (Originally from ..\FSComp.txt:933) static member typeInfoGeneratedProperty() = (GetStringFunc("typeInfoGeneratedProperty",",,,") ) /// generated type - /// (Originally from ../FSComp.txt:932) + /// (Originally from ..\FSComp.txt:934) static member typeInfoGeneratedType() = (GetStringFunc("typeInfoGeneratedType",",,,") ) /// Found by AssemblyFolders registry key - /// (Originally from ../FSComp.txt:933) + /// (Originally from ..\FSComp.txt:935) static member assemblyResolutionFoundByAssemblyFoldersKey() = (GetStringFunc("assemblyResolutionFoundByAssemblyFoldersKey",",,,") ) /// Found by AssemblyFoldersEx registry key - /// (Originally from ../FSComp.txt:934) + /// (Originally from ..\FSComp.txt:936) static member assemblyResolutionFoundByAssemblyFoldersExKey() = (GetStringFunc("assemblyResolutionFoundByAssemblyFoldersExKey",",,,") ) /// .NET Framework - /// (Originally from ../FSComp.txt:935) + /// (Originally from ..\FSComp.txt:937) static member assemblyResolutionNetFramework() = (GetStringFunc("assemblyResolutionNetFramework",",,,") ) /// Global Assembly Cache - /// (Originally from ../FSComp.txt:936) + /// (Originally from ..\FSComp.txt:938) static member assemblyResolutionGAC() = (GetStringFunc("assemblyResolutionGAC",",,,") ) /// Recursive class hierarchy in type '%s' - /// (Originally from ../FSComp.txt:937) + /// (Originally from ..\FSComp.txt:939) static member recursiveClassHierarchy(a0 : System.String) = (1089, GetStringFunc("recursiveClassHierarchy",",,,%s,,,") a0) /// Invalid recursive reference to an abstract slot - /// (Originally from ../FSComp.txt:938) + /// (Originally from ..\FSComp.txt:940) static member InvalidRecursiveReferenceToAbstractSlot() = (1090, GetStringFunc("InvalidRecursiveReferenceToAbstractSlot",",,,") ) /// The event '%s' has a non-standard type. If this event is declared in another CLI language, you may need to access this event using the explicit %s and %s methods for the event. If this event is declared in F#, make the type of the event an instantiation of either 'IDelegateEvent<_>' or 'IEvent<_,_>'. - /// (Originally from ../FSComp.txt:939) + /// (Originally from ..\FSComp.txt:941) static member eventHasNonStandardType(a0 : System.String, a1 : System.String, a2 : System.String) = (1091, GetStringFunc("eventHasNonStandardType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:940) + /// (Originally from ..\FSComp.txt:942) static member typeIsNotAccessible(a0 : System.String) = (1092, GetStringFunc("typeIsNotAccessible",",,,%s,,,") a0) /// The union cases or fields of the type '%s' are not accessible from this code location - /// (Originally from ../FSComp.txt:941) + /// (Originally from ..\FSComp.txt:943) static member unionCasesAreNotAccessible(a0 : System.String) = (1093, GetStringFunc("unionCasesAreNotAccessible",",,,%s,,,") a0) /// The value '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:942) + /// (Originally from ..\FSComp.txt:944) static member valueIsNotAccessible(a0 : System.String) = (1094, GetStringFunc("valueIsNotAccessible",",,,%s,,,") a0) /// The union case '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:943) + /// (Originally from ..\FSComp.txt:945) static member unionCaseIsNotAccessible(a0 : System.String) = (1095, GetStringFunc("unionCaseIsNotAccessible",",,,%s,,,") a0) /// The record, struct or class field '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:944) + /// (Originally from ..\FSComp.txt:946) static member fieldIsNotAccessible(a0 : System.String) = (1096, GetStringFunc("fieldIsNotAccessible",",,,%s,,,") a0) /// The struct or class field '%s' is not accessible from this code location - /// (Originally from ../FSComp.txt:945) + /// (Originally from ..\FSComp.txt:947) static member structOrClassFieldIsNotAccessible(a0 : System.String) = (1097, GetStringFunc("structOrClassFieldIsNotAccessible",",,,%s,,,") a0) /// This construct is experimental - /// (Originally from ../FSComp.txt:946) + /// (Originally from ..\FSComp.txt:948) static member experimentalConstruct() = (GetStringFunc("experimentalConstruct",",,,") ) /// No Invoke methods found for delegate type - /// (Originally from ../FSComp.txt:947) + /// (Originally from ..\FSComp.txt:949) static member noInvokeMethodsFound() = (1099, GetStringFunc("noInvokeMethodsFound",",,,") ) /// More than one Invoke method found for delegate type - /// (Originally from ../FSComp.txt:948) + /// (Originally from ..\FSComp.txt:950) static member moreThanOneInvokeMethodFound() = (GetStringFunc("moreThanOneInvokeMethodFound",",,,") ) /// Delegates are not allowed to have curried signatures - /// (Originally from ../FSComp.txt:949) + /// (Originally from ..\FSComp.txt:951) static member delegatesNotAllowedToHaveCurriedSignatures() = (1101, GetStringFunc("delegatesNotAllowedToHaveCurriedSignatures",",,,") ) /// Unexpected Expr.TyChoose - /// (Originally from ../FSComp.txt:950) + /// (Originally from ..\FSComp.txt:952) static member tlrUnexpectedTExpr() = (1102, GetStringFunc("tlrUnexpectedTExpr",",,,") ) /// Note: Lambda-lifting optimizations have not been applied because of the use of this local constrained generic function as a first class value. Adding type constraints may resolve this condition. - /// (Originally from ../FSComp.txt:951) + /// (Originally from ..\FSComp.txt:953) static member tlrLambdaLiftingOptimizationsNotApplied() = (1103, GetStringFunc("tlrLambdaLiftingOptimizationsNotApplied",",,,") ) /// Identifiers containing '@' are reserved for use in F# code generation - /// (Originally from ../FSComp.txt:952) + /// (Originally from ..\FSComp.txt:954) static member lexhlpIdentifiersContainingAtSymbolReserved() = (1104, GetStringFunc("lexhlpIdentifiersContainingAtSymbolReserved",",,,") ) /// The identifier '%s' is reserved for future use by F# - /// (Originally from ../FSComp.txt:953) + /// (Originally from ..\FSComp.txt:955) static member lexhlpIdentifierReserved(a0 : System.String) = (GetStringFunc("lexhlpIdentifierReserved",",,,%s,,,") a0) /// Missing variable '%s' - /// (Originally from ../FSComp.txt:954) + /// (Originally from ..\FSComp.txt:956) static member patcMissingVariable(a0 : System.String) = (1106, GetStringFunc("patcMissingVariable",",,,%s,,,") a0) /// Partial active patterns may only generate one result - /// (Originally from ../FSComp.txt:955) + /// (Originally from ..\FSComp.txt:957) static member patcPartialActivePatternsGenerateOneResult() = (1107, GetStringFunc("patcPartialActivePatternsGenerateOneResult",",,,") ) /// The type '%s' is required here and is unavailable. You must add a reference to assembly '%s'. - /// (Originally from ../FSComp.txt:956) + /// (Originally from ..\FSComp.txt:958) static member impTypeRequiredUnavailable(a0 : System.String, a1 : System.String) = (1108, GetStringFunc("impTypeRequiredUnavailable",",,,%s,,,%s,,,") a0 a1) /// A reference to the type '%s' in assembly '%s' was found, but the type could not be found in that assembly - /// (Originally from ../FSComp.txt:957) + /// (Originally from ..\FSComp.txt:959) static member impReferencedTypeCouldNotBeFoundInAssembly(a0 : System.String, a1 : System.String) = (1109, GetStringFunc("impReferencedTypeCouldNotBeFoundInAssembly",",,,%s,,,%s,,,") a0 a1) /// Internal error or badly formed metadata: not enough type parameters were in scope while importing - /// (Originally from ../FSComp.txt:958) + /// (Originally from ..\FSComp.txt:960) static member impNotEnoughTypeParamsInScopeWhileImporting() = (1110, GetStringFunc("impNotEnoughTypeParamsInScopeWhileImporting",",,,") ) /// A reference to the DLL %s is required by assembly %s. The imported type %s is located in the first assembly and could not be resolved. - /// (Originally from ../FSComp.txt:959) + /// (Originally from ..\FSComp.txt:961) static member impReferenceToDllRequiredByAssembly(a0 : System.String, a1 : System.String, a2 : System.String) = (1111, GetStringFunc("impReferenceToDllRequiredByAssembly",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// An imported assembly uses the type '%s' but that type is not public - /// (Originally from ../FSComp.txt:960) + /// (Originally from ..\FSComp.txt:962) static member impImportedAssemblyUsesNotPublicType(a0 : System.String) = (1112, GetStringFunc("impImportedAssemblyUsesNotPublicType",",,,%s,,,") a0) /// The value '%s' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible - /// (Originally from ../FSComp.txt:961) + /// (Originally from ..\FSComp.txt:963) static member optValueMarkedInlineButIncomplete(a0 : System.String) = (1113, GetStringFunc("optValueMarkedInlineButIncomplete",",,,%s,,,") a0) /// The value '%s' was marked inline but was not bound in the optimization environment - /// (Originally from ../FSComp.txt:962) + /// (Originally from ..\FSComp.txt:964) static member optValueMarkedInlineButWasNotBoundInTheOptEnv(a0 : System.String) = (1114, GetStringFunc("optValueMarkedInlineButWasNotBoundInTheOptEnv",",,,%s,,,") a0) /// Local value %s not found during optimization - /// (Originally from ../FSComp.txt:963) + /// (Originally from ..\FSComp.txt:965) static member optLocalValueNotFoundDuringOptimization(a0 : System.String) = (1115, GetStringFunc("optLocalValueNotFoundDuringOptimization",",,,%s,,,") a0) /// A value marked as 'inline' has an unexpected value - /// (Originally from ../FSComp.txt:964) + /// (Originally from ..\FSComp.txt:966) static member optValueMarkedInlineHasUnexpectedValue() = (1116, GetStringFunc("optValueMarkedInlineHasUnexpectedValue",",,,") ) /// A value marked as 'inline' could not be inlined - /// (Originally from ../FSComp.txt:965) + /// (Originally from ..\FSComp.txt:967) static member optValueMarkedInlineCouldNotBeInlined() = (1117, GetStringFunc("optValueMarkedInlineCouldNotBeInlined",",,,") ) /// Failed to inline the value '%s' marked 'inline', perhaps because a recursive value was marked 'inline' - /// (Originally from ../FSComp.txt:966) + /// (Originally from ..\FSComp.txt:968) static member optFailedToInlineValue(a0 : System.String) = (1118, GetStringFunc("optFailedToInlineValue",",,,%s,,,") a0) /// Recursive ValValue %s - /// (Originally from ../FSComp.txt:967) + /// (Originally from ..\FSComp.txt:969) static member optRecursiveValValue(a0 : System.String) = (1119, GetStringFunc("optRecursiveValValue",",,,%s,,,") a0) /// The indentation of this 'in' token is incorrect with respect to the corresponding 'let' - /// (Originally from ../FSComp.txt:968) + /// (Originally from ..\FSComp.txt:970) static member lexfltIncorrentIndentationOfIn() = (GetStringFunc("lexfltIncorrentIndentationOfIn",",,,") ) /// Possible incorrect indentation: this token is offside of context started at position %s. Try indenting this token further or using standard formatting conventions. - /// (Originally from ../FSComp.txt:969) + /// (Originally from ..\FSComp.txt:971) static member lexfltTokenIsOffsideOfContextStartedEarlier(a0 : System.String) = (GetStringFunc("lexfltTokenIsOffsideOfContextStartedEarlier",",,,%s,,,") a0) /// The '|' tokens separating rules of this pattern match are misaligned by one column. Consider realigning your code or using further indentation. - /// (Originally from ../FSComp.txt:970) + /// (Originally from ..\FSComp.txt:972) static member lexfltSeparatorTokensOfPatternMatchMisaligned() = (GetStringFunc("lexfltSeparatorTokensOfPatternMatchMisaligned",",,,") ) /// Invalid module/expression/type - /// (Originally from ../FSComp.txt:971) + /// (Originally from ..\FSComp.txt:973) static member nrInvalidModuleExprType() = (1123, GetStringFunc("nrInvalidModuleExprType",",,,") ) /// Multiple types exist called '%s', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. '%s'. - /// (Originally from ../FSComp.txt:972) + /// (Originally from ..\FSComp.txt:974) static member nrTypeInstantiationNeededToDisambiguateTypesWithSameName(a0 : System.String, a1 : System.String) = (1124, GetStringFunc("nrTypeInstantiationNeededToDisambiguateTypesWithSameName",",,,%s,,,%s,,,") a0 a1) /// The instantiation of the generic type '%s' is missing and can't be inferred from the arguments or return type of this member. Consider providing a type instantiation when accessing this type, e.g. '%s'. - /// (Originally from ../FSComp.txt:973) + /// (Originally from ..\FSComp.txt:975) static member nrTypeInstantiationIsMissingAndCouldNotBeInferred(a0 : System.String, a1 : System.String) = (1125, GetStringFunc("nrTypeInstantiationIsMissingAndCouldNotBeInferred",",,,%s,,,%s,,,") a0 a1) /// 'global' may only be used as the first name in a qualified path - /// (Originally from ../FSComp.txt:974) + /// (Originally from ..\FSComp.txt:976) static member nrGlobalUsedOnlyAsFirstName() = (1126, GetStringFunc("nrGlobalUsedOnlyAsFirstName",",,,") ) /// This is not a constructor or literal, or a constructor is being used incorrectly - /// (Originally from ../FSComp.txt:975) + /// (Originally from ..\FSComp.txt:977) static member nrIsNotConstructorOrLiteral() = (1127, GetStringFunc("nrIsNotConstructorOrLiteral",",,,") ) /// Unexpected empty long identifier - /// (Originally from ../FSComp.txt:976) + /// (Originally from ..\FSComp.txt:978) static member nrUnexpectedEmptyLongId() = (1128, GetStringFunc("nrUnexpectedEmptyLongId",",,,") ) /// The record type '%s' does not contain a label '%s'. - /// (Originally from ../FSComp.txt:977) + /// (Originally from ..\FSComp.txt:979) static member nrRecordDoesNotContainSuchLabel(a0 : System.String, a1 : System.String) = (1129, GetStringFunc("nrRecordDoesNotContainSuchLabel",",,,%s,,,%s,,,") a0 a1) /// Invalid field label - /// (Originally from ../FSComp.txt:978) + /// (Originally from ..\FSComp.txt:980) static member nrInvalidFieldLabel() = (1130, GetStringFunc("nrInvalidFieldLabel",",,,") ) /// Invalid expression '%s' - /// (Originally from ../FSComp.txt:979) + /// (Originally from ..\FSComp.txt:981) static member nrInvalidExpression(a0 : System.String) = (1132, GetStringFunc("nrInvalidExpression",",,,%s,,,") a0) /// No constructors are available for the type '%s' - /// (Originally from ../FSComp.txt:980) + /// (Originally from ..\FSComp.txt:982) static member nrNoConstructorsAvailableForType(a0 : System.String) = (1133, GetStringFunc("nrNoConstructorsAvailableForType",",,,%s,,,") a0) /// The union type for union case '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('%s') in the name you are using. - /// (Originally from ../FSComp.txt:981) + /// (Originally from ..\FSComp.txt:983) static member nrUnionTypeNeedsQualifiedAccess(a0 : System.String, a1 : System.String) = (1134, GetStringFunc("nrUnionTypeNeedsQualifiedAccess",",,,%s,,,%s,,,") a0 a1) /// The record type for the record field '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('%s') in the name you are using. - /// (Originally from ../FSComp.txt:982) + /// (Originally from ..\FSComp.txt:984) static member nrRecordTypeNeedsQualifiedAccess(a0 : System.String, a1 : System.String) = (1135, GetStringFunc("nrRecordTypeNeedsQualifiedAccess",",,,%s,,,%s,,,") a0 a1) /// Unexpected error creating debug information file '%s' - /// (Originally from ../FSComp.txt:983) + /// (Originally from ..\FSComp.txt:985) static member ilwriteErrorCreatingPdb(a0 : System.String) = (1136, GetStringFunc("ilwriteErrorCreatingPdb",",,,%s,,,") a0) /// This number is outside the allowable range for this integer type - /// (Originally from ../FSComp.txt:984) + /// (Originally from ..\FSComp.txt:986) static member lexOutsideIntegerRange() = (1138, GetStringFunc("lexOutsideIntegerRange",",,,") ) /// '%s' is not permitted as a character in operator names and is reserved for future use - /// (Originally from ../FSComp.txt:988) + /// (Originally from ..\FSComp.txt:990) static member lexCharNotAllowedInOperatorNames(a0 : System.String) = (GetStringFunc("lexCharNotAllowedInOperatorNames",",,,%s,,,") a0) /// Unexpected character '%s' - /// (Originally from ../FSComp.txt:989) + /// (Originally from ..\FSComp.txt:991) static member lexUnexpectedChar(a0 : System.String) = (GetStringFunc("lexUnexpectedChar",",,,%s,,,") a0) /// This byte array literal contains characters that do not encode as a single byte - /// (Originally from ../FSComp.txt:990) + /// (Originally from ..\FSComp.txt:992) static member lexByteArrayCannotEncode() = (1140, GetStringFunc("lexByteArrayCannotEncode",",,,") ) /// Identifiers followed by '%s' are reserved for future use - /// (Originally from ../FSComp.txt:991) + /// (Originally from ..\FSComp.txt:993) static member lexIdentEndInMarkReserved(a0 : System.String) = (1141, GetStringFunc("lexIdentEndInMarkReserved",",,,%s,,,") a0) /// This number is outside the allowable range for 8-bit signed integers - /// (Originally from ../FSComp.txt:992) + /// (Originally from ..\FSComp.txt:994) static member lexOutsideEightBitSigned() = (1142, GetStringFunc("lexOutsideEightBitSigned",",,,") ) /// This number is outside the allowable range for hexadecimal 8-bit signed integers - /// (Originally from ../FSComp.txt:993) + /// (Originally from ..\FSComp.txt:995) static member lexOutsideEightBitSignedHex() = (1143, GetStringFunc("lexOutsideEightBitSignedHex",",,,") ) /// This number is outside the allowable range for 8-bit unsigned integers - /// (Originally from ../FSComp.txt:994) + /// (Originally from ..\FSComp.txt:996) static member lexOutsideEightBitUnsigned() = (1144, GetStringFunc("lexOutsideEightBitUnsigned",",,,") ) /// This number is outside the allowable range for 16-bit signed integers - /// (Originally from ../FSComp.txt:995) + /// (Originally from ..\FSComp.txt:997) static member lexOutsideSixteenBitSigned() = (1145, GetStringFunc("lexOutsideSixteenBitSigned",",,,") ) /// This number is outside the allowable range for 16-bit unsigned integers - /// (Originally from ../FSComp.txt:996) + /// (Originally from ..\FSComp.txt:998) static member lexOutsideSixteenBitUnsigned() = (1146, GetStringFunc("lexOutsideSixteenBitUnsigned",",,,") ) /// This number is outside the allowable range for 32-bit signed integers - /// (Originally from ../FSComp.txt:997) + /// (Originally from ..\FSComp.txt:999) static member lexOutsideThirtyTwoBitSigned() = (1147, GetStringFunc("lexOutsideThirtyTwoBitSigned",",,,") ) /// This number is outside the allowable range for 32-bit unsigned integers - /// (Originally from ../FSComp.txt:998) + /// (Originally from ..\FSComp.txt:1000) static member lexOutsideThirtyTwoBitUnsigned() = (1148, GetStringFunc("lexOutsideThirtyTwoBitUnsigned",",,,") ) /// This number is outside the allowable range for 64-bit signed integers - /// (Originally from ../FSComp.txt:999) + /// (Originally from ..\FSComp.txt:1001) static member lexOutsideSixtyFourBitSigned() = (1149, GetStringFunc("lexOutsideSixtyFourBitSigned",",,,") ) /// This number is outside the allowable range for 64-bit unsigned integers - /// (Originally from ../FSComp.txt:1000) + /// (Originally from ..\FSComp.txt:1002) static member lexOutsideSixtyFourBitUnsigned() = (1150, GetStringFunc("lexOutsideSixtyFourBitUnsigned",",,,") ) /// This number is outside the allowable range for signed native integers - /// (Originally from ../FSComp.txt:1001) + /// (Originally from ..\FSComp.txt:1003) static member lexOutsideNativeSigned() = (1151, GetStringFunc("lexOutsideNativeSigned",",,,") ) /// This number is outside the allowable range for unsigned native integers - /// (Originally from ../FSComp.txt:1002) + /// (Originally from ..\FSComp.txt:1004) static member lexOutsideNativeUnsigned() = (1152, GetStringFunc("lexOutsideNativeUnsigned",",,,") ) /// Invalid floating point number - /// (Originally from ../FSComp.txt:1003) + /// (Originally from ..\FSComp.txt:1005) static member lexInvalidFloat() = (1153, GetStringFunc("lexInvalidFloat",",,,") ) /// This number is outside the allowable range for decimal literals - /// (Originally from ../FSComp.txt:1004) + /// (Originally from ..\FSComp.txt:1006) static member lexOusideDecimal() = (1154, GetStringFunc("lexOusideDecimal",",,,") ) /// This number is outside the allowable range for 32-bit floats - /// (Originally from ../FSComp.txt:1005) + /// (Originally from ..\FSComp.txt:1007) static member lexOusideThirtyTwoBitFloat() = (1155, GetStringFunc("lexOusideThirtyTwoBitFloat",",,,") ) /// This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0b0001 (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger). - /// (Originally from ../FSComp.txt:1006) + /// (Originally from ..\FSComp.txt:1008) static member lexInvalidNumericLiteral() = (1156, GetStringFunc("lexInvalidNumericLiteral",",,,") ) /// This is not a valid byte literal - /// (Originally from ../FSComp.txt:1007) + /// (Originally from ..\FSComp.txt:1009) static member lexInvalidByteLiteral() = (1157, GetStringFunc("lexInvalidByteLiteral",",,,") ) /// This is not a valid character literal - /// (Originally from ../FSComp.txt:1008) + /// (Originally from ..\FSComp.txt:1010) static member lexInvalidCharLiteral() = (1158, GetStringFunc("lexInvalidCharLiteral",",,,") ) /// This Unicode encoding is only valid in string literals - /// (Originally from ../FSComp.txt:1009) + /// (Originally from ..\FSComp.txt:1011) static member lexThisUnicodeOnlyInStringLiterals() = (1159, GetStringFunc("lexThisUnicodeOnlyInStringLiterals",",,,") ) /// This token is reserved for future use - /// (Originally from ../FSComp.txt:1010) + /// (Originally from ..\FSComp.txt:1012) static member lexTokenReserved() = (1160, GetStringFunc("lexTokenReserved",",,,") ) /// TABs are not allowed in F# code unless the #indent \"off\" option is used - /// (Originally from ../FSComp.txt:1011) + /// (Originally from ..\FSComp.txt:1013) static member lexTabsNotAllowed() = (1161, GetStringFunc("lexTabsNotAllowed",",,,") ) /// Invalid line number: '%s' - /// (Originally from ../FSComp.txt:1012) + /// (Originally from ..\FSComp.txt:1014) static member lexInvalidLineNumber(a0 : System.String) = (1162, GetStringFunc("lexInvalidLineNumber",",,,%s,,,") a0) /// #if directive must appear as the first non-whitespace character on a line - /// (Originally from ../FSComp.txt:1013) + /// (Originally from ..\FSComp.txt:1015) static member lexHashIfMustBeFirst() = (1163, GetStringFunc("lexHashIfMustBeFirst",",,,") ) /// #else has no matching #if - /// (Originally from ../FSComp.txt:1014) + /// (Originally from ..\FSComp.txt:1016) static member lexHashElseNoMatchingIf() = (GetStringFunc("lexHashElseNoMatchingIf",",,,") ) /// #endif required for #else - /// (Originally from ../FSComp.txt:1015) + /// (Originally from ..\FSComp.txt:1017) static member lexHashEndifRequiredForElse() = (GetStringFunc("lexHashEndifRequiredForElse",",,,") ) /// #else directive must appear as the first non-whitespace character on a line - /// (Originally from ../FSComp.txt:1016) + /// (Originally from ..\FSComp.txt:1018) static member lexHashElseMustBeFirst() = (1166, GetStringFunc("lexHashElseMustBeFirst",",,,") ) /// #endif has no matching #if - /// (Originally from ../FSComp.txt:1017) + /// (Originally from ..\FSComp.txt:1019) static member lexHashEndingNoMatchingIf() = (GetStringFunc("lexHashEndingNoMatchingIf",",,,") ) /// #endif directive must appear as the first non-whitespace character on a line - /// (Originally from ../FSComp.txt:1018) + /// (Originally from ..\FSComp.txt:1020) static member lexHashEndifMustBeFirst() = (1168, GetStringFunc("lexHashEndifMustBeFirst",",,,") ) /// #if directive should be immediately followed by an identifier - /// (Originally from ../FSComp.txt:1019) + /// (Originally from ..\FSComp.txt:1021) static member lexHashIfMustHaveIdent() = (1169, GetStringFunc("lexHashIfMustHaveIdent",",,,") ) /// Syntax error. Wrong nested #endif, unexpected tokens before it. - /// (Originally from ../FSComp.txt:1020) + /// (Originally from ..\FSComp.txt:1022) static member lexWrongNestedHashEndif() = (1170, GetStringFunc("lexWrongNestedHashEndif",",,,") ) /// #! may only appear as the first line at the start of a file. - /// (Originally from ../FSComp.txt:1021) + /// (Originally from ..\FSComp.txt:1023) static member lexHashBangMustBeFirstInFile() = (GetStringFunc("lexHashBangMustBeFirstInFile",",,,") ) /// Expected single line comment or end of line - /// (Originally from ../FSComp.txt:1022) + /// (Originally from ..\FSComp.txt:1024) static member pplexExpectedSingleLineComment() = (1171, GetStringFunc("pplexExpectedSingleLineComment",",,,") ) /// Infix operator member '%s' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ../FSComp.txt:1023) + /// (Originally from ..\FSComp.txt:1025) static member memberOperatorDefinitionWithNoArguments(a0 : System.String) = (1172, GetStringFunc("memberOperatorDefinitionWithNoArguments",",,,%s,,,") a0) /// Infix operator member '%s' has %d initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ../FSComp.txt:1024) + /// (Originally from ..\FSComp.txt:1026) static member memberOperatorDefinitionWithNonPairArgument(a0 : System.String, a1 : System.Int32) = (1173, GetStringFunc("memberOperatorDefinitionWithNonPairArgument",",,,%s,,,%d,,,") a0 a1) /// Infix operator member '%s' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ... - /// (Originally from ../FSComp.txt:1025) + /// (Originally from ..\FSComp.txt:1027) static member memberOperatorDefinitionWithCurriedArguments(a0 : System.String) = (1174, GetStringFunc("memberOperatorDefinitionWithCurriedArguments",",,,%s,,,") a0) /// All record, union and struct types in FSharp.Core.dll must be explicitly labelled with 'StructuralComparison' or 'NoComparison' - /// (Originally from ../FSComp.txt:1026) + /// (Originally from ..\FSComp.txt:1028) static member tcFSharpCoreRequiresExplicit() = (1175, GetStringFunc("tcFSharpCoreRequiresExplicit",",,,") ) /// The struct, record or union type '%s' has the 'StructuralComparison' attribute but the type parameter '%s' does not satisfy the 'comparison' constraint. Consider adding the 'comparison' constraint to the type parameter - /// (Originally from ../FSComp.txt:1027) + /// (Originally from ..\FSComp.txt:1029) static member tcStructuralComparisonNotSatisfied1(a0 : System.String, a1 : System.String) = (1176, GetStringFunc("tcStructuralComparisonNotSatisfied1",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' has the 'StructuralComparison' attribute but the component type '%s' does not satisfy the 'comparison' constraint - /// (Originally from ../FSComp.txt:1028) + /// (Originally from ..\FSComp.txt:1030) static member tcStructuralComparisonNotSatisfied2(a0 : System.String, a1 : System.String) = (1177, GetStringFunc("tcStructuralComparisonNotSatisfied2",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' is not structurally comparable because the type parameter %s does not satisfy the 'comparison' constraint. Consider adding the 'NoComparison' attribute to the type '%s' to clarify that the type is not comparable - /// (Originally from ../FSComp.txt:1029) + /// (Originally from ..\FSComp.txt:1031) static member tcNoComparisonNeeded1(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoComparisonNeeded1",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' is not structurally comparable because the type '%s' does not satisfy the 'comparison' constraint. Consider adding the 'NoComparison' attribute to the type '%s' to clarify that the type is not comparable - /// (Originally from ../FSComp.txt:1030) + /// (Originally from ..\FSComp.txt:1032) static member tcNoComparisonNeeded2(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoComparisonNeeded2",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' does not support structural equality because the type parameter %s does not satisfy the 'equality' constraint. Consider adding the 'NoEquality' attribute to the type '%s' to clarify that the type does not support structural equality - /// (Originally from ../FSComp.txt:1031) + /// (Originally from ..\FSComp.txt:1033) static member tcNoEqualityNeeded1(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoEqualityNeeded1",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' does not support structural equality because the type '%s' does not satisfy the 'equality' constraint. Consider adding the 'NoEquality' attribute to the type '%s' to clarify that the type does not support structural equality - /// (Originally from ../FSComp.txt:1032) + /// (Originally from ..\FSComp.txt:1034) static member tcNoEqualityNeeded2(a0 : System.String, a1 : System.String, a2 : System.String) = (1178, GetStringFunc("tcNoEqualityNeeded2",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The struct, record or union type '%s' has the 'StructuralEquality' attribute but the type parameter '%s' does not satisfy the 'equality' constraint. Consider adding the 'equality' constraint to the type parameter - /// (Originally from ../FSComp.txt:1033) + /// (Originally from ..\FSComp.txt:1035) static member tcStructuralEqualityNotSatisfied1(a0 : System.String, a1 : System.String) = (1179, GetStringFunc("tcStructuralEqualityNotSatisfied1",",,,%s,,,%s,,,") a0 a1) /// The struct, record or union type '%s' has the 'StructuralEquality' attribute but the component type '%s' does not satisfy the 'equality' constraint - /// (Originally from ../FSComp.txt:1034) + /// (Originally from ..\FSComp.txt:1036) static member tcStructuralEqualityNotSatisfied2(a0 : System.String, a1 : System.String) = (1180, GetStringFunc("tcStructuralEqualityNotSatisfied2",",,,%s,,,%s,,,") a0 a1) /// Each argument of the primary constructor for a struct must be given a type, for example 'type S(x1:int, x2: int) = ...'. These arguments determine the fields of the struct. - /// (Originally from ../FSComp.txt:1035) + /// (Originally from ..\FSComp.txt:1037) static member tcStructsMustDeclareTypesOfImplicitCtorArgsExplicitly() = (1181, GetStringFunc("tcStructsMustDeclareTypesOfImplicitCtorArgsExplicitly",",,,") ) /// The value '%s' is unused - /// (Originally from ../FSComp.txt:1036) + /// (Originally from ..\FSComp.txt:1038) static member chkUnusedValue(a0 : System.String) = (1182, GetStringFunc("chkUnusedValue",",,,%s,,,") a0) /// The recursive object reference '%s' is unused. The presence of a recursive object reference adds runtime initialization checks to members in this and derived types. Consider removing this recursive object reference. - /// (Originally from ../FSComp.txt:1037) + /// (Originally from ..\FSComp.txt:1039) static member chkUnusedThisVariable(a0 : System.String) = (1183, GetStringFunc("chkUnusedThisVariable",",,,%s,,,") a0) /// A getter property may have at most one argument group - /// (Originally from ../FSComp.txt:1038) + /// (Originally from ..\FSComp.txt:1040) static member parsGetterAtMostOneArgument() = (1184, GetStringFunc("parsGetterAtMostOneArgument",",,,") ) /// A setter property may have at most two argument groups - /// (Originally from ../FSComp.txt:1039) + /// (Originally from ..\FSComp.txt:1041) static member parsSetterAtMostTwoArguments() = (1185, GetStringFunc("parsSetterAtMostTwoArguments",",,,") ) /// Invalid property getter or setter - /// (Originally from ../FSComp.txt:1040) + /// (Originally from ..\FSComp.txt:1042) static member parsInvalidProperty() = (1186, GetStringFunc("parsInvalidProperty",",,,") ) /// An indexer property must be given at least one argument - /// (Originally from ../FSComp.txt:1041) + /// (Originally from ..\FSComp.txt:1043) static member parsIndexerPropertyRequiresAtLeastOneArgument() = (1187, GetStringFunc("parsIndexerPropertyRequiresAtLeastOneArgument",",,,") ) /// This operation accesses a mutable top-level value defined in another assembly in an unsupported way. The value cannot be accessed through its address. Consider copying the expression to a mutable local, e.g. 'let mutable x = ...', and if necessary assigning the value back after the completion of the operation - /// (Originally from ../FSComp.txt:1042) + /// (Originally from ..\FSComp.txt:1044) static member tastInvalidAddressOfMutableAcrossAssemblyBoundary() = (1188, GetStringFunc("tastInvalidAddressOfMutableAcrossAssemblyBoundary",",,,") ) /// Type parameters must be placed directly adjacent to the type name, e.g. \"type C<'T>\", not type \"C <'T>\" - /// (Originally from ../FSComp.txt:1043) + /// (Originally from ..\FSComp.txt:1045) static member parsNonAdjacentTypars() = (1189, GetStringFunc("parsNonAdjacentTypars",",,,") ) /// Type arguments must be placed directly adjacent to the type name, e.g. \"C<'T>\", not \"C <'T>\" - /// (Originally from ../FSComp.txt:1044) + /// (Originally from ..\FSComp.txt:1046) static member parsNonAdjacentTyargs() = (1190, GetStringFunc("parsNonAdjacentTyargs",",,,") ) /// The use of the type syntax 'int C' and 'C ' is not permitted here. Consider adjusting this type to be written in the form 'C' - /// (Originally from ../FSComp.txt:1045) + /// (Originally from ..\FSComp.txt:1047) static member parsNonAtomicType() = (GetStringFunc("parsNonAtomicType",",,,") ) /// The module/namespace '%s' from compilation unit '%s' did not contain the module/namespace '%s' - /// (Originally from ../FSComp.txt:1048) + /// (Originally from ..\FSComp.txt:1050) static member tastUndefinedItemRefModuleNamespace(a0 : System.String, a1 : System.String, a2 : System.String) = (1193, GetStringFunc("tastUndefinedItemRefModuleNamespace",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The module/namespace '%s' from compilation unit '%s' did not contain the val '%s' - /// (Originally from ../FSComp.txt:1049) + /// (Originally from ..\FSComp.txt:1051) static member tastUndefinedItemRefVal(a0 : System.String, a1 : System.String, a2 : System.String) = (1194, GetStringFunc("tastUndefinedItemRefVal",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The module/namespace '%s' from compilation unit '%s' did not contain the namespace, module or type '%s' - /// (Originally from ../FSComp.txt:1050) + /// (Originally from ..\FSComp.txt:1052) static member tastUndefinedItemRefModuleNamespaceType(a0 : System.String, a1 : System.String, a2 : System.String) = (1195, GetStringFunc("tastUndefinedItemRefModuleNamespaceType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The 'UseNullAsTrueValue' attribute flag may only be used with union types that have one nullary case and at least one non-nullary case - /// (Originally from ../FSComp.txt:1051) + /// (Originally from ..\FSComp.txt:1053) static member tcInvalidUseNullAsTrueValue() = (1196, GetStringFunc("tcInvalidUseNullAsTrueValue",",,,") ) /// The parameter '%s' was inferred to have byref type. Parameters of byref type must be given an explicit type annotation, e.g. 'x1: byref'. When used, a byref parameter is implicitly dereferenced. - /// (Originally from ../FSComp.txt:1052) + /// (Originally from ..\FSComp.txt:1054) static member tcParameterInferredByref(a0 : System.String) = (1197, GetStringFunc("tcParameterInferredByref",",,,%s,,,") a0) /// The generic member '%s' has been used at a non-uniform instantiation prior to this program point. Consider reordering the members so this member occurs first. Alternatively, specify the full type of the member explicitly, including argument types, return type and any additional generic parameters and constraints. - /// (Originally from ../FSComp.txt:1053) + /// (Originally from ..\FSComp.txt:1055) static member tcNonUniformMemberUse(a0 : System.String) = (1198, GetStringFunc("tcNonUniformMemberUse",",,,%s,,,") a0) /// The attribute '%s' appears in both the implementation and the signature, but the attribute arguments differ. Only the attribute from the signature will be included in the compiled code. - /// (Originally from ../FSComp.txt:1054) + /// (Originally from ..\FSComp.txt:1056) static member tcAttribArgsDiffer(a0 : System.String) = (1200, GetStringFunc("tcAttribArgsDiffer",",,,%s,,,") a0) /// Cannot call an abstract base member: '%s' - /// (Originally from ../FSComp.txt:1055) + /// (Originally from ..\FSComp.txt:1057) static member tcCannotCallAbstractBaseMember(a0 : System.String) = (1201, GetStringFunc("tcCannotCallAbstractBaseMember",",,,%s,,,") a0) /// Could not resolve the ambiguity in the use of a generic construct with an 'unmanaged' constraint at or near this position - /// (Originally from ../FSComp.txt:1056) + /// (Originally from ..\FSComp.txt:1058) static member typrelCannotResolveAmbiguityInUnmanaged() = (1202, GetStringFunc("typrelCannotResolveAmbiguityInUnmanaged",",,,") ) /// This construct is for ML compatibility. %s. You can disable this warning by using '--mlcompatibility' or '--nowarn:62'. - /// (Originally from ../FSComp.txt:1059) + /// (Originally from ..\FSComp.txt:1061) static member mlCompatMessage(a0 : System.String) = (GetStringFunc("mlCompatMessage",",,,%s,,,") a0) /// The type '%s' has been marked as having an Explicit layout, but the field '%s' has not been marked with the 'FieldOffset' attribute - /// (Originally from ../FSComp.txt:1061) + /// (Originally from ..\FSComp.txt:1063) static member ilFieldDoesNotHaveValidOffsetForStructureLayout(a0 : System.String, a1 : System.String) = (1206, GetStringFunc("ilFieldDoesNotHaveValidOffsetForStructureLayout",",,,%s,,,%s,,,") a0 a1) /// Interfaces inherited by other interfaces should be declared using 'inherit ...' instead of 'interface ...' - /// (Originally from ../FSComp.txt:1062) + /// (Originally from ..\FSComp.txt:1064) static member tcInterfacesShouldUseInheritNotInterface() = (1207, GetStringFunc("tcInterfacesShouldUseInheritNotInterface",",,,") ) /// Invalid prefix operator - /// (Originally from ../FSComp.txt:1063) + /// (Originally from ..\FSComp.txt:1065) static member parsInvalidPrefixOperator() = (1208, GetStringFunc("parsInvalidPrefixOperator",",,,") ) /// Invalid operator definition. Prefix operator definitions must use a valid prefix operator name. - /// (Originally from ../FSComp.txt:1064) + /// (Originally from ..\FSComp.txt:1066) static member parsInvalidPrefixOperatorDefinition() = (1208, GetStringFunc("parsInvalidPrefixOperatorDefinition",",,,") ) /// The file extensions '.ml' and '.mli' are for ML compatibility - /// (Originally from ../FSComp.txt:1065) + /// (Originally from ..\FSComp.txt:1067) static member buildCompilingExtensionIsForML() = (GetStringFunc("buildCompilingExtensionIsForML",",,,") ) /// Consider using a file with extension '.ml' or '.mli' instead - /// (Originally from ../FSComp.txt:1066) + /// (Originally from ..\FSComp.txt:1068) static member lexIndentOffForML() = (GetStringFunc("lexIndentOffForML",",,,") ) /// Active pattern '%s' is not a function - /// (Originally from ../FSComp.txt:1067) + /// (Originally from ..\FSComp.txt:1069) static member activePatternIdentIsNotFunctionTyped(a0 : System.String) = (1209, GetStringFunc("activePatternIdentIsNotFunctionTyped",",,,%s,,,") a0) /// Active pattern '%s' has a result type containing type variables that are not determined by the input. The common cause is a when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x' - /// (Originally from ../FSComp.txt:1068) + /// (Originally from ..\FSComp.txt:1070) static member activePatternChoiceHasFreeTypars(a0 : System.String) = (1210, GetStringFunc("activePatternChoiceHasFreeTypars",",,,%s,,,") a0) /// The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) - /// (Originally from ../FSComp.txt:1069) + /// (Originally from ..\FSComp.txt:1071) static member ilFieldHasOffsetForSequentialLayout() = (1211, GetStringFunc("ilFieldHasOffsetForSequentialLayout",",,,") ) /// Optional arguments must come at the end of the argument list, after any non-optional arguments - /// (Originally from ../FSComp.txt:1070) + /// (Originally from ..\FSComp.txt:1072) static member tcOptionalArgsMustComeAfterNonOptionalArgs() = (1212, GetStringFunc("tcOptionalArgsMustComeAfterNonOptionalArgs",",,,") ) /// Attribute 'System.Diagnostics.ConditionalAttribute' is only valid on methods or attribute classes - /// (Originally from ../FSComp.txt:1071) + /// (Originally from ..\FSComp.txt:1073) static member tcConditionalAttributeUsage() = (1213, GetStringFunc("tcConditionalAttributeUsage",",,,") ) /// Extension members cannot provide operator overloads. Consider defining the operator as part of the type definition instead. - /// (Originally from ../FSComp.txt:1073) + /// (Originally from ..\FSComp.txt:1075) static member tcMemberOperatorDefinitionInExtrinsic() = (1215, GetStringFunc("tcMemberOperatorDefinitionInExtrinsic",",,,") ) /// The name of the MDB file must be .mdb. The --pdb option will be ignored. - /// (Originally from ../FSComp.txt:1074) + /// (Originally from ..\FSComp.txt:1076) static member ilwriteMDBFileNameCannotBeChangedWarning() = (1216, GetStringFunc("ilwriteMDBFileNameCannotBeChangedWarning",",,,") ) /// MDB generation failed. Could not find compatible member %s - /// (Originally from ../FSComp.txt:1075) + /// (Originally from ..\FSComp.txt:1077) static member ilwriteMDBMemberMissing(a0 : System.String) = (1217, GetStringFunc("ilwriteMDBMemberMissing",",,,%s,,,") a0) /// Cannot generate MDB debug information. Failed to load the 'MonoSymbolWriter' type from the 'Mono.CompilerServices.SymbolWriter.dll' assembly. - /// (Originally from ../FSComp.txt:1076) + /// (Originally from ..\FSComp.txt:1078) static member ilwriteErrorCreatingMdb() = (1218, GetStringFunc("ilwriteErrorCreatingMdb",",,,") ) /// The union case named '%s' conflicts with the generated type '%s' - /// (Originally from ../FSComp.txt:1077) + /// (Originally from ..\FSComp.txt:1079) static member tcUnionCaseNameConflictsWithGeneratedType(a0 : System.String, a1 : System.String) = (1219, GetStringFunc("tcUnionCaseNameConflictsWithGeneratedType",",,,%s,,,%s,,,") a0 a1) /// ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter - /// (Originally from ../FSComp.txt:1078) + /// (Originally from ..\FSComp.txt:1080) static member chkNoReflectedDefinitionOnStructMember() = (1220, GetStringFunc("chkNoReflectedDefinitionOnStructMember",",,,") ) /// DLLImport bindings must be static members in a class or function definitions in a module - /// (Originally from ../FSComp.txt:1079) + /// (Originally from ..\FSComp.txt:1081) static member tcDllImportNotAllowed() = (1221, GetStringFunc("tcDllImportNotAllowed",",,,") ) /// When mscorlib.dll or FSharp.Core.dll is explicitly referenced the %s option must also be passed - /// (Originally from ../FSComp.txt:1080) + /// (Originally from ..\FSComp.txt:1082) static member buildExplicitCoreLibRequiresNoFramework(a0 : System.String) = (1222, GetStringFunc("buildExplicitCoreLibRequiresNoFramework",",,,%s,,,") a0) /// 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. - /// (Originally from ../FSComp.txt:1081) + /// (Originally from ..\FSComp.txt:1083) static member buildExpectedSigdataFile(a0 : System.String) = (1223, GetStringFunc("buildExpectedSigdataFile",",,,%s,,,") a0) /// 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. - /// (Originally from ../FSComp.txt:1082) + /// (Originally from ..\FSComp.txt:1084) static member buildExpectedFileAlongSideFSharpCore(a0 : System.String, a1 : System.String) = (1225, GetStringFunc("buildExpectedFileAlongSideFSharpCore",",,,%s,,,%s,,,") a0 a1) /// Filename '%s' contains invalid character '%s' - /// (Originally from ../FSComp.txt:1083) + /// (Originally from ..\FSComp.txt:1085) static member buildUnexpectedFileNameCharacter(a0 : System.String, a1 : System.String) = (1227, GetStringFunc("buildUnexpectedFileNameCharacter",",,,%s,,,%s,,,") a0 a1) /// 'use!' bindings must be of the form 'use! = ' - /// (Originally from ../FSComp.txt:1084) + /// (Originally from ..\FSComp.txt:1086) static member tcInvalidUseBangBinding() = (1228, GetStringFunc("tcInvalidUseBangBinding",",,,") ) /// Inner generic functions are not permitted in quoted expressions. Consider adding some type constraints until this function is no longer generic. - /// (Originally from ../FSComp.txt:1085) + /// (Originally from ..\FSComp.txt:1087) static member crefNoInnerGenericsInQuotations() = (1230, GetStringFunc("crefNoInnerGenericsInQuotations",",,,") ) /// The type '%s' is not a valid enumerator type , i.e. does not have a 'MoveNext()' method returning a bool, and a 'Current' property - /// (Originally from ../FSComp.txt:1086) + /// (Originally from ..\FSComp.txt:1088) static member tcEnumTypeCannotBeEnumerated(a0 : System.String) = (1231, GetStringFunc("tcEnumTypeCannotBeEnumerated",",,,%s,,,") a0) /// End of file in triple-quote string begun at or before here - /// (Originally from ../FSComp.txt:1087) + /// (Originally from ..\FSComp.txt:1089) static member parsEofInTripleQuoteString() = (1232, GetStringFunc("parsEofInTripleQuoteString",",,,") ) /// End of file in triple-quote string embedded in comment begun at or before here - /// (Originally from ../FSComp.txt:1088) + /// (Originally from ..\FSComp.txt:1090) static member parsEofInTripleQuoteStringInComment() = (1233, GetStringFunc("parsEofInTripleQuoteStringInComment",",,,") ) /// This type test or downcast will ignore the unit-of-measure '%s' - /// (Originally from ../FSComp.txt:1089) + /// (Originally from ..\FSComp.txt:1091) static member tcTypeTestLosesMeasures(a0 : System.String) = (1240, GetStringFunc("tcTypeTestLosesMeasures",",,,%s,,,") a0) /// Expected type argument or static argument - /// (Originally from ../FSComp.txt:1090) + /// (Originally from ..\FSComp.txt:1092) static member parsMissingTypeArgs() = (1241, GetStringFunc("parsMissingTypeArgs",",,,") ) /// Unmatched '<'. Expected closing '>' - /// (Originally from ../FSComp.txt:1091) + /// (Originally from ..\FSComp.txt:1093) static member parsMissingGreaterThan() = (1242, GetStringFunc("parsMissingGreaterThan",",,,") ) /// Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters. - /// (Originally from ../FSComp.txt:1092) + /// (Originally from ..\FSComp.txt:1094) static member parsUnexpectedQuotationOperatorInTypeAliasDidYouMeanVerbatimString() = (1243, GetStringFunc("parsUnexpectedQuotationOperatorInTypeAliasDidYouMeanVerbatimString",",,,") ) /// Attempted to parse this as an operator name, but failed - /// (Originally from ../FSComp.txt:1093) + /// (Originally from ..\FSComp.txt:1095) static member parsErrorParsingAsOperatorName() = (1244, GetStringFunc("parsErrorParsingAsOperatorName",",,,") ) /// \U%s is not a valid Unicode character escape sequence - /// (Originally from ../FSComp.txt:1094) + /// (Originally from ..\FSComp.txt:1096) static member lexInvalidUnicodeLiteral(a0 : System.String) = (1245, GetStringFunc("lexInvalidUnicodeLiteral",",,,%s,,,") a0) /// '%s' must be applied to an argument of type '%s', but has been applied to an argument of type '%s' - /// (Originally from ../FSComp.txt:1095) + /// (Originally from ..\FSComp.txt:1097) static member tcCallerInfoWrongType(a0 : System.String, a1 : System.String, a2 : System.String) = (1246, GetStringFunc("tcCallerInfoWrongType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// '%s' can only be applied to optional arguments - /// (Originally from ../FSComp.txt:1096) + /// (Originally from ..\FSComp.txt:1098) static member tcCallerInfoNotOptional(a0 : System.String) = (1247, GetStringFunc("tcCallerInfoNotOptional",",,,%s,,,") a0) /// The specified .NET Framework version '%s' is not supported. Please specify a value from the enumeration Microsoft.Build.Utilities.TargetDotNetFrameworkVersion. - /// (Originally from ../FSComp.txt:1098) + /// (Originally from ..\FSComp.txt:1100) static member toolLocationHelperUnsupportedFrameworkVersion(a0 : System.String) = (1300, GetStringFunc("toolLocationHelperUnsupportedFrameworkVersion",",,,%s,,,") a0) /// Invalid Magic value in CLR Header - /// (Originally from ../FSComp.txt:1102) + /// (Originally from ..\FSComp.txt:1104) static member ilSignInvalidMagicValue() = (1301, GetStringFunc("ilSignInvalidMagicValue",",,,") ) /// Bad image format - /// (Originally from ../FSComp.txt:1103) + /// (Originally from ..\FSComp.txt:1105) static member ilSignBadImageFormat() = (1302, GetStringFunc("ilSignBadImageFormat",",,,") ) /// Private key expected - /// (Originally from ../FSComp.txt:1104) + /// (Originally from ..\FSComp.txt:1106) static member ilSignPrivateKeyExpected() = (1303, GetStringFunc("ilSignPrivateKeyExpected",",,,") ) /// RSA key expected - /// (Originally from ../FSComp.txt:1105) + /// (Originally from ..\FSComp.txt:1107) static member ilSignRsaKeyExpected() = (1304, GetStringFunc("ilSignRsaKeyExpected",",,,") ) /// Invalid bit Length - /// (Originally from ../FSComp.txt:1106) + /// (Originally from ..\FSComp.txt:1108) static member ilSignInvalidBitLen() = (1305, GetStringFunc("ilSignInvalidBitLen",",,,") ) /// Invalid RSAParameters structure - '{0}' expected - /// (Originally from ../FSComp.txt:1107) + /// (Originally from ..\FSComp.txt:1109) static member ilSignInvalidRSAParams() = (1306, GetStringFunc("ilSignInvalidRSAParams",",,,") ) /// Invalid algId - 'Exponent' expected - /// (Originally from ../FSComp.txt:1108) + /// (Originally from ..\FSComp.txt:1110) static member ilSignInvalidAlgId() = (1307, GetStringFunc("ilSignInvalidAlgId",",,,") ) /// Invalid signature size - /// (Originally from ../FSComp.txt:1109) + /// (Originally from ..\FSComp.txt:1111) static member ilSignInvalidSignatureSize() = (1308, GetStringFunc("ilSignInvalidSignatureSize",",,,") ) /// No signature directory - /// (Originally from ../FSComp.txt:1110) + /// (Originally from ..\FSComp.txt:1112) static member ilSignNoSignatureDirectory() = (1309, GetStringFunc("ilSignNoSignatureDirectory",",,,") ) /// Invalid Public Key blob - /// (Originally from ../FSComp.txt:1111) + /// (Originally from ..\FSComp.txt:1113) static member ilSignInvalidPKBlob() = (1310, GetStringFunc("ilSignInvalidPKBlob",",,,") ) /// Exiting - too many errors - /// (Originally from ../FSComp.txt:1113) + /// (Originally from ..\FSComp.txt:1115) static member fscTooManyErrors() = (GetStringFunc("fscTooManyErrors",",,,") ) /// The documentation file has no .xml suffix - /// (Originally from ../FSComp.txt:1114) + /// (Originally from ..\FSComp.txt:1116) static member docfileNoXmlSuffix() = (2001, GetStringFunc("docfileNoXmlSuffix",",,,") ) /// No implementation files specified - /// (Originally from ../FSComp.txt:1115) + /// (Originally from ..\FSComp.txt:1117) static member fscNoImplementationFiles() = (2002, GetStringFunc("fscNoImplementationFiles",",,,") ) - /// An %s specified version '%s', but this value is invalid and has been ignored - /// (Originally from ../FSComp.txt:1116) + /// The attribute %s specified version '%s', but this value is invalid and has been ignored + /// (Originally from ..\FSComp.txt:1118) static member fscBadAssemblyVersion(a0 : System.String, a1 : System.String) = (2003, GetStringFunc("fscBadAssemblyVersion",",,,%s,,,%s,,,") a0 a1) /// Conflicting options specified: 'win32manifest' and 'win32res'. Only one of these can be used. - /// (Originally from ../FSComp.txt:1117) + /// (Originally from ..\FSComp.txt:1119) static member fscTwoResourceManifests() = (2004, GetStringFunc("fscTwoResourceManifests",",,,") ) /// The code in assembly '%s' makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - /// (Originally from ../FSComp.txt:1118) + /// (Originally from ..\FSComp.txt:1120) static member fscQuotationLiteralsStaticLinking(a0 : System.String) = (2005, GetStringFunc("fscQuotationLiteralsStaticLinking",",,,%s,,,") a0) /// Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0. - /// (Originally from ../FSComp.txt:1119) + /// (Originally from ..\FSComp.txt:1121) static member fscQuotationLiteralsStaticLinking0() = (2006, GetStringFunc("fscQuotationLiteralsStaticLinking0",",,,") ) /// Static linking may not include a .EXE - /// (Originally from ../FSComp.txt:1120) + /// (Originally from ..\FSComp.txt:1122) static member fscStaticLinkingNoEXE() = (2007, GetStringFunc("fscStaticLinkingNoEXE",",,,") ) /// Static linking may not include a mixed managed/unmanaged DLL - /// (Originally from ../FSComp.txt:1121) + /// (Originally from ..\FSComp.txt:1123) static member fscStaticLinkingNoMixedDLL() = (2008, GetStringFunc("fscStaticLinkingNoMixedDLL",",,,") ) /// Ignoring mixed managed/unmanaged assembly '%s' during static linking - /// (Originally from ../FSComp.txt:1122) + /// (Originally from ..\FSComp.txt:1124) static member fscIgnoringMixedWhenLinking(a0 : System.String) = (2009, GetStringFunc("fscIgnoringMixedWhenLinking",",,,%s,,,") a0) /// Assembly '%s' was referenced transitively and the assembly could not be resolved automatically. Static linking will assume this DLL has no dependencies on the F# library or other statically linked DLLs. Consider adding an explicit reference to this DLL. - /// (Originally from ../FSComp.txt:1123) + /// (Originally from ..\FSComp.txt:1125) static member fscAssumeStaticLinkContainsNoDependencies(a0 : System.String) = (2011, GetStringFunc("fscAssumeStaticLinkContainsNoDependencies",",,,%s,,,") a0) /// Assembly '%s' not found in dependency set of target binary. Statically linked roots should be specified using an assembly name, without a DLL or EXE extension. If this assembly was referenced explicitly then it is possible the assembly was not actually required by the generated binary, in which case it should not be statically linked. - /// (Originally from ../FSComp.txt:1124) + /// (Originally from ..\FSComp.txt:1126) static member fscAssemblyNotFoundInDependencySet(a0 : System.String) = (2012, GetStringFunc("fscAssemblyNotFoundInDependencySet",",,,%s,,,") a0) /// The key file '%s' could not be opened - /// (Originally from ../FSComp.txt:1125) + /// (Originally from ..\FSComp.txt:1127) static member fscKeyFileCouldNotBeOpened(a0 : System.String) = (2013, GetStringFunc("fscKeyFileCouldNotBeOpened",",,,%s,,,") a0) /// A problem occurred writing the binary '%s': %s - /// (Originally from ../FSComp.txt:1126) + /// (Originally from ..\FSComp.txt:1128) static member fscProblemWritingBinary(a0 : System.String, a1 : System.String) = (2014, GetStringFunc("fscProblemWritingBinary",",,,%s,,,%s,,,") a0 a1) /// The 'AssemblyVersionAttribute' has been ignored because a version was given using a command line option - /// (Originally from ../FSComp.txt:1127) + /// (Originally from ..\FSComp.txt:1129) static member fscAssemblyVersionAttributeIgnored() = (2015, GetStringFunc("fscAssemblyVersionAttributeIgnored",",,,") ) /// Error emitting 'System.Reflection.AssemblyCultureAttribute' attribute -- 'Executables cannot be satellite assemblies, Culture should always be empty' - /// (Originally from ../FSComp.txt:1128) + /// (Originally from ..\FSComp.txt:1130) static member fscAssemblyCultureAttributeError() = (2016, GetStringFunc("fscAssemblyCultureAttributeError",",,,") ) /// Option '--delaysign' overrides attribute 'System.Reflection.AssemblyDelaySignAttribute' given in a source file or added module - /// (Originally from ../FSComp.txt:1129) + /// (Originally from ..\FSComp.txt:1131) static member fscDelaySignWarning() = (2017, GetStringFunc("fscDelaySignWarning",",,,") ) /// Option '--keyfile' overrides attribute 'System.Reflection.AssemblyKeyFileAttribute' given in a source file or added module - /// (Originally from ../FSComp.txt:1130) + /// (Originally from ..\FSComp.txt:1132) static member fscKeyFileWarning() = (2018, GetStringFunc("fscKeyFileWarning",",,,") ) /// Option '--keycontainer' overrides attribute 'System.Reflection.AssemblyNameAttribute' given in a source file or added module - /// (Originally from ../FSComp.txt:1131) + /// (Originally from ..\FSComp.txt:1133) static member fscKeyNameWarning() = (2019, GetStringFunc("fscKeyNameWarning",",,,") ) /// The assembly '%s' is listed on the command line. Assemblies should be referenced using a command line flag such as '-r'. - /// (Originally from ../FSComp.txt:1132) + /// (Originally from ..\FSComp.txt:1134) static member fscReferenceOnCommandLine(a0 : System.String) = (2020, GetStringFunc("fscReferenceOnCommandLine",",,,%s,,,") a0) /// The resident compilation service was not used because a problem occured in communicating with the server. - /// (Originally from ../FSComp.txt:1133) + /// (Originally from ..\FSComp.txt:1135) static member fscRemotingError() = (2021, GetStringFunc("fscRemotingError",",,,") ) /// Problem with filename '%s': Illegal characters in path. - /// (Originally from ../FSComp.txt:1134) + /// (Originally from ..\FSComp.txt:1136) static member pathIsInvalid(a0 : System.String) = (2022, GetStringFunc("pathIsInvalid",",,,%s,,,") a0) /// Passing a .resx file (%s) as a source file to the compiler is deprecated. Use resgen.exe to transform the .resx file into a .resources file to pass as a --resource option. If you are using MSBuild, this can be done via an item in the .fsproj project file. - /// (Originally from ../FSComp.txt:1135) + /// (Originally from ..\FSComp.txt:1137) static member fscResxSourceFileDeprecated(a0 : System.String) = (2023, GetStringFunc("fscResxSourceFileDeprecated",",,,%s,,,") a0) /// Static linking may not be used on an assembly referencing mscorlib (e.g. a .NET Framework assembly) when generating an assembly that references System.Runtime (e.g. a .NET Core or Portable assembly). - /// (Originally from ../FSComp.txt:1136) + /// (Originally from ..\FSComp.txt:1138) static member fscStaticLinkingNoProfileMismatches() = (2024, GetStringFunc("fscStaticLinkingNoProfileMismatches",",,,") ) /// An %s specified version '%s', but this value is a wildcard, and you have requested a deterministic build, these are in conflict. - /// (Originally from ../FSComp.txt:1137) + /// (Originally from ..\FSComp.txt:1139) static member fscAssemblyWildcardAndDeterminism(a0 : System.String, a1 : System.String) = (2025, GetStringFunc("fscAssemblyWildcardAndDeterminism",",,,%s,,,%s,,,") a0 a1) /// Determinstic builds only support portable PDBs (--debug:portable or --debug:embedded) - /// (Originally from ../FSComp.txt:1138) + /// (Originally from ..\FSComp.txt:1140) static member fscDeterministicDebugRequiresPortablePdb() = (2026, GetStringFunc("fscDeterministicDebugRequiresPortablePdb",",,,") ) /// Character '%s' is not allowed in provided namespace name '%s' - /// (Originally from ../FSComp.txt:1139) + /// (Originally from ..\FSComp.txt:1141) static member etIllegalCharactersInNamespaceName(a0 : System.String, a1 : System.String) = (3000, GetStringFunc("etIllegalCharactersInNamespaceName",",,,%s,,,%s,,,") a0 a1) /// The provided type '%s' returned a member with a null or empty member name - /// (Originally from ../FSComp.txt:1140) + /// (Originally from ..\FSComp.txt:1142) static member etNullOrEmptyMemberName(a0 : System.String) = (3001, GetStringFunc("etNullOrEmptyMemberName",",,,%s,,,") a0) /// The provided type '%s' returned a null member - /// (Originally from ../FSComp.txt:1141) + /// (Originally from ..\FSComp.txt:1143) static member etNullMember(a0 : System.String) = (3002, GetStringFunc("etNullMember",",,,%s,,,") a0) /// The provided type '%s' member info '%s' has null declaring type - /// (Originally from ../FSComp.txt:1142) + /// (Originally from ..\FSComp.txt:1144) static member etNullMemberDeclaringType(a0 : System.String, a1 : System.String) = (3003, GetStringFunc("etNullMemberDeclaringType",",,,%s,,,%s,,,") a0 a1) /// The provided type '%s' has member '%s' which has declaring type '%s'. Expected declaring type to be the same as provided type. - /// (Originally from ../FSComp.txt:1143) + /// (Originally from ..\FSComp.txt:1145) static member etNullMemberDeclaringTypeDifferentFromProvidedType(a0 : System.String, a1 : System.String, a2 : System.String) = (3004, GetStringFunc("etNullMemberDeclaringTypeDifferentFromProvidedType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Referenced assembly '%s' has assembly level attribute '%s' but no public type provider classes were found - /// (Originally from ../FSComp.txt:1144) + /// (Originally from ..\FSComp.txt:1146) static member etHostingAssemblyFoundWithoutHosts(a0 : System.String, a1 : System.String) = (3005, GetStringFunc("etHostingAssemblyFoundWithoutHosts",",,,%s,,,%s,,,") a0 a1) /// Type '%s' from type provider '%s' has an empty namespace. Use 'null' for the global namespace. - /// (Originally from ../FSComp.txt:1145) + /// (Originally from ..\FSComp.txt:1147) static member etEmptyNamespaceOfTypeNotAllowed(a0 : System.String, a1 : System.String) = (3006, GetStringFunc("etEmptyNamespaceOfTypeNotAllowed",",,,%s,,,%s,,,") a0 a1) /// Empty namespace found from the type provider '%s'. Use 'null' for the global namespace. - /// (Originally from ../FSComp.txt:1146) + /// (Originally from ..\FSComp.txt:1148) static member etEmptyNamespaceNotAllowed(a0 : System.String) = (3007, GetStringFunc("etEmptyNamespaceNotAllowed",",,,%s,,,") a0) /// Provided type '%s' has 'IsGenericType' as true, but generic types are not supported. - /// (Originally from ../FSComp.txt:1147) + /// (Originally from ..\FSComp.txt:1149) static member etMustNotBeGeneric(a0 : System.String) = (3011, GetStringFunc("etMustNotBeGeneric",",,,%s,,,") a0) /// Provided type '%s' has 'IsArray' as true, but array types are not supported. - /// (Originally from ../FSComp.txt:1148) + /// (Originally from ..\FSComp.txt:1150) static member etMustNotBeAnArray(a0 : System.String) = (3013, GetStringFunc("etMustNotBeAnArray",",,,%s,,,") a0) /// Invalid member '%s' on provided type '%s'. Provided type members must be public, and not be generic, virtual, or abstract. - /// (Originally from ../FSComp.txt:1149) + /// (Originally from ..\FSComp.txt:1151) static member etMethodHasRequirements(a0 : System.String, a1 : System.String) = (3014, GetStringFunc("etMethodHasRequirements",",,,%s,,,%s,,,") a0 a1) /// Invalid member '%s' on provided type '%s'. Only properties, methods and constructors are allowed - /// (Originally from ../FSComp.txt:1150) + /// (Originally from ..\FSComp.txt:1152) static member etUnsupportedMemberKind(a0 : System.String, a1 : System.String) = (3015, GetStringFunc("etUnsupportedMemberKind",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanRead=true but there was no value from GetGetMethod() - /// (Originally from ../FSComp.txt:1151) + /// (Originally from ..\FSComp.txt:1153) static member etPropertyCanReadButHasNoGetter(a0 : System.String, a1 : System.String) = (3016, GetStringFunc("etPropertyCanReadButHasNoGetter",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanRead=false but GetGetMethod() returned a method - /// (Originally from ../FSComp.txt:1152) + /// (Originally from ..\FSComp.txt:1154) static member etPropertyHasGetterButNoCanRead(a0 : System.String, a1 : System.String) = (3017, GetStringFunc("etPropertyHasGetterButNoCanRead",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanWrite=true but there was no value from GetSetMethod() - /// (Originally from ../FSComp.txt:1153) + /// (Originally from ..\FSComp.txt:1155) static member etPropertyCanWriteButHasNoSetter(a0 : System.String, a1 : System.String) = (3018, GetStringFunc("etPropertyCanWriteButHasNoSetter",",,,%s,,,%s,,,") a0 a1) /// Property '%s' on provided type '%s' has CanWrite=false but GetSetMethod() returned a method - /// (Originally from ../FSComp.txt:1154) + /// (Originally from ..\FSComp.txt:1156) static member etPropertyHasSetterButNoCanWrite(a0 : System.String, a1 : System.String) = (3019, GetStringFunc("etPropertyHasSetterButNoCanWrite",",,,%s,,,%s,,,") a0 a1) /// One or more errors seen during provided type setup - /// (Originally from ../FSComp.txt:1155) + /// (Originally from ..\FSComp.txt:1157) static member etOneOrMoreErrorsSeenDuringExtensionTypeSetting() = (3020, GetStringFunc("etOneOrMoreErrorsSeenDuringExtensionTypeSetting",",,,") ) /// Unexpected exception from provided type '%s' member '%s': %s - /// (Originally from ../FSComp.txt:1156) + /// (Originally from ..\FSComp.txt:1158) static member etUnexpectedExceptionFromProvidedTypeMember(a0 : System.String, a1 : System.String, a2 : System.String) = (3021, GetStringFunc("etUnexpectedExceptionFromProvidedTypeMember",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Unsupported constant type '%s'. Quotations provided by type providers can only contain simple constants. The implementation of the type provider may need to be adjusted by moving a value declared outside a provided quotation literal to be a 'let' binding inside the quotation literal. - /// (Originally from ../FSComp.txt:1157) + /// (Originally from ..\FSComp.txt:1159) static member etUnsupportedConstantType(a0 : System.String) = (3022, GetStringFunc("etUnsupportedConstantType",",,,%s,,,") a0) /// Unsupported expression '%s' from type provider. If you are the author of this type provider, consider adjusting it to provide a different provided expression. - /// (Originally from ../FSComp.txt:1158) + /// (Originally from ..\FSComp.txt:1160) static member etUnsupportedProvidedExpression(a0 : System.String) = (3025, GetStringFunc("etUnsupportedProvidedExpression",",,,%s,,,") a0) /// Expected provided type named '%s' but provided type has 'Name' with value '%s' - /// (Originally from ../FSComp.txt:1159) + /// (Originally from ..\FSComp.txt:1161) static member etProvidedTypeHasUnexpectedName(a0 : System.String, a1 : System.String) = (3028, GetStringFunc("etProvidedTypeHasUnexpectedName",",,,%s,,,%s,,,") a0 a1) /// Event '%s' on provided type '%s' has no value from GetAddMethod() - /// (Originally from ../FSComp.txt:1160) + /// (Originally from ..\FSComp.txt:1162) static member etEventNoAdd(a0 : System.String, a1 : System.String) = (3029, GetStringFunc("etEventNoAdd",",,,%s,,,%s,,,") a0 a1) /// Event '%s' on provided type '%s' has no value from GetRemoveMethod() - /// (Originally from ../FSComp.txt:1161) + /// (Originally from ..\FSComp.txt:1163) static member etEventNoRemove(a0 : System.String, a1 : System.String) = (3030, GetStringFunc("etEventNoRemove",",,,%s,,,%s,,,") a0 a1) /// Assembly attribute '%s' refers to a designer assembly '%s' which cannot be loaded or doesn't exist. %s - /// (Originally from ../FSComp.txt:1162) + /// (Originally from ..\FSComp.txt:1164) static member etProviderHasWrongDesignerAssembly(a0 : System.String, a1 : System.String, a2 : System.String) = (3031, GetStringFunc("etProviderHasWrongDesignerAssembly",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type provider does not have a valid constructor. A constructor taking either no arguments or one argument of type 'TypeProviderConfig' was expected. - /// (Originally from ../FSComp.txt:1163) + /// (Originally from ..\FSComp.txt:1165) static member etProviderDoesNotHaveValidConstructor() = (3032, GetStringFunc("etProviderDoesNotHaveValidConstructor",",,,") ) /// The type provider '%s' reported an error: %s - /// (Originally from ../FSComp.txt:1164) + /// (Originally from ..\FSComp.txt:1166) static member etProviderError(a0 : System.String, a1 : System.String) = (3033, GetStringFunc("etProviderError",",,,%s,,,%s,,,") a0 a1) /// The type provider '%s' used an invalid parameter in the ParameterExpression: %s - /// (Originally from ../FSComp.txt:1165) + /// (Originally from ..\FSComp.txt:1167) static member etIncorrectParameterExpression(a0 : System.String, a1 : System.String) = (3034, GetStringFunc("etIncorrectParameterExpression",",,,%s,,,%s,,,") a0 a1) /// The type provider '%s' provided a method with a name '%s' and metadata token '%d', which is not reported among its methods of its declaring type '%s' - /// (Originally from ../FSComp.txt:1166) + /// (Originally from ..\FSComp.txt:1168) static member etIncorrectProvidedMethod(a0 : System.String, a1 : System.String, a2 : System.Int32, a3 : System.String) = (3035, GetStringFunc("etIncorrectProvidedMethod",",,,%s,,,%s,,,%d,,,%s,,,") a0 a1 a2 a3) /// The type provider '%s' provided a constructor which is not reported among the constructors of its declaring type '%s' - /// (Originally from ../FSComp.txt:1167) + /// (Originally from ..\FSComp.txt:1169) static member etIncorrectProvidedConstructor(a0 : System.String, a1 : System.String) = (3036, GetStringFunc("etIncorrectProvidedConstructor",",,,%s,,,%s,,,") a0 a1) /// A direct reference to the generated type '%s' is not permitted. Instead, use a type definition, e.g. 'type TypeAlias = '. This indicates that a type provider adds generated types to your assembly. - /// (Originally from ../FSComp.txt:1168) + /// (Originally from ..\FSComp.txt:1170) static member etDirectReferenceToGeneratedTypeNotAllowed(a0 : System.String) = (3039, GetStringFunc("etDirectReferenceToGeneratedTypeNotAllowed",",,,%s,,,") a0) /// Expected provided type with path '%s' but provided type has path '%s' - /// (Originally from ../FSComp.txt:1169) + /// (Originally from ..\FSComp.txt:1171) static member etProvidedTypeHasUnexpectedPath(a0 : System.String, a1 : System.String) = (3041, GetStringFunc("etProvidedTypeHasUnexpectedPath",",,,%s,,,%s,,,") a0 a1) /// Unexpected 'null' return value from provided type '%s' member '%s' - /// (Originally from ../FSComp.txt:1170) + /// (Originally from ..\FSComp.txt:1172) static member etUnexpectedNullFromProvidedTypeMember(a0 : System.String, a1 : System.String) = (3042, GetStringFunc("etUnexpectedNullFromProvidedTypeMember",",,,%s,,,%s,,,") a0 a1) /// Unexpected exception from member '%s' of provided type '%s' member '%s': %s - /// (Originally from ../FSComp.txt:1171) + /// (Originally from ..\FSComp.txt:1173) static member etUnexpectedExceptionFromProvidedMemberMember(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3043, GetStringFunc("etUnexpectedExceptionFromProvidedMemberMember",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// Nested provided types do not take static arguments or generic parameters - /// (Originally from ../FSComp.txt:1172) + /// (Originally from ..\FSComp.txt:1174) static member etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters() = (3044, GetStringFunc("etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters",",,,") ) /// Invalid static argument to provided type. Expected an argument of kind '%s'. - /// (Originally from ../FSComp.txt:1173) + /// (Originally from ..\FSComp.txt:1175) static member etInvalidStaticArgument(a0 : System.String) = (3045, GetStringFunc("etInvalidStaticArgument",",,,%s,,,") a0) /// An error occured applying the static arguments to a provided type - /// (Originally from ../FSComp.txt:1174) + /// (Originally from ..\FSComp.txt:1176) static member etErrorApplyingStaticArgumentsToType() = (3046, GetStringFunc("etErrorApplyingStaticArgumentsToType",",,,") ) /// Unknown static argument kind '%s' when resolving a reference to a provided type or method '%s' - /// (Originally from ../FSComp.txt:1175) + /// (Originally from ..\FSComp.txt:1177) static member etUnknownStaticArgumentKind(a0 : System.String, a1 : System.String) = (3047, GetStringFunc("etUnknownStaticArgumentKind",",,,%s,,,%s,,,") a0 a1) /// invalid namespace for provided type - /// (Originally from ../FSComp.txt:1176) + /// (Originally from ..\FSComp.txt:1178) static member invalidNamespaceForProvidedType() = (GetStringFunc("invalidNamespaceForProvidedType",",,,") ) /// invalid full name for provided type - /// (Originally from ../FSComp.txt:1177) + /// (Originally from ..\FSComp.txt:1179) static member invalidFullNameForProvidedType() = (GetStringFunc("invalidFullNameForProvidedType",",,,") ) /// The type provider returned 'null', which is not a valid return value from '%s' - /// (Originally from ../FSComp.txt:1179) + /// (Originally from ..\FSComp.txt:1181) static member etProviderReturnedNull(a0 : System.String) = (3051, GetStringFunc("etProviderReturnedNull",",,,%s,,,") a0) /// The type provider constructor has thrown an exception: %s - /// (Originally from ../FSComp.txt:1180) + /// (Originally from ..\FSComp.txt:1182) static member etTypeProviderConstructorException(a0 : System.String) = (3053, GetStringFunc("etTypeProviderConstructorException",",,,%s,,,") a0) /// Type provider '%s' returned null from GetInvokerExpression. - /// (Originally from ../FSComp.txt:1181) + /// (Originally from ..\FSComp.txt:1183) static member etNullProvidedExpression(a0 : System.String) = (3056, GetStringFunc("etNullProvidedExpression",",,,%s,,,") a0) /// The type provider '%s' returned an invalid type from 'ApplyStaticArguments'. A type with name '%s' was expected, but a type with name '%s' was returned. - /// (Originally from ../FSComp.txt:1182) + /// (Originally from ..\FSComp.txt:1184) static member etProvidedAppliedTypeHadWrongName(a0 : System.String, a1 : System.String, a2 : System.String) = (3057, GetStringFunc("etProvidedAppliedTypeHadWrongName",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// The type provider '%s' returned an invalid method from 'ApplyStaticArgumentsForMethod'. A method with name '%s' was expected, but a method with name '%s' was returned. - /// (Originally from ../FSComp.txt:1183) + /// (Originally from ..\FSComp.txt:1185) static member etProvidedAppliedMethodHadWrongName(a0 : System.String, a1 : System.String, a2 : System.String) = (3058, GetStringFunc("etProvidedAppliedMethodHadWrongName",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// This type test or downcast will erase the provided type '%s' to the type '%s' - /// (Originally from ../FSComp.txt:1184) + /// (Originally from ..\FSComp.txt:1186) static member tcTypeTestLossy(a0 : System.String, a1 : System.String) = (3060, GetStringFunc("tcTypeTestLossy",",,,%s,,,%s,,,") a0 a1) /// This downcast will erase the provided type '%s' to the type '%s'. - /// (Originally from ../FSComp.txt:1185) + /// (Originally from ..\FSComp.txt:1187) static member tcTypeCastErased(a0 : System.String, a1 : System.String) = (3061, GetStringFunc("tcTypeCastErased",",,,%s,,,%s,,,") a0 a1) /// This type test with a provided type '%s' is not allowed because this provided type will be erased to '%s' at runtime. - /// (Originally from ../FSComp.txt:1186) + /// (Originally from ..\FSComp.txt:1188) static member tcTypeTestErased(a0 : System.String, a1 : System.String) = (3062, GetStringFunc("tcTypeTestErased",",,,%s,,,%s,,,") a0 a1) /// Cannot inherit from erased provided type - /// (Originally from ../FSComp.txt:1187) + /// (Originally from ..\FSComp.txt:1189) static member tcCannotInheritFromErasedType() = (3063, GetStringFunc("tcCannotInheritFromErasedType",",,,") ) /// Assembly '%s' hase TypeProviderAssembly attribute with invalid value '%s'. The value should be a valid assembly name - /// (Originally from ../FSComp.txt:1188) + /// (Originally from ..\FSComp.txt:1190) static member etInvalidTypeProviderAssemblyName(a0 : System.String, a1 : System.String) = (3065, GetStringFunc("etInvalidTypeProviderAssemblyName",",,,%s,,,%s,,,") a0 a1) /// Invalid member name. Members may not have name '.ctor' or '.cctor' - /// (Originally from ../FSComp.txt:1189) + /// (Originally from ..\FSComp.txt:1191) static member tcInvalidMemberNameCtor() = (3066, GetStringFunc("tcInvalidMemberNameCtor",",,,") ) /// The function or member '%s' is used in a way that requires further type annotations at its definition to ensure consistency of inferred types. The inferred signature is '%s'. - /// (Originally from ../FSComp.txt:1190) + /// (Originally from ..\FSComp.txt:1192) static member tcInferredGenericTypeGivesRiseToInconsistency(a0 : System.String, a1 : System.String) = (3068, GetStringFunc("tcInferredGenericTypeGivesRiseToInconsistency",",,,%s,,,%s,,,") a0 a1) /// The number of type arguments did not match: '%d' given, '%d' expected. This may be related to a previously reported error. - /// (Originally from ../FSComp.txt:1191) + /// (Originally from ..\FSComp.txt:1193) static member tcInvalidTypeArgumentCount(a0 : System.Int32, a1 : System.Int32) = (3069, GetStringFunc("tcInvalidTypeArgumentCount",",,,%d,,,%d,,,") a0 a1) /// Cannot override inherited member '%s' because it is sealed - /// (Originally from ../FSComp.txt:1192) + /// (Originally from ..\FSComp.txt:1194) static member tcCannotOverrideSealedMethod(a0 : System.String) = (3070, GetStringFunc("tcCannotOverrideSealedMethod",",,,%s,,,") a0) /// The type provider '%s' reported an error in the context of provided type '%s', member '%s'. The error: %s - /// (Originally from ../FSComp.txt:1193) + /// (Originally from ..\FSComp.txt:1195) static member etProviderErrorWithContext(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3071, GetStringFunc("etProviderErrorWithContext",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// An exception occurred when accessing the '%s' of a provided type: %s - /// (Originally from ../FSComp.txt:1194) + /// (Originally from ..\FSComp.txt:1196) static member etProvidedTypeWithNameException(a0 : System.String, a1 : System.String) = (3072, GetStringFunc("etProvidedTypeWithNameException",",,,%s,,,%s,,,") a0 a1) /// The '%s' of a provided type was null or empty. - /// (Originally from ../FSComp.txt:1195) + /// (Originally from ..\FSComp.txt:1197) static member etProvidedTypeWithNullOrEmptyName(a0 : System.String) = (3073, GetStringFunc("etProvidedTypeWithNullOrEmptyName",",,,%s,,,") a0) /// Character '%s' is not allowed in provided type name '%s' - /// (Originally from ../FSComp.txt:1196) + /// (Originally from ..\FSComp.txt:1198) static member etIllegalCharactersInTypeName(a0 : System.String, a1 : System.String) = (3075, GetStringFunc("etIllegalCharactersInTypeName",",,,%s,,,%s,,,") a0 a1) /// In queries, '%s' must use a simple pattern - /// (Originally from ../FSComp.txt:1197) + /// (Originally from ..\FSComp.txt:1199) static member tcJoinMustUseSimplePattern(a0 : System.String) = (3077, GetStringFunc("tcJoinMustUseSimplePattern",",,,%s,,,") a0) /// A custom query operation for '%s' is required but not specified - /// (Originally from ../FSComp.txt:1198) + /// (Originally from ..\FSComp.txt:1200) static member tcMissingCustomOperation(a0 : System.String) = (3078, GetStringFunc("tcMissingCustomOperation",",,,%s,,,") a0) /// Named static arguments must come after all unnamed static arguments - /// (Originally from ../FSComp.txt:1199) + /// (Originally from ..\FSComp.txt:1201) static member etBadUnnamedStaticArgs() = (3080, GetStringFunc("etBadUnnamedStaticArgs",",,,") ) /// The static parameter '%s' of the provided type or method '%s' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '%s<%s=...>'. - /// (Originally from ../FSComp.txt:1200) + /// (Originally from ..\FSComp.txt:1202) static member etStaticParameterRequiresAValue(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3081, GetStringFunc("etStaticParameterRequiresAValue",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// No static parameter exists with name '%s' - /// (Originally from ../FSComp.txt:1201) + /// (Originally from ..\FSComp.txt:1203) static member etNoStaticParameterWithName(a0 : System.String) = (3082, GetStringFunc("etNoStaticParameterWithName",",,,%s,,,") a0) /// The static parameter '%s' has already been given a value - /// (Originally from ../FSComp.txt:1202) + /// (Originally from ..\FSComp.txt:1204) static member etStaticParameterAlreadyHasValue(a0 : System.String) = (3083, GetStringFunc("etStaticParameterAlreadyHasValue",",,,%s,,,") a0) /// Multiple static parameters exist with name '%s' - /// (Originally from ../FSComp.txt:1203) + /// (Originally from ..\FSComp.txt:1205) static member etMultipleStaticParameterWithName(a0 : System.String) = (3084, GetStringFunc("etMultipleStaticParameterWithName",",,,%s,,,") a0) /// A custom operation may not be used in conjunction with a non-value or recursive 'let' binding in another part of this computation expression - /// (Originally from ../FSComp.txt:1204) + /// (Originally from ..\FSComp.txt:1206) static member tcCustomOperationMayNotBeUsedInConjunctionWithNonSimpleLetBindings() = (3085, GetStringFunc("tcCustomOperationMayNotBeUsedInConjunctionWithNonSimpleLetBindings",",,,") ) /// A custom operation may not be used in conjunction with 'use', 'try/with', 'try/finally', 'if/then/else' or 'match' operators within this computation expression - /// (Originally from ../FSComp.txt:1205) + /// (Originally from ..\FSComp.txt:1207) static member tcCustomOperationMayNotBeUsedHere() = (3086, GetStringFunc("tcCustomOperationMayNotBeUsedHere",",,,") ) /// The custom operation '%s' refers to a method which is overloaded. The implementations of custom operations may not be overloaded. - /// (Originally from ../FSComp.txt:1206) + /// (Originally from ..\FSComp.txt:1208) static member tcCustomOperationMayNotBeOverloaded(a0 : System.String) = (3087, GetStringFunc("tcCustomOperationMayNotBeOverloaded",",,,%s,,,") a0) /// An if/then/else expression may not be used within queries. Consider using either an if/then expression, or use a sequence expression instead. - /// (Originally from ../FSComp.txt:1207) + /// (Originally from ..\FSComp.txt:1209) static member tcIfThenElseMayNotBeUsedWithinQueries() = (3090, GetStringFunc("tcIfThenElseMayNotBeUsedWithinQueries",",,,") ) /// Invalid argument to 'methodhandleof' during codegen - /// (Originally from ../FSComp.txt:1208) + /// (Originally from ..\FSComp.txt:1210) static member ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen() = (3091, GetStringFunc("ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen",",,,") ) /// A reference to a provided type was missing a value for the static parameter '%s'. You may need to recompile one or more referenced assemblies. - /// (Originally from ../FSComp.txt:1209) + /// (Originally from ..\FSComp.txt:1211) static member etProvidedTypeReferenceMissingArgument(a0 : System.String) = (3092, GetStringFunc("etProvidedTypeReferenceMissingArgument",",,,%s,,,") a0) /// A reference to a provided type had an invalid value '%s' for a static parameter. You may need to recompile one or more referenced assemblies. - /// (Originally from ../FSComp.txt:1210) + /// (Originally from ..\FSComp.txt:1212) static member etProvidedTypeReferenceInvalidText(a0 : System.String) = (3093, GetStringFunc("etProvidedTypeReferenceInvalidText",",,,%s,,,") a0) /// '%s' is not used correctly. This is a custom operation in this query or computation expression. - /// (Originally from ../FSComp.txt:1211) + /// (Originally from ..\FSComp.txt:1213) static member tcCustomOperationNotUsedCorrectly(a0 : System.String) = (3095, GetStringFunc("tcCustomOperationNotUsedCorrectly",",,,%s,,,") a0) /// '%s' is not used correctly. Usage: %s. This is a custom operation in this query or computation expression. - /// (Originally from ../FSComp.txt:1212) + /// (Originally from ..\FSComp.txt:1214) static member tcCustomOperationNotUsedCorrectly2(a0 : System.String, a1 : System.String) = (3095, GetStringFunc("tcCustomOperationNotUsedCorrectly2",",,,%s,,,%s,,,") a0 a1) /// %s var in collection %s (outerKey = innerKey). Note that parentheses are required after '%s' - /// (Originally from ../FSComp.txt:1213) + /// (Originally from ..\FSComp.txt:1215) static member customOperationTextLikeJoin(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("customOperationTextLikeJoin",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s var in collection %s (outerKey = innerKey) into group. Note that parentheses are required after '%s' - /// (Originally from ../FSComp.txt:1214) + /// (Originally from ..\FSComp.txt:1216) static member customOperationTextLikeGroupJoin(a0 : System.String, a1 : System.String, a2 : System.String) = (GetStringFunc("customOperationTextLikeGroupJoin",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s var in collection - /// (Originally from ../FSComp.txt:1215) + /// (Originally from ..\FSComp.txt:1217) static member customOperationTextLikeZip(a0 : System.String) = (GetStringFunc("customOperationTextLikeZip",",,,%s,,,") a0) /// '%s' must be followed by a variable name. Usage: %s. - /// (Originally from ../FSComp.txt:1216) + /// (Originally from ..\FSComp.txt:1218) static member tcBinaryOperatorRequiresVariable(a0 : System.String, a1 : System.String) = (3096, GetStringFunc("tcBinaryOperatorRequiresVariable",",,,%s,,,%s,,,") a0 a1) /// Incorrect syntax for '%s'. Usage: %s. - /// (Originally from ../FSComp.txt:1217) + /// (Originally from ..\FSComp.txt:1219) static member tcOperatorIncorrectSyntax(a0 : System.String, a1 : System.String) = (3097, GetStringFunc("tcOperatorIncorrectSyntax",",,,%s,,,%s,,,") a0 a1) /// '%s' must come after a 'for' selection clause and be followed by the rest of the query. Syntax: ... %s ... - /// (Originally from ../FSComp.txt:1218) + /// (Originally from ..\FSComp.txt:1220) static member tcBinaryOperatorRequiresBody(a0 : System.String, a1 : System.String) = (3098, GetStringFunc("tcBinaryOperatorRequiresBody",",,,%s,,,%s,,,") a0 a1) /// '%s' is used with an incorrect number of arguments. This is a custom operation in this query or computation expression. Expected %d argument(s), but given %d. - /// (Originally from ../FSComp.txt:1219) + /// (Originally from ..\FSComp.txt:1221) static member tcCustomOperationHasIncorrectArgCount(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3099, GetStringFunc("tcCustomOperationHasIncorrectArgCount",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Expected an expression after this point - /// (Originally from ../FSComp.txt:1220) + /// (Originally from ..\FSComp.txt:1222) static member parsExpectedExpressionAfterToken() = (3100, GetStringFunc("parsExpectedExpressionAfterToken",",,,") ) /// Expected a type after this point - /// (Originally from ../FSComp.txt:1221) + /// (Originally from ..\FSComp.txt:1223) static member parsExpectedTypeAfterToken() = (3101, GetStringFunc("parsExpectedTypeAfterToken",",,,") ) /// Unmatched '[<'. Expected closing '>]' - /// (Originally from ../FSComp.txt:1222) + /// (Originally from ..\FSComp.txt:1224) static member parsUnmatchedLBrackLess() = (3102, GetStringFunc("parsUnmatchedLBrackLess",",,,") ) /// Unexpected end of input in 'match' expression. Expected 'match with | -> | -> ...'. - /// (Originally from ../FSComp.txt:1223) + /// (Originally from ..\FSComp.txt:1225) static member parsUnexpectedEndOfFileMatch() = (3103, GetStringFunc("parsUnexpectedEndOfFileMatch",",,,") ) /// Unexpected end of input in 'try' expression. Expected 'try with ' or 'try finally '. - /// (Originally from ../FSComp.txt:1224) + /// (Originally from ..\FSComp.txt:1226) static member parsUnexpectedEndOfFileTry() = (3104, GetStringFunc("parsUnexpectedEndOfFileTry",",,,") ) /// Unexpected end of input in 'while' expression. Expected 'while do '. - /// (Originally from ../FSComp.txt:1225) + /// (Originally from ..\FSComp.txt:1227) static member parsUnexpectedEndOfFileWhile() = (3105, GetStringFunc("parsUnexpectedEndOfFileWhile",",,,") ) /// Unexpected end of input in 'for' expression. Expected 'for in do '. - /// (Originally from ../FSComp.txt:1226) + /// (Originally from ..\FSComp.txt:1228) static member parsUnexpectedEndOfFileFor() = (3106, GetStringFunc("parsUnexpectedEndOfFileFor",",,,") ) /// Unexpected end of input in 'match' or 'try' expression - /// (Originally from ../FSComp.txt:1227) + /// (Originally from ..\FSComp.txt:1229) static member parsUnexpectedEndOfFileWith() = (3107, GetStringFunc("parsUnexpectedEndOfFileWith",",,,") ) /// Unexpected end of input in 'then' branch of conditional expression. Expected 'if then ' or 'if then else '. - /// (Originally from ../FSComp.txt:1228) + /// (Originally from ..\FSComp.txt:1230) static member parsUnexpectedEndOfFileThen() = (3108, GetStringFunc("parsUnexpectedEndOfFileThen",",,,") ) /// Unexpected end of input in 'else' branch of conditional expression. Expected 'if then ' or 'if then else '. - /// (Originally from ../FSComp.txt:1229) + /// (Originally from ..\FSComp.txt:1231) static member parsUnexpectedEndOfFileElse() = (3109, GetStringFunc("parsUnexpectedEndOfFileElse",",,,") ) /// Unexpected end of input in body of lambda expression. Expected 'fun ... -> '. - /// (Originally from ../FSComp.txt:1230) + /// (Originally from ..\FSComp.txt:1232) static member parsUnexpectedEndOfFileFunBody() = (3110, GetStringFunc("parsUnexpectedEndOfFileFunBody",",,,") ) /// Unexpected end of input in type arguments - /// (Originally from ../FSComp.txt:1231) + /// (Originally from ..\FSComp.txt:1233) static member parsUnexpectedEndOfFileTypeArgs() = (3111, GetStringFunc("parsUnexpectedEndOfFileTypeArgs",",,,") ) /// Unexpected end of input in type signature - /// (Originally from ../FSComp.txt:1232) + /// (Originally from ..\FSComp.txt:1234) static member parsUnexpectedEndOfFileTypeSignature() = (3112, GetStringFunc("parsUnexpectedEndOfFileTypeSignature",",,,") ) /// Unexpected end of input in type definition - /// (Originally from ../FSComp.txt:1233) + /// (Originally from ..\FSComp.txt:1235) static member parsUnexpectedEndOfFileTypeDefinition() = (3113, GetStringFunc("parsUnexpectedEndOfFileTypeDefinition",",,,") ) /// Unexpected end of input in object members - /// (Originally from ../FSComp.txt:1234) + /// (Originally from ..\FSComp.txt:1236) static member parsUnexpectedEndOfFileObjectMembers() = (3114, GetStringFunc("parsUnexpectedEndOfFileObjectMembers",",,,") ) /// Unexpected end of input in value, function or member definition - /// (Originally from ../FSComp.txt:1235) + /// (Originally from ..\FSComp.txt:1237) static member parsUnexpectedEndOfFileDefinition() = (3115, GetStringFunc("parsUnexpectedEndOfFileDefinition",",,,") ) /// Unexpected end of input in expression - /// (Originally from ../FSComp.txt:1236) + /// (Originally from ..\FSComp.txt:1238) static member parsUnexpectedEndOfFileExpression() = (3116, GetStringFunc("parsUnexpectedEndOfFileExpression",",,,") ) /// Unexpected end of type. Expected a name after this point. - /// (Originally from ../FSComp.txt:1237) + /// (Originally from ..\FSComp.txt:1239) static member parsExpectedNameAfterToken() = (3117, GetStringFunc("parsExpectedNameAfterToken",",,,") ) /// Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. - /// (Originally from ../FSComp.txt:1238) + /// (Originally from ..\FSComp.txt:1240) static member parsUnmatchedLet() = (3118, GetStringFunc("parsUnmatchedLet",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let!' keyword. - /// (Originally from ../FSComp.txt:1239) + /// (Originally from ..\FSComp.txt:1241) static member parsUnmatchedLetBang() = (3119, GetStringFunc("parsUnmatchedLetBang",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use!' keyword. - /// (Originally from ../FSComp.txt:1240) + /// (Originally from ..\FSComp.txt:1242) static member parsUnmatchedUseBang() = (3120, GetStringFunc("parsUnmatchedUseBang",",,,") ) /// Incomplete value definition. If this is in an expression, the body of the expression must be indented to the same column as the 'use' keyword. - /// (Originally from ../FSComp.txt:1241) + /// (Originally from ..\FSComp.txt:1243) static member parsUnmatchedUse() = (3121, GetStringFunc("parsUnmatchedUse",",,,") ) /// Missing 'do' in 'while' expression. Expected 'while do '. - /// (Originally from ../FSComp.txt:1242) + /// (Originally from ..\FSComp.txt:1244) static member parsWhileDoExpected() = (3122, GetStringFunc("parsWhileDoExpected",",,,") ) /// Missing 'do' in 'for' expression. Expected 'for in do '. - /// (Originally from ../FSComp.txt:1243) + /// (Originally from ..\FSComp.txt:1245) static member parsForDoExpected() = (3123, GetStringFunc("parsForDoExpected",",,,") ) /// Invalid join relation in '%s'. Expected 'expr expr', where is =, =?, ?= or ?=?. - /// (Originally from ../FSComp.txt:1244) + /// (Originally from ..\FSComp.txt:1246) static member tcInvalidRelationInJoin(a0 : System.String) = (3125, GetStringFunc("tcInvalidRelationInJoin",",,,%s,,,") a0) /// Calls - /// (Originally from ../FSComp.txt:1245) + /// (Originally from ..\FSComp.txt:1247) static member typeInfoCallsWord() = (GetStringFunc("typeInfoCallsWord",",,,") ) /// Invalid number of generic arguments to type '%s' in provided type. Expected '%d' arguments, given '%d'. - /// (Originally from ../FSComp.txt:1246) + /// (Originally from ..\FSComp.txt:1248) static member impInvalidNumberOfGenericArguments(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3126, GetStringFunc("impInvalidNumberOfGenericArguments",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Invalid value '%s' for unit-of-measure parameter '%s' - /// (Originally from ../FSComp.txt:1247) + /// (Originally from ..\FSComp.txt:1249) static member impInvalidMeasureArgument1(a0 : System.String, a1 : System.String) = (3127, GetStringFunc("impInvalidMeasureArgument1",",,,%s,,,%s,,,") a0 a1) /// Invalid value unit-of-measure parameter '%s' - /// (Originally from ../FSComp.txt:1248) + /// (Originally from ..\FSComp.txt:1250) static member impInvalidMeasureArgument2(a0 : System.String) = (3127, GetStringFunc("impInvalidMeasureArgument2",",,,%s,,,") a0) /// Property '%s' on provided type '%s' is neither readable nor writable as it has CanRead=false and CanWrite=false - /// (Originally from ../FSComp.txt:1249) + /// (Originally from ..\FSComp.txt:1251) static member etPropertyNeedsCanWriteOrCanRead(a0 : System.String, a1 : System.String) = (3128, GetStringFunc("etPropertyNeedsCanWriteOrCanRead",",,,%s,,,%s,,,") a0 a1) /// A use of 'into' must be followed by the remainder of the computation - /// (Originally from ../FSComp.txt:1250) + /// (Originally from ..\FSComp.txt:1252) static member tcIntoNeedsRestOfQuery() = (3129, GetStringFunc("tcIntoNeedsRestOfQuery",",,,") ) /// The operator '%s' does not accept the use of 'into' - /// (Originally from ../FSComp.txt:1251) + /// (Originally from ..\FSComp.txt:1253) static member tcOperatorDoesntAcceptInto(a0 : System.String) = (3130, GetStringFunc("tcOperatorDoesntAcceptInto",",,,%s,,,") a0) /// The definition of the custom operator '%s' does not use a valid combination of attribute flags - /// (Originally from ../FSComp.txt:1252) + /// (Originally from ..\FSComp.txt:1254) static member tcCustomOperationInvalid(a0 : System.String) = (3131, GetStringFunc("tcCustomOperationInvalid",",,,%s,,,") a0) /// This type definition may not have the 'CLIMutable' attribute. Only record types may have this attribute. - /// (Originally from ../FSComp.txt:1253) + /// (Originally from ..\FSComp.txt:1255) static member tcThisTypeMayNotHaveACLIMutableAttribute() = (3132, GetStringFunc("tcThisTypeMayNotHaveACLIMutableAttribute",",,,") ) /// 'member val' definitions are only permitted in types with a primary constructor. Consider adding arguments to your type definition, e.g. 'type X(args) = ...'. - /// (Originally from ../FSComp.txt:1254) + /// (Originally from ..\FSComp.txt:1256) static member tcAutoPropertyRequiresImplicitConstructionSequence() = (3133, GetStringFunc("tcAutoPropertyRequiresImplicitConstructionSequence",",,,") ) /// Property definitions may not be declared mutable. To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - /// (Originally from ../FSComp.txt:1255) + /// (Originally from ..\FSComp.txt:1257) static member parsMutableOnAutoPropertyShouldBeGetSet() = (3134, GetStringFunc("parsMutableOnAutoPropertyShouldBeGetSet",",,,") ) /// To indicate that this property can be set, use 'member val PropertyName = expr with get,set'. - /// (Originally from ../FSComp.txt:1256) + /// (Originally from ..\FSComp.txt:1258) static member parsMutableOnAutoPropertyShouldBeGetSetNotJustSet() = (3135, GetStringFunc("parsMutableOnAutoPropertyShouldBeGetSetNotJustSet",",,,") ) /// Type '%s' is illegal because in byref, T cannot contain byref types. - /// (Originally from ../FSComp.txt:1257) + /// (Originally from ..\FSComp.txt:1259) static member chkNoByrefsOfByrefs(a0 : System.String) = (3136, GetStringFunc("chkNoByrefsOfByrefs",",,,%s,,,") a0) /// F# supports array ranks between 1 and 32. The value %d is not allowed. - /// (Originally from ../FSComp.txt:1258) + /// (Originally from ..\FSComp.txt:1260) static member tastopsMaxArrayThirtyTwo(a0 : System.Int32) = (3138, GetStringFunc("tastopsMaxArrayThirtyTwo",",,,%d,,,") a0) /// In queries, use the form 'for x in n .. m do ...' for ranging over integers - /// (Originally from ../FSComp.txt:1259) + /// (Originally from ..\FSComp.txt:1261) static member tcNoIntegerForLoopInQuery() = (3139, GetStringFunc("tcNoIntegerForLoopInQuery",",,,") ) /// 'while' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1260) + /// (Originally from ..\FSComp.txt:1262) static member tcNoWhileInQuery() = (3140, GetStringFunc("tcNoWhileInQuery",",,,") ) /// 'try/finally' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1261) + /// (Originally from ..\FSComp.txt:1263) static member tcNoTryFinallyInQuery() = (3141, GetStringFunc("tcNoTryFinallyInQuery",",,,") ) /// 'use' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1262) + /// (Originally from ..\FSComp.txt:1264) static member tcUseMayNotBeUsedInQueries() = (3142, GetStringFunc("tcUseMayNotBeUsedInQueries",",,,") ) /// 'let!', 'use!' and 'do!' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1263) + /// (Originally from ..\FSComp.txt:1265) static member tcBindMayNotBeUsedInQueries() = (3143, GetStringFunc("tcBindMayNotBeUsedInQueries",",,,") ) /// 'return' and 'return!' may not be used in queries - /// (Originally from ../FSComp.txt:1264) + /// (Originally from ..\FSComp.txt:1266) static member tcReturnMayNotBeUsedInQueries() = (3144, GetStringFunc("tcReturnMayNotBeUsedInQueries",",,,") ) /// This is not a known query operator. Query operators are identifiers such as 'select', 'where', 'sortBy', 'thenBy', 'groupBy', 'groupValBy', 'join', 'groupJoin', 'sumBy' and 'averageBy', defined using corresponding methods on the 'QueryBuilder' type. - /// (Originally from ../FSComp.txt:1265) + /// (Originally from ..\FSComp.txt:1267) static member tcUnrecognizedQueryOperator() = (3145, GetStringFunc("tcUnrecognizedQueryOperator",",,,") ) /// 'try/with' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1266) + /// (Originally from ..\FSComp.txt:1268) static member tcTryWithMayNotBeUsedInQueries() = (3146, GetStringFunc("tcTryWithMayNotBeUsedInQueries",",,,") ) /// This 'let' definition may not be used in a query. Only simple value definitions may be used in queries. - /// (Originally from ../FSComp.txt:1267) + /// (Originally from ..\FSComp.txt:1269) static member tcNonSimpleLetBindingInQuery() = (3147, GetStringFunc("tcNonSimpleLetBindingInQuery",",,,") ) /// Too many static parameters. Expected at most %d parameters, but got %d unnamed and %d named parameters. - /// (Originally from ../FSComp.txt:1268) + /// (Originally from ..\FSComp.txt:1270) static member etTooManyStaticParameters(a0 : System.Int32, a1 : System.Int32, a2 : System.Int32) = (3148, GetStringFunc("etTooManyStaticParameters",",,,%d,,,%d,,,%d,,,") a0 a1 a2) /// Invalid provided literal value '%s' - /// (Originally from ../FSComp.txt:1269) + /// (Originally from ..\FSComp.txt:1271) static member infosInvalidProvidedLiteralValue(a0 : System.String) = (3149, GetStringFunc("infosInvalidProvidedLiteralValue",",,,%s,,,") a0) /// The 'anycpu32bitpreferred' platform can only be used with EXE targets. You must use 'anycpu' instead. - /// (Originally from ../FSComp.txt:1270) + /// (Originally from ..\FSComp.txt:1272) static member invalidPlatformTarget() = (3150, GetStringFunc("invalidPlatformTarget",",,,") ) /// This member, function or value declaration may not be declared 'inline' - /// (Originally from ../FSComp.txt:1271) + /// (Originally from ..\FSComp.txt:1273) static member tcThisValueMayNotBeInlined() = (3151, GetStringFunc("tcThisValueMayNotBeInlined",",,,") ) /// The provider '%s' returned a non-generated type '%s' in the context of a set of generated types. Consider adjusting the type provider to only return generated types. - /// (Originally from ../FSComp.txt:1272) + /// (Originally from ..\FSComp.txt:1274) static member etErasedTypeUsedInGeneration(a0 : System.String, a1 : System.String) = (3152, GetStringFunc("etErasedTypeUsedInGeneration",",,,%s,,,%s,,,") a0 a1) /// Arguments to query operators may require parentheses, e.g. 'where (x > y)' or 'groupBy (x.Length / 10)' - /// (Originally from ../FSComp.txt:1273) + /// (Originally from ..\FSComp.txt:1275) static member tcUnrecognizedQueryBinaryOperator() = (3153, GetStringFunc("tcUnrecognizedQueryBinaryOperator",",,,") ) /// A quotation may not involve an assignment to or taking the address of a captured local variable - /// (Originally from ../FSComp.txt:1274) + /// (Originally from ..\FSComp.txt:1276) static member crefNoSetOfHole() = (3155, GetStringFunc("crefNoSetOfHole",",,,") ) /// + 1 overload - /// (Originally from ../FSComp.txt:1275) + /// (Originally from ..\FSComp.txt:1277) static member nicePrintOtherOverloads1() = (GetStringFunc("nicePrintOtherOverloads1",",,,") ) /// + %d overloads - /// (Originally from ../FSComp.txt:1276) + /// (Originally from ..\FSComp.txt:1278) static member nicePrintOtherOverloadsN(a0 : System.Int32) = (GetStringFunc("nicePrintOtherOverloadsN",",,,%d,,,") a0) /// Erased to - /// (Originally from ../FSComp.txt:1277) + /// (Originally from ..\FSComp.txt:1279) static member erasedTo() = (GetStringFunc("erasedTo",",,,") ) /// Unexpected token '%s' or incomplete expression - /// (Originally from ../FSComp.txt:1278) + /// (Originally from ..\FSComp.txt:1280) static member parsUnfinishedExpression(a0 : System.String) = (3156, GetStringFunc("parsUnfinishedExpression",",,,%s,,,") a0) /// Cannot find code target for this attribute, possibly because the code after the attribute is incomplete. - /// (Originally from ../FSComp.txt:1279) + /// (Originally from ..\FSComp.txt:1281) static member parsAttributeOnIncompleteCode() = (3158, GetStringFunc("parsAttributeOnIncompleteCode",",,,") ) /// Type name cannot be empty. - /// (Originally from ../FSComp.txt:1280) + /// (Originally from ..\FSComp.txt:1282) static member parsTypeNameCannotBeEmpty() = (3159, GetStringFunc("parsTypeNameCannotBeEmpty",",,,") ) /// Problem reading assembly '%s': %s - /// (Originally from ../FSComp.txt:1281) + /// (Originally from ..\FSComp.txt:1283) static member buildProblemReadingAssembly(a0 : System.String, a1 : System.String) = (3160, GetStringFunc("buildProblemReadingAssembly",",,,%s,,,%s,,,") a0 a1) /// Invalid provided field. Provided fields of erased provided types must be literals. - /// (Originally from ../FSComp.txt:1282) + /// (Originally from ..\FSComp.txt:1284) static member tcTPFieldMustBeLiteral() = (3161, GetStringFunc("tcTPFieldMustBeLiteral",",,,") ) /// (loading description...) - /// (Originally from ../FSComp.txt:1283) + /// (Originally from ..\FSComp.txt:1285) static member loadingDescription() = (GetStringFunc("loadingDescription",",,,") ) /// (description unavailable...) - /// (Originally from ../FSComp.txt:1284) + /// (Originally from ..\FSComp.txt:1286) static member descriptionUnavailable() = (GetStringFunc("descriptionUnavailable",",,,") ) /// A type variable has been constrained by multiple different class types. A type variable may only have one class constraint. - /// (Originally from ../FSComp.txt:1285) + /// (Originally from ..\FSComp.txt:1287) static member chkTyparMultipleClassConstraints() = (3162, GetStringFunc("chkTyparMultipleClassConstraints",",,,") ) /// 'match' expressions may not be used in queries - /// (Originally from ../FSComp.txt:1286) + /// (Originally from ..\FSComp.txt:1288) static member tcMatchMayNotBeUsedWithQuery() = (3163, GetStringFunc("tcMatchMayNotBeUsedWithQuery",",,,") ) /// Infix operator member '%s' has %d initial argument(s). Expected a tuple of 3 arguments - /// (Originally from ../FSComp.txt:1287) + /// (Originally from ..\FSComp.txt:1289) static member memberOperatorDefinitionWithNonTripleArgument(a0 : System.String, a1 : System.Int32) = (3164, GetStringFunc("memberOperatorDefinitionWithNonTripleArgument",",,,%s,,,%d,,,") a0 a1) /// The operator '%s' cannot be resolved. Consider opening the module 'Microsoft.FSharp.Linq.NullableOperators'. - /// (Originally from ../FSComp.txt:1288) + /// (Originally from ..\FSComp.txt:1290) static member cannotResolveNullableOperators(a0 : System.String) = (3165, GetStringFunc("cannotResolveNullableOperators",",,,%s,,,") a0) /// '%s' must be followed by 'in'. Usage: %s. - /// (Originally from ../FSComp.txt:1289) + /// (Originally from ..\FSComp.txt:1291) static member tcOperatorRequiresIn(a0 : System.String, a1 : System.String) = (3167, GetStringFunc("tcOperatorRequiresIn",",,,%s,,,%s,,,") a0 a1) /// Neither 'member val' nor 'override val' definitions are permitted in object expressions. - /// (Originally from ../FSComp.txt:1290) + /// (Originally from ..\FSComp.txt:1292) static member parsIllegalMemberVarInObjectImplementation() = (3168, GetStringFunc("parsIllegalMemberVarInObjectImplementation",",,,") ) /// Copy-and-update record expressions must include at least one field. - /// (Originally from ../FSComp.txt:1291) + /// (Originally from ..\FSComp.txt:1293) static member tcEmptyCopyAndUpdateRecordInvalid() = (3169, GetStringFunc("tcEmptyCopyAndUpdateRecordInvalid",",,,") ) /// '_' cannot be used as field name - /// (Originally from ../FSComp.txt:1292) + /// (Originally from ..\FSComp.txt:1294) static member parsUnderscoreInvalidFieldName() = (3170, GetStringFunc("parsUnderscoreInvalidFieldName",",,,") ) /// The provided types generated by this use of a type provider may not be used from other F# assemblies and should be marked internal or private. Consider using 'type internal TypeName = ...' or 'type private TypeName = ...'. - /// (Originally from ../FSComp.txt:1293) + /// (Originally from ..\FSComp.txt:1295) static member tcGeneratedTypesShouldBeInternalOrPrivate() = (3171, GetStringFunc("tcGeneratedTypesShouldBeInternalOrPrivate",",,,") ) /// A property's getter and setter must have the same type. Property '%s' has getter of type '%s' but setter of type '%s'. - /// (Originally from ../FSComp.txt:1294) + /// (Originally from ..\FSComp.txt:1296) static member chkGetterAndSetterHaveSamePropertyType(a0 : System.String, a1 : System.String, a2 : System.String) = (3172, GetStringFunc("chkGetterAndSetterHaveSamePropertyType",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// Array method '%s' is supplied by the runtime and cannot be directly used in code. For operations with array elements consider using family of GetArray/SetArray functions from LanguagePrimitives.IntrinsicFunctions module. - /// (Originally from ../FSComp.txt:1295) + /// (Originally from ..\FSComp.txt:1297) static member tcRuntimeSuppliedMethodCannotBeUsedInUserCode(a0 : System.String) = (3173, GetStringFunc("tcRuntimeSuppliedMethodCannotBeUsedInUserCode",",,,%s,,,") a0) /// Union case/exception '%s' does not have field named '%s'. - /// (Originally from ../FSComp.txt:1296) + /// (Originally from ..\FSComp.txt:1298) static member tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(a0 : System.String, a1 : System.String) = (3174, GetStringFunc("tcUnionCaseConstructorDoesNotHaveFieldWithGivenName",",,,%s,,,%s,,,") a0 a1) /// Union case/exception field '%s' cannot be used more than once. - /// (Originally from ../FSComp.txt:1297) + /// (Originally from ..\FSComp.txt:1299) static member tcUnionCaseFieldCannotBeUsedMoreThanOnce(a0 : System.String) = (3175, GetStringFunc("tcUnionCaseFieldCannotBeUsedMoreThanOnce",",,,%s,,,") a0) /// Named field '%s' is used more than once. - /// (Originally from ../FSComp.txt:1298) + /// (Originally from ..\FSComp.txt:1300) static member tcFieldNameIsUsedModeThanOnce(a0 : System.String) = (3176, GetStringFunc("tcFieldNameIsUsedModeThanOnce",",,,%s,,,") a0) /// Named field '%s' conflicts with autogenerated name for anonymous field. - /// (Originally from ../FSComp.txt:1299) + /// (Originally from ..\FSComp.txt:1301) static member tcFieldNameConflictsWithGeneratedNameForAnonymousField(a0 : System.String) = (3176, GetStringFunc("tcFieldNameConflictsWithGeneratedNameForAnonymousField",",,,%s,,,") a0) /// This literal expression or attribute argument results in an arithmetic overflow. - /// (Originally from ../FSComp.txt:1300) + /// (Originally from ..\FSComp.txt:1302) static member tastConstantExpressionOverflow() = (3177, GetStringFunc("tastConstantExpressionOverflow",",,,") ) /// This is not valid literal expression. The [] attribute will be ignored. - /// (Originally from ../FSComp.txt:1301) + /// (Originally from ..\FSComp.txt:1303) static member tcIllegalStructTypeForConstantExpression() = (3178, GetStringFunc("tcIllegalStructTypeForConstantExpression",",,,") ) /// System.Runtime.InteropServices assembly is required to use UnknownWrapper\DispatchWrapper classes. - /// (Originally from ../FSComp.txt:1302) + /// (Originally from ..\FSComp.txt:1304) static member fscSystemRuntimeInteropServicesIsRequired() = (3179, GetStringFunc("fscSystemRuntimeInteropServicesIsRequired",",,,") ) /// The mutable local '%s' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed. - /// (Originally from ../FSComp.txt:1303) + /// (Originally from ..\FSComp.txt:1305) static member abImplicitHeapAllocation(a0 : System.String) = (3180, GetStringFunc("abImplicitHeapAllocation",",,,%s,,,") a0) /// A type provider implemented GetStaticParametersForMethod, but ApplyStaticArgumentsForMethod was not implemented or invalid - /// (Originally from ../FSComp.txt:1304) + /// (Originally from ..\FSComp.txt:1306) static member estApplyStaticArgumentsForMethodNotImplemented() = (GetStringFunc("estApplyStaticArgumentsForMethodNotImplemented",",,,") ) /// An error occured applying the static arguments to a provided method - /// (Originally from ../FSComp.txt:1305) + /// (Originally from ..\FSComp.txt:1307) static member etErrorApplyingStaticArgumentsToMethod() = (3181, GetStringFunc("etErrorApplyingStaticArgumentsToMethod",",,,") ) /// Unexpected character '%s' in preprocessor expression - /// (Originally from ../FSComp.txt:1306) + /// (Originally from ..\FSComp.txt:1308) static member pplexUnexpectedChar(a0 : System.String) = (3182, GetStringFunc("pplexUnexpectedChar",",,,%s,,,") a0) /// Unexpected token '%s' in preprocessor expression - /// (Originally from ../FSComp.txt:1307) + /// (Originally from ..\FSComp.txt:1309) static member ppparsUnexpectedToken(a0 : System.String) = (3183, GetStringFunc("ppparsUnexpectedToken",",,,%s,,,") a0) /// Incomplete preprocessor expression - /// (Originally from ../FSComp.txt:1308) + /// (Originally from ..\FSComp.txt:1310) static member ppparsIncompleteExpression() = (3184, GetStringFunc("ppparsIncompleteExpression",",,,") ) /// Missing token '%s' in preprocessor expression - /// (Originally from ../FSComp.txt:1309) + /// (Originally from ..\FSComp.txt:1311) static member ppparsMissingToken(a0 : System.String) = (3185, GetStringFunc("ppparsMissingToken",",,,%s,,,") a0) /// An error occurred while reading the F# metadata node at position %d in table '%s' of assembly '%s'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using. - /// (Originally from ../FSComp.txt:1310) + /// (Originally from ..\FSComp.txt:1312) static member pickleMissingDefinition(a0 : System.Int32, a1 : System.String, a2 : System.String) = (3186, GetStringFunc("pickleMissingDefinition",",,,%d,,,%s,,,%s,,,") a0 a1 a2) /// Type inference caused the type variable %s to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic. - /// (Originally from ../FSComp.txt:1311) + /// (Originally from ..\FSComp.txt:1313) static member checkNotSufficientlyGenericBecauseOfScope(a0 : System.String) = (3187, GetStringFunc("checkNotSufficientlyGenericBecauseOfScope",",,,%s,,,") a0) /// Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic. - /// (Originally from ../FSComp.txt:1312) + /// (Originally from ..\FSComp.txt:1314) static member checkNotSufficientlyGenericBecauseOfScopeAnon() = (3188, GetStringFunc("checkNotSufficientlyGenericBecauseOfScopeAnon",",,,") ) /// Redundant arguments are being ignored in function '%s'. Expected %d but got %d arguments. - /// (Originally from ../FSComp.txt:1313) + /// (Originally from ..\FSComp.txt:1315) static member checkRaiseFamilyFunctionArgumentCount(a0 : System.String, a1 : System.Int32, a2 : System.Int32) = (3189, GetStringFunc("checkRaiseFamilyFunctionArgumentCount",",,,%s,,,%d,,,%d,,,") a0 a1 a2) /// Lowercase literal '%s' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns. - /// (Originally from ../FSComp.txt:1314) + /// (Originally from ..\FSComp.txt:1316) static member checkLowercaseLiteralBindingInPattern(a0 : System.String) = (3190, GetStringFunc("checkLowercaseLiteralBindingInPattern",",,,%s,,,") a0) /// This literal pattern does not take arguments - /// (Originally from ../FSComp.txt:1315) + /// (Originally from ..\FSComp.txt:1317) static member tcLiteralDoesNotTakeArguments() = (3191, GetStringFunc("tcLiteralDoesNotTakeArguments",",,,") ) /// Constructors are not permitted as extension members - they must be defined as part of the original definition of the type - /// (Originally from ../FSComp.txt:1316) + /// (Originally from ..\FSComp.txt:1318) static member tcConstructorsIllegalInAugmentation() = (3192, GetStringFunc("tcConstructorsIllegalInAugmentation",",,,") ) /// Invalid response file '%s' ( '%s' ) - /// (Originally from ../FSComp.txt:1317) + /// (Originally from ..\FSComp.txt:1319) static member optsInvalidResponseFile(a0 : System.String, a1 : System.String) = (3193, GetStringFunc("optsInvalidResponseFile",",,,%s,,,%s,,,") a0 a1) /// Response file '%s' not found in '%s' - /// (Originally from ../FSComp.txt:1318) + /// (Originally from ..\FSComp.txt:1320) static member optsResponseFileNotFound(a0 : System.String, a1 : System.String) = (3194, GetStringFunc("optsResponseFileNotFound",",,,%s,,,%s,,,") a0 a1) /// Response file name '%s' is empty, contains invalid characters, has a drive specification without an absolute path, or is too long - /// (Originally from ../FSComp.txt:1319) + /// (Originally from ..\FSComp.txt:1321) static member optsResponseFileNameInvalid(a0 : System.String) = (3195, GetStringFunc("optsResponseFileNameInvalid",",,,%s,,,") a0) /// Cannot find FSharp.Core.dll in compiler's directory - /// (Originally from ../FSComp.txt:1320) + /// (Originally from ..\FSComp.txt:1322) static member fsharpCoreNotFoundToBeCopied() = (3196, GetStringFunc("fsharpCoreNotFoundToBeCopied",",,,") ) /// One tuple type is a struct tuple, the other is a reference tuple - /// (Originally from ../FSComp.txt:1321) + /// (Originally from ..\FSComp.txt:1323) static member tcTupleStructMismatch() = (GetStringFunc("tcTupleStructMismatch",",,,") ) /// This provided method requires static parameters - /// (Originally from ../FSComp.txt:1322) + /// (Originally from ..\FSComp.txt:1324) static member etMissingStaticArgumentsToMethod() = (3197, GetStringFunc("etMissingStaticArgumentsToMethod",",,,") ) /// The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using 'upcast' instead of 'downcast'. - /// (Originally from ../FSComp.txt:1323) + /// (Originally from ..\FSComp.txt:1325) static member considerUpcast(a0 : System.String, a1 : System.String) = (3198, GetStringFunc("considerUpcast",",,,%s,,,%s,,,") a0 a1) /// The conversion from %s to %s is a compile-time safe upcast, not a downcast. Consider using the :> (upcast) operator instead of the :?> (downcast) operator. - /// (Originally from ../FSComp.txt:1324) + /// (Originally from ..\FSComp.txt:1326) static member considerUpcastOperator(a0 : System.String, a1 : System.String) = (3198, GetStringFunc("considerUpcastOperator",",,,%s,,,%s,,,") a0 a1) /// The 'rec' on this module is implied by an outer 'rec' declaration and is being ignored - /// (Originally from ../FSComp.txt:1325) + /// (Originally from ..\FSComp.txt:1327) static member tcRecImplied() = (3199, GetStringFunc("tcRecImplied",",,,") ) /// In a recursive declaration group, 'open' declarations must come first in each module - /// (Originally from ../FSComp.txt:1326) + /// (Originally from ..\FSComp.txt:1328) static member tcOpenFirstInMutRec() = (3200, GetStringFunc("tcOpenFirstInMutRec",",,,") ) /// In a recursive declaration group, module abbreviations must come after all 'open' declarations and before other declarations - /// (Originally from ../FSComp.txt:1327) + /// (Originally from ..\FSComp.txt:1329) static member tcModuleAbbrevFirstInMutRec() = (3201, GetStringFunc("tcModuleAbbrevFirstInMutRec",",,,") ) /// This declaration is not supported in recursive declaration groups - /// (Originally from ../FSComp.txt:1328) + /// (Originally from ..\FSComp.txt:1330) static member tcUnsupportedMutRecDecl() = (3202, GetStringFunc("tcUnsupportedMutRecDecl",",,,") ) /// Invalid use of 'rec' keyword - /// (Originally from ../FSComp.txt:1329) + /// (Originally from ..\FSComp.txt:1331) static member parsInvalidUseOfRec() = (3203, GetStringFunc("parsInvalidUseOfRec",",,,") ) /// If a union type has more than one case and is a struct, then all fields within the union type must be given unique names. - /// (Originally from ../FSComp.txt:1330) + /// (Originally from ..\FSComp.txt:1332) static member tcStructUnionMultiCaseDistinctFields() = (3204, GetStringFunc("tcStructUnionMultiCaseDistinctFields",",,,") ) /// The CallerMemberNameAttribute applied to parameter '%s' will have no effect. It is overridden by the CallerFilePathAttribute. - /// (Originally from ../FSComp.txt:1331) + /// (Originally from ..\FSComp.txt:1333) static member CallerMemberNameIsOverriden(a0 : System.String) = (3206, GetStringFunc("CallerMemberNameIsOverriden",",,,%s,,,") a0) /// Invalid use of 'fixed'. 'fixed' may only be used in a declaration of the form 'use x = fixed expr' where the expression is an array, the address of a field, the address of an array element or a string' - /// (Originally from ../FSComp.txt:1332) + /// (Originally from ..\FSComp.txt:1334) static member tcFixedNotAllowed() = (3207, GetStringFunc("tcFixedNotAllowed",",,,") ) /// Could not find method System.Runtime.CompilerServices.OffsetToStringData in references when building 'fixed' expression. - /// (Originally from ../FSComp.txt:1333) + /// (Originally from ..\FSComp.txt:1335) static member tcCouldNotFindOffsetToStringData() = (3208, GetStringFunc("tcCouldNotFindOffsetToStringData",",,,") ) /// The address of the variable '%s' cannot be used at this point. A method or function may not return the address of this local value. - /// (Originally from ../FSComp.txt:1334) + /// (Originally from ..\FSComp.txt:1336) static member chkNoByrefReturnOfLocal(a0 : System.String) = (3209, GetStringFunc("chkNoByrefReturnOfLocal",",,,%s,,,") a0) /// %s is an active pattern and cannot be treated as a discriminated union case with named fields. - /// (Originally from ../FSComp.txt:1335) + /// (Originally from ..\FSComp.txt:1337) static member tcNamedActivePattern(a0 : System.String) = (3210, GetStringFunc("tcNamedActivePattern",",,,%s,,,") a0) /// The default value does not have the same type as the argument. The DefaultParameterValue attribute and any Optional attribute will be ignored. Note: 'null' needs to be annotated with the correct type, e.g. 'DefaultParameterValue(null:obj)'. - /// (Originally from ../FSComp.txt:1336) + /// (Originally from ..\FSComp.txt:1338) static member DefaultParameterValueNotAppropriateForArgument() = (3211, GetStringFunc("DefaultParameterValueNotAppropriateForArgument",",,,") ) /// The system type '%s' was required but no referenced system DLL contained this type - /// (Originally from ../FSComp.txt:1337) + /// (Originally from ..\FSComp.txt:1339) static member tcGlobalsSystemTypeNotFound(a0 : System.String) = (GetStringFunc("tcGlobalsSystemTypeNotFound",",,,%s,,,") a0) /// The member '%s' matches multiple overloads of the same method.\nPlease restrict it to one of the following:%s. - /// (Originally from ../FSComp.txt:1338) + /// (Originally from ..\FSComp.txt:1340) static member typrelMemberHasMultiplePossibleDispatchSlots(a0 : System.String, a1 : System.String) = (3213, GetStringFunc("typrelMemberHasMultiplePossibleDispatchSlots",",,,%s,,,%s,,,") a0 a1) /// Method or object constructor '%s' is not static - /// (Originally from ../FSComp.txt:1339) + /// (Originally from ..\FSComp.txt:1341) static member methodIsNotStatic(a0 : System.String) = (3214, GetStringFunc("methodIsNotStatic",",,,%s,,,") a0) /// Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? - /// (Originally from ../FSComp.txt:1340) + /// (Originally from ..\FSComp.txt:1342) static member parsUnexpectedSymbolEqualsInsteadOfIn() = (3215, GetStringFunc("parsUnexpectedSymbolEqualsInsteadOfIn",",,,") ) /// Two anonymous record types are from different assemblies '%s' and '%s' /// (Originally from ..\FSComp.txt:1343) @@ -4058,277 +4061,277 @@ type internal SR private() = /// (Originally from ..\FSComp.txt:1344) static member tcAnonRecdFieldNameMismatch(a0 : System.String, a1 : System.String) = (GetStringFunc("tcAnonRecdFieldNameMismatch",",,,%s,,,%s,,,") a0 a1) /// Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. - /// (Originally from ../FSComp.txt:1341) + /// (Originally from ..\FSComp.txt:1345) static member keywordDescriptionAbstract() = (GetStringFunc("keywordDescriptionAbstract",",,,") ) /// Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters. - /// (Originally from ../FSComp.txt:1342) + /// (Originally from ..\FSComp.txt:1346) static member keyworkDescriptionAnd() = (GetStringFunc("keyworkDescriptionAnd",",,,") ) /// Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. - /// (Originally from ../FSComp.txt:1343) + /// (Originally from ..\FSComp.txt:1347) static member keywordDescriptionAs() = (GetStringFunc("keywordDescriptionAs",",,,") ) /// Used to verify code during debugging. - /// (Originally from ../FSComp.txt:1344) + /// (Originally from ..\FSComp.txt:1348) static member keywordDescriptionAssert() = (GetStringFunc("keywordDescriptionAssert",",,,") ) /// Used as the name of the base class object. - /// (Originally from ../FSComp.txt:1345) + /// (Originally from ..\FSComp.txt:1349) static member keywordDescriptionBase() = (GetStringFunc("keywordDescriptionBase",",,,") ) /// In verbose syntax, indicates the start of a code block. - /// (Originally from ../FSComp.txt:1346) + /// (Originally from ..\FSComp.txt:1350) static member keywordDescriptionBegin() = (GetStringFunc("keywordDescriptionBegin",",,,") ) /// In verbose syntax, indicates the start of a class definition. - /// (Originally from ../FSComp.txt:1347) + /// (Originally from ..\FSComp.txt:1351) static member keywordDescriptionClass() = (GetStringFunc("keywordDescriptionClass",",,,") ) /// Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. - /// (Originally from ../FSComp.txt:1348) + /// (Originally from ..\FSComp.txt:1352) static member keywordDescriptionDefault() = (GetStringFunc("keywordDescriptionDefault",",,,") ) /// Used to declare a delegate. - /// (Originally from ../FSComp.txt:1349) + /// (Originally from ..\FSComp.txt:1353) static member keywordDescriptionDelegate() = (GetStringFunc("keywordDescriptionDelegate",",,,") ) /// Used in looping constructs or to execute imperative code. - /// (Originally from ../FSComp.txt:1350) + /// (Originally from ..\FSComp.txt:1354) static member keywordDescriptionDo() = (GetStringFunc("keywordDescriptionDo",",,,") ) /// In verbose syntax, indicates the end of a block of code in a looping expression. - /// (Originally from ../FSComp.txt:1351) + /// (Originally from ..\FSComp.txt:1355) static member keywordDescriptionDone() = (GetStringFunc("keywordDescriptionDone",",,,") ) /// Used to convert to a type that is lower in the inheritance chain. - /// (Originally from ../FSComp.txt:1352) + /// (Originally from ..\FSComp.txt:1356) static member keywordDescriptionDowncast() = (GetStringFunc("keywordDescriptionDowncast",",,,") ) /// In a for expression, used when counting in reverse. - /// (Originally from ../FSComp.txt:1353) + /// (Originally from ..\FSComp.txt:1357) static member keywordDescriptionDownto() = (GetStringFunc("keywordDescriptionDownto",",,,") ) /// Used in conditional branching. A short form of else if. - /// (Originally from ../FSComp.txt:1354) + /// (Originally from ..\FSComp.txt:1358) static member keywordDescriptionElif() = (GetStringFunc("keywordDescriptionElif",",,,") ) /// Used in conditional branching. - /// (Originally from ../FSComp.txt:1355) + /// (Originally from ..\FSComp.txt:1359) static member keywordDescriptionElse() = (GetStringFunc("keywordDescriptionElse",",,,") ) /// In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. - /// (Originally from ../FSComp.txt:1356) + /// (Originally from ..\FSComp.txt:1360) static member keywordDescriptionEnd() = (GetStringFunc("keywordDescriptionEnd",",,,") ) /// Used to declare an exception type. - /// (Originally from ../FSComp.txt:1357) + /// (Originally from ..\FSComp.txt:1361) static member keywordDescriptionException() = (GetStringFunc("keywordDescriptionException",",,,") ) /// Indicates that a declared program element is defined in another binary or assembly. - /// (Originally from ../FSComp.txt:1358) + /// (Originally from ..\FSComp.txt:1362) static member keywordDescriptionExtern() = (GetStringFunc("keywordDescriptionExtern",",,,") ) /// Used as a Boolean literal. - /// (Originally from ../FSComp.txt:1359) + /// (Originally from ..\FSComp.txt:1363) static member keywordDescriptionTrueFalse() = (GetStringFunc("keywordDescriptionTrueFalse",",,,") ) /// Used together with try to introduce a block of code that executes regardless of whether an exception occurs. - /// (Originally from ../FSComp.txt:1360) + /// (Originally from ..\FSComp.txt:1364) static member keywordDescriptionFinally() = (GetStringFunc("keywordDescriptionFinally",",,,") ) /// Used in looping constructs. - /// (Originally from ../FSComp.txt:1361) + /// (Originally from ..\FSComp.txt:1365) static member keywordDescriptionFor() = (GetStringFunc("keywordDescriptionFor",",,,") ) /// Used in lambda expressions, also known as anonymous functions. - /// (Originally from ../FSComp.txt:1362) + /// (Originally from ..\FSComp.txt:1366) static member keywordDescriptionFun() = (GetStringFunc("keywordDescriptionFun",",,,") ) /// Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. - /// (Originally from ../FSComp.txt:1363) + /// (Originally from ..\FSComp.txt:1367) static member keywordDescriptionFunction() = (GetStringFunc("keywordDescriptionFunction",",,,") ) /// Used to reference the top-level .NET namespace. - /// (Originally from ../FSComp.txt:1364) + /// (Originally from ..\FSComp.txt:1368) static member keywordDescriptionGlobal() = (GetStringFunc("keywordDescriptionGlobal",",,,") ) /// Used in conditional branching constructs. - /// (Originally from ../FSComp.txt:1365) + /// (Originally from ..\FSComp.txt:1369) static member keywordDescriptionIf() = (GetStringFunc("keywordDescriptionIf",",,,") ) /// Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. - /// (Originally from ../FSComp.txt:1366) + /// (Originally from ..\FSComp.txt:1370) static member keywordDescriptionIn() = (GetStringFunc("keywordDescriptionIn",",,,") ) /// Used to specify a base class or base interface. - /// (Originally from ../FSComp.txt:1367) + /// (Originally from ..\FSComp.txt:1371) static member keywordDescriptionInherit() = (GetStringFunc("keywordDescriptionInherit",",,,") ) /// Used to indicate a function that should be integrated directly into the caller's code. - /// (Originally from ../FSComp.txt:1368) + /// (Originally from ..\FSComp.txt:1372) static member keywordDescriptionInline() = (GetStringFunc("keywordDescriptionInline",",,,") ) /// Used to declare and implement interfaces. - /// (Originally from ../FSComp.txt:1369) + /// (Originally from ..\FSComp.txt:1373) static member keywordDescriptionInterface() = (GetStringFunc("keywordDescriptionInterface",",,,") ) /// Used to specify that a member is visible inside an assembly but not outside it. - /// (Originally from ../FSComp.txt:1370) + /// (Originally from ..\FSComp.txt:1374) static member keywordDescriptionInternal() = (GetStringFunc("keywordDescriptionInternal",",,,") ) /// Used to specify a computation that is to be performed only when a result is needed. - /// (Originally from ../FSComp.txt:1371) + /// (Originally from ..\FSComp.txt:1375) static member keywordDescriptionLazy() = (GetStringFunc("keywordDescriptionLazy",",,,") ) /// Used to associate, or bind, a name to a value or function. - /// (Originally from ../FSComp.txt:1372) + /// (Originally from ..\FSComp.txt:1376) static member keywordDescriptionLet() = (GetStringFunc("keywordDescriptionLet",",,,") ) /// Used in asynchronous workflows to bind a name to the result of an asynchronous computation, or, in other computation expressions, used to bind a name to a result, which is of the computation type. - /// (Originally from ../FSComp.txt:1373) + /// (Originally from ..\FSComp.txt:1377) static member keywordDescriptionLetBang() = (GetStringFunc("keywordDescriptionLetBang",",,,") ) /// Used to branch by comparing a value to a pattern. - /// (Originally from ../FSComp.txt:1374) + /// (Originally from ..\FSComp.txt:1378) static member keywordDescriptionMatch() = (GetStringFunc("keywordDescriptionMatch",",,,") ) /// Used in computation expressions to pattern match directly over the result of another computation expression. - /// (Originally from ../FSComp.txt:1375) + /// (Originally from ..\FSComp.txt:1379) static member keywordDescriptionMatchBang() = (GetStringFunc("keywordDescriptionMatchBang",",,,") ) /// Used to declare a property or method in an object type. - /// (Originally from ../FSComp.txt:1376) + /// (Originally from ..\FSComp.txt:1380) static member keywordDescriptionMember() = (GetStringFunc("keywordDescriptionMember",",,,") ) /// Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. - /// (Originally from ../FSComp.txt:1377) + /// (Originally from ..\FSComp.txt:1381) static member keywordDescriptionModule() = (GetStringFunc("keywordDescriptionModule",",,,") ) /// Used to declare a variable, that is, a value that can be changed. - /// (Originally from ../FSComp.txt:1378) + /// (Originally from ..\FSComp.txt:1382) static member keywordDescriptionMutable() = (GetStringFunc("keywordDescriptionMutable",",,,") ) /// Used to associate a name with a group of related types and modules, to logically separate it from other code. - /// (Originally from ../FSComp.txt:1379) + /// (Originally from ..\FSComp.txt:1383) static member keywordDescriptionNamespace() = (GetStringFunc("keywordDescriptionNamespace",",,,") ) /// Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. - /// (Originally from ../FSComp.txt:1380) + /// (Originally from ..\FSComp.txt:1384) static member keywordDescriptionNew() = (GetStringFunc("keywordDescriptionNew",",,,") ) /// Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - /// (Originally from ../FSComp.txt:1381) + /// (Originally from ..\FSComp.txt:1385) static member keywordDescriptionNot() = (GetStringFunc("keywordDescriptionNot",",,,") ) /// Indicates the absence of an object. Also used in generic parameter constraints. - /// (Originally from ../FSComp.txt:1382) + /// (Originally from ..\FSComp.txt:1386) static member keywordDescriptionNull() = (GetStringFunc("keywordDescriptionNull",",,,") ) /// Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. - /// (Originally from ../FSComp.txt:1383) + /// (Originally from ..\FSComp.txt:1387) static member keywordDescriptionOf() = (GetStringFunc("keywordDescriptionOf",",,,") ) /// Used to make the contents of a namespace or module available without qualification. - /// (Originally from ../FSComp.txt:1384) + /// (Originally from ..\FSComp.txt:1388) static member keywordDescriptionOpen() = (GetStringFunc("keywordDescriptionOpen",",,,") ) /// Used with Boolean conditions as a Boolean or operator. Equivalent to ||. Also used in member constraints. - /// (Originally from ../FSComp.txt:1385) + /// (Originally from ..\FSComp.txt:1389) static member keywordDescriptionOr() = (GetStringFunc("keywordDescriptionOr",",,,") ) /// Used to implement a version of an abstract or virtual method that differs from the base version. - /// (Originally from ../FSComp.txt:1386) + /// (Originally from ..\FSComp.txt:1390) static member keywordDescriptionOverride() = (GetStringFunc("keywordDescriptionOverride",",,,") ) /// Restricts access to a member to code in the same type or module. - /// (Originally from ../FSComp.txt:1387) + /// (Originally from ..\FSComp.txt:1391) static member keywordDescriptionPrivate() = (GetStringFunc("keywordDescriptionPrivate",",,,") ) /// Allows access to a member from outside the type. - /// (Originally from ../FSComp.txt:1388) + /// (Originally from ..\FSComp.txt:1392) static member keywordDescriptionPublic() = (GetStringFunc("keywordDescriptionPublic",",,,") ) /// Used to indicate that a function is recursive. - /// (Originally from ../FSComp.txt:1389) + /// (Originally from ..\FSComp.txt:1393) static member keywordDescriptionRec() = (GetStringFunc("keywordDescriptionRec",",,,") ) /// Used to indicate a value to provide as the result of a computation expression. - /// (Originally from ../FSComp.txt:1390) + /// (Originally from ..\FSComp.txt:1394) static member keywordDescriptionReturn() = (GetStringFunc("keywordDescriptionReturn",",,,") ) /// Used to indicate a computation expression that, when evaluated, provides the result of the containing computation expression. - /// (Originally from ../FSComp.txt:1391) + /// (Originally from ..\FSComp.txt:1395) static member keywordDescriptionReturnBang() = (GetStringFunc("keywordDescriptionReturnBang",",,,") ) /// Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. - /// (Originally from ../FSComp.txt:1392) + /// (Originally from ..\FSComp.txt:1396) static member keywordDescriptionSelect() = (GetStringFunc("keywordDescriptionSelect",",,,") ) /// Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. - /// (Originally from ../FSComp.txt:1393) + /// (Originally from ..\FSComp.txt:1397) static member keywordDescriptionStatic() = (GetStringFunc("keywordDescriptionStatic",",,,") ) /// Used to declare a structure type. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. - /// (Originally from ../FSComp.txt:1394) + /// (Originally from ..\FSComp.txt:1398) static member keywordDescriptionStruct() = (GetStringFunc("keywordDescriptionStruct",",,,") ) /// Used in conditional expressions. Also used to perform side effects after object construction. - /// (Originally from ../FSComp.txt:1395) + /// (Originally from ..\FSComp.txt:1399) static member keywordDescriptionThen() = (GetStringFunc("keywordDescriptionThen",",,,") ) /// Used in for loops to indicate a range. - /// (Originally from ../FSComp.txt:1396) + /// (Originally from ..\FSComp.txt:1400) static member keywordDescriptionTo() = (GetStringFunc("keywordDescriptionTo",",,,") ) /// Used to introduce a block of code that might generate an exception. Used together with with or finally. - /// (Originally from ../FSComp.txt:1397) + /// (Originally from ..\FSComp.txt:1401) static member keywordDescriptionTry() = (GetStringFunc("keywordDescriptionTry",",,,") ) /// Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. - /// (Originally from ../FSComp.txt:1398) + /// (Originally from ..\FSComp.txt:1402) static member keywordDescriptionType() = (GetStringFunc("keywordDescriptionType",",,,") ) /// Used to convert to a type that is higher in the inheritance chain. - /// (Originally from ../FSComp.txt:1399) + /// (Originally from ..\FSComp.txt:1403) static member keywordDescriptionUpcast() = (GetStringFunc("keywordDescriptionUpcast",",,,") ) /// Used instead of let for values that require Dispose to be called to free resources. - /// (Originally from ../FSComp.txt:1400) + /// (Originally from ..\FSComp.txt:1404) static member keywordDescriptionUse() = (GetStringFunc("keywordDescriptionUse",",,,") ) /// Used instead of let! in asynchronous workflows and other computation expressions for values that require Dispose to be called to free resources. - /// (Originally from ../FSComp.txt:1401) + /// (Originally from ..\FSComp.txt:1405) static member keywordDescriptionUseBang() = (GetStringFunc("keywordDescriptionUseBang",",,,") ) /// Used in a signature to indicate a value, or in a type to declare a member, in limited situations. - /// (Originally from ../FSComp.txt:1402) + /// (Originally from ..\FSComp.txt:1406) static member keywordDescriptionVal() = (GetStringFunc("keywordDescriptionVal",",,,") ) /// Indicates the .NET void type. Used when interoperating with other .NET languages. - /// (Originally from ../FSComp.txt:1403) + /// (Originally from ..\FSComp.txt:1407) static member keywordDescriptionVoid() = (GetStringFunc("keywordDescriptionVoid",",,,") ) /// Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. - /// (Originally from ../FSComp.txt:1404) + /// (Originally from ..\FSComp.txt:1408) static member keywordDescriptionWhen() = (GetStringFunc("keywordDescriptionWhen",",,,") ) /// Introduces a looping construct. - /// (Originally from ../FSComp.txt:1405) + /// (Originally from ..\FSComp.txt:1409) static member keywordDescriptionWhile() = (GetStringFunc("keywordDescriptionWhile",",,,") ) /// Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. - /// (Originally from ../FSComp.txt:1406) + /// (Originally from ..\FSComp.txt:1410) static member keywordDescriptionWith() = (GetStringFunc("keywordDescriptionWith",",,,") ) /// Used in a sequence expression to produce a value for a sequence. - /// (Originally from ../FSComp.txt:1407) + /// (Originally from ..\FSComp.txt:1411) static member keywordDescriptionYield() = (GetStringFunc("keywordDescriptionYield",",,,") ) /// Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. - /// (Originally from ../FSComp.txt:1408) + /// (Originally from ..\FSComp.txt:1412) static member keywordDescriptionYieldBang() = (GetStringFunc("keywordDescriptionYieldBang",",,,") ) /// In function types, delimits arguments and return values. Yields an expression (in sequence expressions); equivalent to the yield keyword. Used in match expressions - /// (Originally from ../FSComp.txt:1409) + /// (Originally from ..\FSComp.txt:1413) static member keywordDescriptionRightArrow() = (GetStringFunc("keywordDescriptionRightArrow",",,,") ) /// Assigns a value to a variable. - /// (Originally from ../FSComp.txt:1410) + /// (Originally from ..\FSComp.txt:1414) static member keywordDescriptionLeftArrow() = (GetStringFunc("keywordDescriptionLeftArrow",",,,") ) /// Converts a type to type that is higher in the hierarchy. - /// (Originally from ../FSComp.txt:1411) + /// (Originally from ..\FSComp.txt:1415) static member keywordDescriptionCast() = (GetStringFunc("keywordDescriptionCast",",,,") ) /// Converts a type to a type that is lower in the hierarchy. - /// (Originally from ../FSComp.txt:1412) + /// (Originally from ..\FSComp.txt:1416) static member keywordDescriptionDynamicCast() = (GetStringFunc("keywordDescriptionDynamicCast",",,,") ) /// Delimits a typed code quotation. - /// (Originally from ../FSComp.txt:1413) + /// (Originally from ..\FSComp.txt:1417) static member keywordDescriptionTypedQuotation() = (GetStringFunc("keywordDescriptionTypedQuotation",",,,") ) /// Delimits a untyped code quotation. - /// (Originally from ../FSComp.txt:1414) + /// (Originally from ..\FSComp.txt:1418) static member keywordDescriptionUntypedQuotation() = (GetStringFunc("keywordDescriptionUntypedQuotation",",,,") ) /// %s '%s' not found in assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ../FSComp.txt:1415) + /// (Originally from ..\FSComp.txt:1419) static member itemNotFoundDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String) = (3216, GetStringFunc("itemNotFoundDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,") a0 a1 a2) /// %s '%s' not found in type '%s' from assembly '%s'. A possible cause may be a version incompatibility. You may need to explicitly reference the correct version of this assembly to allow all referenced components to use the correct version. - /// (Originally from ../FSComp.txt:1416) + /// (Originally from ..\FSComp.txt:1420) static member itemNotFoundInTypeDuringDynamicCodeGen(a0 : System.String, a1 : System.String, a2 : System.String, a3 : System.String) = (3216, GetStringFunc("itemNotFoundInTypeDuringDynamicCodeGen",",,,%s,,,%s,,,%s,,,%s,,,") a0 a1 a2 a3) /// is - /// (Originally from ../FSComp.txt:1417) + /// (Originally from ..\FSComp.txt:1421) static member descriptionWordIs() = (GetStringFunc("descriptionWordIs",",,,") ) /// This value is not a function and cannot be applied. - /// (Originally from ../FSComp.txt:1418) + /// (Originally from ..\FSComp.txt:1422) static member notAFunction() = (GetStringFunc("notAFunction",",,,") ) /// This value is not a function and cannot be applied. Did you intend to access the indexer via %s.[index] instead? - /// (Originally from ../FSComp.txt:1419) + /// (Originally from ..\FSComp.txt:1423) static member notAFunctionButMaybeIndexerWithName(a0 : System.String) = (GetStringFunc("notAFunctionButMaybeIndexerWithName",",,,%s,,,") a0) /// This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead? - /// (Originally from ../FSComp.txt:1420) + /// (Originally from ..\FSComp.txt:1424) static member notAFunctionButMaybeIndexer() = (GetStringFunc("notAFunctionButMaybeIndexer",",,,") ) /// - /// (Originally from ../FSComp.txt:1421) + /// (Originally from ..\FSComp.txt:1425) static member notAFunctionButMaybeIndexerErrorCode() = (3217, GetStringFunc("notAFunctionButMaybeIndexerErrorCode",",,,") ) /// This value is not a function and cannot be applied. Did you forget to terminate a declaration? - /// (Originally from ../FSComp.txt:1422) + /// (Originally from ..\FSComp.txt:1426) static member notAFunctionButMaybeDeclaration() = (GetStringFunc("notAFunctionButMaybeDeclaration",",,,") ) /// The argument names in the signature '%s' and implementation '%s' do not match. The argument name from the signature file will be used. This may cause problems when debugging or profiling. - /// (Originally from ../FSComp.txt:1423) + /// (Originally from ..\FSComp.txt:1427) static member ArgumentsInSigAndImplMismatch(a0 : System.String, a1 : System.String) = (3218, GetStringFunc("ArgumentsInSigAndImplMismatch",",,,%s,,,%s,,,") a0 a1) /// An error occurred while reading the F# metadata of assembly '%s'. A reserved construct was utilized. You may need to upgrade your F# compiler or use an earlier version of the assembly that doesn't make use of a specific construct. - /// (Originally from ../FSComp.txt:1424) + /// (Originally from ..\FSComp.txt:1428) static member pickleUnexpectedNonZero(a0 : System.String) = (3219, GetStringFunc("pickleUnexpectedNonZero",",,,%s,,,") a0) /// This method or property is not normally used from F# code, use an explicit tuple pattern for deconstruction instead. - /// (Originally from ../FSComp.txt:1425) + /// (Originally from ..\FSComp.txt:1429) static member tcTupleMemberNotNormallyUsed() = (3220, GetStringFunc("tcTupleMemberNotNormallyUsed",",,,") ) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield'. - /// (Originally from ../FSComp.txt:1426) + /// (Originally from ..\FSComp.txt:1430) static member implicitlyDiscardedInSequenceExpression(a0 : System.String) = (3221, GetStringFunc("implicitlyDiscardedInSequenceExpression",",,,%s,,,") a0) /// This expression returns a value of type '%s' but is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to use the expression as a value in the sequence then use an explicit 'yield!'. - /// (Originally from ../FSComp.txt:1427) + /// (Originally from ..\FSComp.txt:1431) static member implicitlyDiscardedSequenceInSequenceExpression(a0 : System.String) = (3222, GetStringFunc("implicitlyDiscardedSequenceInSequenceExpression",",,,%s,,,") a0) /// The file '%s' changed on disk unexpectedly, please reload. - /// (Originally from ..\FSComp.txt:1427) + /// (Originally from ..\FSComp.txt:1432) static member ilreadFileChanged(a0 : System.String) = (3223, GetStringFunc("ilreadFileChanged",",,,%s,,,") a0) /// Invalid anonymous record expression - /// (Originally from ..\FSComp.txt:1431) + /// (Originally from ..\FSComp.txt:1433) static member parsInvalidAnonRecdExpr() = (3224, GetStringFunc("parsInvalidAnonRecdExpr",",,,") ) /// Invalid anonymous record type - /// (Originally from ..\FSComp.txt:1432) + /// (Originally from ..\FSComp.txt:1434) static member parsInvalidAnonRecdType() = (3225, GetStringFunc("parsInvalidAnonRecdType",",,,") ) /// The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record - /// (Originally from ..\FSComp.txt:1433) + /// (Originally from ..\FSComp.txt:1435) static member tcCopyAndUpdateNeedsRecordType() = (3226, GetStringFunc("tcCopyAndUpdateNeedsRecordType",",,,") ) /// Call this method once to validate that all known resources are valid; throws if not diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index 3a9b5ffe0ac..7db9fe3d46f 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -181,7 +181,7 @@ All branches of an 'if' expression must have the same type. This expression was expected to have type '{0}', but here has type '{1}'. - All branches of a pattern match expression must have the same type. This expression was expected to have type '{0}', but here has type '{1}'. + All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. A pattern match guard must be of type 'bool', but this 'when' expression is of type '{0}'. From fafad3c1aef406f6c652a079bc104e3d72ce075d Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 11 Oct 2018 11:51:38 +0100 Subject: [PATCH 20/48] re-add tests --- src/fsharp/FSharp.Core/printf.fs | 2 + src/fsharp/FSharp.Core/printf.fsi | 10 ++++- tests/fsharp/tests.fs | 4 +- tests/fsharp/typecheck/sigs/neg103.vsbsl | 47 +++++++++++----------- tests/fsharp/typecheck/sigs/neg103b.bsl | 24 +++++++++++ tests/fsharp/typecheck/sigs/neg103b.fs | 20 +++++++++ tests/fsharp/typecheck/sigs/neg104.bsl | 2 +- tests/fsharp/typecheck/sigs/neg104.vsbsl | 2 +- tests/fsharp/typecheck/sigs/neg104b.bsl | 20 +++++++++ tests/fsharp/typecheck/sigs/neg104b.fs | 12 ++++++ tests/fsharp/typecheck/sigs/neg_anon_1.bsl | 16 ++++---- 11 files changed, 122 insertions(+), 37 deletions(-) create mode 100644 tests/fsharp/typecheck/sigs/neg103b.bsl create mode 100644 tests/fsharp/typecheck/sigs/neg103b.fs create mode 100644 tests/fsharp/typecheck/sigs/neg104b.bsl create mode 100644 tests/fsharp/typecheck/sigs/neg104b.fs diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index f3d47e1c0ab..535d87d491b 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -4,6 +4,8 @@ namespace Microsoft.FSharp.Core type PrintfFormat<'Printer,'State,'Residue,'Result>(value:string) = member x.Value = value + + override __.ToString() = value type PrintfFormat<'Printer,'State,'Residue,'Result,'Tuple>(value:string) = inherit PrintfFormat<'Printer,'State,'Residue,'Result>(value) diff --git a/src/fsharp/FSharp.Core/printf.fsi b/src/fsharp/FSharp.Core/printf.fsi index 011e4f0d9b9..c8f7b2dcaeb 100644 --- a/src/fsharp/FSharp.Core/printf.fsi +++ b/src/fsharp/FSharp.Core/printf.fsi @@ -15,10 +15,12 @@ open System.Text /// Value generated by the overall printf action (e.g. sprint generates a string) /// Value generated after post processing (e.g. failwithf generates a string internally then raises an exception) type PrintfFormat<'Printer,'State,'Residue,'Result> = + /// Construct a format string /// The input string. /// The PrintfFormat containing the formatted result. new : value:string -> PrintfFormat<'Printer,'State,'Residue,'Result> + /// The raw text of the format string. member Value : string @@ -29,7 +31,9 @@ type PrintfFormat<'Printer,'State,'Residue,'Result> = /// Value generated after post processing (e.g. failwithf generates a string internally then raises an exception) /// Tuple of values generated by scan or match. type PrintfFormat<'Printer,'State,'Residue,'Result,'Tuple> = + inherit PrintfFormat<'Printer,'State,'Residue,'Result> + /// Construct a format string /// The input string. /// The created format string. @@ -137,9 +141,11 @@ module Printf = /// Represents a statically-analyzed format associated with writing to a System.Text.StringBuilder. The first type parameter indicates the /// arguments of the format operation and the last the overall return type. type BuilderFormat<'T,'Result> = Format<'T, StringBuilder, unit, 'Result> + /// Represents a statically-analyzed format when formatting builds a string. The first type parameter indicates the /// arguments of the format operation and the last the overall return type. type StringFormat<'T,'Result> = Format<'T, unit, string, 'Result> + /// Represents a statically-analyzed format associated with writing to a System.IO.TextWriter. The first type parameter indicates the /// arguments of the format operation and the last the overall return type. type TextWriterFormat<'T,'Result> = Format<'T, TextWriter, unit, 'Result> @@ -147,15 +153,15 @@ module Printf = /// Represents a statically-analyzed format associated with writing to a System.Text.StringBuilder. The type parameter indicates the /// arguments and return type of the format operation. type BuilderFormat<'T> = BuilderFormat<'T,unit> + /// Represents a statically-analyzed format when formatting builds a string. The type parameter indicates the /// arguments and return type of the format operation. type StringFormat<'T> = StringFormat<'T,string> + /// Represents a statically-analyzed format associated with writing to a System.IO.TextWriter. The type parameter indicates the /// arguments and return type of the format operation. type TextWriterFormat<'T> = TextWriterFormat<'T,unit> - - /// Print to a System.Text.StringBuilder /// The StringBuilder to print to. /// The input formatter. diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 383d0d839c8..cddd580bce4 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -2440,10 +2440,10 @@ module TypecheckTests = let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" [] - let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" + let ``type check neg103b`` () = singleNegTest (testConfig "typecheck/sigs") "neg103b" [] - let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" + let ``type check neg104b`` () = singleNegTest (testConfig "typecheck/sigs") "neg104b" [] let ``type check neg_anon_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_1" diff --git a/tests/fsharp/typecheck/sigs/neg103.vsbsl b/tests/fsharp/typecheck/sigs/neg103.vsbsl index 4c55fca4170..422a9e3bf81 100644 --- a/tests/fsharp/typecheck/sigs/neg103.vsbsl +++ b/tests/fsharp/typecheck/sigs/neg103.vsbsl @@ -1,24 +1,25 @@ -neg103.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' - -neg103.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' - -neg103.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion - -neg103.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type - '{|b : int|}' -is not compatible with type - '{|a : int|}' - - -neg103.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion - -neg103.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type - '{|a : int ; b : int|}' -is not compatible with type - '{|a : int|}' - - -neg103.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface - -neg103.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface +neg103.fs(7,12,7,22): typecheck error FS0001: This expression was expected to have type + 'Async<'a>' +but here has type + 'string' + +neg103.fs(12,7,12,15): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' + +neg103.fs(17,7,17,15): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' + +neg103.fs(21,7,21,9): typecheck error FS0001: This expression was expected to have type + 'Async' +but here has type + 'int' + +neg103.fs(25,11,25,19): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' diff --git a/tests/fsharp/typecheck/sigs/neg103b.bsl b/tests/fsharp/typecheck/sigs/neg103b.bsl new file mode 100644 index 00000000000..6c67abf0a6e --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103b.bsl @@ -0,0 +1,24 @@ + +neg103.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' + +neg103.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' + +neg103.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type + '{|b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg103.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type + '{|a : int ; b : int|}' +is not compatible with type + '{|a : int|}' + + +neg103.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface + +neg103.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface \ No newline at end of file diff --git a/tests/fsharp/typecheck/sigs/neg103b.fs b/tests/fsharp/typecheck/sigs/neg103b.fs new file mode 100644 index 00000000000..4979cea70bd --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103b.fs @@ -0,0 +1,20 @@ + +module M + + // Check we get compile-time errors + let negTypeTest1() = ({| a = 1+1; b = 2 |} = {| a = 2 |}) + + let negTypeTest2() = ({| b = 2 |} = {| a = 2 |} ) + + // no subsumption + let negTypeTest3() = ({| b = 2 |} :> {| a : int |} ) + + // no subsumption + let negTypeTest4() = ({| b = 2; a = 1 |} :> {| a : int |} ) + + let posgTypeTest5() = ({| b = 2; a = 1 |} = {| a = 1; b = 2 |} ) + + // Comparison is not possible if structural elements are comparable + let negTypeTest6() = ({| a = id |} > {| a = id |}) + + let negTypeTest7() = (compare {| a = id |} {| a = id |}) \ No newline at end of file diff --git a/tests/fsharp/typecheck/sigs/neg104.bsl b/tests/fsharp/typecheck/sigs/neg104.bsl index aa804860dfc..022a8e3e4b2 100644 --- a/tests/fsharp/typecheck/sigs/neg104.bsl +++ b/tests/fsharp/typecheck/sigs/neg104.bsl @@ -17,4 +17,4 @@ neg104.fs(32,27,32,28): parse error FS0604: Unmatched '{' neg104.fs(35,19,35,20): parse error FS0010: Unexpected symbol '}' in definition. Expected incomplete structured construct at or before this point or other token. -neg104.fs(35,1,35,20): parse error FS0010: Incomplete structured construct at or before this point in implementation file +neg104.fs(36,1,36,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file diff --git a/tests/fsharp/typecheck/sigs/neg104.vsbsl b/tests/fsharp/typecheck/sigs/neg104.vsbsl index 1fe8b3683ef..e4e6e79397a 100644 --- a/tests/fsharp/typecheck/sigs/neg104.vsbsl +++ b/tests/fsharp/typecheck/sigs/neg104.vsbsl @@ -17,7 +17,7 @@ neg104.fs(32,27,32,28): parse error FS0604: Unmatched '{' neg104.fs(35,19,35,20): parse error FS0010: Unexpected symbol '}' in definition. Expected incomplete structured construct at or before this point or other token. -neg104.fs(35,1,35,20): parse error FS0010: Incomplete structured construct at or before this point in implementation file +neg104.fs(36,1,36,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file neg104.fs(8,9,8,30): typecheck error FS0750: This construct may only be used within computation expressions diff --git a/tests/fsharp/typecheck/sigs/neg104b.bsl b/tests/fsharp/typecheck/sigs/neg104b.bsl new file mode 100644 index 00000000000..8a5f0f96195 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg104b.bsl @@ -0,0 +1,20 @@ + +neg104b.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. + +neg104b.fs(6,29,6,31): parse error FS0605: Unmatched '{|' + +neg104b.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. + +neg104b.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. + +neg104b.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. + +neg104b.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + +neg104b.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. + +neg104b.fs(10,14,10,16): parse error FS0605: Unmatched '{|' + +neg104b.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. + +neg104b.fs(14,1,14,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file \ No newline at end of file diff --git a/tests/fsharp/typecheck/sigs/neg104b.fs b/tests/fsharp/typecheck/sigs/neg104b.fs new file mode 100644 index 00000000000..98c907e65d3 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg104b.fs @@ -0,0 +1,12 @@ + +module M + + + // Check we get parsing error and decent recovery + let negParsingTest2() = {| b = 2 } + + let normalCode1() = () + // Check we get parsing error and decent recovery + type X = {| A : int } + + let normalCode2() = () diff --git a/tests/fsharp/typecheck/sigs/neg_anon_1.bsl b/tests/fsharp/typecheck/sigs/neg_anon_1.bsl index cdc62ab4d79..d7aaaecd939 100644 --- a/tests/fsharp/typecheck/sigs/neg_anon_1.bsl +++ b/tests/fsharp/typecheck/sigs/neg_anon_1.bsl @@ -1,24 +1,24 @@ -neg-anon-1.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' +neg_anon_1.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' -neg-anon-1.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' +neg_anon_1.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' -neg-anon-1.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion +neg_anon_1.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion -neg-anon-1.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type +neg_anon_1.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type '{|b : int|}' is not compatible with type '{|a : int|}' -neg-anon-1.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion +neg_anon_1.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion -neg-anon-1.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type +neg_anon_1.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type '{|a : int ; b : int|}' is not compatible with type '{|a : int|}' -neg-anon-1.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface +neg_anon_1.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface -neg-anon-1.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface +neg_anon_1.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface From bf935d56cf4df130450906f066c77eff15326f45 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 11 Oct 2018 15:08:46 +0100 Subject: [PATCH 21/48] fix tests --- tests/fsharp/tests.fs | 4 ++-- tests/fsharp/typecheck/sigs/neg104b.bsl | 20 ---------------- .../sigs/{neg103b.bsl => neg113.bsl} | 16 ++++++------- .../typecheck/sigs/{neg103b.fs => neg113.fs} | 0 tests/fsharp/typecheck/sigs/neg113.vsbsl | 24 +++++++++++++++++++ tests/fsharp/typecheck/sigs/neg114.bsl | 20 ++++++++++++++++ .../typecheck/sigs/{neg104b.fs => neg114.fs} | 0 tests/fsharp/typecheck/sigs/neg114.vsbsl | 24 +++++++++++++++++++ 8 files changed, 78 insertions(+), 30 deletions(-) delete mode 100644 tests/fsharp/typecheck/sigs/neg104b.bsl rename tests/fsharp/typecheck/sigs/{neg103b.bsl => neg113.bsl} (55%) rename tests/fsharp/typecheck/sigs/{neg103b.fs => neg113.fs} (100%) create mode 100644 tests/fsharp/typecheck/sigs/neg113.vsbsl create mode 100644 tests/fsharp/typecheck/sigs/neg114.bsl rename tests/fsharp/typecheck/sigs/{neg104b.fs => neg114.fs} (100%) create mode 100644 tests/fsharp/typecheck/sigs/neg114.vsbsl diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index cddd580bce4..57f79821c5f 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -2440,10 +2440,10 @@ module TypecheckTests = let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" [] - let ``type check neg103b`` () = singleNegTest (testConfig "typecheck/sigs") "neg103b" + let ``type check neg113`` () = singleNegTest (testConfig "typecheck/sigs") "neg113" [] - let ``type check neg104b`` () = singleNegTest (testConfig "typecheck/sigs") "neg104b" + let ``type check neg114`` () = singleNegTest (testConfig "typecheck/sigs") "neg114" [] let ``type check neg_anon_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_1" diff --git a/tests/fsharp/typecheck/sigs/neg104b.bsl b/tests/fsharp/typecheck/sigs/neg104b.bsl deleted file mode 100644 index 8a5f0f96195..00000000000 --- a/tests/fsharp/typecheck/sigs/neg104b.bsl +++ /dev/null @@ -1,20 +0,0 @@ - -neg104b.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. - -neg104b.fs(6,29,6,31): parse error FS0605: Unmatched '{|' - -neg104b.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. - -neg104b.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. - -neg104b.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. - -neg104b.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. - -neg104b.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. - -neg104b.fs(10,14,10,16): parse error FS0605: Unmatched '{|' - -neg104b.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. - -neg104b.fs(14,1,14,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file \ No newline at end of file diff --git a/tests/fsharp/typecheck/sigs/neg103b.bsl b/tests/fsharp/typecheck/sigs/neg113.bsl similarity index 55% rename from tests/fsharp/typecheck/sigs/neg103b.bsl rename to tests/fsharp/typecheck/sigs/neg113.bsl index 6c67abf0a6e..211ba670f91 100644 --- a/tests/fsharp/typecheck/sigs/neg103b.bsl +++ b/tests/fsharp/typecheck/sigs/neg113.bsl @@ -1,24 +1,24 @@ -neg103.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' +neg113.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' -neg103.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' +neg113.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' -neg103.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion +neg113.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion -neg103.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type +neg113.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type '{|b : int|}' is not compatible with type '{|a : int|}' -neg103.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion +neg113.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion -neg103.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type +neg113.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type '{|a : int ; b : int|}' is not compatible with type '{|a : int|}' -neg103.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface +neg113.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface -neg103.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface \ No newline at end of file +neg113.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface diff --git a/tests/fsharp/typecheck/sigs/neg103b.fs b/tests/fsharp/typecheck/sigs/neg113.fs similarity index 100% rename from tests/fsharp/typecheck/sigs/neg103b.fs rename to tests/fsharp/typecheck/sigs/neg113.fs diff --git a/tests/fsharp/typecheck/sigs/neg113.vsbsl b/tests/fsharp/typecheck/sigs/neg113.vsbsl new file mode 100644 index 00000000000..211ba670f91 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg113.vsbsl @@ -0,0 +1,24 @@ + +neg113.fs(5,50,5,61): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["a"; "b"]' and '["a"]' + +neg113.fs(7,41,7,52): typecheck error FS0001: Two anonymous record types have mismatched sets of field names '["b"]' and '["a"]' + +neg113.fs(10,27,10,55): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg113.fs(10,27,10,55): typecheck error FS0193: Type constraint mismatch. The type + '{|b : int|}' +is not compatible with type + '{|a : int|}' + + +neg113.fs(13,27,13,62): typecheck error FS0059: The type '{|a : int|}' does not have any proper subtypes and need not be used as the target of a static coercion + +neg113.fs(13,27,13,62): typecheck error FS0193: Type constraint mismatch. The type + '{|a : int ; b : int|}' +is not compatible with type + '{|a : int|}' + + +neg113.fs(18,34,18,36): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface + +neg113.fs(20,42,20,44): typecheck error FS0001: The type '('a -> 'a)' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface diff --git a/tests/fsharp/typecheck/sigs/neg114.bsl b/tests/fsharp/typecheck/sigs/neg114.bsl new file mode 100644 index 00000000000..f69db960676 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg114.bsl @@ -0,0 +1,20 @@ + +neg114.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. + +neg114.fs(6,29,6,31): parse error FS0605: Unmatched '{|' + +neg114.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. + +neg114.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. + +neg114.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. + +neg114.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + +neg114.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. + +neg114.fs(10,14,10,16): parse error FS0605: Unmatched '{|' + +neg114.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. + +neg114.fs(13,1,13,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file diff --git a/tests/fsharp/typecheck/sigs/neg104b.fs b/tests/fsharp/typecheck/sigs/neg114.fs similarity index 100% rename from tests/fsharp/typecheck/sigs/neg104b.fs rename to tests/fsharp/typecheck/sigs/neg114.fs diff --git a/tests/fsharp/typecheck/sigs/neg114.vsbsl b/tests/fsharp/typecheck/sigs/neg114.vsbsl new file mode 100644 index 00000000000..1573127e3b5 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg114.vsbsl @@ -0,0 +1,24 @@ + +neg114.fs(6,38,6,39): parse error FS0010: Unexpected symbol '}' in binding. Expected '|}' or other token. + +neg114.fs(6,29,6,31): parse error FS0605: Unmatched '{|' + +neg114.fs(8,5,8,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (6:29). Try indenting this token further or using standard formatting conventions. + +neg114.fs(10,5,10,9): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (8:5). Try indenting this token further or using standard formatting conventions. + +neg114.fs(10,5,10,9): parse error FS0010: Unexpected keyword 'type' in binding. Expected incomplete structured construct at or before this point or other token. + +neg114.fs(6,5,6,8): parse error FS3118: Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword. + +neg114.fs(10,25,10,26): parse error FS0010: Unexpected symbol '}' in type definition. Expected '|}' or other token. + +neg114.fs(10,14,10,16): parse error FS0605: Unmatched '{|' + +neg114.fs(12,5,12,8): parse error FS0058: Possible incorrect indentation: this token is offside of context started at position (10:14). Try indenting this token further or using standard formatting conventions. + +neg114.fs(13,1,13,1): parse error FS0010: Incomplete structured construct at or before this point in implementation file + +neg114.fs(10,10,10,11): typecheck error FS0964: Type abbreviations cannot have augmentations + +neg114.fs(12,5,12,27): typecheck error FS0912: This declaration element is not permitted in an augmentation From 836d7d2737ee4e6f53bbc4a113d5dc9a503727ac Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 12 Oct 2018 12:05:36 +0100 Subject: [PATCH 22/48] update FSharp.Core dependency --- .../FSharp.Compiler.Service.MSBuild.v12.fsproj | 2 +- .../FSharp.Compiler.Service.ProjectCracker.fsproj | 2 +- .../FSharp.Compiler.Service.ProjectCrackerTool.fsproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj b/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj index 8128ab15731..32a0b6812d7 100644 --- a/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj +++ b/fcs/FSharp.Compiler.Service.MSBuild.v12/FSharp.Compiler.Service.MSBuild.v12.fsproj @@ -29,7 +29,7 @@ - + $(FSharpSourcesRoot)\..\fcs\dependencies\MSBuild.v12.0\Microsoft.Build.Framework.dll diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj b/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj index 86296dcea04..1bf41b7bf27 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj +++ b/fcs/FSharp.Compiler.Service.ProjectCracker/FSharp.Compiler.Service.ProjectCracker.fsproj @@ -31,7 +31,7 @@ - + \ No newline at end of file diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj index d7f29459dee..cd0768f8da7 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/FSharp.Compiler.Service.ProjectCrackerTool.fsproj @@ -28,7 +28,7 @@ $(FSharpSourcesRoot)\..\packages\Microsoft.Portable.FSharp.Core.$(FSharpCoreFrozenPortablePackageVersion)\lib\profiles\net40\FSharp.Core.dll false - + $(FSharpSourcesRoot)\..\fcs\dependencies\MSBuild.v12.0\Microsoft.Build.Framework.dll false From 2b882b203e84262c1d8197310f03bf4835dd1d5c Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 23 Oct 2018 14:02:12 +0100 Subject: [PATCH 23/48] update tools version --- DotnetCLIToolsVersion.txt | 2 +- fcs/build.fsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DotnetCLIToolsVersion.txt b/DotnetCLIToolsVersion.txt index 6e840019a3b..c735fa77fd7 100644 --- a/DotnetCLIToolsVersion.txt +++ b/DotnetCLIToolsVersion.txt @@ -1 +1 @@ - 2.1.400-preview-009197 + 2.1.403 diff --git a/fcs/build.fsx b/fcs/build.fsx index 145d4c88e8f..d5e3df4ac4f 100644 --- a/fcs/build.fsx +++ b/fcs/build.fsx @@ -24,7 +24,7 @@ let isMono = false // Utilities // -------------------------------------------------------------------------------------- -let dotnetExePath = DotNetCli.InstallDotNetSDK "2.1.201" +let dotnetExePath = DotNetCli.InstallDotNetSDK "2.1.403" let runDotnet workingDir args = let result = From 17d05ae119b7ea47e89a170aa1b04534b971f5e1 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 23 Oct 2018 15:09:24 +0100 Subject: [PATCH 24/48] fix fcs build --- fcs/samples/EditorService/EditorService.fsproj | 2 +- fcs/samples/FscExe/FscExe.fsproj | 2 +- fcs/samples/FsiExe/FsiExe.fsproj | 2 +- .../InteractiveService/InteractiveService.fsproj | 2 +- fcs/samples/Tokenizer/Tokenizer.fsproj | 2 +- fcs/samples/UntypedTree/UntypedTree.fsproj | 2 +- src/absil/illib.fs | 6 ------ src/fsharp/NameResolution.fs | 2 +- src/fsharp/Optimizer.fs | 2 +- src/fsharp/QuotationTranslator.fs | 2 +- src/fsharp/TastOps.fs | 15 +++++++++------ src/fsharp/TastPickle.fs | 2 +- src/fsharp/TypeChecker.fs | 12 ++++++------ src/fsharp/symbols/Symbols.fs | 16 ++++++++-------- src/fsharp/tast.fs | 3 ++- 15 files changed, 35 insertions(+), 37 deletions(-) diff --git a/fcs/samples/EditorService/EditorService.fsproj b/fcs/samples/EditorService/EditorService.fsproj index 05847e67f90..447906070f0 100644 --- a/fcs/samples/EditorService/EditorService.fsproj +++ b/fcs/samples/EditorService/EditorService.fsproj @@ -12,7 +12,7 @@ - + diff --git a/fcs/samples/FscExe/FscExe.fsproj b/fcs/samples/FscExe/FscExe.fsproj index c482656827f..b2b146913a1 100644 --- a/fcs/samples/FscExe/FscExe.fsproj +++ b/fcs/samples/FscExe/FscExe.fsproj @@ -14,7 +14,7 @@ - + diff --git a/fcs/samples/FsiExe/FsiExe.fsproj b/fcs/samples/FsiExe/FsiExe.fsproj index 7377f2c2912..aae2ba03182 100644 --- a/fcs/samples/FsiExe/FsiExe.fsproj +++ b/fcs/samples/FsiExe/FsiExe.fsproj @@ -16,7 +16,7 @@ - + diff --git a/fcs/samples/InteractiveService/InteractiveService.fsproj b/fcs/samples/InteractiveService/InteractiveService.fsproj index 7aa42497261..387439fcfdd 100644 --- a/fcs/samples/InteractiveService/InteractiveService.fsproj +++ b/fcs/samples/InteractiveService/InteractiveService.fsproj @@ -12,7 +12,7 @@ - + diff --git a/fcs/samples/Tokenizer/Tokenizer.fsproj b/fcs/samples/Tokenizer/Tokenizer.fsproj index 7aa42497261..387439fcfdd 100644 --- a/fcs/samples/Tokenizer/Tokenizer.fsproj +++ b/fcs/samples/Tokenizer/Tokenizer.fsproj @@ -12,7 +12,7 @@ - + diff --git a/fcs/samples/UntypedTree/UntypedTree.fsproj b/fcs/samples/UntypedTree/UntypedTree.fsproj index 7aa42497261..387439fcfdd 100644 --- a/fcs/samples/UntypedTree/UntypedTree.fsproj +++ b/fcs/samples/UntypedTree/UntypedTree.fsproj @@ -12,7 +12,7 @@ - + diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 66622b7e2a4..ab92a747b5e 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -432,16 +432,10 @@ module List = let existsSquared f xss = xss |> List.exists (fun xs -> xs |> List.exists (fun x -> f x)) let mapiFoldSquared f z xss = mapFoldSquared f z (xss |> mapiSquared (fun i j x -> (i,j,x))) -type ValueOption<'T> with - member x.IsSome = match x with ValueSome _ -> true | ValueNone -> false - member x.IsNone = match x with ValueSome _ -> false | ValueNone -> true - member x.Value = match x with ValueSome r -> r | ValueNone -> failwith "ValueOption.Value: value is None" - [] module ValueOption = let inline ofOption x = match x with Some x -> ValueSome x | None -> ValueNone let inline bind f x = match x with ValueSome x -> f x | ValueNone -> ValueNone - let inline get x = match x with ValueSome x -> x | ValueNone -> failwith "ValueOption.get" let inline isSome x = match x with ValueSome _ -> true | ValueNone -> false let inline isNone x = match x with ValueSome _ -> false | ValueNone -> true diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 8aaf8e2571e..0b95e6f72f3 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -1100,7 +1100,7 @@ let AddEntityForProvidedType (amap: Import.ImportMap, modref: ModuleOrNamespaceR let tycon = Construct.NewProvidedTycon(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m) modref.ModuleOrNamespaceType.AddProvidedTypeEntity(tycon) let tcref = modref.NestedTyconRef tycon - System.Diagnostics.Debug.Assert(modref.TryDeref.IsSome) + System.Diagnostics.Debug.Assert(ValueOption.isSome modref.TryDeref) tcref diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index e4b93403385..599392383d7 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -3102,7 +3102,7 @@ and OptimizeBinding cenv isRec env (TBind(vref, expr, spBind)) = | None -> false | Some mbrTyconRef -> // Check we can deref system_MarshalByRefObject_tcref. When compiling against the Silverlight mscorlib we can't - if mbrTyconRef.TryDeref.IsSome then + if ValueOption.isSome mbrTyconRef.TryDeref then // Check if this is a subtype of MarshalByRefObject assert (cenv.g.system_MarshalByRefObject_ty.IsSome) ExistsSameHeadTypeInHierarchy cenv.g cenv.amap vref.Range (generalizedTyconRef tcref) cenv.g.system_MarshalByRefObject_ty.Value diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index 48dcefb7d6f..99fdf6c751a 100644 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -66,7 +66,7 @@ type QuotationGenerationScope = static member ComputeQuotationFormat g = let deserializeExValRef = ValRefForIntrinsic g.deserialize_quoted_FSharp_40_plus_info - if deserializeExValRef.TryDeref.IsSome then + if ValueOption.isSome deserializeExValRef.TryDeref then QuotationSerializationFormat.FSharp_40_Plus else QuotationSerializationFormat.FSharp_20_Plus diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 8e67f2cb5c3..dfebdb9bae0 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -675,7 +675,7 @@ let mkOuterCompiledTupleTy g isStruct tupElemTys = let marker = TType_app (mkCompiledTupleTyconRef g isStruct 1, [tyB]) TType_app (tcref, tysA@[marker]) | _ -> - TType_app (tcref, tysA@[TType_tuple (TupInfo.Const isStruct, tysB)]) + TType_app (tcref, tysA@[TType_tuple (mkTupInfo isStruct, tysB)]) //--------------------------------------------------------------------------- // Remove inference equations and abbreviations from types @@ -7556,7 +7556,9 @@ let rec TypeHasDefaultValue g m ty = elif isStructTupleTy g ty then destStructTupleTy g ty |> List.forall (TypeHasDefaultValue g m) elif isStructAnonRecdTy g ty then - tryDestAnonRecdTy g ty |> ValueOption.get |> snd |> List.forall (TypeHasDefaultValue g m) + match tryDestAnonRecdTy g ty with + | ValueNone -> true + | ValueSome (_, ptys) -> ptys |> List.forall (TypeHasDefaultValue g m) else // All struct types defined in other .NET languages have a DefaultValue regardless of their // instantiation @@ -7570,8 +7572,9 @@ let (|SpecialComparableHeadType|_|) g ty = let _tupInfo, elemTys = destAnyTupleTy g ty Some elemTys elif isAnonRecdTy g ty then - let _anonInfo, elemTys = tryDestAnonRecdTy g ty |> ValueOption.get - Some elemTys + match tryDestAnonRecdTy g ty with + | ValueNone -> Some [] + | ValueSome (_anonInfo, elemTys) -> Some elemTys else match tryAppTy g ty with | ValueSome (tcref, tinst) -> @@ -8338,12 +8341,12 @@ let rec mkCompiledTuple g isStruct (argtys, args, m) = ty8, arg8 | _ -> let ty8enc = TType_app((if isStruct then g.struct_tuple1_tcr else g.ref_tuple1_tcr), [ty8]) - let v8enc = Expr.Op (TOp.Tuple (TupInfo.Const isStruct), [ty8], [arg8], m) + let v8enc = Expr.Op (TOp.Tuple (mkTupInfo isStruct), [ty8], [arg8], m) ty8enc, v8enc | _ -> let a, b, c, d = mkCompiledTuple g isStruct (argtysB, argsB, m) let ty8plus = TType_app(a, b) - let v8plus = Expr.Op (TOp.Tuple(TupInfo.Const isStruct), b, c, d) + let v8plus = Expr.Op (TOp.Tuple(mkTupInfo isStruct), b, c, d) ty8plus, v8plus let argtysAB = argtysA @ [ty8] (mkCompiledTupleTyconRef g isStruct (List.length argtysAB), argtysAB, argsA @ [v8], m) diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index cdd45c70bd6..d86546b3699 100755 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1433,7 +1433,7 @@ let p_trait (TTrait(a,b,c,d,e,f)) st = let u_anonInfo_data st = let (ccu, info, nms) = u_tup3 u_ccuref u_bool (u_array u_ident) st - AnonRecdTypeInfo.Create (ccu, TupInfo.Const info, nms) + AnonRecdTypeInfo.Create (ccu, mkTupInfo info, nms) let u_anonInfo st = u_osgn_decl st.ianoninfos u_anonInfo_data st diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index d85153a0109..23abddc3cfd 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -713,13 +713,13 @@ let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExpl let tupInfo, ptys = if isAnyTupleTy cenv.g knownTy then let tupInfo, ptys = destAnyTupleTy cenv.g knownTy - let tupInfo = (if isExplicitStruct then TupInfo.Const isExplicitStruct else tupInfo) + let tupInfo = (if isExplicitStruct then tupInfoStruct else tupInfo) let ptys = if List.length ps = List.length ptys then ptys else NewInferenceTypes ps tupInfo, ptys else - TupInfo.Const isExplicitStruct, NewInferenceTypes ps + mkTupInfo isExplicitStruct, NewInferenceTypes ps let contextInfo = match contextInfo with @@ -739,7 +739,7 @@ let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplic // Note: use the assembly of the known type, not the current assembly // Note: use the structness of the known type, unless explicit // Note: use the names of our type, since they are always explicit - let tupInfo = (if isExplicitStruct then TupInfo.Const isExplicitStruct else anonInfo.TupInfo) + let tupInfo = (if isExplicitStruct then tupInfoStruct else anonInfo.TupInfo) let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) let ptys = if List.length ptys = Array.length unsortedNames then ptys @@ -747,7 +747,7 @@ let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplic anonInfo, ptys | ValueNone -> // Note: no known anonymous record type - use our assembly - let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, TupInfo.Const isExplicitStruct, unsortedNames) + let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, mkTupInfo isExplicitStruct, unsortedNames) anonInfo, NewInferenceTypes (Array.toList anonInfo.SortedNames) let ty2 = TType_anon (anonInfo, ptys) AddCxTypeEqualsType contextInfo denv cenv.css m ty ty2 @@ -4619,7 +4619,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped | _ -> error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), m)) | SynType.Tuple(isStruct, args, m) -> - let tupInfo = TupInfo.Const isStruct + let tupInfo = mkTupInfo isStruct if isStruct then let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m TType_tuple(tupInfo,args'),tpenv @@ -4633,7 +4633,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped TType_tuple(tupInfo,args'),tpenv | SynType.AnonRecd(isStruct, args,m) -> - let tupInfo = TupInfo.Const isStruct + let tupInfo = mkTupInfo isStruct let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv (args |> List.map snd |> List.map (fun x -> (false,x))) m let unsortedIds = args |> List.map fst |> List.toArray let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, tupInfo, unsortedIds) diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 68d5fcbfd5f..ab4cc75a977 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -86,7 +86,7 @@ module Impl = let entityIsUnresolved(entity:EntityRef) = match entity with | ERefNonLocal(NonLocalEntityRef(ccu, _)) -> - ccu.IsUnresolvedReference && entity.TryDeref.IsNone + ccu.IsUnresolvedReference && ValueOption.isNone entity.TryDeref | _ -> false let checkEntityIsResolved(entity:EntityRef) = @@ -756,10 +756,10 @@ and FSharpUnionCase(cenv, v: UnionCaseRef) = let isUnresolved() = - entityIsUnresolved v.TyconRef || v.TryUnionCase.IsNone + entityIsUnresolved v.TyconRef || ValueOption.isNone v.TryUnionCase let checkIsResolved() = checkEntityIsResolved v.TyconRef - if v.TryUnionCase.IsNone then + if ValueOption.isNone v.TryUnionCase then invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName) member __.IsUnresolved = @@ -874,8 +874,8 @@ and FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = d.TryDeclaringTyconRef |> Option.exists entityIsUnresolved || match d with | AnonField _ -> false - | RecdOrClass v -> v.TryRecdField.IsNone - | Union (v, _) -> v.TryUnionCase.IsNone + | RecdOrClass v -> ValueOption.isNone v.TryRecdField + | Union (v, _) -> ValueOption.isNone v.TryUnionCase | ILField _ -> false let checkIsResolved() = @@ -883,10 +883,10 @@ and FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = match d with | AnonField _ -> () | RecdOrClass v -> - if v.TryRecdField.IsNone then + if ValueOption.isNone v.TryRecdField then invalidOp (sprintf "The record field '%s' could not be found in the target type" v.FieldName) | Union (v, _) -> - if v.TryUnionCase.IsNone then + if ValueOption.isNone v.TryUnionCase then invalidOp (sprintf "The union case '%s' could not be found in the target type" v.CaseName) | ILField _ -> () @@ -1378,7 +1378,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = let isUnresolved() = match fsharpInfo() with | None -> false - | Some v -> v.TryDeref.IsNone + | Some v -> ValueOption.isNone v.TryDeref let checkIsResolved() = if isUnresolved() then diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index a7fd3b28c56..fc8354e3432 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -3263,7 +3263,7 @@ and ValueSome tcr.binding /// Is the destination assembly available? - member tcr.CanDeref = tcr.TryDeref.IsSome + member tcr.CanDeref = ValueOption.isSome tcr.TryDeref /// Gets the data indicating the compiled representation of a type or module in terms of Abstract IL data structures. member x.CompiledRepresentation = x.Deref.CompiledRepresentation @@ -5199,6 +5199,7 @@ let arityOfVal (v:Val) = (match v.ValReprInfo with None -> ValReprInfo.emptyValD let tupInfoRef = TupInfo.Const false let tupInfoStruct = TupInfo.Const true +let mkTupInfo b = if b then tupInfoStruct else tupInfoRef let structnessDefault = false let mkRawRefTupleTy tys = TType_tuple (tupInfoRef, tys) let mkRawStructTupleTy tys = TType_tuple (tupInfoStruct, tys) From d5a52cc55c9954636853e9a1618a5f887aefeb55 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 24 Oct 2018 02:40:27 +0100 Subject: [PATCH 25/48] Update DotnetCLIToolsVersion.txt (#5809) --- DotnetCLIToolsVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DotnetCLIToolsVersion.txt b/DotnetCLIToolsVersion.txt index 6e840019a3b..c735fa77fd7 100644 --- a/DotnetCLIToolsVersion.txt +++ b/DotnetCLIToolsVersion.txt @@ -1 +1 @@ - 2.1.400-preview-009197 + 2.1.403 From dc8373a3e73b82c9ca60d764f4326316bb7047b6 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 24 Oct 2018 08:49:30 -0700 Subject: [PATCH 26/48] Fix: 713439 (#5810) --- .../ConsoleProject/Template/ConsoleApplication.vstemplate | 4 ++-- .../LibraryProject/Template/Library.vstemplate | 4 ++-- .../TutorialProject/Template/Tutorial.vstemplate | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate index fccc228384f..5717c132c33 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate @@ -26,8 +26,8 @@ - - + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate index bbfb2d3f25e..c74a2d18227 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate @@ -26,8 +26,8 @@ - - + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate index 62ae09d17e2..76fd069d5f8 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate @@ -24,8 +24,8 @@ - - + + From f77583afd6321c0019a9d1a818c5811f5e044842 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Wed, 24 Oct 2018 13:22:55 -0700 Subject: [PATCH 27/48] Cherry picking cross project reference fix into master (#5818) * Fixed referencing cross projects (#5698) * Fixed referencing cross projects * Fixed legacy project referencing CPS style project * Fixed tooling issues when changing solutions (#5721) --- .../FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs index 1bea848dae2..e9ce1769584 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs @@ -241,13 +241,15 @@ type internal ProjectSitesAndFiles() = yield Some project.Id, project.FilePath, outputPath, siteProvider | _ -> () - | (Some references), _ -> + | (Some references), Some (:? VisualStudioWorkspaceImpl as workspace) -> for p in references do match solutionService.GetProjectOfUniqueName(p.UniqueName) with | VSConstants.S_OK, (:? IProvideProjectSite as ps) -> - yield None, p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps + let path = ps.GetProjectSite().ProjectFileName + let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path) + yield Some projectId, p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps | _ -> () - | None, _ -> () + | _ -> () |] let solutionService = try Some (serviceProvider.GetService(typeof) :?> IVsSolution) with _ -> None seq { match solutionService with From 4a368d41e1d81465b28b8e64f89c062055af20b8 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Thu, 25 Oct 2018 19:14:01 +0100 Subject: [PATCH 28/48] [CompilerPerf] Fix large ranges (#4476) * Fix large ranges * update FCS * I can't add up * fix build * test fix * fix tests * fix tests * fix tests --- fcs/docsrc/content/ja/tokenizer.fsx | 2 +- fcs/docsrc/content/tokenizer.fsx | 2 +- fcs/samples/Tokenizer/Program.fs | 2 +- src/fsharp/range.fs | 138 +++++++++--------- src/fsharp/range.fsi | 6 +- src/fsharp/service/IncrementalBuild.fs | 5 +- src/fsharp/service/ServiceLexing.fs | 76 +++++----- src/fsharp/service/ServiceLexing.fsi | 19 ++- src/fsharp/service/service.fs | 16 +- src/fsharp/service/service.fsi | 2 +- tests/fsharp/tests.fs | 13 +- tests/fsharp/typecheck/sigs/neg102.fs | 2 +- tests/fsharp/typecheck/sigs/neg102.vsbsl | 18 +++ tests/fsharp/typecheck/sigs/neg103.vsbsl | 25 ++++ tests/fsharp/typecheck/sigs/neg110.bsl | 14 ++ tests/fsharp/typecheck/sigs/neg110.fs | 5 + tests/service/TokenizerTests.fs | 4 +- .../LanguageService/Tokenizer.fs | 8 +- .../src/FSharp.LanguageService/Colorize.fs | 4 +- 19 files changed, 223 insertions(+), 138 deletions(-) create mode 100644 tests/fsharp/typecheck/sigs/neg102.vsbsl create mode 100644 tests/fsharp/typecheck/sigs/neg103.vsbsl create mode 100644 tests/fsharp/typecheck/sigs/neg110.bsl create mode 100644 tests/fsharp/typecheck/sigs/neg110.fs diff --git a/fcs/docsrc/content/ja/tokenizer.fsx b/fcs/docsrc/content/ja/tokenizer.fsx index 589061e0b0a..cf5117bfbd0 100644 --- a/fcs/docsrc/content/ja/tokenizer.fsx +++ b/fcs/docsrc/content/ja/tokenizer.fsx @@ -73,7 +73,7 @@ let rec tokenizeLine (tokenizer:FSharpLineTokenizer) state = 必要となるような新しい状態を返します。 初期値としては `0L` を指定します: *) -tokenizeLine tokenizer 0L +tokenizeLine tokenizer FSharpTokenizerLexState.Initial (** この結果は LET WHITESPACE IDENT EQUALS INT32 という トークン名のシーケンスになります。 diff --git a/fcs/docsrc/content/tokenizer.fsx b/fcs/docsrc/content/tokenizer.fsx index 09d842ba8aa..9ac3d6f34d4 100644 --- a/fcs/docsrc/content/tokenizer.fsx +++ b/fcs/docsrc/content/tokenizer.fsx @@ -65,7 +65,7 @@ let rec tokenizeLine (tokenizer:FSharpLineTokenizer) state = The function returns the new state, which is needed if you need to tokenize multiple lines and an earlier line ends with a multi-line comment. As an initial state, we can use `0L`: *) -tokenizeLine tokenizer 0L +tokenizeLine tokenizer FSharpTokenizerLexState.Initial (** The result is a sequence of tokens with names LET, WHITESPACE, IDENT, EQUALS and INT32. There is a number of interesting properties on `FSharpTokenInfo` including: diff --git a/fcs/samples/Tokenizer/Program.fs b/fcs/samples/Tokenizer/Program.fs index 402fcc30295..9cc79e699f4 100644 --- a/fcs/samples/Tokenizer/Program.fs +++ b/fcs/samples/Tokenizer/Program.fs @@ -3,7 +3,7 @@ let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") let tokenizeLines (lines:string[]) = - [ let state = ref 0L + [ let state = ref FSharpTokenizerLexState.Initial for n, line in lines |> Seq.zip [ 0 .. lines.Length ] do let tokenizer = sourceTok.CreateLineTokenizer(line) let rec parseLine() = seq { diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs index 8649b700867..7f31e032a9f 100755 --- a/src/fsharp/range.fs +++ b/src/fsharp/range.fs @@ -6,98 +6,99 @@ module Microsoft.FSharp.Compiler.Range open System open System.IO open System.Collections.Generic +open System.Collections.Concurrent open Microsoft.FSharp.Core.Printf -open Internal.Utilities -open Microsoft.FSharp.Compiler.AbstractIL -open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Lib.Bits type FileIndex = int32 [] -let columnBitCount = 9 +let columnBitCount = 20 [] -let lineBitCount = 16 +let lineBitCount = 31 let posBitCount = lineBitCount + columnBitCount -let _ = assert (posBitCount <= 32) -let posColumnMask = mask32 0 columnBitCount -let lineColumnMask = mask32 columnBitCount lineBitCount -let inline (lsr) (x:int) (y:int) = int32 (uint32 x >>> y) +let _ = assert (posBitCount <= 64) +let posColumnMask = mask64 0 columnBitCount +let lineColumnMask = mask64 columnBitCount lineBitCount [] [] -type pos(code:int32) = +type pos(code:int64) = new (l, c) = let l = max 0 l let c = max 0 c - let p = ( c &&& posColumnMask) - ||| ((l <<< columnBitCount) &&& lineColumnMask) + let p = (int64 c &&& posColumnMask) + ||| ((int64 l <<< columnBitCount) &&& lineColumnMask) pos p - member p.Line = (code lsr columnBitCount) - member p.Column = (code &&& posColumnMask) + member p.Line = int32 (uint64 code >>> columnBitCount) + member p.Column = int32 (code &&& posColumnMask) member r.Encoding = code static member EncodingSize = posBitCount - static member Decode (code:int32) : pos = pos code + static member Decode (code:int64) : pos = pos code override p.Equals(obj) = match obj with :? pos as p2 -> code = p2.Encoding | _ -> false override p.GetHashCode() = hash code override p.ToString() = sprintf "(%d,%d)" p.Line p.Column [] -let fileIndexBitCount = 14 +let fileIndexBitCount = 24 [] -let startLineBitCount = lineBitCount +let startColumnBitCount = columnBitCount // 20 [] -let startColumnBitCount = columnBitCount +let endColumnBitCount = columnBitCount // 20 + [] -let heightBitCount = 15 // If necessary, could probably deduct one or two bits here without ill effect. +let startLineBitCount = lineBitCount // 31 [] -let endColumnBitCount = columnBitCount +let heightBitCount = 27 [] let isSyntheticBitCount = 1 #if DEBUG -let _ = assert (fileIndexBitCount + startLineBitCount + startColumnBitCount + heightBitCount + endColumnBitCount + isSyntheticBitCount = 64) +let _ = assert (fileIndexBitCount + startColumnBitCount + endColumnBitCount <= 64) +let _ = assert (startLineBitCount + heightBitCount + isSyntheticBitCount <= 64) #endif [] let fileIndexShift = 0 [] -let startLineShift = 14 +let startColumnShift = 24 [] -let startColumnShift = 30 +let endColumnShift = 44 + [] -let heightShift = 39 +let startLineShift = 0 [] -let endColumnShift = 54 +let heightShift = 31 [] -let isSyntheticShift = 63 +let isSyntheticShift = 58 [] -let fileIndexMask = 0b0000000000000000000000000000000000000000000000000011111111111111L +let fileIndexMask = 0b0000000000000000000000000000000000000000111111111111111111111111L [] -let startLineMask = 0b0000000000000000000000000000000000111111111111111100000000000000L +let startColumnMask = 0b0000000000000000000011111111111111111111000000000000000000000000L [] -let startColumnMask = 0b0000000000000000000000000111111111000000000000000000000000000000L +let endColumnMask = 0b1111111111111111111100000000000000000000000000000000000000000000L + [] -let heightMask = 0b0000000000111111111111111000000000000000000000000000000000000000L +let startLineMask = 0b0000000000000000000000000000000001111111111111111111111111111111L [] -let endColumnMask = 0b0111111111000000000000000000000000000000000000000000000000000000L +let heightMask = 0b0000001111111111111111111111111110000000000000000000000000000000L [] -let isSyntheticMask = 0b1000000000000000000000000000000000000000000000000000000000000000L +let isSyntheticMask = 0b0000010000000000000000000000000000000000000000000000000000000000L #if DEBUG -let _ = assert (startLineShift = fileIndexShift + fileIndexBitCount) -let _ = assert (startColumnShift = startLineShift + startLineBitCount) -let _ = assert (heightShift = startColumnShift + startColumnBitCount) -let _ = assert (endColumnShift = heightShift + heightBitCount) -let _ = assert (isSyntheticShift = endColumnShift + endColumnBitCount) -let _ = assert (fileIndexMask = mask64 0 fileIndexBitCount) +let _ = assert (startColumnShift = fileIndexShift + fileIndexBitCount) +let _ = assert (endColumnShift = startColumnShift + startColumnBitCount) + +let _ = assert (heightShift = startLineShift + startLineBitCount) +let _ = assert (isSyntheticShift = heightShift + heightBitCount) + +let _ = assert (fileIndexMask = mask64 fileIndexShift fileIndexBitCount) let _ = assert (startLineMask = mask64 startLineShift startLineBitCount) let _ = assert (startColumnMask = mask64 startColumnShift startColumnBitCount) let _ = assert (heightMask = mask64 heightShift heightBitCount) @@ -108,21 +109,17 @@ let _ = assert (isSyntheticMask = mask64 isSyntheticShift isSyntheticBitCount) // This is just a standard unique-index table type FileIndexTable() = let indexToFileTable = new ResizeArray<_>(11) - let fileToIndexTable = new Dictionary(11) + let fileToIndexTable = new ConcurrentDictionary() member t.FileToIndex f = let mutable res = 0 let ok = fileToIndexTable.TryGetValue(f, &res) if ok then res else lock fileToIndexTable (fun () -> - let mutable res = 0 in - let ok = fileToIndexTable.TryGetValue(f, &res) in - if ok then res - else - let n = indexToFileTable.Count in - indexToFileTable.Add(f) - fileToIndexTable.[f] <- n - n) + let n = indexToFileTable.Count in + indexToFileTable.Add(f) + fileToIndexTable.[f] <- n + n) member t.IndexToFile n = (if n < 0 then failwithf "fileOfFileIndex: negative argument: n = %d\n" n) @@ -147,28 +144,35 @@ let mkPos l c = pos (l, c) #else [] #endif -type range(code:int64) = - static member Zero = range(0L) +type range(code1:int64, code2: int64) = + static member Zero = range(0L, 0L) new (fidx, bl, bc, el, ec) = - range( int64 fidx - ||| (int64 bl <<< startLineShift) - ||| (int64 bc <<< startColumnShift) - ||| (int64 (el-bl) <<< heightShift) - ||| (int64 ec <<< endColumnShift) ) + let code1 = ((int64 fidx) &&& fileIndexMask) + ||| ((int64 bc <<< startColumnShift) &&& startColumnMask) + ||| ((int64 ec <<< endColumnShift) &&& endColumnMask) + let code2 = + ((int64 bl <<< startLineShift) &&& startLineMask) + ||| ((int64 (el-bl) <<< heightShift) &&& heightMask) + range(code1, code2) new (fidx, b:pos, e:pos) = range(fidx, b.Line, b.Column, e.Line, e.Column) - member r.StartLine = int32((code &&& startLineMask) >>> startLineShift) - member r.StartColumn = int32((code &&& startColumnMask) >>> startColumnShift) - member r.EndLine = int32((code &&& heightMask) >>> heightShift) + r.StartLine - member r.EndColumn = int32((code &&& endColumnMask) >>> endColumnShift) - member r.IsSynthetic = int32((code &&& isSyntheticMask) >>> isSyntheticShift) <> 0 + member r.StartLine = int32((code2 &&& startLineMask) >>> startLineShift) + member r.StartColumn = int32((code1 &&& startColumnMask) >>> startColumnShift) + member r.EndLine = int32((code2 &&& heightMask) >>> heightShift) + r.StartLine + member r.EndColumn = int32((code1 &&& endColumnMask) >>> endColumnShift) + member r.IsSynthetic = int32((code2 &&& isSyntheticMask) >>> isSyntheticShift) <> 0 member r.Start = pos (r.StartLine, r.StartColumn) member r.End = pos (r.EndLine, r.EndColumn) - member r.FileIndex = int32(code &&& fileIndexMask) + member r.FileIndex = int32(code1 &&& fileIndexMask) member m.StartRange = range (m.FileIndex, m.Start, m.Start) member m.EndRange = range (m.FileIndex, m.End, m.End) member r.FileName = fileOfFileIndex r.FileIndex + member r.MakeSynthetic() = range(code1, code2 ||| isSyntheticMask) + + member r.Code1 = code1 + member r.Code2 = code2 + #if DEBUG member r.DebugCode = try @@ -182,12 +186,14 @@ type range(code:int64) = with e -> e.ToString() #endif - member r.MakeSynthetic() = range(code ||| isSyntheticMask) - override r.ToString() = sprintf "%s (%d,%d--%d,%d) IsSynthetic=%b" r.FileName r.StartLine r.StartColumn r.EndLine r.EndColumn r.IsSynthetic + member r.ToShortString() = sprintf "(%d,%d--%d,%d)" r.StartLine r.StartColumn r.EndLine r.EndColumn - member r.Code = code - override r.Equals(obj) = match obj with :? range as r2 -> code = r2.Code | _ -> false - override r.GetHashCode() = hash code + + override r.Equals(obj) = match obj with :? range as r2 -> code1 = r2.Code1 && code2 = r2.Code2 | _ -> false + + override r.GetHashCode() = hash code1 + hash code2 + + override r.ToString() = sprintf "%s (%d,%d--%d,%d) IsSynthetic=%b" r.FileName r.StartLine r.StartColumn r.EndLine r.EndColumn r.IsSynthetic let mkRange f b e = // remove relative parts from full path diff --git a/src/fsharp/range.fsi b/src/fsharp/range.fsi index c3805f4659a..5b3ea1e24d7 100755 --- a/src/fsharp/range.fsi +++ b/src/fsharp/range.fsi @@ -20,10 +20,10 @@ type pos = member Line : int member Column : int - member Encoding : int32 - static member Decode : int32 -> pos + member Encoding : int64 + static member Decode : int64 -> pos /// The maximum number of bits needed to store an encoded position - static member EncodingSize : int32 + static member EncodingSize : int /// Create a position for the given line and column val mkPos : line:int -> column:int -> pos diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 7065d72a6f0..e441ad16dac 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -1282,8 +1282,9 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput result, sourceRange, filename, errorLogger.GetErrors () with exn -> - System.Diagnostics.Debug.Assert(false, sprintf "unexpected failure in IncrementalFSharpBuild.Parse\nerror = %s" (exn.ToString())) - failwith "last chance failure" + let msg = sprintf "unexpected failure in IncrementalFSharpBuild.Parse\nerror = %s" (exn.ToString()) + System.Diagnostics.Debug.Assert(false, msg) + failwith msg /// This is a build task function that gets placed into the build rules as the computation for a Vector.Stamp diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index abf3cde1c70..6b266bf91ef 100755 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -307,7 +307,14 @@ module internal TestExpose = //---------------------------------------------------------------------------- // Lexer states encoded to/from integers //-------------------------------------------------------------------------- -type FSharpTokenizerLexState = int64 +[] +type FSharpTokenizerLexState = + { PosBits: int64 + OtherBits: int64 } + static member Initial = { PosBits = 0L; OtherBits = 0L } + member this.Equals (other: FSharpTokenizerLexState) = (this.PosBits = other.PosBits) && (this.OtherBits = other.OtherBits) + override this.Equals (obj: obj) = match obj with :? FSharpTokenizerLexState as other -> this.Equals(other) | _ -> false + override this.GetHashCode () = hash this.PosBits + hash this.OtherBits type FSharpTokenizerColorState = | Token = 1 @@ -323,7 +330,6 @@ type FSharpTokenizerColorState = | EndLineThenToken = 12 | TripleQuoteString = 13 | TripleQuoteStringInComment = 14 - | InitialState = 0 @@ -348,31 +354,25 @@ module internal LexerStateEncoding = // Note that this will discard all lexcont state, including the ifdefStack. let revertToDefaultLexCont = LexCont.Token [] - let resize32 (i:int32) : FSharpTokenizerLexState = int64 i - let lexstateNumBits = 4 - let ncommentsNumBits = 2 - let startPosNumBits = pos.EncodingSize + let ncommentsNumBits = 4 let hardwhiteNumBits = 1 - let ifdefstackCountNumBits = 4 - let ifdefstackNumBits = 16 // 0 means if, 1 means else + let ifdefstackCountNumBits = 8 + let ifdefstackNumBits = 24 // 0 means if, 1 means else let _ = assert (lexstateNumBits + ncommentsNumBits - + startPosNumBits + hardwhiteNumBits + ifdefstackCountNumBits + ifdefstackNumBits <= 64) let lexstateStart = 0 let ncommentsStart = lexstateNumBits - let startPosStart = lexstateNumBits+ncommentsNumBits - let hardwhitePosStart = lexstateNumBits+ncommentsNumBits+startPosNumBits - let ifdefstackCountStart = lexstateNumBits+ncommentsNumBits+startPosNumBits+hardwhiteNumBits - let ifdefstackStart = lexstateNumBits+ncommentsNumBits+startPosNumBits+hardwhiteNumBits+ifdefstackCountNumBits + let hardwhitePosStart = lexstateNumBits+ncommentsNumBits + let ifdefstackCountStart = lexstateNumBits+ncommentsNumBits+hardwhiteNumBits + let ifdefstackStart = lexstateNumBits+ncommentsNumBits+hardwhiteNumBits+ifdefstackCountNumBits let lexstateMask = Bits.mask64 lexstateStart lexstateNumBits let ncommentsMask = Bits.mask64 ncommentsStart ncommentsNumBits - let startPosMask = Bits.mask64 startPosStart startPosNumBits let hardwhitePosMask = Bits.mask64 hardwhitePosStart hardwhiteNumBits let ifdefstackCountMask = Bits.mask64 ifdefstackCountStart ifdefstackCountNumBits let ifdefstackMask = Bits.mask64 ifdefstackStart ifdefstackNumBits @@ -381,7 +381,7 @@ module internal LexerStateEncoding = let boolOfBit n = (n = 1L) let inline colorStateOfLexState (state: FSharpTokenizerLexState) = - enum (int32 ((state &&& lexstateMask) >>> lexstateStart)) + enum (int32 ((state.OtherBits &&& lexstateMask) >>> lexstateStart)) let inline lexStateOfColorState (state: FSharpTokenizerColorState) = (int64 state <<< lexstateStart) &&& lexstateMask @@ -396,42 +396,46 @@ module internal LexerStateEncoding = ifdefStackBits <- (ifdefStackBits ||| (1 <<< ifdefStackCount)) ifdefStackCount <- ifdefStackCount + 1 - lexStateOfColorState colorState - ||| ((ncomments <<< ncommentsStart) &&& ncommentsMask) - ||| ((resize32 b.Encoding <<< startPosStart) &&& startPosMask) - ||| ((resize32 (bitOfBool light) <<< hardwhitePosStart) &&& hardwhitePosMask) - ||| ((resize32 ifdefStackCount <<< ifdefstackCountStart) &&& ifdefstackCountMask) - ||| ((resize32 ifdefStackBits <<< ifdefstackStart) &&& ifdefstackMask) + let bits = + lexStateOfColorState colorState + ||| ((ncomments <<< ncommentsStart) &&& ncommentsMask) + ||| ((int64 (bitOfBool light) <<< hardwhitePosStart) &&& hardwhitePosMask) + ||| ((int64 ifdefStackCount <<< ifdefstackCountStart) &&& ifdefstackCountMask) + ||| ((int64 ifdefStackBits <<< ifdefstackStart) &&& ifdefstackMask) + { PosBits = b.Encoding + OtherBits = bits } + let decodeLexCont (state:FSharpTokenizerLexState) = let mutable ifDefs = [] - let ifdefStackCount = (int32) ((state &&& ifdefstackCountMask) >>> ifdefstackCountStart) + let bits = state.OtherBits + let ifdefStackCount = (int32) ((bits &&& ifdefstackCountMask) >>> ifdefstackCountStart) if ifdefStackCount>0 then - let ifdefStack = (int32) ((state &&& ifdefstackMask) >>> ifdefstackStart) + let ifdefStack = (int32) ((bits &&& ifdefstackMask) >>> ifdefstackStart) for i in 1..ifdefStackCount do let bit = ifdefStackCount-i let mask = 1 <<< bit let ifDef = (if ifdefStack &&& mask = 0 then IfDefIf else IfDefElse) ifDefs<-(ifDef,range0)::ifDefs colorStateOfLexState state, - (int32) ((state &&& ncommentsMask) >>> ncommentsStart), - pos.Decode (int32 ((state &&& startPosMask) >>> startPosStart)), + int32 ((bits &&& ncommentsMask) >>> ncommentsStart), + pos.Decode state.PosBits, ifDefs, - boolOfBit ((state &&& hardwhitePosMask) >>> hardwhitePosStart) + boolOfBit ((bits &&& hardwhitePosMask) >>> hardwhitePosStart) let encodeLexInt lightSyntaxStatus (lexcont:LexerWhitespaceContinuation) = let tag,n1,p1,ifd = match lexcont with | LexCont.Token ifd -> FSharpTokenizerColorState.Token, 0L, pos0, ifd - | LexCont.IfDefSkip (ifd,n,m) -> FSharpTokenizerColorState.IfDefSkip, resize32 n, m.Start, ifd - | LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n,m)) -> FSharpTokenizerColorState.EndLineThenSkip, resize32 n, m.Start, ifd + | LexCont.IfDefSkip (ifd,n,m) -> FSharpTokenizerColorState.IfDefSkip, int64 n, m.Start, ifd + | LexCont.EndLine(LexerEndlineContinuation.Skip(ifd,n,m)) -> FSharpTokenizerColorState.EndLineThenSkip, int64 n, m.Start, ifd | LexCont.EndLine(LexerEndlineContinuation.Token(ifd)) -> FSharpTokenizerColorState.EndLineThenToken, 0L, pos0, ifd | LexCont.String (ifd,m) -> FSharpTokenizerColorState.String, 0L, m.Start, ifd - | LexCont.Comment (ifd,n,m) -> FSharpTokenizerColorState.Comment, resize32 n, m.Start, ifd - | LexCont.SingleLineComment (ifd,n,m) -> FSharpTokenizerColorState.SingleLineComment, resize32 n, m.Start, ifd - | LexCont.StringInComment (ifd,n,m) -> FSharpTokenizerColorState.StringInComment, resize32 n, m.Start, ifd - | LexCont.VerbatimStringInComment (ifd,n,m) -> FSharpTokenizerColorState.VerbatimStringInComment, resize32 n, m.Start, ifd - | LexCont.TripleQuoteStringInComment (ifd,n,m) -> FSharpTokenizerColorState.TripleQuoteStringInComment,resize32 n, m.Start, ifd + | LexCont.Comment (ifd,n,m) -> FSharpTokenizerColorState.Comment, int64 n, m.Start, ifd + | LexCont.SingleLineComment (ifd,n,m) -> FSharpTokenizerColorState.SingleLineComment, int64 n, m.Start, ifd + | LexCont.StringInComment (ifd,n,m) -> FSharpTokenizerColorState.StringInComment, int64 n, m.Start, ifd + | LexCont.VerbatimStringInComment (ifd,n,m) -> FSharpTokenizerColorState.VerbatimStringInComment, int64 n, m.Start, ifd + | LexCont.TripleQuoteStringInComment (ifd,n,m) -> FSharpTokenizerColorState.TripleQuoteStringInComment,int64 n, m.Start, ifd | LexCont.MLOnly (ifd,m) -> FSharpTokenizerColorState.CamlOnly, 0L, m.Start, ifd | LexCont.VerbatimString (ifd,m) -> FSharpTokenizerColorState.VerbatimString, 0L, m.Start, ifd | LexCont.TripleQuoteString (ifd,m) -> FSharpTokenizerColorState.TripleQuoteString, 0L, m.Start, ifd @@ -576,7 +580,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | None -> lexbuf.EndPos <- Internal.Utilities.Text.Lexing.Position.Empty | Some(value) -> resetLexbufPos value lexbuf - member x.ScanToken(lexintInitial) : Option * FSharpTokenizerLexState = + member x.ScanToken(lexintInitial) : FSharpTokenInfo option * FSharpTokenizerLexState = use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> DiscardErrorsLogger) @@ -749,10 +753,10 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, LexerStateEncoding.colorStateOfLexState lexState static member LexStateOfColorState(colorState: FSharpTokenizerColorState) = - LexerStateEncoding.lexStateOfColorState colorState + { PosBits = 0L; OtherBits = LexerStateEncoding.lexStateOfColorState colorState } [] -type FSharpSourceTokenizer(defineConstants : string list, filename : Option) = +type FSharpSourceTokenizer(defineConstants : string list, filename : string option) = let lexResourceManager = new Lexhelp.LexResourceManager() let lexArgsLightOn = mkLexargs(filename,defineConstants,LightSyntaxStatus(true,false),lexResourceManager, ref [],DiscardErrorsLogger) diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 1501f45415b..d354e452e1c 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -8,7 +8,12 @@ type Position = int * int type Range = Position * Position /// Represents encoded information for the end-of-line continuation of lexing -type FSharpTokenizerLexState = int64 +[] +type FSharpTokenizerLexState = + { PosBits: int64 + OtherBits: int64 } + static member Initial : FSharpTokenizerLexState + member Equals : FSharpTokenizerLexState -> bool /// Represents stable information for the state of the laxing engine at the end of a line type FSharpTokenizerColorState = @@ -27,7 +32,6 @@ type FSharpTokenizerColorState = | TripleQuoteStringInComment = 14 | InitialState = 0 - /// Gives an indicattion of the color class to assign to the token an IDE type FSharpTokenColorKind = | Default = 0 @@ -193,21 +197,28 @@ module FSharpTokenTag = type FSharpTokenInfo = { /// Left column of the token. LeftColumn:int + /// Right column of the token. RightColumn:int + ColorClass:FSharpTokenColorKind + /// Gives an indication of the class to assign to the token an IDE CharClass:FSharpTokenCharKind + /// Actions taken when the token is typed FSharpTokenTriggerClass:FSharpTokenTriggerClass + /// The tag is an integer identifier for the token Tag:int + /// Provides additional information about the token TokenName:string; + /// The full length consumed by this match, including delayed tokens (which can be ignored in naive lexers) FullMatchedLength: int } -/// Object to tokenize a line of F# source code, starting with the given lexState. The lexState should be 0 for +/// Object to tokenize a line of F# source code, starting with the given lexState. The lexState should be FSharpTokenizerLexState.Initial for /// the first line of text. Returns an array of ranges of the text and two enumerations categorizing the /// tokens and characters covered by that range, i.e. FSharpTokenColorKind and FSharpTokenCharKind. The enumerations /// are somewhat adhoc but useful enough to give good colorization options to the user in an IDE. @@ -221,7 +232,6 @@ type FSharpLineTokenizer = static member ColorStateOfLexState : FSharpTokenizerLexState -> FSharpTokenizerColorState static member LexStateOfColorState : FSharpTokenizerColorState -> FSharpTokenizerLexState - /// Tokenizer for a source file. Holds some expensive-to-compute resources at the scope of the file. [] type FSharpSourceTokenizer = @@ -229,7 +239,6 @@ type FSharpSourceTokenizer = member CreateLineTokenizer : lineText:string -> FSharpLineTokenizer member CreateBufferTokenizer : bufferFiller:(char[] * int * int -> int) -> FSharpLineTokenizer - module internal TestExpose = val TokenInfo : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass) diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index be7157ddde7..fc4c3b67dc1 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -3288,23 +3288,23 @@ type FSharpChecker(legacyReferenceResolver, projectCacheSize, keepAssemblyConten member internal __.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache /// Tokenize a single line, returning token information and a tokenization state represented by an integer - member x.TokenizeLine (line: string, state: int64) : FSharpTokenInfo[] * int64 = + member x.TokenizeLine (line: string, state: FSharpTokenizerLexState) = let tokenizer = FSharpSourceTokenizer([], None) let lineTokenizer = tokenizer.CreateLineTokenizer line - let state = ref (None, state) + let mutable state = (None, state) let tokens = - [| while (state := lineTokenizer.ScanToken (snd !state); (fst !state).IsSome) do - yield (fst !state).Value |] - tokens, snd !state + [| while (state <- lineTokenizer.ScanToken (snd state); (fst state).IsSome) do + yield (fst state).Value |] + tokens, snd state /// Tokenize an entire file, line by line member x.TokenizeFile (source: string) : FSharpTokenInfo[][] = let lines = source.Split('\n') let tokens = - [| let state = ref 0L + [| let mutable state = FSharpTokenizerLexState.Initial for line in lines do - let tokens, n = x.TokenizeLine(line, !state) - state := n + let tokens, n = x.TokenizeLine(line, state) + state <- n yield tokens |] tokens diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi index 5ccb31e4502..2d07c235614 100755 --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -711,7 +711,7 @@ type public FSharpChecker = member internal ReferenceResolver : ReferenceResolver.Resolver /// Tokenize a single line, returning token information and a tokenization state represented by an integer - member TokenizeLine: line:string * state:int64 -> FSharpTokenInfo [] * int64 + member TokenizeLine: line:string * state:FSharpTokenizerLexState-> FSharpTokenInfo [] * FSharpTokenizerLexState /// Tokenize an entire file, line by line member TokenizeFile: source:string -> FSharpTokenInfo [] [] diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 72e48f87e90..d29f92e5e79 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -2389,6 +2389,12 @@ module TypecheckTests = [] let ``type check neg102`` () = singleNegTest (testConfig "typecheck/sigs") "neg102" + [] + let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" + + [] + let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" + [] let ``type check neg106`` () = singleNegTest (testConfig "typecheck/sigs") "neg106" @@ -2401,11 +2407,8 @@ module TypecheckTests = [] let ``type check neg109`` () = singleNegTest (testConfig "typecheck/sigs") "neg109" - [] - let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" - - [] - let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" + [] + let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110" [] let ``type check neg_issue_3752`` () = singleNegTest (testConfig "typecheck/sigs") "neg_issue_3752" diff --git a/tests/fsharp/typecheck/sigs/neg102.fs b/tests/fsharp/typecheck/sigs/neg102.fs index 5eb13cdc79f..972967ae8eb 100644 --- a/tests/fsharp/typecheck/sigs/neg102.fs +++ b/tests/fsharp/typecheck/sigs/neg102.fs @@ -44,4 +44,4 @@ module FS0104 = let f3 = function | System.DateTimeKind.Unspecified -> "Unspecified" | System.DateTimeKind.Utc -> "Utc" - | System.DateTimeKind.Local -> "Local" \ No newline at end of file + | System.DateTimeKind.Local -> "Local" diff --git a/tests/fsharp/typecheck/sigs/neg102.vsbsl b/tests/fsharp/typecheck/sigs/neg102.vsbsl new file mode 100644 index 00000000000..333f0e34d17 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg102.vsbsl @@ -0,0 +1,18 @@ + +neg102.fs(9,14,9,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value 'B' may indicate a case not covered by the pattern(s). + +neg102.fs(12,14,12,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s). + +neg102.fs(15,14,15,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value 'EnumABC.B' may indicate a case not covered by the pattern(s). + +neg102.fs(18,14,18,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value 'EnumABC.C' may indicate a case not covered by the pattern(s). + +neg102.fs(22,14,22,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value 'Some (EnumABC.C)' may indicate a case not covered by the pattern(s). + +neg102.fs(27,14,27,22): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value 'System.DateTimeKind.Utc' may indicate a case not covered by the pattern(s). + +neg102.fs(32,14,32,22): typecheck error FS0104: Enums may take values outside known cases. For example, the value 'enum (2)' may indicate a case not covered by the pattern(s). + +neg102.fs(37,14,37,22): typecheck error FS0104: Enums may take values outside known cases. For example, the value 'Some (enum (2))' may indicate a case not covered by the pattern(s). + +neg102.fs(44,14,44,22): typecheck error FS0104: Enums may take values outside known cases. For example, the value 'enum (3)' may indicate a case not covered by the pattern(s). diff --git a/tests/fsharp/typecheck/sigs/neg103.vsbsl b/tests/fsharp/typecheck/sigs/neg103.vsbsl new file mode 100644 index 00000000000..422a9e3bf81 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg103.vsbsl @@ -0,0 +1,25 @@ + +neg103.fs(7,12,7,22): typecheck error FS0001: This expression was expected to have type + 'Async<'a>' +but here has type + 'string' + +neg103.fs(12,7,12,15): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' + +neg103.fs(17,7,17,15): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' + +neg103.fs(21,7,21,9): typecheck error FS0001: This expression was expected to have type + 'Async' +but here has type + 'int' + +neg103.fs(25,11,25,19): typecheck error FS0001: This expression was expected to have type + 'int' +but here has type + 'MyUnion' diff --git a/tests/fsharp/typecheck/sigs/neg110.bsl b/tests/fsharp/typecheck/sigs/neg110.bsl new file mode 100644 index 00000000000..084a852ba7b --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg110.bsl @@ -0,0 +1,14 @@ + +neg110.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined. + +neg110.fs(2,552,2,557): typecheck error FS0039: The type 'fail1' is not defined. + +neg110.fs(3,624,3,629): typecheck error FS0039: The value or constructor 'fail2' is not defined. Maybe you want one of the following: + + Failure + + failwith + + failwithf + +neg110.fs(5,538,5,540): typecheck error FS0003: This value is not a function and cannot be applied. diff --git a/tests/fsharp/typecheck/sigs/neg110.fs b/tests/fsharp/typecheck/sigs/neg110.fs new file mode 100644 index 00000000000..109f5de8402 --- /dev/null +++ b/tests/fsharp/typecheck/sigs/neg110.fs @@ -0,0 +1,5 @@ +module Neg110 +type TestDU = | A1 of string | A2 of string | A3 of string | A4 of string | A5 of string | A6 of string | A7 of string | A8 of string | A9 of string | A10 of string | A11 of string | A12 | A13 | A14 | A15 | A16 | A17 | A18 | A19 | A20 | A21 | A22 | A23 | A24 | A25 | A26 | A27 | A28 | A29 | A30 | A31 | A32 | A33 | A34 | A35 | A36 | A37 | A38 | A39 | A40 | A41 | A42 | A43 | A44 | A45 | A46 | A47 | A48 | A49 | A50 | A51 | A52 | A53 | A54 | A55 | A56 | A57 | A58 | A59 | A60 | A61 | A62 | A63 | A64 | A65 | A66 | A67AAAAAAAAAAAAAAAAAAAAAAAA of string fail1 +type TestRec = { Naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee : string; Name2 : string } member x.P = fail2 +module SomeRidiculouslyLongNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee = + let testFunctionNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaammmmmmmmmmmmeeeeeeeeeeee () = () fail4 diff --git a/tests/service/TokenizerTests.fs b/tests/service/TokenizerTests.fs index 4973d398f29..84b95e5175e 100644 --- a/tests/service/TokenizerTests.fs +++ b/tests/service/TokenizerTests.fs @@ -20,7 +20,7 @@ open System.IO let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") -let rec parseLine(line: string, state: int64 ref, tokenizer: FSharpLineTokenizer) = seq { +let rec parseLine(line: string, state: FSharpTokenizerLexState ref, tokenizer: FSharpLineTokenizer) = seq { match tokenizer.ScanToken(!state) with | Some(tok), nstate -> let str = line.Substring(tok.LeftColumn, tok.RightColumn - tok.LeftColumn + 1) @@ -31,7 +31,7 @@ let rec parseLine(line: string, state: int64 ref, tokenizer: FSharpLineTokenizer state := nstate } let tokenizeLines (lines:string[]) = - [ let state = ref 0L + [ let state = ref FSharpTokenizerLexState.Initial for n, line in lines |> Seq.zip [ 0 .. lines.Length-1 ] do let tokenizer = sourceTok.CreateLineTokenizer(line) yield n, parseLine(line, state, tokenizer) |> List.ofSeq ] diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs index 66bb9018f3c..c131374ece0 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs @@ -556,7 +556,7 @@ module internal Tokenizer = i // Rescan the lines if necessary and report the information let result = new List() - let mutable lexState = if scanStartLine = 0 then 0L else sourceTextData.[scanStartLine - 1].Value.LexStateAtEndOfLine + let mutable lexState = if scanStartLine = 0 then FSharpTokenizerLexState.Initial else sourceTextData.[scanStartLine - 1].Value.LexStateAtEndOfLine for i = scanStartLine to endLine do cancellationToken.ThrowIfCancellationRequested() @@ -569,7 +569,7 @@ module internal Tokenizer = // 2. the hash codes match // 3. the start-of-line lex states are the same match sourceTextData.[i] with - | Some data when data.IsValid(textLine) && data.LexStateAtStartOfLine = lexState -> + | Some data when data.IsValid(textLine) && data.LexStateAtStartOfLine.Equals(lexState) -> data | _ -> // Otherwise, we recompute @@ -589,7 +589,7 @@ module internal Tokenizer = if endLine < lines.Count - 1 then match sourceTextData.[endLine+1] with | Some data -> - if data.LexStateAtStartOfLine <> lexState then + if not (data.LexStateAtStartOfLine.Equals(lexState)) then sourceTextData.ClearFrom (endLine+1) | None -> () result @@ -729,7 +729,7 @@ module internal Tokenizer = ) do i <- i - 1 i - let lexState = if scanStartLine = 0 then 0L else sourceTextData.[scanStartLine - 1].Value.LexStateAtEndOfLine + let lexState = if scanStartLine = 0 then FSharpTokenizerLexState.Initial else sourceTextData.[scanStartLine - 1].Value.LexStateAtEndOfLine let lineContents = textLine.Text.ToString(textLine.Span) // We can reuse the old data when diff --git a/vsintegration/src/FSharp.LanguageService/Colorize.fs b/vsintegration/src/FSharp.LanguageService/Colorize.fs index 3a52e74397b..1f292c7c92a 100644 --- a/vsintegration/src/FSharp.LanguageService/Colorize.fs +++ b/vsintegration/src/FSharp.LanguageService/Colorize.fs @@ -44,7 +44,7 @@ module internal ColorStateLookup_DEPRECATED = toLexState.Add(result,lexState) result - do Add(0L)|>ignore // Add the 'unknown' state. + do Add(FSharpTokenizerLexState.Initial)|>ignore // Add the 'unknown' state. static member private TryGet<'tKey,'tVal>(dict:Dictionary<'tKey,'tVal>,key:'tKey) : 'tVal option = let mutable result = Unchecked.defaultof<'tVal> @@ -198,7 +198,7 @@ type internal FSharpColorizer_DEPRECATED /// Start state at the beginning of parsing a file. override c.GetStartState(state) = - state <- ColorStateLookup_DEPRECATED.ColorStateOfLexState(0L) + state <- ColorStateLookup_DEPRECATED.ColorStateOfLexState(FSharpTokenizerLexState.Initial) VSConstants.S_OK /// Colorize a line of text. Resulting per-character attributes are stored into attrs From 0f4299d769b4dd5e592f2f9157f04df90f0d14f6 Mon Sep 17 00:00:00 2001 From: BooksBaum <15612932+Booksbaum@users.noreply.github.com> Date: Thu, 25 Oct 2018 18:16:23 +0000 Subject: [PATCH 29/48] Fix #5794: Module Suffix is added in rec module even if type with the same name is generic (#5796) * Add tests * Add detection of generic types in rec modules --- src/fsharp/TypeChecker.fs | 8 +-- tests/fsharp/core/longnames/test.fsx | 74 +++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 5 deletions(-) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index c558602ffa9..a14ff8af5d4 100755 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -14699,11 +14699,11 @@ module EstablishTypeDefinitionCores = let AdjustModuleName modKind nm = (match modKind with FSharpModuleWithSuffix -> nm+FSharpModuleSuffix | _ -> nm) - let TypeNamesInMutRecDecls (compDecls: MutRecShapes) = + let TypeNamesInMutRecDecls cenv env (compDecls: MutRecShapes) = [ for d in compDecls do match d with - | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(ComponentInfo(_, _, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> - if isAtOriginalTyconDefn then + | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(ComponentInfo(_, typars, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> + if isAtOriginalTyconDefn && (TcTyparDecls cenv env typars |> List.forall (fun p -> p.Kind = TyparKind.Measure)) then yield (List.last ids).idText | _ -> () ] |> set @@ -14750,7 +14750,7 @@ module EstablishTypeDefinitionCores = let envForDecls, mtypeAcc = MakeInnerEnv envInitial id modKind let mspec = NewModuleOrNamespace (Some envInitial.eCompPath) vis id (xml.ToXmlDoc()) modAttrs (MaybeLazy.Strict (NewEmptyModuleOrNamespaceType modKind)) let innerParent = Parent (mkLocalModRef mspec) - let innerTypeNames = TypeNamesInMutRecDecls decls + let innerTypeNames = TypeNamesInMutRecDecls cenv envForDecls decls MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent, innerTypeNames, envForDecls) /// Establish 'type C < T1... TN > = ...' including diff --git a/tests/fsharp/core/longnames/test.fsx b/tests/fsharp/core/longnames/test.fsx index aa1579ef2b8..780037a4896 100644 --- a/tests/fsharp/core/longnames/test.fsx +++ b/tests/fsharp/core/longnames/test.fsx @@ -615,6 +615,79 @@ module rec Ok15 = test "lkneecec09iew15" (not (typeof.FullName.Contains("AModule") )) +module rec Ok16 = + + type A<'a> = A of 'a + + module A = + type Dummy = A | B + + test "lkneecec09iew16" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok17 = + + type A<'a> = A of 'a + type A = A of int + + module A = + type Dummy = A | B + + test "lkneecec09iew17" (typeof.FullName.Contains("AModule") ) + +module rec Ok18 = + + type A<[]'u> = A of int<'u> + + module A = + type Dummy = A | B + + test "lkneecec09iew18" (typeof.FullName.Contains("AModule") ) + +module rec Ok19 = + + type A<[]'u, 'a> = | A of int<'u> | B of 'a + + module A = + type Dummy = A | B + + test "lkneecec09iew19" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok20 = + + type A<'a, []'u> = A of int<'u> | B of 'a + + module A = + type Dummy = A | B + + test "lkneecec09iew20" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok21 = + + type A<'a, 'b> = A of 'a | B of 'b + + module A = + type Dummy = A | B + + test "lkneecec09iew21" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok22 = + + module A = + type Dummy = A | B + + type A<'a> = A of 'a + + test "lkneecec09iew22" (not (typeof.FullName.Contains("AModule") )) + +module rec Ok23 = + + module A = + type Dummy = A | B + + type A = A of int + + test "lkneecec09iew23" (typeof.FullName.Contains("AModule") ) + #if TESTS_AS_APP let RUN() = !failures #else @@ -628,4 +701,3 @@ let aa = stdout.WriteLine "Test Failed" exit 1 #endif - From d6a94981bf02e96c3b42160c920c1bb7d1018e71 Mon Sep 17 00:00:00 2001 From: khoiph1 Date: Fri, 26 Oct 2018 10:42:16 -0700 Subject: [PATCH 30/48] Loc Checkin --- .../FSharp.Build/xlf/FSBuild.txt.cs.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.de.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.es.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.fr.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.it.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.ja.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.ko.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.pl.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.ru.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.tr.xlf | 2 +- .../FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.de.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.es.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.it.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf | 2 +- src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf | 8 ++--- src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf | 4 +-- src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf | 6 ++-- src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf | 10 +++--- src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf | 8 ++--- src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf | 4 +-- src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf | 4 +-- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf | 2 +- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf | 4 +-- src/fsharp/xlf/FSComp.txt.cs.xlf | 20 ++++++------ src/fsharp/xlf/FSComp.txt.de.xlf | 16 +++++----- src/fsharp/xlf/FSComp.txt.es.xlf | 30 ++++++++--------- src/fsharp/xlf/FSComp.txt.fr.xlf | 24 +++++++------- src/fsharp/xlf/FSComp.txt.it.xlf | 26 +++++++-------- src/fsharp/xlf/FSComp.txt.ja.xlf | 32 +++++++++---------- src/fsharp/xlf/FSComp.txt.ko.xlf | 22 ++++++------- src/fsharp/xlf/FSComp.txt.pl.xlf | 24 +++++++------- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 28 ++++++++-------- src/fsharp/xlf/FSComp.txt.ru.xlf | 26 +++++++-------- src/fsharp/xlf/FSComp.txt.tr.xlf | 26 +++++++-------- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 16 +++++----- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 20 ++++++------ src/fsharp/xlf/FSStrings.cs.xlf | 6 ++-- src/fsharp/xlf/FSStrings.de.xlf | 4 +-- src/fsharp/xlf/FSStrings.es.xlf | 6 ++-- src/fsharp/xlf/FSStrings.fr.xlf | 6 ++-- src/fsharp/xlf/FSStrings.it.xlf | 6 ++-- src/fsharp/xlf/FSStrings.ja.xlf | 2 +- src/fsharp/xlf/FSStrings.ko.xlf | 6 ++-- src/fsharp/xlf/FSStrings.pl.xlf | 6 ++-- src/fsharp/xlf/FSStrings.pt-BR.xlf | 6 ++-- src/fsharp/xlf/FSStrings.ru.xlf | 6 ++-- src/fsharp/xlf/FSStrings.tr.xlf | 6 ++-- src/fsharp/xlf/FSStrings.zh-Hans.xlf | 4 +-- src/fsharp/xlf/FSStrings.zh-Hant.xlf | 6 ++-- 63 files changed, 243 insertions(+), 243 deletions(-) diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf index d4e4bac23e6..1c2cebf36fe 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf index 604ba262f77..ece2090bed3 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf index 47f7b770a59..4149a8ac602 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf index 2d08c442466..050b697ac10 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf index f4df6a25059..3d1ba6fb8ca 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf index 6c430cb50b0..7801f66a5c1 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf index 7b689385a7e..3e943447be7 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf index d3a0e4f9761..1d707eca51d 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf index 4bdb28cd9f7..ac11dee3e50 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf index ed2d4a5d09f..6970cd9d52b 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf index b2332af2b82..49b20a79f18 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf index 94447e27905..9dce8b27d36 100644 --- a/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf +++ b/src/fsharp/FSharp.Build/xlf/FSBuild.txt.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf index 7c8e97d6501..b5d21ee48fb 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf index cfcd71290fa..01d60b65b31 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf index 46a617777f6..86bcc129825 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf index 09dfb48a62c..3c12f6109a2 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf index 5598638a5f4..4991f7ffaf9 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf index 51440221431..ae165167480 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf index 76a111799a3..49b8be6efb8 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf index 3d869bc263b..d435fc3f80a 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf index 48c0450f629..43296899d7c 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf index 6daf52715c5..51162715a61 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf index 2baf7f4b07b..33601727b60 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf b/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf index e75ede8758c..de92b3ac758 100644 --- a/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf +++ b/src/fsharp/FSharp.Core/xlf/FSCore.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf index 2567d3f26f2..8ff4646967d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf index ec345eadd3d..f159881dd8e 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf index a43b278bb13..146c3f9cf5d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf index 4343c88666b..b69c71103d4 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf @@ -1,4 +1,4 @@ - + @@ -134,7 +134,7 @@ \n\nException raised during pretty printing.\nPlease report this so it can be fixed.\nTrace: {0}\n - \n\nException déclenchée durant l'impression en mode Pretty.\nSignalez ce problème afin qu'il soit corrigé.\nTrace : {0}\n + \n\nException déclenchée durant l'impression automatique.\nSignalez ce problème afin qu'il soit corrigé.\nTrace : {0}\n @@ -184,7 +184,7 @@ Loading - Chargement en cours + Chargement @@ -264,7 +264,7 @@ Prevents references from being locked by the F# Interactive process - Empêche le blocage des références par le processus interactif F# + Empêche le blocage des références par le processus de F# Interactive diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf index bdba37d1c78..51a94aabb2a 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf @@ -1,4 +1,4 @@ - + @@ -114,7 +114,7 @@ Invalid directive '#{0} {1}' - Direttiva non valida '#{0} {1}' + Direttiva '#{0} {1}' non valida diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf index 8697e6da83b..060deb12475 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf @@ -139,7 +139,7 @@ F# Interactive directives: - F# Interactive ディレクティブ: + F# インタラクティブ ディレクティブ: @@ -174,7 +174,7 @@ F# Interactive command line options: - F# Interactive コマンド ライン オプション: + F# インタラクティブ コマンド ライン オプション: @@ -254,7 +254,7 @@ Microsoft (R) F# Interactive version {0} - Microsoft (R) F# Interactive Version {0} + Microsoft (R) F# インタラクティブ バージョン {0} diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf index 6f6d927ebf0..a5857105143 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf @@ -1,4 +1,4 @@ - + @@ -139,7 +139,7 @@ F# Interactive directives: - F# Interactive 지시문: + F# 대화형 지시문: @@ -214,7 +214,7 @@ --> Referenced '{0}' (file may be locked by F# Interactive process) - --> '{0}' 참조됨(파일은 F# Interactive 프로세스에 의해 잠길 수 있음) + --> '{0}' 참조됨(파일은 F# 대화형 프로세스에 의해 잠길 수 있음) @@ -259,12 +259,12 @@ F# Interactive for F# {0} - F# {0}에 대한 F# Interactive + F# {0}에 대한 F# 대화형 Prevents references from being locked by the F# Interactive process - 참조가 F# Interactive 프로세스에 의해 잠기지 않도록 합니다. + 참조가 F# 대화형 프로세스에 의해 잠기지 않도록 합니다. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf index 82960cad8fd..f6b3de9b345 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf index 7d8838f24f4..66af6500830 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -139,7 +139,7 @@ F# Interactive directives: - Diretrizes interativas F#: + Diretrizes F# Interativo: @@ -174,7 +174,7 @@ F# Interactive command line options: - Opções de linha de comando F# interativo: + Opções de linha de comando F# Interativo: @@ -254,7 +254,7 @@ Microsoft (R) F# Interactive version {0} - Microsoft (R) F# Interactive versão {0} + Microsoft (R) F# Interativo versão {0} diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf index 1d6ce4e9633..f3b41bee024 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf @@ -1,4 +1,4 @@ - + @@ -99,7 +99,7 @@ A problem occurred starting the F# Interactive process. This may be due to a known problem with background process console support for Unicode-enabled applications on some Windows systems. Try selecting Tools->Options->F# Interactive for Visual Studio and enter '--fsi-server-no-unicode'. - Возникла проблема при запуске процесса F# Interactive. Это может быть вызвано известной проблемой с поддержкой консоли фонового процесса для приложений с поддержкой Юникода в некоторых системах Windows. Попробуйте выбрать "Сервис->Параметры->F# Interactive для Visual Studio" и ввести "--fsi-server-no-unicode". + Возникла проблема при запуске процесса F# Interactive. Это может быть вызвано известной проблемой с поддержкой консоли фонового процесса для приложений с поддержкой Юникода в некоторых системах Windows. Попробуйте выбрать "Сервис" -> "Параметры" -> "F# Interactive для Visual Studio" и ввести "--fsi-server-no-unicode". diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf index 7393283389d..c9a52ba5e8f 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf @@ -1,4 +1,4 @@ - + @@ -174,7 +174,7 @@ F# Interactive command line options: - F# Interactive komut satırı seçenekleri: + F# Etkileşimli komut satırı seçenekleri: diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf index 317abba3c1b..5d81aa592b0 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf @@ -139,7 +139,7 @@ F# Interactive directives: - F# 交互指令: + F# 交互窗口指令: diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf index 84501a17e14..295ea674957 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf @@ -254,12 +254,12 @@ Microsoft (R) F# Interactive version {0} - Microsoft (R) F# Interactive 版本 {0} + Microsoft (R) F# 互動版本 {0} F# Interactive for F# {0} - 適用於 F# {0} 的 F# Interactive + 適用於 F# {0} 的 F# 互動 diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 8399e9aa75c..62976f975f3 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Všechny větve výrazu porovnání vzorů musí vracet hodnoty stejného typu. První větev vrátila hodnotu typu {0}, ale tato větev vrátila hodnotu typu {1}. + Všechny větve výrazu porovnávacího vzorku musí vracet hodnoty stejného typu. První větev vrátila hodnotu typu {0}, ale tato větev vrátila hodnotu typu {1}. @@ -1949,7 +1949,7 @@ Syntax error - Chyba syntaxe + chyba syntaxe @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Všechna práva vyhrazena. + Copyright (C) Microsoft Corporation. Všechna práva vyhrazena. @@ -4544,7 +4544,7 @@ argument - argument + Argument @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Typy ByRef nesmí mít rozšíření volitelného typu. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Parametr {0} má neplatný typ {1}. To nepovolují pravidla Common IL. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + Funkce nebo metoda má neplatný návratový typ {0}. To nepovolují pravidla Common IL. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Nejde volat metodu rozšíření byref {0}. První parametr vyžaduje, aby hodnota byla měnitelná nebo typu byref, která není jen pro čtení. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Nejde částečně použít rozšiřující metodu {0}, protože první parametr je typu byref. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index afa58d4bef5..1a703578fb2 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Alle Branches eines Musterübereinstimmungsausdrucks müssen Werte des gleichen Typs zurückgeben. Der erste Branch hat einen Wert vom Typ "{0}" zurückgegeben, aber dieser Branch gab einen Wert vom Typ "{1}" zurück. + Alle Verzweigungen eines Musterübereinstimmungsausdrucks müssen Werte des gleichen Typs zurückgeben. Die erste Verzweigung hat einen Wert vom Typ "{0}", diese Verzweigung jedoch einen Wert vom Typ "{1}" zurückgegeben. @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Alle Rechte vorbehalten. + Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten. @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + ByRef-Typen dürfen keine optionalen Typerweiterungen aufweisen. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Der Parameter "{0}" weist einen ungültigen Typ "{1}" auf. Dies ist gemäß den Regeln von Common IL unzulässig. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + Die Funktion oder Methode weist einen ungültigen Rückgabetyp "{0}" auf. Dies ist gemäß den Regeln von Common IL unzulässig. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Die ByRef-Erweiterungsmethode "{0}" kann nicht aufgerufen werden. Für den ersten Parameter muss der Wert änderbar sein oder einem nicht schreibgeschützten ByRef-Typ entsprechen. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Die Erweiterungsmethode "{0}" kann nicht teilweise angewendet werden, da der erste Parameter ein Byref-Typ ist. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 11cb00df84b..a36b14f9ed2 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devolvió un valor de tipo "{0}", pero esta rama devolvió un valor de tipo "\{1 \}". + Todas las ramas de una expresión de coincidencia de patrón deben devolver valores del mismo tipo. La primera rama devuelve un valor de tipo "{0}", pero esta rama devuelve un valor de tipo "{1}". @@ -1949,7 +1949,7 @@ Syntax error - Error de sintaxis + error de sintaxis @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - (C) Microsoft Corporation. Todos los derechos reservados. + Copyright (C) Microsoft Corporation. Todos los derechos reservados. @@ -4289,7 +4289,7 @@ Read response file for more options - Leer el archivo de respuesta para ver más opciones + Leer el archivo de respuesta para obtener más opciones @@ -4519,7 +4519,7 @@ field - campo + Campo @@ -4529,12 +4529,12 @@ property - propiedad + Propiedad extension - extensión + Extensión @@ -4544,7 +4544,7 @@ argument - argumento + Argumento @@ -5229,7 +5229,7 @@ The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) - El atributo FieldOffset sólo se puede colocar en miembros de tipos marcados con StructLayout(LayoutKind.Explicit) + El atributo FieldOffset solo se puede colocar en miembros de tipos marcados con StructLayout(LayoutKind.Explicit) @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Los tipos de ByRef no pueden tener extensiones de tipo opcional. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + El parámetro "{0}" tiene un tipo no válido "{1}". Esto no está permitido por las reglas de Common IL. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + La función o método tiene un tipo de valor devuelto no válido "{0}". Esto no está permitido por las reglas de Common IL. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + No se puede llamar al método de extensión de byref "{0}". El primer parámetro requiere que el valor sea mutable o un tipo de byref que no sea de solo lectura. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + No se puede aplicar parcialmente el método de extensión "{0}" porque el primer parámetro es un tipo byref. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 28bf771e2d5..114895f4aae 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Toutes les branches d'une expression comportant des critères spéciaux doivent retourner des valeurs du même type. La première branche a retourné une valeur de type '{0}', mais cette branche a retourné une valeur de type '{1}'. + Toutes les branches d'une expression de correspondance de modèle doivent retourner des valeurs du même type. La première branche a retourné une valeur de type « {0} », mais cette branche a retourné une valeur de type « {1} ». @@ -1949,7 +1949,7 @@ Syntax error - Erreur de syntaxe + erreur de syntaxe @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Tous droits réservés. + Copyright (C) Microsoft Corporation. Tous droits réservés. @@ -4519,7 +4519,7 @@ field - champ + Champ @@ -4534,7 +4534,7 @@ extension - extension + Extension @@ -4544,7 +4544,7 @@ argument - argument + Argument @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Les types ByRef ne sont pas autorisés à avoir des extensions de type en option. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Le paramètre « {0} » a un type non valide (« {1} »), ce qui n'est pas autorisé par les règles de Common IL. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + La méthode ou la fonction a un type de retour non valide (« {0} »), ce qui n’est pas autorisé par les règles de Common IL. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Impossible d’appeler la méthode d’extension byref « {0} ». Le premier paramètre nécessite que la valeur soit mutable ou un type byref autre qu'en lecture seule. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Impossible d'appliquer partiellement la méthode d’extension « {0} » car le premier paramètre est un type byref. diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 1736dad5bba..9803659f35a 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -1,4 +1,4 @@ - + @@ -1949,7 +1949,7 @@ Syntax error - Errore di sintassi + errore di sintassi @@ -3029,7 +3029,7 @@ Objects must be initialized by an object construction expression that calls an inherited object constructor and assigns a value to each field - Gli oggetti devono essere inizializzati da un'espressione di costruzione degli oggetti che chiama un costruttore di oggetti ereditato e assegna un valore a ogni campo + Gli oggetti devono essere inizializzati da un'espressione di costruzione degli oggetti che chiama un costruttore di oggetto ereditato e assegna un valore a ogni campo @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Tutti i diritti sono riservati. + Copyright (C) Microsoft Corporation. Tutti i diritti sono riservati. @@ -4289,7 +4289,7 @@ Read response file for more options - Legge il file di risposta per ulteriori opzioni + Per ulteriori opzioni, leggere il file di risposta @@ -4529,12 +4529,12 @@ property - proprietà + Proprietà. extension - estensione + Estensione @@ -4544,7 +4544,7 @@ argument - argomento + Argomento @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Con i tipi byref non sono consentite estensioni di tipo facoltative. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Il parametro '{0}' contiene un tipo non valido '{1}'. Questo comportamento non è consentito dalle regole di Common IL. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + La funzione o il metodo contiene un tipo restituito non valido '{0}'. Questo comportamento non è consentito dalle regole di Common IL. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Non è possibile chiamare il metodo di estensione byref '{0}. Il valore del primo parametro deve essere modificabile oppure un tipo byref non di sola lettura. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Non è possibile applicare parzialmente il metodo di estensione '{0}' perché il primo parametro è un tipo byref. diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index a96b750bb5e..87e1dd04741 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - パターン マッチ式のすべてのブランチは、同じ型の値を返す必要があります。最初のブランチが返した値の型は '{0}' ですが、このブランチが返した値の型は '{1}' です。 + パターン一致式のすべてのブランチは同じ型の値を返す必要があります。最初のブランチは、型 '{0}' の値を返しましたが、このブランチは型 '{1}' の値を返しました。 @@ -209,7 +209,7 @@ Unrecognized privacy setting '{0}' for managed resource, valid options are 'public' and 'private' - マネージド リソースの認識されないプライバシー設定 '{0}'。有効なオプションは 'public' および 'private' です。 + マネージ リソースの認識されないプライバシー設定 '{0}'。有効なオプションは 'public' および 'private' です。 @@ -354,7 +354,7 @@ Error reading/writing metadata for the F# compiled DLL '{0}'. Was the DLL compiled with an earlier version of the F# compiler? (error: '{1}'). - F# でコンパイルした DLL '{0}' のメタデータの読み取り/書き込み中にエラーが発生しました。旧バージョンの F# コンパイラでコンパイルした DLL ですか? (エラー: '{1}') + F# でコンパイルした DLL '{0}' のメタデータの読み取り/書き込み中にエラーが発生しました。旧バージョンの F# コンパイラーでコンパイルした DLL ですか? (エラー: '{1}') @@ -1949,7 +1949,7 @@ Syntax error - 構文エラー + 構文エラーです @@ -2969,7 +2969,7 @@ The member '{0}' does not correspond to any abstract or virtual method available to override or implement. - メンバー '{0}' は、オーバーライドまたは実装に使用できるどの抽象メソッドまたは仮想メソッドにも対応していません。 + メンバー '{0}' は、無視または実装に使用できるどの抽象メソッドまたは仮想メソッドにも対応していません。 @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. All Rights Reserved. + Copyright (C) Microsoft Corporation. All rights reserved. @@ -4279,7 +4279,7 @@ @@ -4434,7 +4434,7 @@ The command-line option '{0}' has been deprecated - コマンド ライン オプション '{0}' は非推奨になりました + コマンド ライン オプション '{0}' は使用されなくなりました @@ -4444,7 +4444,7 @@ The command-line option '{0}' has been deprecated. HTML document generation is now part of the F# Power Pack, via the tool FsHtmlDoc.exe. - コマンド ライン オプション '{0}' は非推奨になりました。HTML ドキュメントの生成は、F# Power Pack のツール FsHtmlDoc.exe で実行できるようになりました。 + コマンド ライン オプション '{0}' は使用されなくなりました。HTML ドキュメントの生成は、F# Power Pack のツール FsHtmlDoc.exe で実行できるようになりました。 @@ -5459,7 +5459,7 @@ Static linking may not include a mixed managed/unmanaged DLL - 静的リンクでは、混合マネージド/アンマネージド DLL がインクルードされない可能性があります + 静的リンクでは、混合マネージ/アンマネージ DLL がインクルードされない可能性があります @@ -6504,7 +6504,7 @@ The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - パラメーター '{0}' に適用される CallerMemberNameAttribute は無効になります。CallerFilePathAttribute に上書きされます。 + パラメーター '{0}' に適用された CallerMemberNameAttribute は、CallerFilePathAttribute.によってオーバーライドされるため無効となります。 @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + byref 型には、オプションの型拡張子を指定することはできません。 The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + パラメーター '{0}' には無効な型 '{1}' が指定されています。これは Common IL の規則では許可されていません。 The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + 関数またはメソッドには、無効な戻り値の型 '{0}' が指定されています。これは Common IL の規則では許可されていません。 Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + byref 拡張メソッド '{0} を呼び出すことはできません。最初のパラメーターでは、値を変更可能な byref 型または読み取り専用以外の byref 型にする必要があります。 Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + 最初のパラメーターは byref 型なので、拡張メソッド '{0}' を部分的に適用することはできません。 diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 02bdabada87..867ffc1b972 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - 패턴 일치 식의 모든 분기는 동일한 형식의 값을 반환해야 합니다. 첫 번째 분기는 '{0}' 형식의 값을 반환했지만 이 분기는 '{1}' 형식의 값을 반환했습니다. + 패턴 일치 식의 모든 분기는 동일한 형식의 값을 반환해야 합니다. 첫 번째 분기는 '{0}' 형식의 값을 반환했지만, 이 분기는 '{1}' 형식의 값을 반환했습니다. @@ -814,7 +814,7 @@ Invalid value - 값이 잘못되었습니다. + 잘못된 값 @@ -1949,7 +1949,7 @@ Syntax error - 구문 오류 + 구문 오류입니다. @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. All rights reserved. + Copyright (C) Microsoft Corporation. All rights reserved. @@ -6504,7 +6504,7 @@ The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - '{0}' 매개 변수에 적용된 CallerMemberNameAttribute는 효과가 없습니다. CallerFilePathAttribute로 재정의됩니다. + {0}' 매개 변수에 적용되는 CallerMemberNameAttribute는 효과가 없습니다. CallerFilePathAttribute에서 재정의합니다. @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + byref 형식에는 선택적 형식 확장을 사용할 수 없습니다. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + '{0}' 매개 변수에 잘못된 형식 '{1}'이(가) 있습니다. 이 형식은 공통 IL의 규칙에서 허용하지 않습니다. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + 함수 또는 메서드에 잘못된 반환 형식 '{0}'이(가) 있습니다. 이는 공통 IL의 규칙에서 허용하지 않습니다. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + byref 확장 메서드 '{0}'을(를) 호출할 수 없습니다. 첫 번째 매개 변수는 변경할 수 있거나 읽기 전용이 아닌 byref 형식인 값이 필요합니다. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + 첫 번째 매개 변수가 byref 형식이므로 '{0}' 확장 메서드를 부분적으로 적용할 수 없습니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 8dde36da4c2..600ed8a428b 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Wszystkie gałęzie wyrażenia dopasowania do wzorca muszą zwracać wartości tego samego typu. Pierwsza gałąź zwróciła wartość typu „{0}”, ale ta gałąź zwróciła wartość typu „{1}” + Wszystkie gałęzie wyrażenia dopasowywania wzorca muszą zwracać wartości tego samego typu. Pierwsza gałąź zwróciła wartość typu „{0}”, ale ta gałąź zwróciła wartość typu „{1}”. @@ -1949,7 +1949,7 @@ Syntax error - Błąd składni + błąd składni @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Wszelkie prawa zastrzeżone. + Copyright (C) Microsoft Corporation. Wszelkie prawa zastrzeżone. @@ -4544,7 +4544,7 @@ argument - argument + Argument @@ -5229,7 +5229,7 @@ The FieldOffset attribute can only be placed on members of types marked with the StructLayout(LayoutKind.Explicit) - Atrybut FieldOffset można umieścić tylko w elementach członkowskich o typie oznaczonym przy użyciu atrybutu StructLayout(LayoutKind.Explicit). + Atrybut FieldOffset można umieścić tylko w składowych o typie oznaczonym przy użyciu atrybutu StructLayout(LayoutKind.Explicit). @@ -6504,7 +6504,7 @@ The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - Zastosowanie elementu CallerMemberNameAttribute do parametru „{0}” nie odniesie żadnego skutku. Jest on przesłonięty przez element CallerFilePathAttribute. + Zastosowanie elementu CallerMemberNameAttribute do parametru „{0}” nie odniesie żadnego skutku. Jest on przesłaniany przez element CallerFilePathAttribute. @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Typy Byref nie mogą mieć opcjonalnych rozszerzeń typu. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Parametr „{0}” ma nieprawidłowy typ „{1}”. Nie jest to dozwolone przez reguły języka Common IL. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + Funkcja lub metoda ma nieprawidłowy zwracany typ „{0}”. Nie jest to dozwolone przez reguły języka Common IL. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Nie można wywołać metody rozszerzenia byref „{0}”. Pierwszy parametr wymaga, aby wartość była typem byref zmiennym lub innym niż tylko do odczytu. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Nie można częściowo zastosować metody rozszerzenia „{0}”, ponieważ pierwszy parametr jest typu byref. diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index c3357c079ae..eeb07e363c8 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Todos os branches de uma expressão correspondente ao padrão precisam retornar valores do mesmo tipo. O primeiro branch retornou um valor do tipo '{0}', mas este branch retornou um valor do tipo '{1}'. + Todos as ramificações de uma expressão de correspondência de padrão devem retornar valores do mesmo tipo. A primeira ramificação retornou um valor de tipo '{0}', mas este ramo retornou um valor de tipo '{1}'. @@ -1949,7 +1949,7 @@ Syntax error - Erro de sintaxe + erro de sintaxe @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. Todos direitos reservados. + Copyright (C) Microsoft Corporation. Todos os direitos reservados. @@ -4519,7 +4519,7 @@ field - campo + Campo @@ -4529,12 +4529,12 @@ property - propriedade + Propriedade. extension - extensão + Extensão @@ -4544,7 +4544,7 @@ argument - argumento + Argumento @@ -6504,7 +6504,7 @@ The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - O CallerMemberNameAttribute aplicado ao parâmetro '{0}' não terá nenhum efeito. Ele será substituído pelo CallerFilePathAttribute. + O CallerMemberNameAttribute aplicado ao parâmetro "{0}" não terá efeito. Ele é substituído pelo CallerFilePathAttribute. @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Tipos de ByRef não podem ter extensões de tipo opcionais. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + O parâmetro '{0}' tem um tipo inválido '{1}'. Isso não é permitido pelas regras do IL comum. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + A função ou método tem um tipo de retorno inválido '{0}'. Isso não é permitido pelas regras do IL Comum. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Não é possível chamar o método de extensão de byref '{0}. O primeiro parâmetro requer que o valor seja mutável ou não seja byref somente leitura. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Não é possível aplicar parcialmente o método de extensão '{0}' porque o primeiro parâmetro é um tipo de byref. diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index af8a812a968..ae05f05094c 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Все ветви выражения сопоставления шаблонов должны возвращать значения одного типа. Первая ветвь возвратила значение типа "{0}", а эта ветвь — типа "{1}". + Все ветви выражения сопоставления шаблона должны возвращать значения одного и того же типа. Первая ветвь возвратила значение типа "{0}", однако эта ветвь возвратила выражение типа "{1}". @@ -1949,7 +1949,7 @@ Syntax error - Синтаксическая ошибка + синтаксическая ошибка @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - (c) Корпорация Майкрософт (Microsoft Corp.). Все права защищены. + © Корпорация Майкрософт (Microsoft Corporation). Все права защищены. @@ -4519,7 +4519,7 @@ field - поле + Поле @@ -4529,12 +4529,12 @@ property - свойство + Свойство extension - расширение + Расширение @@ -4544,7 +4544,7 @@ argument - аргумент + Аргумент @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Типы byref не могут иметь расширения необязательного типа. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + Параметр "{0}" имеет недопустимый тип "{1}". Это не допускается правилами общего промежуточного языка. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + Функция или метод имеет недопустимый возвращаемый тип "{0}". Это не допускается правилами общего промежуточного языка. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + Не удается вызвать метод расширения byref "{0}". В качестве первого параметра необходимо указать изменяемое значение или значение типа byref, доступное не только для чтения. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + Не удается частично применить метод расширения "{0}", так как первый параметр имеет тип byref. diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index d7f55a56de9..42132ab2790 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - Bir desen eşleştirme ifadesinin tüm dalları aynı türdeki değerleri döndürmelidir. Birinci dal '{0}' türünde bir değer döndürdü ancak bu dal '{1}' türünde bir değer döndürdü. + Desen eşleştirme ifadesinin tüm dalları aynı türde değerler döndürmelidir. İlk dal '{0}' türünde değer döndürdü ancak bu dal '{1}' türünde değer döndürdü. @@ -1949,7 +1949,7 @@ Syntax error - Sözdizimi hatası + sözdizimi hatası @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Telif hakkı (c) Microsoft Corporation. Tüm hakları saklıdır. + Telif hakkı (C) Microsoft Corporation. Tüm hakları saklıdır. @@ -4544,7 +4544,7 @@ argument - bağımsız değişken + Bağımsız değişken @@ -4569,7 +4569,7 @@ from {0} - {0} dalından + Şuradan: {0} @@ -6504,7 +6504,7 @@ The CallerMemberNameAttribute applied to parameter '{0}' will have no effect. It is overridden by the CallerFilePathAttribute. - '{0}' parametresine uygulanan CallerMemberNameAttribute etkisiz olacak. Bu işlem CallerFilePathAttribute tarafından geçersiz kılınmış. + {0}' parametresi için geçerli olan CallerMemberNameAttribute öğesinin hiçbir etkisi olmaz. CallerFilePathAttribute tarafından geçersiz kılındı. @@ -6924,7 +6924,7 @@ is - : + olan @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Byref türlerinin isteğe bağlı tür genişletmelerine sahip olmasına izin verilmez. The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + '{0}' parametresi geçersiz '{1}' türünde. Ortak IL kuralları uyarınca buna izin verilmez. The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + İşlev veya metot geçersiz '{0}' dönüş türüne sahip. Ortak IL kuralları uyarınca buna izin verilmez. Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + '{0}' byref genişletme metodu çağrılamıyor. İlk parametre, değerin değişebilir olmasını veya salt okunur olmayan bir byref türünde olmasını gerektiriyor. Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + İlk parametre bir byref türü olduğundan '{0}' genişletme metodunu kısmi olarak uygulayamazsınız. diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index ed0d6bfe422..26edd2ee9fd 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - 模式匹配表达式的所有分支必须返回相同类型的值。第一个分支返回“{0}”类型的值,但此分支返回“{1}”类型的值。 + 模式匹配表达式的所有分支必须返回相同类型的值。第一个分支返回类型为“{0}”的值,但此分支返回类型为“{1}”的值。 @@ -344,7 +344,7 @@ Unrecognized option: '{0}' - 无法识别的选项: '{0}' + 无法识别的选项:“{0}” @@ -814,7 +814,7 @@ Invalid value - 值无效 + 无效值 @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + 不允许 byref 类型具有可选类型扩展名。 The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + 参数 "{0}" 的类型 "{1}" 无效。通用 IL 的规则不允许使用此类型。 The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + 函数或方法的返回类型 "{0}" 无效。通用 IL 的规则不允许使用此类型。 Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + 无法调用 byref 扩展方法 "{0}"。第一个参数要求该值是可变的或非只读的 byref 类型。 Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + 无法部分应用扩展方法 "{0}", 因为第一个参数是 byref 类型。 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index f0b9be6cd54..665a77cdb05 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -109,7 +109,7 @@ All branches of a pattern match expression must return values of the same type. The first branch returned a value of type '{0}', but this branch returned a value of type '{1}'. - 模式比對運算式的所有分支,都必須傳回相同類型的值。第一個分支傳回了類型 '{0}' 的值,但此分支卻傳回了類型 '{1}' 的值。 + 符合運算式的所有模式分支都必須傳回相同類型的值。第一個分支傳回了類型 '{0}' 的值,但此分支卻傳回類型 '{1}' 的值。 @@ -814,7 +814,7 @@ Invalid value - 無效值 + 值無效 @@ -4069,7 +4069,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - Copyright (c) Microsoft Corporation. 著作權所有,並保留一切權利。 + Copyright (C) Microsoft Corporation. 著作權所有,並保留一切權利。 @@ -5459,7 +5459,7 @@ Static linking may not include a mixed managed/unmanaged DLL - 靜態連結不可包含混合的受控/非受控 DLL + 靜態連結不可包含混合的 Managed/Unmanaged DLL @@ -7059,27 +7059,27 @@ Byref types are not allowed to have optional type extensions. - Byref types are not allowed to have optional type extensions. + Byref 類型不得有選擇性類型延伸模組。 The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. - The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + 參數 '{0}' 的類型 '{1}' 無效。Common IL 的規則不允許此狀況。 The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. - The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + 函式或方法的傳回型別 '{0}' 無效。Common IL 的規則不允許此狀況。 Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. - Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + 無法呼叫 byref 擴充方法 '{0}。第一個參數需要值可變動,或為非唯讀 byref 類型。 Cannot partially apply the extension method '{0}' because the first parameter is a byref type. - Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + 因為第一個參數是 byref 類型,所以無法部分套用擴充方法 '{0}'。 diff --git a/src/fsharp/xlf/FSStrings.cs.xlf b/src/fsharp/xlf/FSStrings.cs.xlf index dd20d2c3294..f139d218700 100644 --- a/src/fsharp/xlf/FSStrings.cs.xlf +++ b/src/fsharp/xlf/FSStrings.cs.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - komentář + Komentář @@ -1174,7 +1174,7 @@ keyword - klíčové slovo + Klíčové slovo diff --git a/src/fsharp/xlf/FSStrings.de.xlf b/src/fsharp/xlf/FSStrings.de.xlf index 11c588c25a1..e1e33d4ce4d 100644 --- a/src/fsharp/xlf/FSStrings.de.xlf +++ b/src/fsharp/xlf/FSStrings.de.xlf @@ -1,4 +1,4 @@ - + @@ -1174,7 +1174,7 @@ keyword - Schlüsselwort + Schlüsselwort diff --git a/src/fsharp/xlf/FSStrings.es.xlf b/src/fsharp/xlf/FSStrings.es.xlf index a64fb622684..82682ec3f85 100644 --- a/src/fsharp/xlf/FSStrings.es.xlf +++ b/src/fsharp/xlf/FSStrings.es.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - comentario + Comentario @@ -1174,7 +1174,7 @@ keyword - palabra clave + Palabra clave diff --git a/src/fsharp/xlf/FSStrings.fr.xlf b/src/fsharp/xlf/FSStrings.fr.xlf index a56bd5baadd..abde80b4884 100644 --- a/src/fsharp/xlf/FSStrings.fr.xlf +++ b/src/fsharp/xlf/FSStrings.fr.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - commentaire + Commentaire @@ -1174,7 +1174,7 @@ keyword - mot clé + Mot clé diff --git a/src/fsharp/xlf/FSStrings.it.xlf b/src/fsharp/xlf/FSStrings.it.xlf index b8a0c2aa385..e682cc48c94 100644 --- a/src/fsharp/xlf/FSStrings.it.xlf +++ b/src/fsharp/xlf/FSStrings.it.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - commento + Commento @@ -1174,7 +1174,7 @@ keyword - parola chiave + Parola chiave diff --git a/src/fsharp/xlf/FSStrings.ja.xlf b/src/fsharp/xlf/FSStrings.ja.xlf index e2bc61160be..c5de25e5332 100644 --- a/src/fsharp/xlf/FSStrings.ja.xlf +++ b/src/fsharp/xlf/FSStrings.ja.xlf @@ -1174,7 +1174,7 @@ keyword - キーワード + キーワード diff --git a/src/fsharp/xlf/FSStrings.ko.xlf b/src/fsharp/xlf/FSStrings.ko.xlf index 8f398f713c4..c8ea229e136 100644 --- a/src/fsharp/xlf/FSStrings.ko.xlf +++ b/src/fsharp/xlf/FSStrings.ko.xlf @@ -1,4 +1,4 @@ - + @@ -1174,7 +1174,7 @@ keyword - 키워드 + 키워드 @@ -1454,7 +1454,7 @@ . {0} - {0} + . {0} diff --git a/src/fsharp/xlf/FSStrings.pl.xlf b/src/fsharp/xlf/FSStrings.pl.xlf index b634fb8ab9d..0fcd149429f 100644 --- a/src/fsharp/xlf/FSStrings.pl.xlf +++ b/src/fsharp/xlf/FSStrings.pl.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - komentarz + Komentarz @@ -1174,7 +1174,7 @@ keyword - słowo kluczowe + Słowo kluczowe diff --git a/src/fsharp/xlf/FSStrings.pt-BR.xlf b/src/fsharp/xlf/FSStrings.pt-BR.xlf index 0d185ea82f5..d22bd360fb6 100644 --- a/src/fsharp/xlf/FSStrings.pt-BR.xlf +++ b/src/fsharp/xlf/FSStrings.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - comentário + Comentário @@ -1174,7 +1174,7 @@ keyword - palavra-chave + Palavra-chave diff --git a/src/fsharp/xlf/FSStrings.ru.xlf b/src/fsharp/xlf/FSStrings.ru.xlf index ebae0bf0ec3..3b74661d0bf 100644 --- a/src/fsharp/xlf/FSStrings.ru.xlf +++ b/src/fsharp/xlf/FSStrings.ru.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - комментарий + Комментарий @@ -1174,7 +1174,7 @@ keyword - ключевое слово + Ключевое слово diff --git a/src/fsharp/xlf/FSStrings.tr.xlf b/src/fsharp/xlf/FSStrings.tr.xlf index bc70825fa2c..d6c9603244f 100644 --- a/src/fsharp/xlf/FSStrings.tr.xlf +++ b/src/fsharp/xlf/FSStrings.tr.xlf @@ -1,4 +1,4 @@ - + @@ -959,7 +959,7 @@ comment - açıklama + Açıklama @@ -1174,7 +1174,7 @@ keyword - anahtar sözcük + Anahtar Sözcük diff --git a/src/fsharp/xlf/FSStrings.zh-Hans.xlf b/src/fsharp/xlf/FSStrings.zh-Hans.xlf index 12be2851596..c35cb9b6d2f 100644 --- a/src/fsharp/xlf/FSStrings.zh-Hans.xlf +++ b/src/fsharp/xlf/FSStrings.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -1174,7 +1174,7 @@ keyword - 关键字 + 关键字 diff --git a/src/fsharp/xlf/FSStrings.zh-Hant.xlf b/src/fsharp/xlf/FSStrings.zh-Hant.xlf index 81cad28dd59..ede43bb126e 100644 --- a/src/fsharp/xlf/FSStrings.zh-Hant.xlf +++ b/src/fsharp/xlf/FSStrings.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -1174,7 +1174,7 @@ keyword - 關鍵字 + 關鍵字 @@ -1454,7 +1454,7 @@ . {0} - 。{0} + . {0} From d38481ed20fc27af9e767646b22e8da5fb037689 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Tue, 30 Oct 2018 01:11:22 -0700 Subject: [PATCH 31/48] Remove FSharpTeamVersion (#5837) --- src/utils/CompilerLocationUtils.fs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 3499e7e5b21..55dcac8ccc0 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -37,19 +37,6 @@ module internal FSharpEnvironment = | s -> Some(s) with _ -> None - - // The F# team version number. This version number is used for - // - the F# version number reported by the fsc.exe and fsi.exe banners in the CTP release - // - the F# version number printed in the HTML documentation generator - // - the .NET DLL version number for all VS2008 DLLs - // - the VS2008 registry key, written by the VS2008 installer - // HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AssemblyFolders\Microsoft.FSharp-" + FSharpTeamVersionNumber - // Also - // - for Beta2, the language revision number indicated on the F# language spec - // - // It is NOT the version number listed on FSharp.Core.dll - let FSharpTeamVersionNumber = "2.0.0.0" - // The F# binary format revision number. The first three digits of this form the significant part of the // format revision number for F# binary signature and optimization metadata. The last digit is not significant. // From f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 30 Oct 2018 19:47:16 +0000 Subject: [PATCH 32/48] record some perf test results --- tests/scripts/compiler-perf-results.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index 65201821cef..9e2fdb99db4 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -183,3 +183,12 @@ https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e5 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 251.16 9.83 34.52 45.45 57.97 58.65 https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e508dc2ff847c82ee4933f464aa23bee0 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 257.62 10.34 35.18 45.40 56.07 57.88 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 250.59 10.10 34.82 45.33 58.62 63.86 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring 375b87881327532ffa6fe653d3d57668814db95e d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 291.86 10.38 35.79 45.87 55.86 58.29 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 275.17 10.24 35.76 44.80 55.18 58.95 +https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 279.33 10.53 35.73 42.43 52.15 59.65 +https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 274.98 10.69 36.03 43.64 52.48 57.74 +https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 265.57 10.24 36.23 42.52 59.23 59.87 +https://github.com/manofstick/visualfsharp.git nobox_comparer f5298fd5e407956d506da6e14623c1f698f90113 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 266.58 10.38 36.33 41.24 52.01 58.60 +https://github.com/manofstick/visualfsharp.git nobox 5b80e902e50d9ffc43de1d48748ad735d6319403 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 269.76 10.40 35.36 42.61 51.98 58.77 +https://github.com/Microsoft/visualfsharp master d38481ed20fc27af9e767646b22e8da5fb037689 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 264.61 10.62 36.12 45.58 56.80 58.41 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 260.77 10.01 35.35 45.31 56.67 59.00 From 24ed23a4f277fa24b23a93494770b1ced6a02c5c Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 30 Oct 2018 20:51:18 +0000 Subject: [PATCH 33/48] record some perf test results --- tests/scripts/compiler-perf-results.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index 9e2fdb99db4..4fdb2b27fd0 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -183,12 +183,14 @@ https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e5 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 251.16 9.83 34.52 45.45 57.97 58.65 https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e508dc2ff847c82ee4933f464aa23bee0 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 257.62 10.34 35.18 45.40 56.07 57.88 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 250.59 10.10 34.82 45.33 58.62 63.86 -https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring 375b87881327532ffa6fe653d3d57668814db95e d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 291.86 10.38 35.79 45.87 55.86 58.29 https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 275.17 10.24 35.76 44.80 55.18 58.95 -https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 279.33 10.53 35.73 42.43 52.15 59.65 -https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 274.98 10.69 36.03 43.64 52.48 57.74 -https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 265.57 10.24 36.23 42.52 59.23 59.87 -https://github.com/manofstick/visualfsharp.git nobox_comparer f5298fd5e407956d506da6e14623c1f698f90113 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 266.58 10.38 36.33 41.24 52.01 58.60 -https://github.com/manofstick/visualfsharp.git nobox 5b80e902e50d9ffc43de1d48748ad735d6319403 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 269.76 10.40 35.36 42.61 51.98 58.77 -https://github.com/Microsoft/visualfsharp master d38481ed20fc27af9e767646b22e8da5fb037689 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 264.61 10.62 36.12 45.58 56.80 58.41 +https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 279.33 10.53 35.73 42.43 52.15 59.65 +https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 274.98 10.69 36.03 43.64 52.48 57.74 +https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 265.57 10.24 36.23 42.52 59.23 59.87 +https://github.com/manofstick/visualfsharp.git nobox_comparer f5298fd5e407956d506da6e14623c1f698f90113 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 266.58 10.38 36.33 41.24 52.01 58.60 +https://github.com/manofstick/visualfsharp.git nobox 5b80e902e50d9ffc43de1d48748ad735d6319403 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 269.76 10.40 35.36 42.61 51.98 58.77 +https://github.com/Microsoft/visualfsharp master d38481ed20fc27af9e767646b22e8da5fb037689 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 264.61 10.62 36.12 45.58 56.80 58.41 https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 260.77 10.01 35.35 45.31 56.67 59.00 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 270.06 10.33 35.78 46.71 57.46 59.77 +https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 263.89 10.19 34.69 41.24 51.90 59.00 +https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 259.13 10.44 34.32 41.14 51.28 58.82 From ed2aa70a861ee091a2e9a1eaac6f556feac4f1d7 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Tue, 30 Oct 2018 22:45:05 -0700 Subject: [PATCH 34/48] Remove fsiPackage.fs (#5838) --- vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 1 - vsintegration/src/FSharp.VS.FSI/fsiPackage.fs | 4 ---- 2 files changed, 5 deletions(-) delete mode 100644 vsintegration/src/FSharp.VS.FSI/fsiPackage.fs diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 29f70484239..c69f5d51005 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -37,7 +37,6 @@ - true Microsoft.VisualStudio.FSharp.Interactive.SRProperties diff --git a/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs b/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs deleted file mode 100644 index 1f36d5b7d81..00000000000 --- a/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Interactive - From f620df65d2a0d2010ba69102afde99062a1729fe Mon Sep 17 00:00:00 2001 From: Don Syme Date: Wed, 31 Oct 2018 14:30:44 +0000 Subject: [PATCH 35/48] more compiler perf results --- tests/scripts/compiler-perf-results.txt | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/scripts/compiler-perf-results.txt b/tests/scripts/compiler-perf-results.txt index 4fdb2b27fd0..cf6e5b315ab 100644 --- a/tests/scripts/compiler-perf-results.txt +++ b/tests/scripts/compiler-perf-results.txt @@ -183,14 +183,21 @@ https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e5 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 251.16 9.83 34.52 45.45 57.97 58.65 https://github.com/dsyme/visualfsharp.git fix-5136 c9a7678e508dc2ff847c82ee4933f464aa23bee0 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 257.62 10.34 35.18 45.40 56.07 57.88 https://github.com/Microsoft/visualfsharp master 7bcbd1abbace1a41e0c6e12723957d87405c4cba 7bcbd1abbace1a41e0c6e12723957d87405c4cba MSRC-3617253 250.59 10.10 34.82 45.33 58.62 63.86 -https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 275.17 10.24 35.76 44.80 55.18 58.95 +https://github.com/Microsoft/visualfsharp master d38481ed20fc27af9e767646b22e8da5fb037689 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 264.61 10.62 36.12 45.58 56.80 58.41 +https://github.com/Microsoft/visualfsharp master 24ed23a4f277fa24b23a93494770b1ced6a02c5c 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 266.80 10.34 37.16 47.67 58.73 58.82 https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 279.33 10.53 35.73 42.43 52.15 59.65 -https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 274.98 10.69 36.03 43.64 52.48 57.74 -https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 265.57 10.24 36.23 42.52 59.23 59.87 +https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 263.89 10.19 34.69 41.24 51.90 59.00 +https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 264.92 10.70 34.44 41.29 52.49 59.16 https://github.com/manofstick/visualfsharp.git nobox_comparer f5298fd5e407956d506da6e14623c1f698f90113 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 266.58 10.38 36.33 41.24 52.01 58.60 +https://github.com/manofstick/visualfsharp.git nobox_comparer f5298fd5e407956d506da6e14623c1f698f90113 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 266.91 10.36 34.71 41.20 52.88 59.43 https://github.com/manofstick/visualfsharp.git nobox 5b80e902e50d9ffc43de1d48748ad735d6319403 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 269.76 10.40 35.36 42.61 51.98 58.77 -https://github.com/Microsoft/visualfsharp master d38481ed20fc27af9e767646b22e8da5fb037689 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 264.61 10.62 36.12 45.58 56.80 58.41 +https://github.com/manofstick/visualfsharp.git nobox 5b80e902e50d9ffc43de1d48748ad735d6319403 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 263.90 10.33 35.20 42.92 53.58 56.52 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 275.17 10.24 35.76 44.80 55.18 58.95 https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 260.77 10.01 35.35 45.31 56.67 59.00 https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 270.06 10.33 35.78 46.71 57.46 59.77 -https://github.com/manofstick/visualfsharp.git notagged 73faf347d22716da3a7e1d3bcfabeeb505b8c80f f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 263.89 10.19 34.69 41.24 51.90 59.00 +https://github.com/realvictorprm/visualfsharp.git 20181011_ConstraintSolverRefactoring e531753de12e648cef21b8d7feff2c4619f1fbe4 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 273.90 10.79 35.08 46.55 58.12 59.74 +https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 263.89 10.44 34.44 42.21 51.63 60.27 https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c f3d55f286278fcd7dc81fc3636e4b1fdc16218e0 MSRC-3617253 259.13 10.44 34.32 41.14 51.28 58.82 +https://github.com/manofstick/visualfsharp.git faster_map_3 df2e8dd09726e86ef62b71b23f8c14bbf9bd540c d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 274.98 10.69 36.03 43.64 52.48 57.74 +https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 24ed23a4f277fa24b23a93494770b1ced6a02c5c MSRC-3617253 262.95 10.58 34.71 43.21 53.43 59.23 +https://github.com/manofstick/visualfsharp.git nobox_reflection 3a4f0b7356fafb2f8aef9f6360ab26585a3a20f8 d38481ed20fc27af9e767646b22e8da5fb037689 MSRC-3617253 265.57 10.24 36.23 42.52 59.23 59.87 From 14630668cdec7a872bbd3096bd317d11ba3a7d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20Peter=20Rouven=20M=C3=BCller?= Date: Wed, 31 Oct 2018 16:47:36 +0100 Subject: [PATCH 36/48] [CompilerPerf] Starting refactoring of ConstraintSolver.fs (#5766) * Starting refactoring of ConstraintSolver.fs Signed-off-by: realvictorprm * more refactoring of ++ operator Signed-off-by: realvictorprm * Trying to apply correct style. Signed-off-by: realvictorprm * replaced most usage of IterateD + styling Signed-off-by: realvictorprm * More style cleanup to reduce diff. Signed-off-by: realvictorprm * big restore of original spacing Signed-off-by: realvictorprm * Applying review. Signed-off-by: realvictorprm * whitespace fix * update FSComp.fs --- src/fsharp/ConstraintSolver.fs | 468 +++++++++++++++++---------------- src/fsharp/ErrorLogger.fs | 14 +- 2 files changed, 257 insertions(+), 225 deletions(-) diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index 8363ea03d6c..e5052b6f740 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -471,7 +471,10 @@ and SolveTypStaticReq (csenv:ConstraintSolverEnv) trace req ty = match stripTyparEqns ty with | TType_measure ms -> let vs = ListMeasureVarOccsWithNonZeroExponents ms - IterateD (fun ((tpr:Typar), _) -> SolveTypStaticReqTypar csenv trace req tpr) vs + trackErrors { + for (tpr, _) in vs do + return! SolveTypStaticReqTypar csenv trace req tpr + } | _ -> match tryAnyParTy csenv.g ty with | ValueSome tpr -> SolveTypStaticReqTypar csenv trace req tpr @@ -504,20 +507,22 @@ let SolveTypIsCompatFlex (csenv:ConstraintSolverEnv) trace req ty = else CompleteD -let SubstMeasureWarnIfRigid (csenv:ConstraintSolverEnv) trace (v:Typar) ms = +let SubstMeasureWarnIfRigid (csenv:ConstraintSolverEnv) trace (v:Typar) ms = trackErrors { if v.Rigidity.WarnIfUnified && not (isAnyParTy csenv.g (TType_measure ms)) then // NOTE: we grab the name eagerly to make sure the type variable prints as a type variable - let tpnmOpt = if v.IsCompilerGenerated then None else Some v.Name - SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) ++ (fun () -> + let tpnmOpt = if v.IsCompilerGenerated then None else Some v.Name + do! SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) SubstMeasure v ms - WarnD(NonRigidTypar(csenv.DisplayEnv, tpnmOpt, v.Range, TType_measure (Measure.Var v), TType_measure ms, csenv.m))) + return! WarnD(NonRigidTypar(csenv.DisplayEnv, tpnmOpt, v.Range, TType_measure (Measure.Var v), TType_measure ms, csenv.m)) else // Propagate static requirements from 'tp' to 'ty' - SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) ++ (fun () -> + do! SolveTypStaticReq csenv trace v.StaticReq (TType_measure ms) SubstMeasure v ms if v.Rigidity = TyparRigidity.Anon && measureEquiv csenv.g ms Measure.One then - WarnD(Error(FSComp.SR.csCodeLessGeneric(), v.Range)) - else CompleteD) + return! WarnD(Error(FSComp.SR.csCodeLessGeneric(), v.Range)) + else + () + } /// Imperatively unify the unit-of-measure expression ms against 1. /// There are three cases @@ -703,21 +708,17 @@ let CheckWarnIfRigid (csenv:ConstraintSolverEnv) ty1 (r:Typar) ty = /// Add the constraint "ty1 = ty" to the constraint problem, where ty1 is a type variable. /// Propagate all effects of adding this constraint, e.g. to solve other variables -let rec SolveTyparEqualsType (csenv:ConstraintSolverEnv) ndeep m2 (trace:OptionalTrace) ty1 ty = +let rec SolveTyparEqualsType (csenv:ConstraintSolverEnv) ndeep m2 (trace:OptionalTrace) ty1 ty = trackErrors { let m = csenv.m - - DepthCheck ndeep m ++ (fun () -> + do! DepthCheck ndeep m match ty1 with | TType_var r | TType_measure (Measure.Var r) -> // The types may still be equivalent due to abbreviations, which we are trying not to eliminate - if typeEquiv csenv.g ty1 ty then CompleteD else - + if typeEquiv csenv.g ty1 ty then () else // The famous 'occursCheck' check to catch "infinite types" like 'a = list<'a> - see also https://github.com/Microsoft/visualfsharp/issues/1170 - if occursCheck csenv.g r ty then ErrorD (ConstraintSolverInfiniteTypes(csenv.eContextInfo, csenv.DisplayEnv, ty1, ty, m, m2)) else - + if occursCheck csenv.g r ty then return! ErrorD (ConstraintSolverInfiniteTypes(csenv.eContextInfo, csenv.DisplayEnv, ty1, ty, m, m2)) else // Note: warn _and_ continue! - CheckWarnIfRigid csenv ty1 r ty ++ (fun () -> - + do! CheckWarnIfRigid csenv ty1 r ty // Record the solution before we solve the constraints, since // We may need to make use of the equation when solving the constraints. // Record a entry in the undo trace if one is provided @@ -726,33 +727,32 @@ let rec SolveTyparEqualsType (csenv:ConstraintSolverEnv) ndeep m2 (trace:Optiona (* 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 CompleteD else - + if r.IsFromError then () else // Check to see if this type variable is relevant to any trait constraints. // If so, re-solve the relevant constraints. - (if csenv.SolverState.ExtraCxs.ContainsKey r.Stamp then - RepeatWhileD ndeep (fun ndeep -> SolveRelevantMemberConstraintsForTypar csenv ndeep false trace r) - else - CompleteD) ++ (fun _ -> - + if csenv.SolverState.ExtraCxs.ContainsKey r.Stamp then + do! RepeatWhileD ndeep (fun ndeep -> SolveRelevantMemberConstraintsForTypar csenv ndeep false trace r) // Re-solve the other constraints associated with this type variable - solveTypMeetsTyparConstraints csenv ndeep m2 trace ty r)) + return! solveTypMeetsTyparConstraints csenv ndeep m2 trace ty r - | _ -> failwith "SolveTyparEqualsType") + | _ -> failwith "SolveTyparEqualsType" + } /// Apply the constraints on 'typar' to the type 'ty' -and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty (r: Typar) = +and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty (r: Typar) = trackErrors { let g = csenv.g // Propagate compat flex requirements from 'tp' to 'ty' - SolveTypIsCompatFlex csenv trace r.IsCompatFlex ty ++ (fun () -> + do! SolveTypIsCompatFlex csenv trace r.IsCompatFlex ty // Propagate dynamic requirements from 'tp' to 'ty' - SolveTypDynamicReq csenv trace r.DynamicReq ty ++ (fun () -> + do! SolveTypDynamicReq csenv trace r.DynamicReq ty // Propagate static requirements from 'tp' to 'ty' - SolveTypStaticReq csenv trace r.StaticReq ty ++ (fun () -> + do! SolveTypStaticReq csenv trace r.StaticReq ty // Solve constraints on 'tp' w.r.t. 'ty' - r.Constraints |> IterateD (function + for e in r.Constraints do + do! + match e with | TyparConstraint.DefaultsTo (priority, dty, m) -> if typeEquiv g ty dty then CompleteD @@ -774,8 +774,8 @@ and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty | TyparConstraint.SimpleChoice(tys, m2) -> SolveTypeChoice csenv ndeep m2 trace ty tys | TyparConstraint.CoercesTo(ty2, m2) -> SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m2 trace None ty2 ty | TyparConstraint.MayResolveMember(traitInfo, m2) -> - SolveMemberConstraint csenv false false ndeep m2 trace traitInfo ++ (fun _ -> CompleteD) - )))) + SolveMemberConstraint csenv false false ndeep m2 trace traitInfo |> OperationResult.ignore + } /// Add the constraint "ty1 = ty2" to the constraint problem. @@ -854,9 +854,10 @@ and SolveTypeEqualsTypeEqns csenv ndeep m2 trace cxsln origl1 origl2 = ErrorD(ConstraintSolverTupleDiffLengths(csenv.DisplayEnv, origl1, origl2, csenv.m, m2)) loop origl1 origl2 -and SolveFunTypeEqn csenv ndeep m2 trace cxsln d1 d2 r1 r2 = - SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln d1 d2 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln r1 r2) +and SolveFunTypeEqn csenv ndeep m2 trace cxsln d1 d2 r1 r2 = trackErrors { + do! SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln d1 d2 + return! SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln r1 r2 + } // ty1: expected // ty2: actual @@ -902,13 +903,14 @@ and SolveTypeSubsumesType (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalT // Special subsumption rule for byref tags | TType_app (tc1, l1) , TType_app (tc2, l2) when tyconRefEq g tc1 tc2 && g.byref2_tcr.CanDeref && tyconRefEq g g.byref2_tcr tc1 -> match l1, l2 with - | [ h1; tag1 ], [ h2; tag2 ] -> - SolveTypeEqualsType csenv ndeep m2 trace None h1 h2 ++ (fun () -> + | [ h1; tag1 ], [ h2; tag2 ] -> trackErrors { + do! SolveTypeEqualsType csenv ndeep m2 trace None h1 h2 match stripTyEqnsA csenv.g canShortcut tag1, stripTyEqnsA csenv.g canShortcut tag2 with | TType_app(tagc1, []), TType_app(tagc2, []) when (tyconRefEq g tagc2 g.byrefkind_InOut_tcr && - (tyconRefEq g tagc1 g.byrefkind_In_tcr || tyconRefEq g tagc1 g.byrefkind_Out_tcr) ) -> CompleteD - | _ -> SolveTypeEqualsType csenv ndeep m2 trace cxsln tag1 tag2) + (tyconRefEq g tagc1 g.byrefkind_In_tcr || tyconRefEq g tagc1 g.byrefkind_Out_tcr) ) -> () + | _ -> return! SolveTypeEqualsType csenv ndeep m2 trace cxsln tag1 tag2 + } | _ -> SolveTypeEqualsTypeEqns csenv ndeep m2 trace cxsln l1 l2 | TType_app (tc1, l1) , TType_app (tc2, l2) when tyconRefEq g tc1 tc2 -> @@ -988,16 +990,16 @@ and SolveDimensionlessNumericType (csenv:ConstraintSolverEnv) ndeep m2 trace ty /// We pretend int and other types support a number of operators. In the actual IL for mscorlib they /// don't, however the type-directed static optimization rules in the library code that makes use of this /// will deal with the problem. -and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload permitWeakResolution ndeep m2 trace (TTrait(tys, nm, memFlags, argtys, rty, sln)): OperationResult = +and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload permitWeakResolution ndeep m2 trace (TTrait(tys, nm, memFlags, argtys, rty, sln)): OperationResult = trackErrors { // Do not re-solve if already solved - if sln.Value.IsSome then ResultD true else + if sln.Value.IsSome then return! ResultD true else let g = csenv.g let m = csenv.m let amap = csenv.amap let aenv = csenv.EquivEnv let denv = csenv.DisplayEnv let ndeep = ndeep + 1 - DepthCheck ndeep m ++ (fun () -> + do! DepthCheck ndeep m // Remove duplicates from the set of types in the support let tys = ListSet.setify (typeAEquiv g aenv) tys @@ -1008,19 +1010,19 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p // Assert the object type if the constraint is for an instance member if memFlags.IsInstance then match tys, argtys with - | [ty], (h :: _) -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace h ty - | _ -> ErrorD (ConstraintSolverError(FSComp.SR.csExpectedArguments(), m, m2)) - else CompleteD - ++ (fun () -> - + | [ty], (h :: _) -> do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace h ty + | _ -> do! ErrorD (ConstraintSolverError(FSComp.SR.csExpectedArguments(), m, m2)) // Trait calls are only supported on pseudo type (variables) - tys |> IterateD (SolveTypStaticReq csenv trace HeadTypeStaticReq)) ++ (fun () -> + for e in tys do + do! SolveTypStaticReq csenv trace HeadTypeStaticReq e let argtys = if memFlags.IsInstance then List.tail argtys else argtys let minfos = GetRelevantMethodsForTrait csenv permitWeakResolution nm traitInfo - match minfos, tys, memFlags.IsInstance, nm, argtys with + let! res = + trackErrors { + match minfos, tys, memFlags.IsInstance, nm, argtys with | _, _, false, ("op_Division" | "op_Multiply"), [argty1;argty2] when // This simulates the existence of @@ -1063,153 +1065,155 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p checkRuleAppliesInPreferenceToMethods argty2 argty1) -> match GetMeasureOfType g argty1 with - | Some (tcref, ms1) -> + | Some (tcref, ms1) -> let ms2 = freshMeasure () - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 (mkAppTy tcref [TType_measure ms2]) ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1, if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) ++ (fun () -> - ResultD TTraitBuiltIn)) + 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! ResultD TTraitBuiltIn | _ -> match GetMeasureOfType g argty2 with - | Some (tcref, ms2) -> + | Some (tcref, ms2) -> let ms1 = freshMeasure () - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure ms1]) ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1, if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) ++ (fun () -> - ResultD TTraitBuiltIn)) - | _ -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - ResultD TTraitBuiltIn)) + 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! ResultD TTraitBuiltIn + | _ -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + return! ResultD TTraitBuiltIn | _, _, false, ("op_Addition" | "op_Subtraction" | "op_Modulus"), [argty1;argty2] when // Ignore any explicit +/- overloads from any basic integral types (minfos |> List.forall (fun minfo -> isIntegerTy g minfo.ApparentEnclosingType ) && ( (IsNumericOrIntegralEnumType g argty1 || (nm = "op_Addition" && (isCharTy g argty1 || isStringTy g argty1))) && (permitWeakResolution || not (isTyparTy g argty2)) - || (IsNumericOrIntegralEnumType g argty2 || (nm = "op_Addition" && (isCharTy g argty2 || isStringTy g argty2))) && (permitWeakResolution || not (isTyparTy g argty1)))) -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - ResultD TTraitBuiltIn)) + || (IsNumericOrIntegralEnumType g argty2 || (nm = "op_Addition" && (isCharTy g argty2 || isStringTy g argty2))) && (permitWeakResolution || not (isTyparTy g argty1)))) -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + return! ResultD TTraitBuiltIn | _, _, false, ("op_LessThan" | "op_LessThanOrEqual" | "op_GreaterThan" | "op_GreaterThanOrEqual" | "op_Equality" | "op_Inequality" ), [argty1;argty2] when // Ignore any explicit overloads from any basic integral types (minfos |> List.forall (fun minfo -> isIntegerTy g minfo.ApparentEnclosingType ) && ( (IsRelationalType g argty1 && (permitWeakResolution || not (isTyparTy g argty2))) - || (IsRelationalType g argty2 && (permitWeakResolution || not (isTyparTy g argty1))))) -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.bool_ty ++ (fun () -> - ResultD TTraitBuiltIn)) + || (IsRelationalType g argty2 && (permitWeakResolution || not (isTyparTy g argty1))))) -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.bool_ty + return! ResultD TTraitBuiltIn // We pretend for uniformity that the numeric types have a static property called Zero and One // As with constants, only zero is polymorphic in its units | [], [ty], false, "get_Zero", [] - when IsNumericType g ty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ty ++ (fun () -> - ResultD TTraitBuiltIn) + when IsNumericType g ty -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ty + return! ResultD TTraitBuiltIn | [], [ty], false, "get_One", [] - when IsNumericType g ty || isCharTy g ty -> - SolveDimensionlessNumericType csenv ndeep m2 trace ty ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ty ++ (fun () -> - ResultD TTraitBuiltIn)) + when IsNumericType g ty || isCharTy g ty -> + do! SolveDimensionlessNumericType csenv ndeep m2 trace ty + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ty + return! ResultD TTraitBuiltIn | [], _, false, ("DivideByInt"), [argty1;argty2] - when isFpTy g argty1 || isDecimalTy g argty1 -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 g.int_ty ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - ResultD TTraitBuiltIn)) + when isFpTy g argty1 || isDecimalTy g argty1 -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 g.int_ty + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + return! ResultD TTraitBuiltIn // We pretend for uniformity that the 'string' and 'array' types have an indexer property called 'Item' | [], [ty], true, ("get_Item"), [argty1] - when isStringTy g ty -> + when isStringTy g ty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 g.int_ty ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.char_ty ++ (fun () -> - ResultD TTraitBuiltIn)) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 g.int_ty + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.char_ty + return! ResultD TTraitBuiltIn | [], [ty], true, ("get_Item"), argtys - when isArrayTy g ty -> + when isArrayTy g ty -> - (if rankOfArrayTy g ty <> argtys.Length then ErrorD(ConstraintSolverError(FSComp.SR.csIndexArgumentMismatch((rankOfArrayTy g ty), argtys.Length), m, m2)) else CompleteD) ++ (fun () -> - (argtys |> IterateD (fun argty -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty g.int_ty)) ++ (fun () -> + if rankOfArrayTy g ty <> argtys.Length then do! ErrorD(ConstraintSolverError(FSComp.SR.csIndexArgumentMismatch((rankOfArrayTy g ty), argtys.Length), m, m2)) + for argty in argtys do + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty g.int_ty let ety = destArrayTy g ty - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ety ++ (fun () -> - ResultD TTraitBuiltIn))) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty ety + return! ResultD TTraitBuiltIn | [], [ty], true, ("set_Item"), argtys - when isArrayTy g ty -> + when isArrayTy g ty -> - (if rankOfArrayTy g ty <> argtys.Length - 1 then ErrorD(ConstraintSolverError(FSComp.SR.csIndexArgumentMismatch((rankOfArrayTy g ty), (argtys.Length - 1)), m, m2)) else CompleteD) ++ (fun () -> + if rankOfArrayTy g ty <> argtys.Length - 1 then do! ErrorD(ConstraintSolverError(FSComp.SR.csIndexArgumentMismatch((rankOfArrayTy g ty), (argtys.Length - 1)), m, m2)) let argtys, ety = List.frontAndBack argtys - (argtys |> IterateD (fun argty -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty g.int_ty)) ++ (fun () -> + for argty in argtys do + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty g.int_ty let etys = destArrayTy g ty - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace ety etys ++ (fun () -> - ResultD TTraitBuiltIn))) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace ety etys + return! ResultD TTraitBuiltIn | [], _, false, ("op_BitwiseAnd" | "op_BitwiseOr" | "op_ExclusiveOr"), [argty1;argty2] when (isIntegerOrIntegerEnumTy g argty1 || (isEnumTy g argty1)) && (permitWeakResolution || not (isTyparTy g argty2)) - || (isIntegerOrIntegerEnumTy g argty2 || (isEnumTy g argty2)) && (permitWeakResolution || not (isTyparTy g argty1)) -> + || (isIntegerOrIntegerEnumTy g argty2 || (isEnumTy g argty2)) && (permitWeakResolution || not (isTyparTy g argty1)) -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - SolveDimensionlessNumericType csenv ndeep m2 trace argty1 ++ (fun () -> - ResultD TTraitBuiltIn))); + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + do! SolveDimensionlessNumericType csenv ndeep m2 trace argty1 + return! ResultD TTraitBuiltIn | [], _, false, ("op_LeftShift" | "op_RightShift"), [argty1;argty2] - when isIntegerOrIntegerEnumTy g argty1 -> + when isIntegerOrIntegerEnumTy g argty1 -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 g.int_ty ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - SolveDimensionlessNumericType csenv ndeep m2 trace argty1 ++ (fun () -> - ResultD TTraitBuiltIn))) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 g.int_ty + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + do! SolveDimensionlessNumericType csenv ndeep m2 trace argty1 + return! ResultD TTraitBuiltIn | _, _, false, ("op_UnaryPlus"), [argty] - when IsNumericOrIntegralEnumType g argty -> + when IsNumericOrIntegralEnumType g argty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty ++ (fun () -> - ResultD TTraitBuiltIn) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty + return! ResultD TTraitBuiltIn | _, _, false, ("op_UnaryNegation"), [argty] - when isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty -> + when isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty ++ (fun () -> - ResultD TTraitBuiltIn) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty + return! ResultD TTraitBuiltIn | _, _, true, ("get_Sign"), [] - when (let argty = tys.Head in isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty) -> + when (let argty = tys.Head in isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty) -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.int32_ty ++ (fun () -> - ResultD TTraitBuiltIn) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty g.int32_ty + return! ResultD TTraitBuiltIn | _, _, false, ("op_LogicalNot" | "op_OnesComplement"), [argty] - when isIntegerOrIntegerEnumTy g argty -> + when isIntegerOrIntegerEnumTy g argty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty ++ (fun () -> - SolveDimensionlessNumericType csenv ndeep m2 trace argty ++ (fun () -> - ResultD TTraitBuiltIn)) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty + do! SolveDimensionlessNumericType csenv ndeep m2 trace argty + return! ResultD TTraitBuiltIn | _, _, false, ("Abs"), [argty] - when isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty -> + when isSignedIntegerTy g argty || isFpTy g argty || isDecimalTy g argty -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty ++ (fun () -> - ResultD TTraitBuiltIn) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty + return! ResultD TTraitBuiltIn | _, _, false, "Sqrt", [argty1] when isFpTy g argty1 -> match GetMeasureOfType g argty1 with - | Some (tcref, _) -> + | Some (tcref, _) -> let ms1 = freshMeasure () - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure (Measure.Prod (ms1, ms1))]) ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure ms1]) ++ (fun () -> - ResultD TTraitBuiltIn)) - | None -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - ResultD TTraitBuiltIn) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure (Measure.Prod (ms1, ms1))]) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure ms1]) + return! ResultD TTraitBuiltIn + | None -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + return! ResultD TTraitBuiltIn | _, _, false, ("Sin" | "Cos" | "Tan" | "Sinh" | "Cosh" | "Tanh" | "Atan" | "Acos" | "Asin" | "Exp" | "Ceiling" | "Floor" | "Round" | "Truncate" | "Log10" | "Log" | "Sqrt"), [argty] - when isFpTy g argty -> + when isFpTy g argty -> - SolveDimensionlessNumericType csenv ndeep m2 trace argty ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty ++ (fun () -> - ResultD TTraitBuiltIn)) + do! SolveDimensionlessNumericType csenv ndeep m2 trace argty + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty + return! ResultD TTraitBuiltIn | _, _, false, ("op_Explicit"), [argty] when (// The input type. @@ -1221,7 +1225,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p // Exclusion: No conversion from char to decimal not (isCharTy g argty && isDecimalTy g rty)) -> - ResultD TTraitBuiltIn + return! ResultD TTraitBuiltIn | _, _, false, ("op_Explicit"), [argty] @@ -1230,23 +1234,23 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p // The output type (isDecimalTy g rty)) -> - ResultD TTraitBuiltIn + return! ResultD TTraitBuiltIn | [], _, false, "Pow", [argty1; argty2] - when isFpTy g argty1 -> + when isFpTy g argty1 -> - SolveDimensionlessNumericType csenv ndeep m2 trace argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> - ResultD TTraitBuiltIn))) + do! SolveDimensionlessNumericType csenv ndeep m2 trace argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + return! ResultD TTraitBuiltIn | _, _, false, ("Atan2"), [argty1; argty2] - when isFpTy g argty1 -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> + when isFpTy g argty1 -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 match GetMeasureOfType g argty1 with - | None -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 - | Some (tcref, _) -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure Measure.One])) ++ (fun () -> - ResultD TTraitBuiltIn) + | None -> do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 + | Some (tcref, _) -> do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure Measure.One]) + return! ResultD TTraitBuiltIn | _ -> // OK, this is not solved by a built-in constraint. @@ -1279,12 +1283,12 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p match minfos, recdPropSearch with | [], None when not (tys |> List.exists (isAnyParTy g)) -> if tys |> List.exists (isFunTy g) then - ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenFunction(DecompileOpName nm), m, m2)) + return! ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenFunction(DecompileOpName nm), m, m2)) elif tys |> List.exists (isAnyTupleTy g) then - ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenTuple(DecompileOpName nm), m, m2)) + return! ErrorD (ConstraintSolverError(FSComp.SR.csExpectTypeWithOperatorButGivenTuple(DecompileOpName nm), m, m2)) else match nm, argtys with - | "op_Explicit", [argty] -> ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportConversion((NicePrint.prettyStringOfTy denv argty), (NicePrint.prettyStringOfTy denv rty)), m, m2)) + | "op_Explicit", [argty] -> return! ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportConversion((NicePrint.prettyStringOfTy denv argty), (NicePrint.prettyStringOfTy denv rty)), m, m2)) | _ -> let tyString = match tys with @@ -1301,10 +1305,9 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p | _ -> if tys.Length = 1 then FSComp.SR.csTypeDoesNotSupportOperator(tyString, opName) else FSComp.SR.csTypesDoNotSupportOperator(tyString, opName) - ErrorD(ConstraintSolverError(err, m, m2)) + return! ErrorD(ConstraintSolverError(err, m, m2)) | _ -> - let dummyExpr = mkUnit g m let calledMethGroup = minfos @@ -1323,38 +1326,38 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) ignoreUnresolvedOverload p | Some (rfinfo, isSetProp), None -> // OK, the constraint is solved by a record property. Assert that the return types match. let rty2 = if isSetProp then g.unit_ty else rfinfo.FieldType - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty rty2 ++ (fun () -> - ResultD (TTraitSolvedRecdProp(rfinfo, isSetProp))) + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty rty2 + return! ResultD (TTraitSolvedRecdProp(rfinfo, isSetProp)) | None, Some (calledMeth:CalledMeth<_>) -> // OK, the constraint is solved. let minfo = calledMeth.Method - errors ++ (fun () -> - let isInstance = minfo.IsInstance - if isInstance <> memFlags.IsInstance then + do! errors + let isInstance = minfo.IsInstance + if isInstance <> memFlags.IsInstance then + return! if isInstance then ErrorD(ConstraintSolverError(FSComp.SR.csMethodFoundButIsNotStatic((NicePrint.minimalStringOfType denv minfo.ApparentEnclosingType), (DecompileOpName nm), nm), m, m2 )) else ErrorD(ConstraintSolverError(FSComp.SR.csMethodFoundButIsStatic((NicePrint.minimalStringOfType denv minfo.ApparentEnclosingType), (DecompileOpName nm), nm), m, m2 )) - else - CheckMethInfoAttributes g m None minfo ++ (fun () -> - ResultD (TTraitSolved (minfo, calledMeth.CalledTyArgs)))) + else + do! CheckMethInfoAttributes g m None minfo + return! ResultD (TTraitSolved (minfo, calledMeth.CalledTyArgs)) - | _ -> + | _ -> let support = GetSupportOfMemberConstraint csenv traitInfo let frees = GetFreeTyparsOfMemberConstraint csenv traitInfo - // If there's nothing left to learn then raise the errors - (if (permitWeakResolution && isNil support) || isNil frees then errors - // Otherwise re-record the trait waiting for canonicalization - else AddMemberConstraint csenv ndeep m2 trace traitInfo support frees) ++ (fun () -> + if (permitWeakResolution && isNil support) || isNil frees then do! errors + // Otherwise re-record the trait waiting for canonicalization + else do! AddMemberConstraint csenv ndeep m2 trace traitInfo support frees + return! match errors with | ErrorResult (_, UnresolvedOverloading _) when not ignoreUnresolvedOverload && (not (nm = "op_Explicit" || nm = "op_Implicit")) -> ErrorD LocallyAbortOperationThatFailsToResolveOverload - | _ -> ResultD TTraitUnsolved) - ) - ++ - (fun res -> RecordMemberConstraintSolution csenv.SolverState m trace traitInfo res)) - + | _ -> ResultD TTraitUnsolved + } + return! RecordMemberConstraintSolution csenv.SolverState m trace traitInfo res + } /// Record the solution to a member constraint in the mutable reference cell attached to /// each member constraint. @@ -1518,7 +1521,10 @@ and AddMemberConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace traitInfo sup // Associate the constraint with each type variable in the support, so if the type variable // gets generalized then this constraint is attached at the binding site. - support |> IterateD (fun tp -> AddConstraint csenv ndeep m2 trace tp (TyparConstraint.MayResolveMember(traitInfo, m2))) + trackErrors { + for tp in support do + do! AddConstraint csenv ndeep m2 trace tp (TyparConstraint.MayResolveMember(traitInfo, m2)) + } /// Record a constraint on an inference type variable. @@ -1548,9 +1554,11 @@ and AddConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace tp newConstraint = let rty1 = GetFSharpViewOfReturnType g rty1 let rty2 = GetFSharpViewOfReturnType g rty2 - Iterate2D (SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace) argtys1 argtys2 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty1 rty2 ++ (fun () -> - CompleteD)) + trackErrors { + do! Iterate2D (SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace) argtys1 argtys2 + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty1 rty2 + () + } | (TyparConstraint.CoercesTo(ty1, _), TyparConstraint.CoercesTo(ty2, _)) -> @@ -1564,19 +1572,22 @@ and AddConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace tp newConstraint = List.rev !res let parents1 = collect ty1 let parents2 = collect ty2 - parents1 |> IterateD (fun ty1Parent -> - parents2 |> IterateD (fun ty2Parent -> - if not (HaveSameHeadType g ty1Parent ty2Parent) then CompleteD else - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace ty1Parent ty2Parent)) + trackErrors { + for ty1Parent in parents1 do + for ty2Parent in parents2 do + do! if not (HaveSameHeadType g ty1Parent ty2Parent) then CompleteD else + SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace ty1Parent ty2Parent + } | (TyparConstraint.IsEnum (u1, _), TyparConstraint.IsEnum (u2, m2)) -> SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace u1 u2 | (TyparConstraint.IsDelegate (aty1, bty1, _), - TyparConstraint.IsDelegate (aty2, bty2, m2)) -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace aty1 aty2 ++ (fun () -> - SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace bty1 bty2) + TyparConstraint.IsDelegate (aty2, bty2, m2)) -> trackErrors { + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace aty1 aty2 + return! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace bty1 bty2 + } | TyparConstraint.SupportsComparison _, TyparConstraint.IsDelegate _ | TyparConstraint.IsDelegate _ , TyparConstraint.SupportsComparison _ @@ -1635,36 +1646,34 @@ and AddConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace tp newConstraint = let existingConstraints = tp.Constraints let allCxs = newConstraint :: List.rev existingConstraints - begin + trackErrors { let rec enforceMutualConsistency i cxs = match cxs with | [] -> CompleteD - | cx :: rest -> IterateIdxD (fun j cx2 -> if i = j then CompleteD else consistent cx cx2) allCxs ++ (fun () -> enforceMutualConsistency (i+1) rest) - - enforceMutualConsistency 0 allCxs - end ++ (fun () -> + | cx :: rest -> + trackErrors { + do! IterateIdxD (fun j cx2 -> if i = j then CompleteD else consistent cx cx2) allCxs + return! enforceMutualConsistency (i+1) rest + } + do! enforceMutualConsistency 0 allCxs - let impliedByExistingConstraints = existingConstraints |> List.exists (fun tpc2 -> implies tpc2 newConstraint) + let impliedByExistingConstraints = existingConstraints |> List.exists (fun tpc2 -> implies tpc2 newConstraint) - if impliedByExistingConstraints then - CompleteD - // "Default" constraints propagate softly and can be omitted from explicit declarations of type parameters - elif (match tp.Rigidity, newConstraint with - | (TyparRigidity.Rigid | TyparRigidity.WillBeRigid), TyparConstraint.DefaultsTo _ -> true - | _ -> false) then - CompleteD - elif tp.Rigidity = TyparRigidity.Rigid then - ErrorD (ConstraintSolverMissingConstraint(denv, tp, newConstraint, m, m2)) - else - (// It is important that we give a warning if a constraint is missing from a + if impliedByExistingConstraints then () + // "Default" constraints propagate softly and can be omitted from explicit declarations of type parameters + elif (match tp.Rigidity, newConstraint with + | (TyparRigidity.Rigid | TyparRigidity.WillBeRigid), TyparConstraint.DefaultsTo _ -> true + | _ -> false) then + () + elif tp.Rigidity = TyparRigidity.Rigid then + return! ErrorD (ConstraintSolverMissingConstraint(denv, tp, newConstraint, m, m2)) + else + // It is important that we give a warning if a constraint is missing from a // will-be-made-rigid type variable. This is because the existence of these warnings // is relevant to the overload resolution rules (see 'candidateWarnCount' in the overload resolution // implementation). See also FSharp 1.0 bug 5461 - (if tp.Rigidity.WarnIfMissingConstraint then - WarnD (ConstraintSolverMissingConstraint(denv, tp, newConstraint, m, m2)) - else - CompleteD) ++ (fun () -> - + if tp.Rigidity.WarnIfMissingConstraint then + do! WarnD (ConstraintSolverMissingConstraint(denv, tp, newConstraint, m, m2)) let newConstraints = // Eliminate any constraints where one constraint implies another // Keep constraints in the left-to-right form according to the order they are asserted. @@ -1676,14 +1685,14 @@ and AddConstraint (csenv:ConstraintSolverEnv) ndeep m2 trace tp newConstraint = eliminateRedundant rest (if List.exists (fun cx2 -> implies cx2 cx) acc then acc else (cx::acc)) eliminateRedundant allCxs [] - // Write the constraint into the type variable // Record a entry in the undo trace if one is provided let orig = tp.Constraints trace.Exec (fun () -> tp.SetConstraints newConstraints) (fun () -> tp.SetConstraints orig) + () + } - CompleteD))) and SolveTypeSupportsNull (csenv:ConstraintSolverEnv) ndeep m2 trace ty = let g = csenv.g @@ -2029,17 +2038,16 @@ and ArgsMustSubsumeOrConvert cxsln isConstraint (calledArg: CalledArg) - (callerArg: CallerArg<'T>) = + (callerArg: CallerArg<'T>) = trackErrors { let g = csenv.g let m = callerArg.Range let calledArgTy = AdjustCalledArgType csenv.InfoReader isConstraint calledArg callerArg - SolveTypeSubsumesTypeWithReport csenv ndeep m trace cxsln calledArgTy callerArg.Type ++ (fun () -> - + do! SolveTypeSubsumesTypeWithReport csenv ndeep m trace cxsln calledArgTy callerArg.Type if calledArg.IsParamArray && isArray1DTy g calledArgTy && not (isArray1DTy g callerArg.Type) then - ErrorD(Error(FSComp.SR.csMethodExpectsParams(), m)) - else - CompleteD) + return! ErrorD(Error(FSComp.SR.csMethodExpectsParams(), m)) + else () + } and MustUnify csenv ndeep trace cxsln ty1 ty2 = SolveTypeEqualsTypeWithReport csenv ndeep csenv.m trace cxsln ty1 ty2 @@ -2462,11 +2470,12 @@ and ResolveOverloading match calledMethOpt with | Some calledMeth -> calledMethOpt, - errors ++ (fun () -> + trackErrors { + do! errors let cxsln = Option.map (fun traitInfo -> (traitInfo, MemberConstraintSolutionOfMethInfo csenv.SolverState m calledMeth.Method calledMeth.CalledTyArgs)) cx match calledMethTrace with | NoTrace -> - + return! // No trace available for CanMemberSigsMatchUpToCheck with ArgsMustSubsumeOrConvert CanMemberSigsMatchUpToCheck csenv @@ -2484,14 +2493,15 @@ and ResolveOverloading // Unify return type match reqdRetTyOpt with - | None -> CompleteD - | Some _ when calledMeth.Method.IsConstructor -> CompleteD + | None -> () + | Some _ when calledMeth.Method.IsConstructor -> () | Some reqdRetTy -> let actualRetTy = calledMeth.CalledReturnTypeAfterOutArgTupling if isByrefTy g reqdRetTy then - ErrorD(Error(FSComp.SR.tcByrefReturnImplicitlyDereferenced(), m)) + return! ErrorD(Error(FSComp.SR.tcByrefReturnImplicitlyDereferenced(), m)) else - MustUnify csenv ndeep trace cxsln reqdRetTy actualRetTy) + return! MustUnify csenv ndeep trace cxsln reqdRetTy actualRetTy + } | None -> None, errors @@ -2511,7 +2521,8 @@ let UnifyUniqueOverloading let candidates = calledMethGroup |> List.filter (fun cmeth -> cmeth.IsCandidate(m, ad)) let ndeep = 0 match calledMethGroup, candidates with - | _, [calledMeth] -> + | _, [calledMeth] -> trackErrors { + do! // Only one candidate found - we thus know the types we expect of arguments CanMemberSigsMatchUpToCheck csenv @@ -2522,13 +2533,15 @@ let UnifyUniqueOverloading (ArgsMustSubsumeOrConvert csenv ndeep NoTrace None false) // UnifyUniqueOverloading is not called in case of trait call - pass isConstraint=false (Some reqdRetTy) calledMeth - ++ (fun () -> ResultD true) + return! ResultD true + } | [], _ -> ErrorD (Error (FSComp.SR.csMethodNotFound(methodName), m)) - | _, [] -> - ReportNoCandidatesErrorSynExpr csenv callerArgCounts methodName ad calledMethGroup - ++ (fun () -> ResultD false) + | _, [] -> trackErrors { + do! ReportNoCandidatesErrorSynExpr csenv callerArgCounts methodName ad calledMethGroup + return! ResultD false + } | _ -> ResultD false @@ -2591,7 +2604,12 @@ let AddCxTypeMustSubsumeType contextInfo denv css m trace ty1 ty2 = |> RaiseOperationResult let AddCxMethodConstraint denv css m trace traitInfo = - TryD (fun () -> SolveMemberConstraint (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) true false 0 m trace traitInfo ++ (fun _ -> CompleteD)) + TryD (fun () -> + trackErrors { + do! + SolveMemberConstraint (MakeConstraintSolverEnv ContextInfo.NoContext css m denv) true false 0 m trace traitInfo + |> OperationResult.ignore + }) (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult @@ -2640,7 +2658,7 @@ let AddCxTypeIsDelegate denv css m trace ty aty bty = (fun res -> ErrorD (ErrorFromAddingConstraint(denv, res, m))) |> RaiseOperationResult -let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo:TraitConstraintInfo) argExprs = +let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo:TraitConstraintInfo) argExprs = trackErrors { let css = { g = g amap = amap @@ -2649,8 +2667,8 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo:Trai InfoReader = new InfoReader(g, amap) } let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m (DisplayEnv.Empty g) - SolveMemberConstraint csenv true true 0 m NoTrace traitInfo ++ (fun _res -> - let sln = + let! _res = SolveMemberConstraint csenv true true 0 m NoTrace traitInfo + let sln = match traitInfo.Solution with | None -> Choice4Of4() | Some sln -> @@ -2674,6 +2692,7 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo:Trai Choice4Of4 () | ClosedExprSln expr -> Choice3Of4 expr + return! match sln with | Choice1Of4(minfo, methArgTys) -> let argExprs = @@ -2730,7 +2749,8 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo:Trai | _ -> None ResultD res | Choice3Of4 expr -> ResultD (Some (MakeApplicationAndBetaReduce g (expr, tyOfExpr g expr, [], argExprs, m))) - | Choice4Of4 () -> ResultD None) + | Choice4Of4 () -> ResultD None + } let ChooseTyparSolutionAndSolve css denv tp = diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index d29874bb0d5..41be3768ed2 100755 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -596,15 +596,27 @@ let rec Iterate2D f xs ys = | h1 :: t1, h2::t2 -> f h1 h2 ++ (fun () -> Iterate2D f t1 t2) | _ -> failwith "Iterate2D" +/// Keep the warnings, propagate the error to the exception continuation. let TryD f g = match f() with - | ErrorResult(warns, err) -> (OkResult(warns, ())) ++ (fun () -> g err) + | ErrorResult(warns, err) -> + trackErrors { + do! OkResult(warns, ()) + return! g err + } | res -> res 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)) +[] +module OperationResult = + let inline ignore (res: OperationResult<'a>) = + match res with + | OkResult(warnings, _) -> OkResult(warnings, ()) + | ErrorResult(warnings, err) -> ErrorResult(warnings, err) + // Code below is for --flaterrors flag that is only used by the IDE let stringThatIsAProxyForANewlineInFlatErrors = new System.String [|char 29 |] From 932450022e21f0110ae716af4007561d4203ac94 Mon Sep 17 00:00:00 2001 From: khoiph1 Date: Wed, 31 Oct 2018 13:30:55 -0700 Subject: [PATCH 37/48] Loc Update --- .../Template/xlf/AssemblyInfo.fs.cs.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.de.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.es.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.fr.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.it.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.ko.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.pl.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.ru.xlf | 4 +- .../Template/xlf/AssemblyInfo.fs.tr.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 2 +- .../Template/xlf/Program.fs.cs.xlf | 2 +- .../Template/xlf/Program.fs.de.xlf | 2 +- .../Template/xlf/Program.fs.es.xlf | 2 +- .../Template/xlf/Program.fs.fr.xlf | 2 +- .../Template/xlf/Program.fs.it.xlf | 2 +- .../Template/xlf/Program.fs.ko.xlf | 2 +- .../Template/xlf/Program.fs.pl.xlf | 2 +- .../Template/xlf/Program.fs.pt-BR.xlf | 2 +- .../Template/xlf/Program.fs.ru.xlf | 2 +- .../Template/xlf/Program.fs.tr.xlf | 2 +- .../Template/xlf/Program.fs.zh-Hans.xlf | 2 +- .../Template/xlf/Program.fs.zh-Hant.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.cs.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.de.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.es.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.fr.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.it.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.ko.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.pl.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.pt-BR.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.ru.xlf | 4 +- .../Template/xlf/AssemblyInfo.fs.tr.xlf | 2 +- .../Template/xlf/AssemblyInfo.fs.zh-Hans.xlf | 2 +- .../Template/xlf/Script.fsx.cs.xlf | 2 +- .../Template/xlf/Script.fsx.de.xlf | 2 +- .../Template/xlf/Script.fsx.es.xlf | 2 +- .../Template/xlf/Script.fsx.fr.xlf | 2 +- .../Template/xlf/Script.fsx.it.xlf | 2 +- .../Template/xlf/Script.fsx.ko.xlf | 2 +- .../Template/xlf/Script.fsx.pl.xlf | 2 +- .../Template/xlf/Script.fsx.pt-BR.xlf | 2 +- .../Template/xlf/Script.fsx.ru.xlf | 2 +- .../Template/xlf/Script.fsx.tr.xlf | 2 +- .../Template/xlf/Script.fsx.zh-Hans.xlf | 2 +- .../Template/xlf/Script.fsx.zh-Hant.xlf | 2 +- .../Template/xlf/Tutorial.fsx.cs.xlf | 2 +- .../Template/xlf/Tutorial.fsx.de.xlf | 8 ++-- .../Template/xlf/Tutorial.fsx.es.xlf | 8 ++-- .../Template/xlf/Tutorial.fsx.fr.xlf | 6 +-- .../Template/xlf/Tutorial.fsx.it.xlf | 4 +- .../Template/xlf/Tutorial.fsx.ja.xlf | 12 +++--- .../Template/xlf/Tutorial.fsx.ko.xlf | 10 ++--- .../Template/xlf/Tutorial.fsx.pl.xlf | 4 +- .../Template/xlf/Tutorial.fsx.pt-BR.xlf | 4 +- .../Template/xlf/Tutorial.fsx.ru.xlf | 6 +-- .../Template/xlf/Tutorial.fsx.tr.xlf | 2 +- .../Template/xlf/Tutorial.fsx.zh-Hans.xlf | 4 +- .../Template/xlf/Tutorial.fsx.zh-Hant.xlf | 6 +-- .../FSharp.Editor/xlf/FSharp.Editor.cs.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.de.xlf | 2 +- .../FSharp.Editor/xlf/FSharp.Editor.es.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.fr.xlf | 2 +- .../FSharp.Editor/xlf/FSharp.Editor.it.xlf | 2 +- .../FSharp.Editor/xlf/FSharp.Editor.ja.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.ko.xlf | 2 +- .../FSharp.Editor/xlf/FSharp.Editor.pl.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.ru.xlf | 4 +- .../FSharp.Editor/xlf/FSharp.Editor.tr.xlf | 4 +- .../xlf/FSharp.Editor.zh-Hans.xlf | 6 +-- .../xlf/FSharp.Editor.zh-Hant.xlf | 4 +- ...isualStudio.Package.LanguageService.cs.xlf | 2 +- ...isualStudio.Package.LanguageService.de.xlf | 4 +- ...isualStudio.Package.LanguageService.es.xlf | 2 +- ...isualStudio.Package.LanguageService.fr.xlf | 2 +- ...isualStudio.Package.LanguageService.it.xlf | 2 +- ...isualStudio.Package.LanguageService.ja.xlf | 2 +- ...isualStudio.Package.LanguageService.ko.xlf | 2 +- ...isualStudio.Package.LanguageService.pl.xlf | 2 +- ...alStudio.Package.LanguageService.pt-BR.xlf | 2 +- ...isualStudio.Package.LanguageService.ru.xlf | 4 +- ...isualStudio.Package.LanguageService.tr.xlf | 2 +- ...Studio.Package.LanguageService.zh-Hans.xlf | 2 +- ...Studio.Package.LanguageService.zh-Hant.xlf | 4 +- .../xlf/FSLangSvcStrings.cs.xlf | 2 +- .../xlf/FSLangSvcStrings.de.xlf | 4 +- .../xlf/FSLangSvcStrings.es.xlf | 2 +- .../xlf/FSLangSvcStrings.fr.xlf | 2 +- .../xlf/FSLangSvcStrings.it.xlf | 2 +- .../xlf/FSLangSvcStrings.ko.xlf | 2 +- .../xlf/FSLangSvcStrings.pl.xlf | 2 +- .../xlf/FSLangSvcStrings.pt-BR.xlf | 4 +- .../xlf/FSLangSvcStrings.ru.xlf | 4 +- .../xlf/FSLangSvcStrings.tr.xlf | 2 +- .../xlf/FSLangSvcStrings.zh-Hans.xlf | 2 +- .../xlf/FSLangSvcStrings.zh-Hant.xlf | 2 +- .../xlf/VSPackage.cs.xlf | 6 +-- .../xlf/VSPackage.de.xlf | 2 +- .../xlf/VSPackage.es.xlf | 2 +- .../xlf/VSPackage.fr.xlf | 4 +- .../xlf/VSPackage.it.xlf | 6 +-- .../xlf/VSPackage.ko.xlf | 8 ++-- .../xlf/VSPackage.pl.xlf | 6 +-- .../xlf/VSPackage.pt-BR.xlf | 4 +- .../xlf/VSPackage.ru.xlf | 6 +-- .../xlf/VSPackage.tr.xlf | 6 +-- .../xlf/VSPackage.zh-Hans.xlf | 2 +- .../xlf/VSPackage.zh-Hant.xlf | 2 +- ...rosoft.VisualStudio.Package.Project.cs.xlf | 14 +++--- ...rosoft.VisualStudio.Package.Project.de.xlf | 34 +++++++-------- ...rosoft.VisualStudio.Package.Project.es.xlf | 38 ++++++++-------- ...rosoft.VisualStudio.Package.Project.fr.xlf | 16 +++---- ...rosoft.VisualStudio.Package.Project.it.xlf | 22 +++++----- ...rosoft.VisualStudio.Package.Project.ja.xlf | 6 +-- ...rosoft.VisualStudio.Package.Project.ko.xlf | 22 +++++----- ...rosoft.VisualStudio.Package.Project.pl.xlf | 16 +++---- ...oft.VisualStudio.Package.Project.pt-BR.xlf | 26 +++++------ ...rosoft.VisualStudio.Package.Project.ru.xlf | 28 ++++++------ ...rosoft.VisualStudio.Package.Project.tr.xlf | 24 +++++------ ...t.VisualStudio.Package.Project.zh-Hans.xlf | 24 +++++------ ...t.VisualStudio.Package.Project.zh-Hant.xlf | 8 ++-- .../xlf/MenusAndCommands.vsct.cs.xlf | 2 +- .../xlf/MenusAndCommands.vsct.de.xlf | 2 +- .../xlf/MenusAndCommands.vsct.es.xlf | 2 +- .../xlf/MenusAndCommands.vsct.fr.xlf | 2 +- .../xlf/MenusAndCommands.vsct.it.xlf | 2 +- .../xlf/MenusAndCommands.vsct.ja.xlf | 2 +- .../xlf/MenusAndCommands.vsct.ko.xlf | 12 +++--- .../xlf/MenusAndCommands.vsct.pl.xlf | 4 +- .../xlf/MenusAndCommands.vsct.pt-BR.xlf | 2 +- .../xlf/MenusAndCommands.vsct.ru.xlf | 2 +- .../xlf/MenusAndCommands.vsct.tr.xlf | 10 ++--- .../xlf/MenusAndCommands.vsct.zh-Hans.xlf | 8 ++-- .../xlf/MenusAndCommands.vsct.zh-Hant.xlf | 6 +-- .../xlf/VSPackage.cs.xlf | 2 +- .../xlf/VSPackage.de.xlf | 4 +- .../xlf/VSPackage.es.xlf | 10 ++--- .../xlf/VSPackage.fr.xlf | 4 +- .../xlf/VSPackage.it.xlf | 14 +++--- .../xlf/VSPackage.ja.xlf | 10 ++--- .../xlf/VSPackage.ko.xlf | 4 +- .../xlf/VSPackage.pl.xlf | 8 ++-- .../xlf/VSPackage.pt-BR.xlf | 2 +- .../xlf/VSPackage.ru.xlf | 2 +- .../xlf/VSPackage.tr.xlf | 8 ++-- .../xlf/VSPackage.zh-Hans.xlf | 6 +-- .../xlf/VSPackage.zh-Hant.xlf | 8 ++-- .../xlf/ApplicationPropPage.cs.xlf | 4 +- .../xlf/ApplicationPropPage.de.xlf | 4 +- .../xlf/ApplicationPropPage.es.xlf | 2 +- .../xlf/ApplicationPropPage.fr.xlf | 2 +- .../xlf/ApplicationPropPage.it.xlf | 2 +- .../xlf/ApplicationPropPage.ko.xlf | 2 +- .../xlf/ApplicationPropPage.pl.xlf | 2 +- .../xlf/ApplicationPropPage.pt-BR.xlf | 6 +-- .../xlf/ApplicationPropPage.ru.xlf | 4 +- .../xlf/ApplicationPropPage.tr.xlf | 4 +- .../xlf/ApplicationPropPage.zh-Hans.xlf | 6 +-- .../xlf/BuildEventCommandLineDialog.cs.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.de.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.es.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.fr.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.it.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.ja.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.ko.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.pl.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.pt-BR.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.ru.xlf | 2 +- .../xlf/BuildEventCommandLineDialog.tr.xlf | 2 +- .../BuildEventCommandLineDialog.zh-Hans.xlf | 2 +- .../BuildEventCommandLineDialog.zh-Hant.xlf | 2 +- .../xlf/BuildEventsPropPage.cs.xlf | 2 +- .../xlf/BuildEventsPropPage.de.xlf | 6 +-- .../xlf/BuildEventsPropPage.es.xlf | 2 +- .../xlf/BuildEventsPropPage.fr.xlf | 2 +- .../xlf/BuildEventsPropPage.it.xlf | 2 +- .../xlf/BuildEventsPropPage.ja.xlf | 2 +- .../xlf/BuildEventsPropPage.ko.xlf | 4 +- .../xlf/BuildEventsPropPage.pl.xlf | 2 +- .../xlf/BuildEventsPropPage.pt-BR.xlf | 2 +- .../xlf/BuildEventsPropPage.ru.xlf | 2 +- .../xlf/BuildEventsPropPage.tr.xlf | 4 +- .../xlf/BuildEventsPropPage.zh-Hans.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.cs.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.de.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.es.xlf | 4 +- .../PropertyPages/xlf/BuildPropPage.fr.xlf | 12 +++--- .../PropertyPages/xlf/BuildPropPage.it.xlf | 4 +- .../PropertyPages/xlf/BuildPropPage.ja.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.ko.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.pl.xlf | 2 +- .../PropertyPages/xlf/BuildPropPage.pt-BR.xlf | 6 +-- .../PropertyPages/xlf/BuildPropPage.ru.xlf | 4 +- .../PropertyPages/xlf/BuildPropPage.tr.xlf | 10 ++--- .../xlf/BuildPropPage.zh-Hans.xlf | 8 ++-- .../xlf/BuildPropPage.zh-Hant.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.cs.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.de.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.es.xlf | 6 +-- .../PropertyPages/xlf/DebugPropPage.fr.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.it.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.pl.xlf | 2 +- .../PropertyPages/xlf/DebugPropPage.pt-BR.xlf | 4 +- .../PropertyPages/xlf/DebugPropPage.ru.xlf | 6 +-- .../PropertyPages/xlf/DebugPropPage.tr.xlf | 6 +-- .../xlf/DebugPropPage.zh-Hans.xlf | 2 +- .../xlf/DebugPropPage.zh-Hant.xlf | 4 +- .../xlf/PropPageHostDialog.cs.xlf | 2 +- .../xlf/PropPageHostDialog.de.xlf | 2 +- .../xlf/PropPageHostDialog.es.xlf | 2 +- .../xlf/PropPageHostDialog.fr.xlf | 2 +- .../xlf/PropPageHostDialog.it.xlf | 2 +- .../xlf/PropPageHostDialog.ja.xlf | 2 +- .../xlf/PropPageHostDialog.ko.xlf | 2 +- .../xlf/PropPageHostDialog.pl.xlf | 2 +- .../xlf/PropPageHostDialog.pt-BR.xlf | 2 +- .../xlf/PropPageHostDialog.ru.xlf | 2 +- .../xlf/PropPageHostDialog.tr.xlf | 2 +- .../xlf/PropPageHostDialog.zh-Hans.xlf | 2 +- .../xlf/PropPageHostDialog.zh-Hant.xlf | 2 +- .../xlf/PropPageUserControlBase.cs.xlf | 2 +- .../xlf/PropPageUserControlBase.de.xlf | 2 +- .../xlf/PropPageUserControlBase.es.xlf | 2 +- .../xlf/PropPageUserControlBase.fr.xlf | 2 +- .../xlf/PropPageUserControlBase.it.xlf | 2 +- .../xlf/PropPageUserControlBase.ja.xlf | 2 +- .../xlf/PropPageUserControlBase.ko.xlf | 2 +- .../xlf/PropPageUserControlBase.pl.xlf | 2 +- .../xlf/PropPageUserControlBase.pt-BR.xlf | 2 +- .../xlf/PropPageUserControlBase.ru.xlf | 2 +- .../xlf/PropPageUserControlBase.tr.xlf | 2 +- .../xlf/PropPageUserControlBase.zh-Hans.xlf | 2 +- .../xlf/PropPageUserControlBase.zh-Hant.xlf | 2 +- .../xlf/ReferencePathsPropPage.cs.xlf | 4 +- .../xlf/ReferencePathsPropPage.de.xlf | 4 +- .../xlf/ReferencePathsPropPage.es.xlf | 2 +- .../xlf/ReferencePathsPropPage.fr.xlf | 4 +- .../xlf/ReferencePathsPropPage.it.xlf | 2 +- .../xlf/ReferencePathsPropPage.ja.xlf | 4 +- .../xlf/ReferencePathsPropPage.ko.xlf | 2 +- .../xlf/ReferencePathsPropPage.pl.xlf | 2 +- .../xlf/ReferencePathsPropPage.pt-BR.xlf | 2 +- .../xlf/ReferencePathsPropPage.ru.xlf | 8 ++-- .../xlf/ReferencePathsPropPage.tr.xlf | 2 +- .../xlf/ReferencePathsPropPage.zh-Hans.xlf | 4 +- .../xlf/ReferencePathsPropPage.zh-Hant.xlf | 2 +- ...osoft.VisualStudio.Editors.Designer.cs.xlf | 27 ++++++------ ...osoft.VisualStudio.Editors.Designer.de.xlf | 19 ++++---- ...osoft.VisualStudio.Editors.Designer.es.xlf | 35 ++++++++------- ...osoft.VisualStudio.Editors.Designer.fr.xlf | 41 +++++++++--------- ...osoft.VisualStudio.Editors.Designer.it.xlf | 23 +++++----- ...osoft.VisualStudio.Editors.Designer.ja.xlf | 17 ++++---- ...osoft.VisualStudio.Editors.Designer.ko.xlf | 33 +++++++------- ...osoft.VisualStudio.Editors.Designer.pl.xlf | 27 ++++++------ ...ft.VisualStudio.Editors.Designer.pt-BR.xlf | 37 ++++++++-------- ...osoft.VisualStudio.Editors.Designer.ru.xlf | 43 +++++++++---------- ...osoft.VisualStudio.Editors.Designer.tr.xlf | 35 ++++++++------- ....VisualStudio.Editors.Designer.zh-Hans.xlf | 9 ++-- ....VisualStudio.Editors.Designer.zh-Hant.xlf | 11 +++-- .../Resources/xlf/MyExtensibilityRes.cs.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.de.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.es.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.fr.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.it.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.pl.xlf | 2 +- .../xlf/MyExtensibilityRes.pt-BR.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.ru.xlf | 2 +- .../Resources/xlf/MyExtensibilityRes.tr.xlf | 2 +- .../xlf/MyExtensibilityRes.zh-Hans.xlf | 2 +- .../Resources/xlf/WCF.cs.xlf | 2 +- .../Resources/xlf/WCF.de.xlf | 2 +- .../Resources/xlf/WCF.es.xlf | 2 +- .../Resources/xlf/WCF.fr.xlf | 2 +- .../Resources/xlf/WCF.it.xlf | 2 +- .../Resources/xlf/WCF.ko.xlf | 2 +- .../Resources/xlf/WCF.pl.xlf | 2 +- .../Resources/xlf/WCF.pt-BR.xlf | 2 +- .../Resources/xlf/WCF.ru.xlf | 2 +- .../Resources/xlf/WCF.tr.xlf | 2 +- .../Resources/xlf/WCF.zh-Hant.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.cs.xlf | 6 +-- .../src/FSharp.UIResources/xlf/Strings.de.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.es.xlf | 4 +- .../src/FSharp.UIResources/xlf/Strings.fr.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.it.xlf | 4 +- .../src/FSharp.UIResources/xlf/Strings.ko.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.pl.xlf | 2 +- .../FSharp.UIResources/xlf/Strings.pt-BR.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.ru.xlf | 2 +- .../src/FSharp.UIResources/xlf/Strings.tr.xlf | 2 +- .../xlf/Strings.zh-Hans.xlf | 2 +- .../xlf/Strings.zh-Hant.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/Properties.cs.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/Properties.de.xlf | 6 +-- .../src/FSharp.VS.FSI/xlf/Properties.es.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/Properties.fr.xlf | 4 +- .../src/FSharp.VS.FSI/xlf/Properties.it.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/Properties.ja.xlf | 10 ++--- .../src/FSharp.VS.FSI/xlf/Properties.ko.xlf | 16 +++---- .../src/FSharp.VS.FSI/xlf/Properties.pl.xlf | 8 ++-- .../FSharp.VS.FSI/xlf/Properties.pt-BR.xlf | 4 +- .../src/FSharp.VS.FSI/xlf/Properties.ru.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/Properties.tr.xlf | 8 ++-- .../FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf | 8 ++-- .../FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf | 6 +-- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf | 2 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf | 4 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf | 2 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf | 2 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf | 2 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf | 4 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf | 6 +-- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf | 4 +- .../xlf/VFSIstrings.txt.pt-BR.xlf | 4 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf | 2 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf | 6 +-- .../xlf/VFSIstrings.txt.zh-Hans.xlf | 4 +- .../xlf/VFSIstrings.txt.zh-Hant.xlf | 4 +- .../src/FSharp.VS.FSI/xlf/VSPackage.cs.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.de.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.es.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.fr.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.it.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.ja.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.ko.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.pl.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.pt-BR.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.ru.xlf | 2 +- .../src/FSharp.VS.FSI/xlf/VSPackage.tr.xlf | 2 +- .../FSharp.VS.FSI/xlf/VSPackage.zh-Hans.xlf | 2 +- .../FSharp.VS.FSI/xlf/VSPackage.zh-Hant.xlf | 2 +- 332 files changed, 803 insertions(+), 816 deletions(-) diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf index a580d9e396b..68ea0772d85 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf index 87fa85b31c9..6d38e4a5a9e 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf index 9beb403796f..159e61b4e79 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf index a259bd30511..ddea7c610e9 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf index d5fc6c75583..79e98a0f0b4 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf index 258b4ebab29..9382bec5e00 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf index ee3471fb557..4ba5555261b 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf index 48d258faa25..ba2e69fde6d 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf index 6ec9384612e..78261dfa3a2 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.ru.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Minor Version - Дополнительный номер версии + Вспомогательная версия diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf index 906ec8f3ef1..896836c9c7e 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf index d76c9dbd18c..1c36b83e8aa 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf index 54f3d3c0c94..50135acb5d2 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf index e3b75382003..ec6378c9ed2 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf index 30efd4ece6a..4ff250e4b9c 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf index 315bebbcac2..c8f9baec854 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf index 3f1c17cb06d..7517936c7b5 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf index 3d4586af7d2..ad81379fa7f 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf index f8a5de8d777..e4440770c4a 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf index 30c89d53b94..fa58fbb608d 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf index 7d661660156..18d343feba6 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf index caa20c452c4..55b9e483481 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf index 83e038a60e0..3bb540ffff6 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf index 26ef14aae6b..29ef25458fa 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/xlf/Program.fs.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf index a580d9e396b..68ea0772d85 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf index 87fa85b31c9..6d38e4a5a9e 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf index 9beb403796f..159e61b4e79 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf index a259bd30511..ddea7c610e9 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf index d5fc6c75583..79e98a0f0b4 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf index 258b4ebab29..9382bec5e00 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf index ee3471fb557..4ba5555261b 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf index 48d258faa25..ba2e69fde6d 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf index 6ec9384612e..78261dfa3a2 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.ru.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Minor Version - Дополнительный номер версии + Вспомогательная версия diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf index 906ec8f3ef1..896836c9c7e 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf index d76c9dbd18c..1c36b83e8aa 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/AssemblyInfo.fs.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf index 985099ec87c..7894dfcbdab 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf index 0e507996fb1..ea2c666e1d6 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf index 64e2f3bd158..a341541098d 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf index 59fc3c21d0a..6397f046408 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf index 32a62ec6536..d8c92ea17e0 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf index b8477614c17..d1dcac5cd83 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf index 26abdffefef..993d2765315 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf index d1e9d07a6ee..e7d07e9d09a 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf index b8dd108a583..a3df917ca5f 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf index 2b4bb37062f..85a2f18ea61 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf index 332774539b1..d3641659034 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf index 9106b3e72cd..1d2d23cfe91 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/xlf/Script.fsx.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf index e7f408b7ac6..9658c4b6005 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf index eda7363478f..e47d46ac9e7 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.de.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - und wählen Sie "Interaktiv ausführen" aus. Sie können das F# Interactive-Fenster über das Menü "Ansicht" öffnen. + und wählen Sie "In Interactive ausführen" aus. Sie können das F# Interactive-Fenster über das Menü "Ansicht" öffnen. @@ -284,7 +284,7 @@ and - und + Und @@ -1479,7 +1479,7 @@ To learn more, see: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/generics/ - Weitere Informationen finden Sie unter:: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/generics/ + Weitere Informationen finden Sie unter: https://docs.microsoft.com/de-de/dotnet/articles/fsharp/language-reference/generics/ diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf index d57b4b8df17..30b02b2a50d 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.es.xlf @@ -1,4 +1,4 @@ - + @@ -9,12 +9,12 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Para ejecutar el código en F# interactivo, resalte una sección de código y presione Alt-Entrar, o haga clic con el botón secundario + Para ejecutar el código en F# interactivo, resalte una sección de código y presione Alt+Entrar, o bien haga clic con el botón secundario and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - y seleccione "Ejecutar en modo interactivo". Puede abrir la ventana de F# interactivo desde el menú "Ver". + y seleccione "Ejecutar en modo interactivo". Puede abrir la ventana de F# interactivo desde el menú "Ver". @@ -284,7 +284,7 @@ and - y + Y diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf index 8521a7d3e63..397d2af096c 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.fr.xlf @@ -1,4 +1,4 @@ - + @@ -159,7 +159,7 @@ Values in F# are immutable by default. They cannot be changed - Les valeurs dans F# sont immuables par défaut. Elles ne peuvent pas être changées + Les valeurs en F# sont immuables par défaut. Elles ne peuvent pas être changées @@ -284,7 +284,7 @@ and - et + Et diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf index cd81ada44f9..904d0d8007c 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.it.xlf @@ -1,4 +1,4 @@ - + @@ -699,7 +699,7 @@ they are generally faster and support fast random access. This comes at the cost of being less safe by being mutable. - sono in genere più veloci e supportano l'accesso casuale rapido. La maggiore velocità implica però una minore sicurezza in quanto questi elementi sono modificabili. + sono in genere più veloci e supportano l'accesso casuale rapido. La maggiore velocità implica però una minore sicurezza perché questi elementi sono modificabili. diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf index 6e1fe4af58b..77ea6bc45a8 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ja.xlf @@ -1,4 +1,4 @@ - + @@ -9,12 +9,12 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# Interactive でコードを実行するには、コードの一部を強調表示して、Alt キーを押しながら Enter キーを押すか、右マウス ボタンをクリックし + F# インタラクティブでコードを実行するには、コードの一部を強調表示して、Alt キーを押しながら Enter キーを押すか、右マウス ボタンをクリックし and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - [対話形式で実行]5D; を選択します。[表示]5D; メニューから F# Interactive ウィンドウを開くことができます。 + [対話形式で実行]5D; を選択します。[表示]5D; メニューから F# インタラクティブ ウィンドウを開くことができます。 @@ -284,7 +284,7 @@ and - 」および「 + AND @@ -949,7 +949,7 @@ This example shows how to write a function that processes a record value. - この例では、レコード値を処理する関数を記述する方法を示します。 + この例では、レコード値を処理する関数を書き込む方法を示します。 @@ -994,7 +994,7 @@ Data stored in DUs can be one of several distinct values. - DU に格納されるデータは、複数の個別の値のいずれかになります。 + DU の格納データは、複数の個別の値のいずれかになります。 diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf index 98adbab0874..6537a73fefe 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ko.xlf @@ -1,4 +1,4 @@ - + @@ -9,17 +9,17 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - F# Interactive에서 코드를 실행하려면 코드 섹션을 강조 표시하고 Alt-Enter를 누르거나 마우스 오른쪽 단추를 클릭한 다음 + F# 대화형에서 코드를 실행하려면 코드 섹션을 강조 표시하고 <Alt+Enter>를 누르거나 마우스 오른쪽 단추를 클릭한 다음 and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - "대화형으로 실행"을 선택하세요. "보기" 메뉴에서 F# Interactive 창을 열 수 있습니다. + "대화형으로 실행"을 선택하세요. "보기" 메뉴에서 F# 대화형 창을 열 수 있습니다. For more about F#, see: - F#에 대한 자세한 내용은 다음을 참조하십시오: + F#에 대한 자세한 내용은 다음을 참조하세요. @@ -284,7 +284,7 @@ and - + 그리고 diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf index bbc054b3b30..de11e7fa2b5 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pl.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ and select "Execute in Interactive". You can open the F# Interactive Window from the "View" menu. - a następnie wybierz opcję „Wykonaj w programie Interactive”. Okno programu F# Interactive można otworzyć z menu „Widok”. + a następnie wybierz opcję „Wykonaj w trybie interaktywnym”. Okno narzędzia F# Interactive można otworzyć z menu „Widok”. diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf index a917ce2ce47..96dfb6b780b 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -284,7 +284,7 @@ and - e + E diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf index 81bf3a4523f..39e5f369436 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.ru.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - Чтобы выполнить код в интерактивном режиме F#, выделите фрагмент кода и нажмите ALT+ВВОД или щелкните правой кнопкой мыши + Чтобы выполнить код в F# Interactive, выделите фрагмент кода и нажмите ALT+ВВОД или щелкните правой кнопкой мыши @@ -284,7 +284,7 @@ and - и + И diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf index ee608d25f20..119bf03b7c0 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf index 99965aaf194..c87d96c67bc 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要在 F# 交互中执行代码,请突出显示一个代码节并按 Alt-Enter 或右击 + 若要在 F# 交互窗口中执行代码,请突出显示一个代码节并按 Alt-Enter 或右击 diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf index b9a80b8d0dc..014ecb876d4 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/xlf/Tutorial.fsx.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click - 若要執行 F# Interactive 中的程式碼,請反白顯示某個程式碼區段並按下 Alt-Enter,或者以滑鼠右鍵按一下 + 若要執行 F# 互動中的程式碼,請反白顯示某個程式碼區段並按下 Alt-Enter,或者以滑鼠右鍵按一下 @@ -284,7 +284,7 @@ and - + diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf index 73d205eca82..9ccd659d163 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ Name can be simplified. - Název nelze zjednodušit. + Název se dá zjednodušit. diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf index b728e57410b..0fe6cd7725b 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf index 26758d30cf8..3123e2a965a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf @@ -1,4 +1,4 @@ - + @@ -149,7 +149,7 @@ Advanced - Avanzadas + Opciones avanzadas diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf index eadd06f5dbd..8053a073fa0 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf index d288d6839fc..8024aa8891c 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf index 8b05b335d8f..125e03ea8c4 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf @@ -9,7 +9,7 @@ Implement interface - インターフェイスを実装する + インターフェイスを実装します。 @@ -34,7 +34,7 @@ Name can be simplified. - 名前を単純化できます。 + 名前を簡略化できます。 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf index b017a3562e1..293c9a8e273 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf index e0898181ecb..9a747f099a4 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ Name can be simplified. - Nazwę można uprościć. + Nazwa może zostać uproszczona. diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf index 03c3c7bf667..23428c6df54 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ Name can be simplified. - O nome pode ser simplificado. + Nome pode ser simplificado. diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf index 16a1bba37ae..8a716e2fc06 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf @@ -34,7 +34,7 @@ Name can be simplified. - Имя можно упростить. + Имя может быть упрощено. @@ -149,7 +149,7 @@ Advanced - Дополнительно + Дополнительный diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf index dd4dd7d6c03..07e6e3eda98 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Implement interface - Arabirim uygulama + Arabirimi uygula diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf index 1c301f002c1..bb079481de3 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf @@ -34,7 +34,7 @@ Name can be simplified. - 可简化名称。 + 可以简化名称。 @@ -74,7 +74,7 @@ IntelliSense - Intellisense + IntelliSense @@ -134,7 +134,7 @@ Exceptions: - 异常: + 异常: diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf index bcbd222af0d..33e014eed25 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -134,7 +134,7 @@ Exceptions: - 例外狀況: + 例外狀況: diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf index 5fa17a956f2..01935ee0ac0 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf index 6c5d961e316..f14709b11e9 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.de.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Members - Member + Mitglieder Tooltip for the drop down combo at top of document window showing list of known members. diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf index 4f51649f109..9c41be20344 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf index 542a43a5b08..87150eb42ea 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf index 832c7cbb24d..1827234227d 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf index c2165bf9f9d..680fb1b9941 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf index 31b6b01633e..2b10d5448fa 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf index 53bfacf4caf..0f8ca025c20 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf index 8916fcb57e1..c341f4d3bf7 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf index 235eaa60242..b08e84f46b8 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.ru.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Members - Члены + Элементы Tooltip for the drop down combo at top of document window showing list of known members. diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf index 4b600678ae4..78658d3f00c 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf index c3422f9abf8..a78d09aee63 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf index ac809d8d5fd..3fa4e9f803a 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf +++ b/vsintegration/src/FSharp.LanguageService.Base/xlf/Microsoft.VisualStudio.Package.LanguageService.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Types - 類型 + 型別 Tooltip for the drop down combo at top of document window showing list of known types. diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf index c1fcfdca7b1..1b98c0b95c1 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf index c97b2e2cab0..8c2cdb0e764 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.de.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Cannot navigate to definition. - Wechseln zur Definition ist nicht möglich. + Das Wechseln zur Definition ist nicht möglich. diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf index d3d7a07a053..093e6c85782 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf index e3a42fd1d9b..c771efc2acc 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf index abb983ddd86..119ff1788de 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf index d9ebb322541..0727b9aa5e0 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf index 9f9ef85b76c..54d0db78033 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf index 7fb96cdc6a1..fec1904bb9b 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Cannot navigate to definition. - Não é possível navegar para definição. + Não é possível navegar até a definição. diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf index 5d09ca8300f..7f2313345a8 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.ru.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Loading... - Идет загрузка... + Загрузка... displayed when waiting for IntelliSense to load diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf index 73ab05a5533..fafc7d644ff 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf index e33ea35ca76..115c4f86972 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf index 534256ae15c..b11b0ab3d74 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/FSLangSvcStrings.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf index acacfc13502..558cc1afec2 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.cs.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Operator - Operátor + operátor @@ -49,7 +49,7 @@ Identifier - Identifikátor + identifikátor diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf index ffc095348b1..7ffbbe10328 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf index 76cd632ccd8..bbc6b2006b9 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf index f27ce75afcc..8eef0e1148c 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.fr.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Identifier - Identificateur + identificateur diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf index a79fee23068..f095cc4c4f4 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.it.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Operator - Operatore + operatore @@ -49,7 +49,7 @@ Identifier - Identificatore + identificatore diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf index df123fca81b..19ef2f72867 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ko.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Operator - 연산자 + 운영자 @@ -44,7 +44,7 @@ Comment - 설명 + 주석 @@ -59,7 +59,7 @@ Number - 숫자 + 번호 diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf index bfc6fb43a8e..e37a4cd55c0 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pl.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Operator - Operator + operator @@ -49,7 +49,7 @@ Identifier - Identyfikator + identyfikator diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf index 502d5956dac..13092af472b 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Identifier - Identificador + identificador diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf index 9078f979baa..63b801d5bf9 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.ru.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Identifier - Идентификатор + идентификатор @@ -64,7 +64,7 @@ String - Строка + String diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf index f5f7b1334b4..2a16efa550b 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.tr.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Operator - İşleç + işleç @@ -49,7 +49,7 @@ Identifier - Tanımlayıcı + tanımlayıcı diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf index ffccb77de00..885f5df2fac 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf index 99888a55edb..434c6f8ea37 100644 --- a/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.LanguageService/xlf/VSPackage.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf index 8fb69a16f23..ffeed383fc7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf @@ -1,4 +1,4 @@ - + @@ -119,7 +119,7 @@ error - chyba + Chyba @@ -252,7 +252,7 @@ Minimal - Minimální + minimální @@ -262,7 +262,7 @@ None - Žádné + žádné @@ -387,7 +387,7 @@ warning - upozornění + Upozornění @@ -792,7 +792,7 @@ Path - Cesta + PATH @@ -802,7 +802,7 @@ Version - Verze + VERSION diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf index 2f107ee3f27..10949f3119e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ How the file relates to the build and deployment process - Gibt an, inwiefern sich die Datei auf den Build- und Bereitstellungsprozess bezieht. + Wie sich die Datei auf den Build- und Bereitstellungsprozess bezieht Project Build Property Description @@ -54,7 +54,7 @@ ECMA-335 CLI compatible framework (location must be provided) - ECMA-335 CLI-kompatibles Framework (Speicherort muss angegeben werden) + ECMA-335 CLI-kompatibles Framework (Ort muss angegeben werden) Target platform drop down option @@ -147,7 +147,7 @@ Error Saving File - Fehler beim Speichern der Datei. + Fehler beim Speichern der Datei @@ -212,7 +212,7 @@ The name of the file or folder - Der Name der Datei oder des Ordners + Der Name der Datei oder des Ordners. @@ -232,7 +232,7 @@ Location of the file - Speicherort der Datei + Dateiort @@ -242,7 +242,7 @@ Cannot save '{0}' outside the project directory. Linked items are not supported. - {0} kann nicht außerhalb des Projektverzeichnisses gespeichert werden. Verknüpfte Elemente werden nicht unterstützt. + {0}" kann nicht außerhalb des Projektverzeichnisses gespeichert werden. Verknüpfte Elemente werden nicht unterstützt. @@ -252,22 +252,22 @@ Minimal - Minimal + minimal Misc - Sonstiges + Verschiedenes None - Keine + NONE Normal - Normal + NORMAL @@ -282,7 +282,7 @@ Project - Projekt + Projekt @@ -487,7 +487,7 @@ Specifies the tool that transforms a file at design time and places the output of that transformation into another file. For example, a dataset (.xsd) file comes with a default custom tool. - Gibt das Tool an, das eine Datei zur Entwurfszeit transformiert und die Ausgabe in einer anderen Datei speichert. Datasetdateien (".xsd") verfügen beispielsweise über ein benutzerdefiniertes Standardtool. + Gibt das Tool an, das eine Datei zur Entwurfszeit transformiert und die Ausgabe in einer anderen Datei speichert. Datasetdateien (.xsd) enthalten z.B. ein benutzerdefiniertes Standardtool. @@ -587,7 +587,7 @@ A reference to {0} could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. - Ein Verweis auf "{0}" konnte nicht hinzugefügt werden. Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist. + Es konnte kein Verweis auf "{0}" hinzugefügt werden. Achten Sie darauf, dass die Datei zugänglich ist und dass es sich um eine gültige Assembly- oder COM-Komponente handelt. @@ -662,12 +662,12 @@ Specific Version - Spezifische Version + Bestimmte Version Indicates whether this reference is to a specific version of an assembly. - Gibt an, ob sich dieser Verweis auf eine spezifische Version einer Assembly bezieht. + Gibt an, ob dieser Verweis auf eine bestimmte Version einer Assembly verweist. @@ -802,7 +802,7 @@ Version - Version + VERSION diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf index a1b9309cd08..6677d941045 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ Advanced - Avanzadas + Opciones avanzadas Project Property Page Caption @@ -24,7 +24,7 @@ A reference to '{0}' (with assembly name '{1}') could not be added. A reference to the component '{2}' with the same assembly name already exists in the project. - No se pudo agregar una referencia a '{0}' (con el nombre de ensamblado '{1}'). Ya existe una referencia al componente '{2}' con el mismo nombre de ensamblado en el proyecto. + No se puede agregar una referencia a '{0}' (con el nombre de ensamblado '{1}'). Ya existe en el proyecto una referencia al componente '{2}' con el mismo nombre del ensamblado. ReferenceAlreadyExists error message @@ -39,7 +39,7 @@ How the file relates to the build and deployment process - Relación del archivo con el proceso de compilación e implementación. + Relación del archivo con el proceso de compilación e implementación Project Build Property Description @@ -54,7 +54,7 @@ ECMA-335 CLI compatible framework (location must be provided) - Marco de trabajo compatible con ECMA-335 CLI (se debe proporcionar la ubicación) + Versión de .NET Framework compatible con ECMA-335 CLI (se debe proporcionar la ubicación) Target platform drop down option @@ -119,7 +119,7 @@ error - error + Fehler @@ -147,7 +147,7 @@ Error Saving File - Error al guardar el archivo. + Error al guardar el archivo @@ -197,7 +197,7 @@ Error Copying File - Error al copiar el archivo. + Error al copiar el archivo @@ -217,7 +217,7 @@ Folder Name - Nombre de la carpeta + Nombre de carpeta @@ -252,7 +252,7 @@ Minimal - Mínimo + mínimo @@ -262,12 +262,12 @@ None - Ninguno + NONE Normal - Normal + NORMAL @@ -302,7 +302,7 @@ Project Folder - Carpeta de proyecto + Carpeta del proyecto @@ -342,7 +342,7 @@ Save? - ¿Guardar? + ¿Desea guardar? @@ -387,7 +387,7 @@ warning - advertencia + Advertencia @@ -472,7 +472,7 @@ The path to the primary output - Ruta de acceso al resultado principal + Ruta de acceso de la salida principal @@ -487,7 +487,7 @@ Specifies the tool that transforms a file at design time and places the output of that transformation into another file. For example, a dataset (.xsd) file comes with a default custom tool. - Especifica la herramienta que transforma un archivo en tiempo de diseño y pone la salida de esa transformación en otro archivo. Por ejemplo, un archivo de conjunto de datos (.xsd) viene con una herramienta personalizada predeterminada. + Especifica la herramienta que transforma el archivo en tiempo de diseño y coloca la salida de la transformación en otro archivo. Por ejemplo, un archivo de conjunto de datos (.xsd) viene con una herramienta personalizada predeterminada. @@ -587,7 +587,7 @@ A reference to {0} could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. - No se pudo agregar una referencia a {0}. Asegúrese de que el archivo está accesible y de que es un ensamblado o un componente COM válido. + No se pudo agregar una referencia a {0}. Asegúrese de que el archivo es accesible y de que se trata de un ensamblado o componente COM válido. @@ -792,7 +792,7 @@ Path - Ruta de acceso + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf index 3377431434e..7c9efded080 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf @@ -1,4 +1,4 @@ - + @@ -119,7 +119,7 @@ error - erreur + Erreur @@ -252,7 +252,7 @@ Minimal - Minimal + minimal @@ -262,12 +262,12 @@ None - Aucun + Aucun(e) Normal - Normal + NORMAL @@ -387,7 +387,7 @@ warning - avertissement + Avertissement @@ -472,7 +472,7 @@ The path to the primary output - Chemin de la sortie principale + Le chemin de la sortie principale @@ -792,7 +792,7 @@ Path - Chemin + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf index 7bcff058d42..78c38a31de4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf @@ -1,4 +1,4 @@ - + @@ -119,7 +119,7 @@ error - errore + Errore @@ -207,7 +207,7 @@ File and folder names cannot contain a leading period. - I nomi di file e di cartella non possono iniziare con un punto. + I nomi di file e di cartelle non possono iniziare con un punto. @@ -222,7 +222,7 @@ Name of this folder - Nome di questa cartella + Nome della cartella corrente @@ -242,7 +242,7 @@ Cannot save '{0}' outside the project directory. Linked items are not supported. - Non è possibile salvare '{0}' all'esterno della directory del progetto. Gli elementi collegati non sono supportati. + Impossibile salvare '{0}' all'esterno della directory del progetto. Gli elementi collegati non sono supportati. @@ -252,7 +252,7 @@ Minimal - Minimo + minimal @@ -267,7 +267,7 @@ Normal - Normale + NORMAL @@ -282,7 +282,7 @@ Project - Progetto + PROGETTO @@ -387,7 +387,7 @@ warning - avviso + Avviso @@ -442,7 +442,7 @@ Project Properties - Proprietà del progetto + Proprietà progetto @@ -792,7 +792,7 @@ Path - Percorso + PERCORSO diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf index e1bd019f916..9fca5b1025a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf @@ -212,7 +212,7 @@ The name of the file or folder - ファイルまたはフォルダーの名前 + ファイルまたはフォルダーの名前です @@ -267,7 +267,7 @@ Normal - 標準 + NORMAL @@ -792,7 +792,7 @@ Path - パス + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf index e276c7856ce..178ec108738 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf @@ -1,4 +1,4 @@ - + @@ -64,7 +64,7 @@ If you change a file name extension, the file may become unusable. Are you sure you want to change it? - 파일 확장명을 바꾸면 파일을 사용할 수 없게 될 수도 있습니다. 확장명을 바꾸시겠습니까? + 확장명을 바꾸면 파일을 사용할 수 없게 될 수도 있습니다. 확장명을 바꾸시겠습니까? @@ -89,7 +89,7 @@ Indicates whether the reference will be copied to the output directory. - 참조를 출력 디렉터리로 복사할지 여부를 나타냅니다. + 참조를 출력 디렉터리에 복사할지 여부를 나타냅니다. @@ -252,22 +252,22 @@ Minimal - 최소 + minimal Misc - 기타 + Misc None - 없음 + None Normal - 보통 + NORMAL @@ -532,7 +532,7 @@ XML Serialization Assemblies - XML Serialization 어셈블리 + XML 직렬화 어셈블리 @@ -587,7 +587,7 @@ A reference to {0} could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. - {0}에 대한 참조를 추가할 수 없습니다. 파일에 액세스할 수 있는지, 올바른 어셈블리 또는 COM 구성 요소인지 확인하세요. + {0}에 대한 참조를 추가할 수 없습니다. 파일이 액세스 가능한지, 올바른 어셈블리 또는 COM 구성 요소인지 확인하십시오. @@ -642,7 +642,7 @@ Copy to Output Directory - 출력 디렉터리에 복사 + 출력 디렉터리로 복사 @@ -792,7 +792,7 @@ Path - 경로 + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf index 334907964f5..5bea4d9201f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf @@ -1,4 +1,4 @@ - + @@ -119,7 +119,7 @@ error - błąd + Błąd @@ -252,17 +252,17 @@ Minimal - Minimalny + minimalne Misc - Różne + Misc None - Brak + brak @@ -387,7 +387,7 @@ warning - ostrzeżenie + Ostrzeżenie @@ -637,7 +637,7 @@ Copy always - Zawsze kopiuj + Zawsze Kopiuj CopyToOutputDirectory - drop down option @@ -792,7 +792,7 @@ Path - Ścieżka + ŚCIEŻKA diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf index d0e04d11879..782ef79d2dc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ Build Action - Ação de Compilação + Ação de compilação Project Build Property Name @@ -89,7 +89,7 @@ Indicates whether the reference will be copied to the output directory. - Indica se a referência será copiada no diretório de saída. + Indica se a referência será copiada para o diretório de saída. @@ -119,7 +119,7 @@ error - erro + Erro @@ -222,7 +222,7 @@ Name of this folder - Nome desta pasta + O nome desta pasta @@ -252,7 +252,7 @@ Minimal - Mínimo + mínimo @@ -262,12 +262,12 @@ None - Nenhum + NENHUM Normal - Normal + NORMAL @@ -287,7 +287,7 @@ A reference to library '{0}' cannot be added. Adding this project as a reference would cause a circular dependency. - Não é possível adicionar uma referência à biblioteca '{0}'. A adição deste projeto como uma referência causaria uma dependência circular. + Uma referência à biblioteca '{0}' não pode ser adicionada. A inserção deste projeto como uma referência pode causar uma dependência circular. @@ -387,7 +387,7 @@ warning - aviso + Aviso @@ -482,7 +482,7 @@ Custom Tool - Ferramenta Personalizada + Ferramenta personalizada @@ -587,7 +587,7 @@ A reference to {0} could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. - Não foi possível adicionar uma referência ao {0}. Certifique-se de que o arquivo está acessível e se ele é um assembly ou um componente COM válido. + Não foi possível adicionar uma referência a {0}. Verifique se esse arquivo está acessível e se é um assembly ou componente COM válido. @@ -792,7 +792,7 @@ Path - Caminho + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf index 00f7ac219dc..71484ba3f3d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf @@ -39,7 +39,7 @@ How the file relates to the build and deployment process - Роль этого файла в процессе сборки и развертывания + Роль этого файла в процессе построения и развертывания Project Build Property Description @@ -59,7 +59,7 @@ Compile - Компилировать + Компиляция Build Action - drop down option @@ -79,7 +79,7 @@ Content - Объект + Содержимое Build Action - drop down option @@ -99,7 +99,7 @@ Diagnostic - Диагностический + Диагностика @@ -119,7 +119,7 @@ error - ошибка + Ошибка @@ -252,7 +252,7 @@ Minimal - Минимальные + minimal @@ -262,12 +262,12 @@ None - Отсутствует + NONE Normal - Средний + NORMAL @@ -312,7 +312,7 @@ Quiet - Тихий режим + Тихий @@ -362,7 +362,7 @@ URL - URL + URL-адрес @@ -387,7 +387,7 @@ warning - предупреждение + Предупреждение @@ -507,7 +507,7 @@ Content Files - Файлы с содержимым + Файлы содержимого @@ -587,7 +587,7 @@ A reference to {0} could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component. - Не удается добавить ссылку на "{0}". Убедитесь, что файл доступен и действительно представляет собой сборку или компонент COM. + Не удалось добавить ссылку на {0}. Убедитесь в том, что файл доступен и является допустимой сборкой или COM-компонентом. @@ -782,7 +782,7 @@ Identity - Удостоверение + Идентификатор diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf index be3616f9b35..c382dc83183 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf @@ -1,4 +1,4 @@ - + @@ -119,7 +119,7 @@ error - hata + Hata @@ -227,7 +227,7 @@ Full Path - Tam Yol + Tam yol @@ -252,17 +252,17 @@ Minimal - En az + minimal Misc - Çeşitli + Misc None - Yok + yok @@ -282,7 +282,7 @@ Project - Proje + PROJE @@ -292,7 +292,7 @@ Project File - Proje Dosyası + Proje dosyası @@ -387,7 +387,7 @@ warning - uyarı + Uyarı @@ -432,7 +432,7 @@ File Properties - Dosya Özellikleri + Dosya özellikleri @@ -792,7 +792,7 @@ Path - Yol + PATH @@ -802,7 +802,7 @@ Version - Sürüm + SÜRÜM diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf index c10c54a12dc..d9537fb1e18 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -24,12 +24,12 @@ A reference to '{0}' (with assembly name '{1}') could not be added. A reference to the component '{2}' with the same assembly name already exists in the project. - 未能添加对“{0}”的引用(使用程序集名称“{1}”)。该项目中已存在一个对具有相同程序集名称的组件“{2}”的引用。 + 无法添加对“{0}”(程序集名称为“{1}”)的引用。项目中已存在对具有相同程序集名称的组件“{2}”的引用。 ReferenceAlreadyExists error message Could not load attribute '{0}' from project file '{1}'. - 无法从项目文件“{1}”中加载属性“{0}”。 + 无法从项目文件“{1}”加载属性“{0}”。 @@ -242,7 +242,7 @@ Cannot save '{0}' outside the project directory. Linked items are not supported. - 无法在项目目录外保存“{0}”。不支持链接的项。 + 不能在项目目录外保存“{0}”。不支持链接的项。 @@ -252,7 +252,7 @@ Minimal - 最小 + 最少 @@ -262,12 +262,12 @@ None - + 没有 Normal - 常规 + 一般 @@ -282,12 +282,12 @@ Project - 项目 + PROJECT A reference to library '{0}' cannot be added. Adding this project as a reference would cause a circular dependency. - 无法添加对库“{0}”的引用。将此项目添加为引用将导致循环依赖。 + 无法添加对库“{0}”的引用。将此项目添加为引用将导致循环依赖关系。 @@ -352,7 +352,7 @@ The project file can only be saved into the project location '{0}'. - 此项目文件只能保存在项目位置“{0}”。 + 项目文件只能保存到项目位置“{0}”。 @@ -577,7 +577,7 @@ The nested project has failed to reload. - 未能重新加载此嵌套项目。 + 嵌套的项目重新加载失败。 @@ -792,7 +792,7 @@ Path - 路径 + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf index fe5edae2aba..d1da28cf131 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -267,7 +267,7 @@ Normal - 標準 + NORMAL @@ -667,7 +667,7 @@ Indicates whether this reference is to a specific version of an assembly. - 指出這個參考是否為某一組件的特定版本。 + 指出這個參考是否指向某一組件的特定版本。 @@ -792,7 +792,7 @@ Path - 路徑 + PATH diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf index 02128b8f00d..a4f0096f3ab 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf index 74b69acd487..81a9dcce028 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf index 5f286a95698..d15fea7358b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf index 2e8a0c00453..c26cf5e9363 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf index 5b59a67af85..7efc02f0660 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf index 181e3e1d412..6518af6a1a9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf index 4f24ffe248b..dc649c2d8cd 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ F# Interactive - F# Interactive + F# 대화형 @@ -84,12 +84,12 @@ &Send to F# Interactive - F# Interactive로 보내기(&S) + F# 대화형으로 보내기(&S) &Send to F# Interactive - F# Interactive로 보내기(&S) + F# 대화형으로 보내기(&S) @@ -114,12 +114,12 @@ &Send Project Output to F# Interactive - F# Interactive로 프로젝트 출력 보내기(&S) + F# 대화형으로 프로젝트 출력 보내기(&S) &Send Project Output to F# Interactive - F# Interactive로 프로젝트 출력 보내기(&S) + F# 대화형으로 프로젝트 출력 보내기(&S) diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf index ed56d4a9d13..b1254473b28 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf @@ -1,4 +1,4 @@ - + @@ -74,7 +74,7 @@ Debug In Interactive - Debuguj w programie Interactive + Debuguj w trybie interaktywnym diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf index e2a2158cf9e..88e975c7f34 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf index 77e44dc54ee..0be33285c3a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf index 94f40d1055c..1ca887346d7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ F# Interactive - F# Interactive + F# Etkileşimli @@ -74,7 +74,7 @@ Debug In Interactive - Etkileşimde Hata Ayıklama + Etkileşimli’de Hata Ayıklama @@ -84,12 +84,12 @@ &Send to F# Interactive - &F# Interactive'e Gönder + &F# Etkileşimli'ye Gönder &Send to F# Interactive - &F# Interactive'e Gönder + &F# Etkileşimli'ye Gönder diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf index 102b31ba7b1..6456eeba61c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf @@ -84,12 +84,12 @@ &Send to F# Interactive - 发送到 F# 交互(&S) + 发送到 F# 交互窗口(&S) &Send to F# Interactive - 发送到 F# 交互(&S) + 发送到 F# 交互窗口(&S) @@ -99,12 +99,12 @@ &Send References to F# Interactive - 将引用发送到 F# 交互(&S) + 将引用发送到 F# 交互窗口(&S) &Send References to F# Interactive - 将引用发送到 F# 交互(&S) + 将引用发送到 F# 交互窗口(&S) diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf index be349e3b8e4..2434e63ee6a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -99,12 +99,12 @@ &Send References to F# Interactive - 傳送參考到 F# Interactive(&S) + 傳送參考到 F# 互動 (&S) &Send References to F# Interactive - 傳送參考到 F# Interactive(&S) + 傳送參考到 F# 互動 (&S) diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf index 5f16f51b7a6..d6e0544c20b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf index 1171f11de40..61a1b07a85c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.de.xlf @@ -1,4 +1,4 @@ - + @@ -69,7 +69,7 @@ Project - Projekt + Projekt diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf index 653304cb11a..b4806143a1f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.es.xlf @@ -1,4 +1,4 @@ - + @@ -84,7 +84,7 @@ Project Folder - Carpeta de proyecto + Carpeta del proyecto @@ -289,7 +289,7 @@ An empty text file - Archivo de texto vacío. + Archivo de texto vacío @@ -299,7 +299,7 @@ A blank XML file - Archivo XML en blanco. + Archivo XML en blanco @@ -399,7 +399,7 @@ A file for storing resources - Archivo para almacenar recursos. + Archivo para almacenar recursos diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf index a587c08ae0f..677b679130c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.fr.xlf @@ -1,4 +1,4 @@ - + @@ -399,7 +399,7 @@ A file for storing resources - Fichier de stockage des ressources + Fichier pour stocker les ressources diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf index 08d29b24731..8cff31ef2b7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.it.xlf @@ -1,4 +1,4 @@ - + @@ -64,12 +64,12 @@ Sets the .ico file to use as your application icon. - Consente di impostare il file con estensione da usare come icona dell'applicazione. + Imposta il file ico da utilizzare come icona dell'applicazione. Project - Progetto + PROGETTO @@ -329,7 +329,7 @@ A project item for consuming a .NET Managed Resources File (Resx) using ResxFile type provider. - Elemento di progetto per l'utilizzo di un file di risorse gestite .NET (Resx) con il provider di tipi ResxFile. + Elemento di progetto per l'utilizzo di un file di risorse gestite .NET (Resx) utilizzando il provider di tipi ResxFile. @@ -339,7 +339,7 @@ A project item for using the SqlDataConnection (LINQ to SQL) type provider to generate types and consume data in a live SQL database. - Elemento di progetto per l'uso del provider di tipi SqlDataConnection (LINQ to SQL) per generare i tipi e utilizzare i dati in un database SQL attivo. + Elemento di progetto per l'utilizzo del provider di tipi SqlDataConnection (LINQ to SQL) per generare i tipi e utilizzare i dati in un database SQL attivo. @@ -349,7 +349,7 @@ A project item for using the SqlEntityConnection (Entity Data Model) type provider to generate types and consume data in a live SQL database. - Elemento di progetto per l'uso del provider di tipi SqlEntityConnection (Entity Data Model) per generare i tipi e utilizzare i dati in un database SQL attivo. + Elemento di progetto per l'utilizzo del provider di tipi SqlEntityConnection (Entity Data Model) per generare i tipi e utilizzare i dati in un database SQL attivo. @@ -539,7 +539,7 @@ All of the Framework assemblies are already referenced. Please use the Object Browser to explore the references in the Framework. - Si è già fatto riferimento a tutti gli assembly del framework. Usare Visualizzatore oggetti per esplorare i riferimenti nel framework. + Si è già fatto riferimento a tutti gli assembly del framework. Utilizzare Visualizzatore oggetti per esplorare i riferimenti nel framework. diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf index 3bac34d1a98..742b365524a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ja.xlf @@ -1,4 +1,4 @@ - + @@ -399,7 +399,7 @@ A file for storing resources - リソースを格納するためのファイル + リソースを格納するファイル @@ -409,7 +409,7 @@ F# Interactive - F# インタラクティブ + F# Interactive @@ -459,7 +459,7 @@ F# Interactive - F# インタラクティブ + F# Interactive @@ -509,7 +509,7 @@ Change path and command line arguments passed to the F# Interactive - F# インタラクティブに渡されるパスとコマンド ライン引数を変更します + F# Interactive に渡されるパスとコマンド ライン引数を変更します diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf index 2ddb349f1d2..611e3420a3c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ko.xlf @@ -1,4 +1,4 @@ - + @@ -509,7 +509,7 @@ Change path and command line arguments passed to the F# Interactive - F# 대화형에 전달된 경로 및 명령줄 인수를 변경합니다. + F# Interactive에 전달된 경로 및 명령줄 인수를 변경합니다. diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf index 19db868b25a..436d177ce92 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pl.xlf @@ -1,4 +1,4 @@ - + @@ -179,7 +179,7 @@ Windows - Windows + System Windows @@ -484,7 +484,7 @@ The project '{0}' could not be opened because opening it would cause a folder to be rendered multiple times in the solution explorer. One such problematic item is '{1}'. To open this project in Visual Studio, first edit the project file and fix the problem. - Nie można otworzyć projektu „{0}”, ponieważ spowodowałoby to wielokrotne renderowanie folderu w eksploratorze rozwiązań. Jednym z elementów powodujących problemy jest „{1}”. Aby otworzyć ten projekt w programie Visual Studio, najpierw edytuj plik projektu i rozwiąż problem. + Nie można otworzyć projektu „{0}”, ponieważ spowodowałoby to wielokrotne zrenderowanie folderu w eksploratorze rozwiązań. Jednym z elementów powodujących problemy jest „{1}”. Aby otworzyć ten projekt w programie Visual Studio, najpierw edytuj plik projektu i rozwiąż problem. @@ -509,7 +509,7 @@ Change path and command line arguments passed to the F# Interactive - Zmień ścieżkę i argumenty wiersza polecenia przekazywane do narzędzia F# Interactive + Zmień ścieżkę i argumenty wiersza polecenia przekazywane do programu F# Interactive diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf index 845ca2cf553..dc9241bf161 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf index 7d372af31d6..7cccb1aa076 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf index 825c60397ef..739934c619d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.tr.xlf @@ -1,4 +1,4 @@ - + @@ -29,7 +29,7 @@ Output Type - Çıktı Türü + Çıkış Türü @@ -69,12 +69,12 @@ Project - Proje + PROJE Project File - Proje Dosyası + Proje dosyası diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf index 68a622d5f69..d6e1bc60642 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hans.xlf @@ -69,7 +69,7 @@ Project - 项目 + PROJECT @@ -409,7 +409,7 @@ F# Interactive - F# 交互窗口 + F# 交互 @@ -459,7 +459,7 @@ F# Interactive - F# 交互窗口 + F# 交互 diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf index 180e9957b9d..1ccc8023f3d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/VSPackage.zh-Hant.xlf @@ -299,7 +299,7 @@ A blank XML file - 空白 XML 檔 + 空的 XML 檔 @@ -409,7 +409,7 @@ F# Interactive - F# 互動 + F# Interactive @@ -459,7 +459,7 @@ F# Interactive - F# 互動 + F# Interactive @@ -509,7 +509,7 @@ Change path and command line arguments passed to the F# Interactive - 變更傳遞到 F# 互動的路徑和命令列引數 + 變更傳遞到 F# Interactive 的路徑和命令列引數 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf index ec8edc0c8d7..4e2bdab5004 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.cs.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ O&utput type: - Typ &výstupu: + Typ výstup&u: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf index 476df538616..f4cac58bb50 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.de.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Specify how application resources will be managed: - Verwaltung von Anwendungsressourcen: + Geben Sie an, wie die Anwendungsressourcen verwaltet werden sollen: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf index 67b3ae1eb31..d1efc1ac634 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf index aef6cabab2f..535fba0b84d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf index 8e8b37c8f64..0f42e210f47 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf index e1ef23f8dc1..eb9cef6d52d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf index 4648179e594..cf9ac439157 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf index aaa6ab47b3c..c7f5eb16bf0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.pt-BR.xlf @@ -1,10 +1,10 @@ - + Assembly &name: - &Nome do Assembly: + &Nome do assembly: @@ -34,7 +34,7 @@ O&utput type: - Tipo de &saída: + Ti&po de saída: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf index 6d0281b6692..1c96a13b108 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.ru.xlf @@ -1,10 +1,10 @@ - + Assembly &name: - &Имя сборки: + Имя &сборки: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf index 92519e88aea..c0e340cf72c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.tr.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ O&utput type: - &Çıkış türü: + Ç&ıkış türü: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf index 6ac472f9381..f46d0dd37b0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ApplicationPropPage.zh-Hans.xlf @@ -1,10 +1,10 @@ - + Assembly &name: - 程序集名称(&N): + 程序集名称(&N): @@ -34,7 +34,7 @@ O&utput type: - 输出类型(&U): + 输出类型(&U): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf index d322a95b1b4..d22f9360568 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf index fec602bdf50..e4abf053c8a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf index 4e3fbdd1b03..e7c5dfd783b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf index 43a94c2473a..0e20482fc3f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf index c6603dae24d..c541698888e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf index cd6455ea64c..a2190934053 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf index 2f92bb4c707..fc64e68a250 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf index de9e2972dfb..559d3afb30b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf index 4478e6ad561..639f2f4b7c1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf index c9efae6f911..a04d10f5d56 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf index 9f9ac6466e7..f384ef2d891 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf index 5caf470b726..05d48d67ac2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf index 669a3a874c9..1a2e070f542 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventCommandLineDialog.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf index 6cc631bbbc7..25b8be2bb4d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf index 4edb425a91d..efd390ea7d0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.de.xlf @@ -1,10 +1,10 @@ - + P&re-build event command line: - Befehlszeile für P&räbuildereignis + Befehlszeile für P&räbuildereignis: @@ -59,7 +59,7 @@ When the build updates the project output - Bei der Aktualisierung der Projektausgabe während der Erstellung + Wenn der Build die Projektausgabe aktualisiert diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf index 8a687161774..fa7e8debee2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf index 0f9892f65c0..f53e9b2d152 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf index ff6480bf0a3..d5578a8717c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ja.xlf index 1224d4e6cb3..34ef742a546 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ja.xlf @@ -49,7 +49,7 @@ Always - 常時 + 常に行う diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf index 2be535f212a..d24bbcb7111 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ko.xlf @@ -1,10 +1,10 @@ - + P&re-build event command line: - 빌드 전 이벤트 명령줄(&R): + 빌드 이벤트 명령줄 대화 상자(&R): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf index e2dbc5bce5a..59ff337b414 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf index aec6e5568fa..93f6c1c59ea 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf index aa1a35894d7..1416b0f53ba 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf index b5f5bac5114..6cc5674746d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.tr.xlf @@ -1,4 +1,4 @@ - + @@ -24,7 +24,7 @@ P&ost-build event command line: - &Oluşturma sonrası olay komut satırı: + D&erleme sonrası olay komut satırı: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.zh-Hans.xlf index 41abaed4108..a59ec76dfd8 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildEventsPropPage.zh-Hans.xlf @@ -49,7 +49,7 @@ Always - 始终 + 总是 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf index db4345b9870..d37993e8960 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.de.xlf index 320147d129d..8b50d8a68ad 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.es.xlf index d6fe8b01cb0..148b27b14c3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.es.xlf @@ -1,4 +1,4 @@ - + @@ -54,7 +54,7 @@ Specif&ic warnings: - Advertenc&ias específicas: + A&dvertencias específicas: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.fr.xlf index e0721064309..3b2937eba2d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.fr.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ &Prefer 32-bit - Préférer &32 bits + &Préférer 32 bits @@ -39,12 +39,12 @@ B&rowse... - Pa&rcourir... + P&arcourir... &Output path: - C&hemin de sortie : + Chemin de s&ortie : @@ -59,7 +59,7 @@ &None - Aucu&n + &Aucune @@ -104,7 +104,7 @@ Optimi&ze code - Op&timiser le code + Optimi&ser le code diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.it.xlf index 0890694a536..bfc4b4ca222 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.it.xlf @@ -1,4 +1,4 @@ - + @@ -59,7 +59,7 @@ &None - &Nessuno + &Nessuna diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ja.xlf index d83b51700bf..10c7d9b936a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ja.xlf @@ -29,7 +29,7 @@ Errors and warnings - エラーと警告 + エラーおよび警告 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ko.xlf index 537f14a12ca..90ac3d7d03b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pl.xlf index 1b4413c9b1d..25dfce21243 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pt-BR.xlf index a2ffb7e6c84..2c25e3468c9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -44,12 +44,12 @@ &Output path: - Caminho de &saída: + Caminh&o de saída: A&ll - Tud&o + T&odos diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ru.xlf index 7d4a6afc0f1..f40632449a1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.ru.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ General - Общие + Общее diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.tr.xlf index 7a55cc949b6..a519259ba20 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.tr.xlf @@ -1,10 +1,10 @@ - + Conditional compilation s&ymbols: - &Koşullu derleme simgeleri: + Koşullu derleme s&embolleri: @@ -34,7 +34,7 @@ &XML documentation file: - &XML belgesi dosyası: + &XML belge dosyası: @@ -104,7 +104,7 @@ Optimi&ze code - &Kodu iyileştir + Kodu iyileş&tir @@ -129,7 +129,7 @@ Define DEB&UG constant - HATA &AYIKLAMA sabiti tanımla + DEB&UG sabitini tanımla diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hans.xlf index 7189b489018..43f058d2d98 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hans.xlf @@ -1,10 +1,10 @@ - + Conditional compilation s&ymbols: - 条件编译符号(&Y): + 条件编译符号(&Y): @@ -49,12 +49,12 @@ A&ll - 全部(&L) + 所有(&L) Specif&ic warnings: - 特定警告(&I): + 特定警告(&I): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hant.xlf index b5d76de120c..73238eec1f7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/BuildPropPage.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.cs.xlf index 4fbcdb22b63..b7f7db82845 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.de.xlf index 2e570490493..de4a3a88349 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.es.xlf index 6c4f55c9e71..623a095ee6c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.es.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Comma&nd line arguments: - &Argumentos de la línea de comandos: + Argume&ntos de la línea de comandos: @@ -74,7 +74,7 @@ Enable SQ&L Server debugging - &Habilitar depuración de SQL Server + Habilitar depuración de SQ&L Server diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.fr.xlf index be876b43811..d7e927fcfbd 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.it.xlf index cc4d9cd5c87..6628f68dda5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pl.xlf index bb6d9cc7666..3cb518e1054 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pt-BR.xlf index e9c3aa64ff7..bebb8eb708d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -74,7 +74,7 @@ Enable SQ&L Server debugging - Habilitar depuração do SQ&L Server + Habilitar a depuração do SQ&L Server diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.ru.xlf index e6efd612b58..f14f4e935de 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.ru.xlf @@ -1,4 +1,4 @@ - + @@ -9,12 +9,12 @@ &Start project - &Запустить проект + &Запуск проекта Start e&xternal program: - &Запуск внешней программы: + Запуск &внешней программы: diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.tr.xlf index ba949c79550..833e0b33f42 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.tr.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Program to start - Başlatılacak Program + Başlatılacak program @@ -74,7 +74,7 @@ Enable SQ&L Server debugging - SQ&L Server üzerinde hata ayıklamayı etkinleştir + SQ&L Server hata ayıklamasını etkinleştir diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hans.xlf index 62204f8c922..d0d3cd5e240 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hans.xlf @@ -14,7 +14,7 @@ Start e&xternal program: - 启动外部程序(&X): + 启动外部程序(&X): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hant.xlf index 8363b99591c..8d12410079c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/DebugPropPage.zh-Hant.xlf @@ -14,7 +14,7 @@ Start e&xternal program: - 起始外部程式(&X): + 啟動外部程式(&X): @@ -39,7 +39,7 @@ Comma&nd line arguments: - 命令列的引數(&N): + 命令列引數(&N): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.cs.xlf index 9fcb5feb91a..5341e67ab86 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.de.xlf index e35db629104..1e49de26935 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.es.xlf index 878c944cd3b..3e83917f8d0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.fr.xlf index a50f390374c..8cf63e41f08 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.it.xlf index f7f2c8a3adc..d6d276b1837 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ja.xlf index d4d314ddee0..3c9bc7d0ded 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ko.xlf index d17247b81e3..12804e7a3ee 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pl.xlf index 170199c9055..9337c152112 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pt-BR.xlf index b8d2524a06e..c274532d09f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ru.xlf index 0be5d4aaa0b..afca4527299 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.tr.xlf index 6ef96b01cd7..f96c4a8da41 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hans.xlf index 938d6024a47..97512aa0978 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hant.xlf index a0ae25961e9..9dd06888ea3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageHostDialog.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.cs.xlf index c8e5b7cd36a..61b50997890 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.de.xlf index 094d10306c8..9f805b1c5a3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.es.xlf index e7acc7bb0d7..1a6854976e7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.fr.xlf index 679f951b73e..a7d280bc2db 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.it.xlf index 916621220c2..b8b7b295ea9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ja.xlf index c960d267e5d..36f1da5cbc3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ko.xlf index 70df964d9ce..112e882ebe4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pl.xlf index 209f6014fd6..3d877488af4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pt-BR.xlf index c5a93a9e71b..980b76d5496 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ru.xlf index 43cf83e3fcb..07322aa70c6 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.tr.xlf index d6e2d953f71..d8dfa57ce72 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hans.xlf index b6177ce4c46..64eccb2e0a8 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hant.xlf index 2984ef0687a..59ebdbcf3e1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/PropPageUserControlBase.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.cs.xlf index c3e2c3f0a18..73bc19a60f9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.cs.xlf @@ -1,4 +1,4 @@ - + @@ -9,7 +9,7 @@ &Update - &Aktualizovat + Akt&ualizovat diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.de.xlf index 494cdfc5c08..d404bd4ddfe 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.de.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Delete - Löschen + löschen diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.es.xlf index f93118c9d9e..9502fb15b84 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.fr.xlf index 96d2c49eb32..1c1154e0b2e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.fr.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Delete - Supprimer + supprimer diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.it.xlf index 9ee4b7f053a..32767e6bdea 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ja.xlf index 2ee13151176..01d07dea709 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ja.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Browse - ブラウザー + 参照 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ko.xlf index 02369eb5f01..7a549eb5755 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pl.xlf index 708a2d14223..e095b853263 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pt-BR.xlf index 2fe1e1a6063..6d3ab0ec441 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ru.xlf index 40d3ac6c348..de3199b2abc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.ru.xlf @@ -1,4 +1,4 @@ - + @@ -29,17 +29,17 @@ Move up - Вверх + Переместить вверх Move down - Вниз + Переместить вниз Delete - Удаление. + Удалить diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.tr.xlf index 05e5266da15..0f47c169698 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hans.xlf index c5195f9a2a7..6bcf6828e9e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -14,7 +14,7 @@ Reference &paths: - 引用路径(&P): + 引用路径(&P): diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hant.xlf index 910e618c7d0..725134dd28d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/xlf/ReferencePathsPropPage.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf index 0011f9be1cb..da0a132c14e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Version - Verze + VERSION @@ -355,7 +355,7 @@ Vyberte prosím platnou cestu ke složce. None - Žádné + žádné @@ -390,7 +390,7 @@ Vyberte prosím platnou cestu ke složce. Use of variable prior to assignment - Použití proměnné před přiřazením + Použití proměnné závisí na předchozím přiřazení @@ -819,7 +819,7 @@ Chyba: Windows Application - Aplikace pro systém Windows + Aplikace systému Windows @@ -960,7 +960,7 @@ Chyba: &Remove - Odeb&rat + O&debrat @@ -1257,7 +1257,7 @@ Chyba: The location specified is on an invalid or read-only disk, or contains a device name reserved for the system. - Zadané umístění je buď neplatné, nachází se na disku určeném jen pro čtení, nebo obsahuje název zařízení rezervovaný systémem. + Zadané umístění je buď neplatné, nachází se na disku určeném pouze pro čtení, nebo obsahuje název zařízení rezervovaný systémem. @@ -1602,7 +1602,7 @@ Chyba: (None) - (Žádný) + (žádné) Default Event @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -1884,7 +1883,7 @@ CONSIDER: get this from CodeDom &Remove - Odeb&rat + O&debrat Add, Delete and Views button text in the main ToolStrip @@ -2830,22 +2829,22 @@ Chcete aktualizovat hodnotu v souboru .settings? seconds - sekundy + Sekundy minutes - minuty + Minuty hours - hodiny + Hodiny days - dny + Dny diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 0e771c59575..8e3c01a1d57 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -1,4 +1,4 @@ - + @@ -19,12 +19,12 @@ Version - Version + VERSION Signing - Signierung + Signieren @@ -133,7 +133,7 @@ Klicken Sie auf "OK", um diese Meldung zu ignorieren und den Vorgang fortzusetze N/A - Nicht zutreffend + N/V This is used in the platform and configuration comboboxes when showing pages that don't care about the current platform/configuration @@ -355,7 +355,7 @@ Wählen Sie einen gültigen Ordnerpfad aus. None - Keine + NONE @@ -557,7 +557,7 @@ Wenn diese Einstellung geändert wird, werden die Einstellungen in allen Konfigu Invalid value - Ungültiger Wert + Ungültiger Wert. @@ -875,7 +875,7 @@ Fehler: Static - Statisch + Static @@ -1627,7 +1627,7 @@ Fehler: Comment - Kommentieren + Kommentar Column names for the string table @@ -1818,7 +1818,7 @@ CONSIDER: get this from CodeDom Comment - Kommentieren + Kommentar Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf index 89398dabf58..300e65a5405 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Debug - Depurar + depurar @@ -230,12 +230,12 @@ Seleccione una ruta de acceso de carpeta válida. Invalid version format, expected "[Major]", "[Major].[Minor]", "[Major].[Minor].[Build]" or "[Major].[Minor].[Build].[Revision]" - Formato de versión no válido, se esperaba "[Principal]", "[Principal].[Secundaria]", "[Principal].[Secundaria].[Compilación]" o "[Principal].[Secundaria].[Compilación].[Revisión]" + Formato de versión no válido; se esperaba "[Principal]", "[Principal].[Secundaria]", "[Principal].[Secundaria].[Compilación]" o "[Principal].[Secundaria].[Compilación].[Revisión]" A wildcard ("*") is not allowed in this field. - No se permite el carácter comodín ("*") en este campo. + No se permite el uso de caracteres comodín ("*") en este campo. @@ -355,7 +355,7 @@ Seleccione una ruta de acceso de carpeta válida. None - Ninguno + NONE @@ -365,7 +365,7 @@ Seleccione una ruta de acceso de carpeta válida. Error - Error + Fehler @@ -390,7 +390,7 @@ Seleccione una ruta de acceso de carpeta válida. Use of variable prior to assignment - Uso de variable anterior a la asignación. + Uso de variable anterior a la asignación @@ -400,7 +400,7 @@ Seleccione una ruta de acceso de carpeta válida. Unused local variable - Variable local no usada. + Variable local no usada @@ -502,7 +502,7 @@ Si cambia este valor, se restablecerán los valores de todas las configuraciones (Custom) - (Personalizada) + (Personalizado) Don't use @@ -614,7 +614,7 @@ Error: Error - Error + Fehler @@ -684,7 +684,7 @@ Error: The new passwords do not match. Enter the password again. - Las contraseñas no coinciden. Vuelva a escribir la contraseña. + Las nuevas contraseñas no coinciden. Vuelva a escribir la contraseña. @@ -1087,7 +1087,7 @@ Error: Assembly Version - Versión del ensamblado + Versión de ensamblado @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2830,22 +2829,22 @@ El nuevo valor del archivo app.config es '{1}' seconds - segundos + Segundos minutes - minutos + Minutos hours - horas + Horas days - días + Días @@ -2855,7 +2854,7 @@ El nuevo valor del archivo app.config es '{1}' An error occurred while reading the Application configuration file. The file might be corrupted or contain invalid XML. - Error al leer el archivo de configuración de la aplicación. Puede que el archivo esté dañado o que contenga código XML no válido. + Error al leer el archivo de configuración de la aplicación. Puede que esté dañado o que contenga código XML no válido. diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf index f5e2991076c..aa5728e6f96 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Debug - Déboguer + déboguer @@ -49,7 +49,7 @@ Database - Base de données + Base de données  @@ -69,7 +69,7 @@ Reference Paths - Chemins des références + Chemins d'accès des références @@ -215,7 +215,7 @@ Sélectionnez un chemin de dossier valide. Reference Paths - Chemins des références + Chemins d'accès des références @@ -225,7 +225,7 @@ Sélectionnez un chemin de dossier valide. Assembly Information - Informations de l'assembly + Informations sur l'assembly @@ -355,7 +355,7 @@ Sélectionnez un chemin de dossier valide. None - Aucun + Aucun(e) @@ -724,7 +724,7 @@ Erreur : Expiration Date - Date d'expiration + Date d’expiration @@ -1497,7 +1497,7 @@ Erreur : Name - Nom + Nom  @@ -1507,7 +1507,7 @@ Erreur : Name - Nom + Nom  @@ -1607,12 +1607,12 @@ Erreur : Requires: - Requiert : + Nécessite : Name - Nom + Nom  Column names for the string table @@ -1798,7 +1798,7 @@ CONSIDER: get this from CodeDom Name - Nom + Nom  Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2036,7 +2035,7 @@ CONSIDER: get this from CodeDom Text Files - Fichiers texte + Fichiers textes # File dialog filters # # E.g., for icons, the actual filter created would look like "Icons (*.ico)". These resources @@ -2336,7 +2335,7 @@ CONSIDER: get this from CodeDom Browse... - Parcourir... + Parcourir… Added as the last item in the list of available types to let the user browse for a new type @@ -2361,7 +2360,7 @@ CONSIDER: get this from CodeDom Name - Nom + Nom  @@ -2830,22 +2829,22 @@ Voulez-vous mettre à jour la valeur dans le fichier .settings ? seconds - secondes + Secondes minutes - minutes + Minutes hours - heures + Heures days - jours + Jours diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf index ae70606d7ca..a580463b97b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf @@ -1,4 +1,4 @@ - + @@ -173,7 +173,7 @@ Fare clic su OK per ignorare e continuare. Fare clic su ANNULLA per selezionare Select Output Path - Seleziona percorso di output + Seleziona percorso output @@ -230,7 +230,7 @@ Selezionare un percorso della cartella valido. Invalid version format, expected "[Major]", "[Major].[Minor]", "[Major].[Minor].[Build]" or "[Major].[Minor].[Build].[Revision]" - Formato di versione non valido: previsto [Principale]", "[Principale].[Secondaria]", "[Principale].[Secondaria].[Build]" o "[Principale].[Secondaria].[Build].[Revisione] + Formato di versione non valido. Previsto "[Major]", "[Major].[Minor]", "[Major].[Minor].[Build]" o "[Major].[Minor].[Build].[Revision]" @@ -240,7 +240,7 @@ Selezionare un percorso della cartella valido. Each part of the version number for '{0}' must be an integer between 0 and {1}. - Ogni parte del numero di versione per '{0}' deve essere un numero intero compreso tra 0 e {1}. + Ogni parte del numero di versione per '{0}' deve essere un intero compreso tra 0 e {1}. @@ -370,7 +370,7 @@ Selezionare un percorso della cartella valido. (custom) - (personalizzata) + (personalizzato) @@ -380,7 +380,7 @@ Selezionare un percorso della cartella valido. Late binding; call could fail at run time - Binding tardivo. La chiamata potrebbe non riuscire in fase di esecuzione + Associazione tardiva. La chiamata potrebbe non riuscire in fase di esecuzione @@ -1697,7 +1697,7 @@ Errore: The name of the resource '{0}' cannot be used as a valid identifier, because it contains one or more invalid characters: '{1}'. Please remove or replace those characters and try again. - Il nome della risorsa '{0}' non può essere usato come identificatore valido perché contiene uno o più caratteri non validi: \'{1\}'. Rimuovere o sostituire tali caratteri e riprovare. + Il nome della risorsa '{0}' non può essere usato come identificatore valido perché contiene uno o più caratteri non validi: '{1}'. Rimuovere o sostituire tali caratteri e riprovare. {0} = Resource name @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2830,22 +2829,22 @@ Aggiornare il valore nel file .settings? seconds - secondi + Secondi minutes - minuti + Minuti hours - ore + Ore days - giorni + Giorni diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf index a8fe2004e40..e465fe5fae9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf @@ -14,7 +14,7 @@ References - 参照 + 参照設定 @@ -74,12 +74,12 @@ Pre-build Event Command Line - ビルド前イベントのコマンド ライン + ビルド前に実行するコマンド ライン Post-build Event Command Line - ビルド後イベントのコマンド ライン + ビルド後に実行するコマンド ライン @@ -375,7 +375,7 @@ Please select a valid folder path. Implicit conversion - 暗黙的な変換 + 暗黙的な変換です @@ -487,7 +487,7 @@ Changing this setting will reset the settings in all configurations. Canceling... - キャンセルしています... + 取り消しています... @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2123,7 +2122,7 @@ CONSIDER: get this from CodeDom Managed Resources Editor - マネージ リソース エディター + マネージド リソース エディター @@ -2840,12 +2839,12 @@ app.config ファイルでの新しい値は '{1}' です hours - + 時間 days - + 日数 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf index b4cf73bdbf3..245fef8a3b6 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf @@ -1,4 +1,4 @@ - + @@ -240,7 +240,7 @@ Please select a valid folder path. Each part of the version number for '{0}' must be an integer between 0 and {1}. - '{0}' 버전 번호의 각 부분은 0에서 {1} 사이의 정수여야 합니다. + '{0}'의 각 버전 번호 부분은 0에서 {1} 사이의 정수여야 합니다. @@ -355,7 +355,7 @@ Please select a valid folder path. None - 없음 + None @@ -537,7 +537,7 @@ Changing this setting will reset the settings in all configurations. Permission - 권한 + 사용 권한 @@ -679,7 +679,7 @@ Error: Enter a new password. - 새 암호를 입력하세요. + 새 암호를 입력하십시오. @@ -1377,7 +1377,7 @@ Error: Default Value - 기본값 + Default Value @@ -1387,7 +1387,7 @@ Error: Default Value - 기본값 + Default Value @@ -1407,7 +1407,7 @@ Error: Serializable - Serialize 가능 + 직렬화 가능 @@ -1417,7 +1417,7 @@ Error: Serializable - Serialize 가능 + 직렬화 가능 @@ -1617,7 +1617,7 @@ Error: Type - 형식 + Type Column names for the string table @@ -1627,7 +1627,7 @@ Error: Comment - 설명 + 주석 Column names for the string table @@ -1808,7 +1808,7 @@ CONSIDER: get this from CodeDom Type - 형식 + Type Columns for the "Details" view of the resource editor @@ -1818,7 +1818,7 @@ CONSIDER: get this from CodeDom Comment - 설명 + 주석 Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2366,7 +2365,7 @@ CONSIDER: get this from CodeDom Type - 형식 + Type @@ -2381,7 +2380,7 @@ CONSIDER: get this from CodeDom Type '{0}' is not defined. - '{0}' 형식이 정의되어 있지 않습니다. + {0}' 형식이 정의되지 않았습니다. @@ -2855,7 +2854,7 @@ app.config 파일의 새 값은 '{1}'입니다. An error occurred while reading the Application configuration file. The file might be corrupted or contain invalid XML. - 응용 프로그램 구성 파일을 읽는 동안 오류가 발생했습니다. 파일이 손상되었거나 잘못된 XML이 포함되어 있습니다. + 지정한 응용 프로그램 구성 파일을 읽는 동안 오류가 발생했습니다. 파일이 손상되었거나 잘못된 XML이 포함되어 있습니다. diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf index 4e053ce5db5..f76be1ae69a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf @@ -1,4 +1,4 @@ - + @@ -59,7 +59,7 @@ Build - Kompilacja + Kompiluj @@ -74,7 +74,7 @@ Pre-build Event Command Line - Wiersz polecenia zdarzenia sprzed kompilacji + Wiersz polecenia zdarzenia przed kompilowaniem @@ -355,7 +355,7 @@ Wybierz prawidłową ścieżkę folderu. None - Brak + brak @@ -1077,7 +1077,7 @@ Błąd: Startup Object - Obiekt uruchomieniowy + Obiekt startowy @@ -1542,7 +1542,7 @@ Błąd: Default - Domyślne + Domyślny @@ -1582,7 +1582,7 @@ Błąd: Key - Klawisz + Klucz @@ -1607,7 +1607,7 @@ Błąd: Requires: - Wymaga: + Wymagania: @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2810,7 +2809,7 @@ Czy chcesz zaktualizować wartość w pliku settings? Learn more about client application services... - Dowiedz się więcej o usługach aplikacji klienta... + Dowiedz się więcej o usługach aplikacji klienckich… @@ -2830,22 +2829,22 @@ Czy chcesz zaktualizować wartość w pliku settings? seconds - sekundy + Sekundy minutes - minuty + Minuty hours - godziny + Godziny days - dni + Dni diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf index c59226370a4..112d552e161 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -39,7 +39,7 @@ Debug - Depurar + depurar @@ -49,7 +49,7 @@ Database - Banco de Dados + Banco de dados @@ -59,12 +59,12 @@ Build - Build + Compilar Build Events - Eventos de Build + Eventos de Compilação @@ -74,12 +74,12 @@ Pre-build Event Command Line - Linha de Comando de Eventos Pré-build + Linha de comando do evento de pré-compilação Post-build Event Command Line - Linha de Comando de Eventos Pós-build + Linha de comando do evento de pós-compilação @@ -240,7 +240,7 @@ Selecione um caminho da pasta válido. Each part of the version number for '{0}' must be an integer between 0 and {1}. - Cada parte do número de versão de '{0}' deve ser um inteiro entre 0 e {1}. + Cada parte do número de versão para '{0}' deve ser um inteiro entre 0 e {1}. @@ -350,12 +350,12 @@ Selecione um caminho da pasta válido. Base address must be a hexadecimal number with less than or equal to 8 digits, for example, 0x11000000. - O endereço base deve ser um número hexadecimal com 8 ou menos dígitos, por exemplo, 0x11000000. + O endereço base deve ser um número hexadecimal com até 8 dígitos, por exemplo, 0x11000000. None - Nenhum + NENHUM @@ -385,7 +385,7 @@ Selecione um caminho da pasta válido. Implicit type; object assumed - Tipo implícito, objeto presumido + Tipo implícito; objeto assumido @@ -405,7 +405,7 @@ Selecione um caminho da pasta válido. Instance variable accesses shared member - A variável de instância acessa o membro compartilhado + Variável de instância acessa membro compartilhado @@ -724,7 +724,7 @@ Erro: Expiration Date - Data de Vencimento + Data de Validade @@ -1803,7 +1803,7 @@ CONSIDER: get this from CodeDom Filename - Nome do arquivo + Nome do Arquivo Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2830,22 +2829,22 @@ Deseja atualizar o valor no arquivo .settings? seconds - segundos + Segundos minutes - minutos + Minutos hours - horas + Horas days - dias + Dias diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf index 80383103d67..0a3d32a55f4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf @@ -1,4 +1,4 @@ - + @@ -74,12 +74,12 @@ Pre-build Event Command Line - Командная строка событий перед сборкой + Командная строка события перед сборкой Post-build Event Command Line - Командная строка событий после сборки + Командная строка события после сборки @@ -173,12 +173,12 @@ Click OK to ignore and continue. Click CANCEL to choose a different output path. Select Output Path - Выбор выходного пути + Выбор пути для вывода Select Reference Path - Выбор пути для ссылок + Выберите путь для ссылки @@ -235,7 +235,7 @@ Please select a valid folder path. A wildcard ("*") is not allowed in this field. - Знак подстановки ("*") не допускается в этом поле. + Подстановочный символ ("*") недопустим в этом поле. @@ -355,7 +355,7 @@ Please select a valid folder path. None - Нет + NONE @@ -390,7 +390,7 @@ Please select a valid folder path. Use of variable prior to assignment - Использование переменной до присваивания + Использование переменной до инициализации @@ -709,12 +709,12 @@ Error: Issued To - Получатель сертификата + Выдан (кому) Issued By - Кем выдан + Выдан (кем) @@ -779,7 +779,7 @@ Error: Enter password to open file - Введите пароль, чтобы открыть файл + Введите пароль для открытия файла @@ -875,7 +875,7 @@ Error: Static - Статическая + Static @@ -960,7 +960,7 @@ Error: &Remove - Уда&лить + &Удалить @@ -1217,7 +1217,7 @@ Error: Microsoft Visual Studio - Microsoft Visual Studio + Службы Microsoft Visual Studio Error reporting @@ -1813,7 +1813,7 @@ CONSIDER: get this from CodeDom Size - Размер + Size Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -1879,12 +1878,12 @@ CONSIDER: get this from CodeDom &Add - Д&обавить + & Добавить Add, Delete and Views button text in the main ToolStrip &Remove - Уда&лить + &Удалить Add, Delete and Views button text in the main ToolStrip @@ -2830,22 +2829,22 @@ Do you want to update the value in the .settings file? seconds - с + Секунды minutes - мин + Минуты hours - ч + Часы days - дн. + Дни diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf index 689a912f21e..cddf8633f5f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf @@ -1,4 +1,4 @@ - + @@ -19,7 +19,7 @@ Version - Sürüm + SÜRÜM @@ -34,7 +34,7 @@ Compile - Derleme + Derle @@ -59,7 +59,7 @@ Build - Derleme + Oluştur @@ -74,12 +74,12 @@ Pre-build Event Command Line - Derleme Öncesi Olay Komut Satırı + Oluşturma öncesi olay komut satırı Post-build Event Command Line - Derleme Sonrası Olay Komut Satırı + Oluşturma sonrası olay komut satırı @@ -98,7 +98,7 @@ Yoksayıp devam etmek için Tamam'a tıklayın. Farklı bir çıkış yolu seçm (None) - (Hiçbiri) + (Yok) @@ -113,7 +113,7 @@ Yoksayıp devam etmek için Tamam'a tıklayın. Farklı bir çıkış yolu seçm (None) - (Hiçbiri) + (Yok) @@ -143,7 +143,7 @@ Yoksayıp devam etmek için Tamam'a tıklayın. Farklı bir çıkış yolu seçm (None) - (Hiçbiri) + (Yok) @@ -355,7 +355,7 @@ Lütfen geçerli bir klasör yolu seçin. None - Hiçbiri + yok @@ -649,7 +649,7 @@ Hata: (None) - (Hiçbiri) + (Yok) @@ -1092,7 +1092,7 @@ Hata: Assembly File Version - Bütünleştirilmiş Kod Dosya Sürümü + Bütünleştirilmiş Kod Dosyası Sürümü @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2830,22 +2829,22 @@ app.config dosyasındaki yeni değer: '{1}' seconds - saniye + Saniye minutes - dakika + Dakika hours - saat + Saat days - gün + Gün @@ -2940,7 +2939,7 @@ app.config dosyasındaki yeni değer: '{1}' The application will fail to run in the selected zone because of this requested elevated permission. Click the help link above for more info. - İstenen bu yükseltilmiş izin nedeniyle, uygulama seçili bölgede çalışamayacak. Daha fazla bilgi için yukarıdaki yardım bağlantısına tıklayın. + İstenen bu yükseltilmiş izin nedeniyle uygulama, seçili bölgede çalıştırılamayacak. Daha fazla bilgi için yukarıdaki yardım bağlantısına tıklayın. diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf index 953aa3b878f..28f1a20d2e4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -355,7 +355,7 @@ Please select a valid folder path. None - + 没有 @@ -714,7 +714,7 @@ Error: Issued By - 颁发者 + 发布者 @@ -1607,7 +1607,7 @@ Error: Requires: - 要求: + 要求: @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf index 272f1b2e49f..9387967e2b7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf @@ -1,4 +1,4 @@ - + @@ -1617,7 +1617,7 @@ Error: Type - 類型 + 型別 Column names for the string table @@ -1808,7 +1808,7 @@ CONSIDER: get this from CodeDom Type - 類型 + 型別 Columns for the "Details" view of the resource editor @@ -1830,7 +1830,6 @@ CONSIDER: get this from CodeDom {0} x {1} {0} x {1} Format string for showing a graphic's size - # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2366,7 +2365,7 @@ CONSIDER: get this from CodeDom Type - 類型 + 型別 @@ -2845,7 +2844,7 @@ app.config 檔的新值是 '{1}' days - 天數 + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.cs.xlf index ec65922d473..ce1b810cf17 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.de.xlf index 588c6249f3b..e3a8f29376a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.es.xlf index 9376a024fb4..d0978505ed5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.fr.xlf index 0092c58edac..1e56c5d6e19 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.it.xlf index 2dd57154f02..6280018e839 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pl.xlf index e671ee203c8..0f4e2675694 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pt-BR.xlf index 71fb221cb35..88ae7f11380 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.ru.xlf index 9878db1c549..5057b9951c1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.tr.xlf index e54f9c008be..bd9dc0610f9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.zh-Hans.xlf index e79e6368f9e..166ebab67b2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/MyExtensibilityRes.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.cs.xlf index 3c501581e95..653bb1767e4 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.de.xlf index 584143c8116..2b8aaa54d29 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.es.xlf index f6125e7269a..ad86a70442e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.fr.xlf index 4703e91b134..d1965a41440 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.it.xlf index e1289648175..8967301e759 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ko.xlf index 8ef523f70e7..4e90e7072ad 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pl.xlf index 325a2575411..d8f945b7ea0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pt-BR.xlf index 52699071a4d..1ed6f1401a3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ru.xlf index 7c3bf7b2e09..d11ed3b461c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.tr.xlf index fbd3fadfd4c..d844a6fe77f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.zh-Hant.xlf index 57b2b4cfaee..6c90c96523d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/WCF.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf index 51cb1772b68..5599384663b 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf @@ -1,4 +1,4 @@ - + @@ -44,7 +44,7 @@ Show completion list after a character is _deleted - Zobrazovat seznam dokončení po _odstranění znaku + _Zobrazit seznam dokončení po odstranění znaku @@ -84,7 +84,7 @@ Analyze and suggest fixes for unused values - Analyzovat a navrhovat opravy pro nepoužité hodnoty + Analyzovat a navrhnout opravy pro nepoužité hodnoty diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf index 36398c92032..36eb30c673b 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf index 6bec7285ca8..1eb0d63c2b7 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ _Show completion list after a character is typed - _Mostrar la lista de finalización después de escribir un carácter + _Mostrar lista de finalización después de escribir un carácter diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf index 47ee2a2ddd1..9fb8b2a29e3 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf index 4df3cad4e61..e17dd84ba04 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf @@ -1,4 +1,4 @@ - + @@ -84,7 +84,7 @@ Analyze and suggest fixes for unused values - Analizza e suggerisci correzioni per valori inutilizzati + Analizar y sugerir correcciones para valores no utilizados diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf index e199a658eff..af1fb564a49 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf index d1e98b2a038..0ed48eba23a 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf index 2cc9825f37c..4d74493a966 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf index 05e4c974d61..1c2950bcdf3 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf index 8988b4a51e0..19e9dd6a5eb 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf index 1a1c14ae7fb..462d836ef26 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf @@ -44,7 +44,7 @@ Show completion list after a character is _deleted - 删除字符后显示完成列表 + 删除字符后显示完成列表(_D) diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf index 6fa74c80d13..830e7edfa37 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf index 88082b432ae..b84141f2e2f 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf index 02f16fcd192..cbdf294922d 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf @@ -1,10 +1,10 @@ - + 64-bit F# Interactive - 64-Bit-F# Interactive + 64-Bit-Version von F# Interactive @@ -24,7 +24,7 @@ Misc - Sonstiges + Verschiedenes diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf index 725e86521e8..5d803f1d2c3 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf index 98821a22a45..8f7a8e902b2 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf @@ -1,4 +1,4 @@ - + @@ -34,7 +34,7 @@ Prevents referenced assemblies from being locked by the F# Interactive process. - Empêche le blocage des assemblys référencés par le processus interactif F#. + Empêche le blocage des assemblys référencés par le processus de F# Interactive. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf index 3ab00cc2b5c..aff5f3ba58d 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf index 86a7626559a..5d27d8c4844 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf @@ -1,10 +1,10 @@ - + 64-bit F# Interactive - 64 ビット F# Interactive + 64 ビット F# インタラクティブ @@ -14,7 +14,7 @@ F# Interactive options - F# Interactive オプション + F# インタラクティブ オプション @@ -44,12 +44,12 @@ Enable debugging of F# scripts (may impact script performance, requires reset of F# Interactive) - F# スクリプトのデバッグを有効にする (スクリプトのパフォーマンスに影響を与える可能性があります。F# Interactive のリセットが必要です) + F# スクリプトのデバッグを有効にする (スクリプトのパフォーマンスに影響を与える可能性があります。F# インタラクティブのリセットが必要です) Debugging - デバッグ + デバッグ中 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf index 09b61356b77..8899fcea757 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf @@ -1,30 +1,30 @@ - + 64-bit F# Interactive - 64-bit F# Interactive + 64비트 F# 대화형 If set to true, and the current machine is 64-bit, then run F# Interactive as a 64-bit process. (Otherwise, F# Interactive is a 32-bit process.) - true로 설정하는 경우 현재 컴퓨터가 64비트이면 F# Interactive를 64비트 프로세스로 실행하고, 그렇지 않으면 F# Interactive가 32비트 프로세스로 실행됩니다. + true로 설정하는 경우 현재 컴퓨터가 64비트이면 F# 대화형을 64비트 프로세스로 실행하고, 그렇지 않으면 F# 대화형이 32비트 프로세스로 실행됩니다. F# Interactive options - F# Interactive 옵션 + F# 대화형 옵션 Additional command line arguments passed to the F# Interactive executable by Visual Studio. (optimization and debug flags are ignored if script debugging is enabled) - Visual Studio에서 F# Interactive 실행 파일로 전달되는 추가 명령줄 인수입니다. 스크립트 디버깅을 사용하도록 설정한 경우 최적화 및 디버그 플래그는 무시됩니다. + Visual Studio에서 F# 대화형 실행 파일로 전달되는 추가 명령줄 인수입니다. 스크립트 디버깅을 사용하도록 설정한 경우 최적화 및 디버그 플래그는 무시됩니다. Misc - 기타 + Misc @@ -34,7 +34,7 @@ Prevents referenced assemblies from being locked by the F# Interactive process. - 참조된 어셈블리가 F# Interactive 프로세스에 의해 잠기지 않도록 합니다. + 참조된 어셈블리가 F# 대화형 프로세스에 의해 잠기지 않도록 합니다. @@ -44,7 +44,7 @@ Enable debugging of F# scripts (may impact script performance, requires reset of F# Interactive) - F# 스크립트 디버깅 사용(스크립트 성능에 영향을 주고, F# Interactive를 다시 설정해야 할 수 있음) + F# 스크립트 디버깅 사용(스크립트 성능에 영향을 주고, F# 대화형을 다시 설정해야 할 수 있음) diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf index be021424fa1..13bb02d1077 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf @@ -1,4 +1,4 @@ - + @@ -19,12 +19,12 @@ Additional command line arguments passed to the F# Interactive executable by Visual Studio. (optimization and debug flags are ignored if script debugging is enabled) - Argumenty wiersza polecenia przekazywane do pliku wykonywalnego programu F# Interactive przez program Visual Studio. (Flagi optymalizacji i debugowania są ignorowane, jeśli włączone jest debugowanie skryptów). + Argumenty wiersza polecenia przekazywane do pliku wykonywalnego narzędzia F# Interactive przez program Visual Studio. (Flagi optymalizacji i debugowania są ignorowane, jeśli włączone jest debugowanie skryptów). Misc - Różne + Misc @@ -44,7 +44,7 @@ Enable debugging of F# scripts (may impact script performance, requires reset of F# Interactive) - Włącz debugowanie skryptów w języku F# (może to mieć wpływ na wydajność skryptów, wymaga zresetowania programu F# Interactive) + Włącz debugowanie skryptów w języku F# (może to mieć wpływ na wydajność skryptów, wymaga zresetowania narzędzia F# Interactive) diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf index 7ff727dbdc0..ecd2fdbc048 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf @@ -1,4 +1,4 @@ - + @@ -49,7 +49,7 @@ Debugging - Depuração + Depurando diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf index a4acb579585..5dc37680162 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf index ef22f880df4..dba13164d2d 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf @@ -1,4 +1,4 @@ - + @@ -9,12 +9,12 @@ If set to true, and the current machine is 64-bit, then run F# Interactive as a 64-bit process. (Otherwise, F# Interactive is a 32-bit process.) - True olarak ayarlanırsa ve geçerli makine 64 bit ise F# Interactive'i 64 bit işlem olarak çalıştırın. (Aksi takdirde F# Interactive 32 bit işlemdir.) + True olarak ayarlanırsa ve geçerli makine 64 bit ise F# Etkileşimli'yi 64 bit işlem olarak çalıştırın. (Aksi takdirde F# Etkileşimli 32 bit işlemdir.) F# Interactive options - F# Interactive seçenekleri + F# Etkileşimli seçenekleri @@ -24,7 +24,7 @@ Misc - Çeşitli + Misc diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf index 9ee4a212ea2..060f54a8ba3 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf @@ -1,4 +1,4 @@ - + @@ -14,12 +14,12 @@ F# Interactive options - F# 交互选项 + F# 交互窗口选项 Additional command line arguments passed to the F# Interactive executable by Visual Studio. (optimization and debug flags are ignored if script debugging is enabled) - 其他命令行参数传递到 Visual Studio 执行的 F# 交互可执行文件。(若已启动脚本调试,则忽略优化和调试标志) + 其他命令行参数传递到 Visual Studio 执行的 F# 交互窗口可执行文件。(若已启动脚本调试,则忽略优化和调试标志) @@ -34,7 +34,7 @@ Prevents referenced assemblies from being locked by the F# Interactive process. - 防止被引用的程序集被 F# 交互式进程锁定。 + 防止被引用的程序集被 F# 交互窗口进程锁定。 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf index f0739077400..3b60c892d47 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf @@ -9,12 +9,12 @@ If set to true, and the current machine is 64-bit, then run F# Interactive as a 64-bit process. (Otherwise, F# Interactive is a 32-bit process.) - 如果設為 true,並且目前電腦為 64 位元,則 F# Interactive 會當做 64 位元處理序來執行 (反之,F# Interactive 則為 32 位元處理序)。 + 如果設為 true,並且目前電腦為 64 位元,則 F# 互動會當做 64 位元處理序來執行 (反之,F# 互動則為 32 位元處理序)。 F# Interactive options - F# Interactive 選項 + F# 互動選項 @@ -44,7 +44,7 @@ Enable debugging of F# scripts (may impact script performance, requires reset of F# Interactive) - 啟用 F# 指令碼偵錯 (可能會影響指令碼效能,必須重設 F# Interactive) + 啟用 F# 指令碼偵錯 (可能會影響指令碼效能,必須重設 F# 互動) diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf index b79b747fad9..c86727adb89 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf index c241350805a..32c7c963308 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf @@ -1,10 +1,10 @@ - + Cannot create window F# Interactive ToolWindow - Das Fenster für F# Interactive ToolWindow kann nicht erstellt werden. + Das F# Interactive-Toolfenster kann nicht erstellt werden. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf index 8fafdfe73df..6f70641c13c 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf index 14025011c11..f3644c81583 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf index 5f2b1b679c9..aca7dcb66cc 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf index 6c377da9027..23f522980dc 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf @@ -34,7 +34,7 @@ Could not find fsi.exe, the F# Interactive executable.\nThis file does not exist:\n\n{0}\n - F# Interactive 実行可能ファイルである fsi.exe が見つかりませんでした。\nこのファイルは存在しません:\n\n{0}\n + F# インタラクティブ実行可能ファイルである fsi.exe が見つかりませんでした。\nこのファイルは存在しません:\n\n{0}\n @@ -44,7 +44,7 @@ The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings? - 現在の F# Interactive セッションは、デバッグのために構成されていません。最適にご利用いただくには、F# Interactive 設定でデバッグを有効にし、セッションをリセットしてください。\n\n現在の設定でデバッグを試みますか? + 現在の F# インタラクティブ セッションは、デバッグのために構成されていません。最適にご利用いただくには、F# インタラクティブ設定でデバッグを有効にし、セッションをリセットしてください。\n\n現在の設定でデバッグを試みますか? diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf index de1927894ce..ad357da1d98 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf @@ -1,10 +1,10 @@ - + Cannot create window F# Interactive ToolWindow - F# Interactive ToolWindow 창을 만들 수 없습니다. + F# 대화형 ToolWindow 창을 만들 수 없습니다. @@ -29,7 +29,7 @@ F# Interactive - F# Interactive + F# 대화형 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf index 29a46076755..a0e55d73b01 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf @@ -1,4 +1,4 @@ - + @@ -44,7 +44,7 @@ The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings? - Bieżąca sesja programu F# Interactive nie jest skonfigurowana do debugowania. Aby uzyskać najlepszy efekt, włącz debugowanie w ustawieniach programu F# Interactive, a następnie zresetuj sesję.\n\nPodjąć próbę debugowania z bieżącymi ustawieniami? + Bieżąca sesja narzędzia F# Interactive nie jest skonfigurowana do debugowania. Aby uzyskać najlepszy efekt, włącz debugowanie w ustawieniach narzędzia F# Interactive, a następnie zresetuj sesję.\n\nPodjąć próbę debugowania z bieżącymi ustawieniami? diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf index e09d486218a..2006daaf86a 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf @@ -1,10 +1,10 @@ - + Cannot create window F# Interactive ToolWindow - Não é possível criar a Janela interativa F# ToolWindow + Não é possível criar a Janela F# Interativo ToolWindow diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf index c0b711f3b86..5bb16785316 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf index 41ee78b8713..785809a6d7c 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf @@ -1,4 +1,4 @@ - + @@ -29,7 +29,7 @@ F# Interactive - F# Interactive + F# Etkileşimli @@ -44,7 +44,7 @@ The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings? - Geçerli F# Interactive oturumu hata ayıklama için yapılandırılmamış. En iyi deneyim için, F# Interactive ayarlarında hata ayıklamayı etkinleştirin ve ardından oturumu sıfırlayın.\n\nGeçerli ayarlarla hata ayıklama denensin mi? + Geçerli F# Etkileşimli oturumu hata ayıklama için yapılandırılmamış. En iyi deneyim için, F# Etkileşimli ayarlarında hata ayıklamayı etkinleştirin ve ardından oturumu sıfırlayın.\n\nGeçerli ayarlarla hata ayıklama denensin mi? diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf index 2340318ee6c..9bc022caba2 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf @@ -4,7 +4,7 @@ Cannot create window F# Interactive ToolWindow - 无法创建窗口 F# 交互 ToolWindow + 无法创建“F# 交互窗口”工具窗口 @@ -34,7 +34,7 @@ Could not find fsi.exe, the F# Interactive executable.\nThis file does not exist:\n\n{0}\n - 未能找到 F# 交互可执行文件 fsi.exe。\n此文件不存在:\n\n{0}\n + 未能找到 F# 交互窗口可执行文件 fsi.exe。\n此文件不存在:\n\n{0}\n diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf index 1fff22f1701..b891d6630c1 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf @@ -4,7 +4,7 @@ Cannot create window F# Interactive ToolWindow - 無法建立視窗 F# Interactive 工具視窗 + 無法建立視窗 F# 互動工具視窗 @@ -44,7 +44,7 @@ The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings? - 目前的 F# Interactive 工作階段並未設定偵錯功能。最佳做法是啟用 F# Interactive 設定中的偵錯設定,然後重設此工作階段。\n\n要嘗試使用目前的設定進行偵錯嗎? + 目前的 F# 互動工作階段並未設定偵錯功能。最佳做法是啟用 F# 互動設定中的偵錯設定,然後重設此工作階段。\n\n要嘗試使用目前的設定進行偵錯嗎? diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.cs.xlf index 94409a3ba83..05471435c84 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.cs.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.de.xlf index 6d23fd5f296..dba7119a85e 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.de.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.es.xlf index 5dac8007e72..d81c9d111fe 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.es.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.fr.xlf index 13eee90d1bb..131836a088a 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.fr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.it.xlf index 3663e52ff36..827a3f071a7 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.it.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ja.xlf index e72e126b1fd..4fede981d4c 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ja.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ko.xlf index 2cf2374c950..18358f87a30 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ko.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pl.xlf index 5c93445d21f..c7fa3150e06 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pl.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pt-BR.xlf index 6eafbec312d..d3efcae6cbd 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.pt-BR.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ru.xlf index 82128f9ce6f..7dff862c42b 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.tr.xlf index 0a0e2372fc3..1b88583f604 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.tr.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hans.xlf index 6a485bd6d2c..1db4c02f255 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hans.xlf @@ -1,4 +1,4 @@ - + diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hant.xlf index 68641900a27..792559d932c 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VSPackage.zh-Hant.xlf @@ -1,4 +1,4 @@ - + From dada2c1d849f68ad6612b54350cbaec7039c4033 Mon Sep 17 00:00:00 2001 From: dotnet bot Date: Thu, 1 Nov 2018 16:58:17 -0700 Subject: [PATCH 38/48] Remove fsiPackage.fs (#5838) (#5847) --- vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 1 - vsintegration/src/FSharp.VS.FSI/fsiPackage.fs | 4 ---- 2 files changed, 5 deletions(-) delete mode 100644 vsintegration/src/FSharp.VS.FSI/fsiPackage.fs diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 27f3999ea02..17e98f5e557 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -37,7 +37,6 @@ - true Microsoft.VisualStudio.FSharp.Interactive.SRProperties diff --git a/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs b/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs deleted file mode 100644 index 1f36d5b7d81..00000000000 --- a/vsintegration/src/FSharp.VS.FSI/fsiPackage.fs +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Interactive - From 2bf3a16c25f9cb8e31c60b71b9c0f82909dc2ba5 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 2 Nov 2018 13:16:31 -0700 Subject: [PATCH 39/48] Merge dev16.0-future to dev16.0 (#5861) * Update for dev 16.0 * Finish targeting `net472` for future dev16 work. (#5719) * don't set `$(TargetFramework)` on non-SDK projects * HostedCompilerServer and PEVerify should explicitly be `net472` * don't copy System.ValueTuple.dll for tests because it's not deployed any more * add net472 support where System.ValueTuple can come from mscorlib * force target framework 4.6 on Linux/Mono --- .../Swix/Microsoft.FSharp.Compiler/Files.swr | 1 - src/FSharpSource.targets | 4 ++- .../FSharp.Compiler.Private.fsproj | 14 +++++----- .../FSharp.Compiler.Server.Shared.fsproj | 1 - src/fsharp/Fsc-proto/Fsc-proto.fsproj | 6 +++-- src/fsharp/MSBuildReferenceResolver.fs | 26 ++++++++++++++++--- src/fsharp/fsi/Fsi.fsproj | 1 - src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj | 1 - src/utils/reshapedmsbuild.fs | 23 +++++++++++++--- .../FSharp.Compiler.UnitTests.fsproj | 4 --- .../FSharp.Core.UnitTests.fsproj | 6 ++--- tests/fsharp/FSharp.Tests.FSharpSuite.fsproj | 7 +++-- tests/fsharp/core/.gitignore | 2 +- tests/fsharp/test-framework.fs | 2 +- tests/fsharp/tests.fs | 5 ---- .../Tuples/ValueTupleAliasConstructor.il.bsl | 15 ++++------- tests/fsharpqa/Source/run.pl | 4 +-- .../HostedCompilerServer.fsproj | 7 +---- .../testenv/src/PEVerify/PEVerify.csproj | 2 +- tests/service/FscTests.fs | 2 +- vsintegration/Directory.Build.props | 4 +-- vsintegration/Templates.Directory.Build.props | 4 +-- .../FSharp.LanguageService.fsproj | 1 - .../FSharp.PropertiesPages.vbproj | 4 +-- .../PropertyPages/ApplicationPropPage.vb | 1 - .../BuildEventCommandLineDialogService.vb | 8 +++--- .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 1 - .../GetTypesVSUnitTests.fsproj | 1 - .../tests/Salsa/VisualFSharp.Salsa.fsproj | 1 - .../UnitTests/VisualFSharp.UnitTests.fsproj | 1 - 30 files changed, 83 insertions(+), 76 deletions(-) diff --git a/setup/Swix/Microsoft.FSharp.Compiler/Files.swr b/setup/Swix/Microsoft.FSharp.Compiler/Files.swr index e546ffe0b30..8ad21ab8994 100644 --- a/setup/Swix/Microsoft.FSharp.Compiler/Files.swr +++ b/setup/Swix/Microsoft.FSharp.Compiler/Files.swr @@ -32,7 +32,6 @@ folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp" file source="$(BinariesFolder)\net40\bin\Microsoft.Portable.FSharp.Targets" file source="$(BinariesFolder)\net40\bin\System.Collections.Immutable.dll" file source="$(BinariesFolder)\net40\bin\System.Reflection.Metadata.dll" - file source="$(BinariesFolder)\net40\bin\System.ValueTuple.dll" file source="$(BinariesFolder)\net40\bin\Microsoft.FSharp.NetSdk.props" file source="$(BinariesFolder)\net40\bin\Microsoft.FSharp.NetSdk.targets" file source="$(BinariesFolder)\net40\bin\Microsoft.FSharp.Overrides.NetSdk.targets" diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 1d513b81e87..0dde638a9ad 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -56,7 +56,9 @@ - v4.6 + + v4.7.2 + v4.6 diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index 0c72713522c..c857433f469 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -29,7 +29,7 @@ - + @@ -673,17 +673,19 @@ - ..\..\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\portable-net45+win8\System.Reflection.Metadata.dll + ..\..\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\netstandard2.0\System.Reflection.Metadata.dll + ..\..\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\portable-net45+win8\System.Reflection.Metadata.dll - ..\..\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\netstandard1.0\System.Collections.Immutable.dll - - - ..\..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll + ..\..\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\netstandard2.0\System.Collections.Immutable.dll + ..\..\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\netstandard1.0\System.Collections.Immutable.dll ..\..\..\packages\System.IO.Compression.$(SystemIoCompressionPackageVersion)\lib\net46\System.IO.Compression.dll + + ..\..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll + diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index 91eadb4875e..86242b9e857 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -13,7 +13,6 @@ {d5870cf0-ed51-4cbc-b3d7-6f56da84ac06} Library FSharp.Compiler.Server.Shared - v4.6 diff --git a/src/fsharp/Fsc-proto/Fsc-proto.fsproj b/src/fsharp/Fsc-proto/Fsc-proto.fsproj index 5cccf4f17a2..93249bbae73 100644 --- a/src/fsharp/Fsc-proto/Fsc-proto.fsproj +++ b/src/fsharp/Fsc-proto/Fsc-proto.fsproj @@ -461,10 +461,12 @@ - $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\portable-net45+win8\System.Reflection.Metadata.dll + $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\netstandard2.0\System.Reflection.Metadata.dll + $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\portable-net45+win8\System.Reflection.Metadata.dll - $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll + $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\netstandard2.0\System.Collections.Immutable.dll + $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll $(FSharpSourcesRoot)\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll diff --git a/src/fsharp/MSBuildReferenceResolver.fs b/src/fsharp/MSBuildReferenceResolver.fs index 804c6b74088..9e4ea6644f6 100644 --- a/src/fsharp/MSBuildReferenceResolver.fs +++ b/src/fsharp/MSBuildReferenceResolver.fs @@ -74,11 +74,23 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver //let private Net452 = "v4.5.2" // not available in Dev15 MSBuild version #if MSBUILD_AT_LEAST_14 - [] + [] let private Net46 = "v4.6" - [] + [] let private Net461 = "v4.6.1" + + [] + let private Net462 = "v4.6.2" + + [] + let private Net47 = "v4.7" + + [] + let private Net471 = "v4.7.1" + + [] + let private Net472 = "v4.7.2" #endif /// Get the path to the .NET Framework implementation assemblies by using ToolLocationHelper.GetPathToDotNetFramework. @@ -97,6 +109,10 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver //| Net452 -> Some TargetDotNetFrameworkVersion.Version452 // not available in Dev15 MSBuild version | Net46 -> Some TargetDotNetFrameworkVersion.Version46 | Net461 -> Some TargetDotNetFrameworkVersion.Version461 + | Net462 -> Some TargetDotNetFrameworkVersion.Version462 + | Net47 -> Some TargetDotNetFrameworkVersion.Version47 + | Net471 -> Some TargetDotNetFrameworkVersion.Version471 + | Net472 -> Some TargetDotNetFrameworkVersion.Version472 #endif | _ -> assert false; None match v with @@ -122,7 +138,11 @@ module internal Microsoft.FSharp.Compiler.MSBuildReferenceResolver let HighestInstalledNetFrameworkVersion() = try #if MSBUILD_AT_LEAST_14 - if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version461)) <> null then Net461 + if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version472)) <> null then Net472 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version471)) <> null then Net471 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version47)) <> null then Net47 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version462)) <> null then Net462 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version461)) <> null then Net461 elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version46)) <> null then Net46 // 4.5.2 enumeration is not available in Dev15 MSBuild version //elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version452)) <> null then Net452 diff --git a/src/fsharp/fsi/Fsi.fsproj b/src/fsharp/fsi/Fsi.fsproj index ad16d0c0017..1878b46cab7 100644 --- a/src/fsharp/fsi/Fsi.fsproj +++ b/src/fsharp/fsi/Fsi.fsproj @@ -26,7 +26,6 @@ true $(OtherFlags) --warnon:1182 fsi.res - v4.6 diff --git a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj index 894178d18bd..2aa1320e0af 100644 --- a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj +++ b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj @@ -21,7 +21,6 @@ true $(OtherFlags) --warnon:1182 ..\fsi\fsi.res - v4.6 diff --git a/src/utils/reshapedmsbuild.fs b/src/utils/reshapedmsbuild.fs index 925b904e3e2..5ea6ed22f53 100644 --- a/src/utils/reshapedmsbuild.fs +++ b/src/utils/reshapedmsbuild.fs @@ -72,7 +72,8 @@ module internal MsBuildAdapters = open Microsoft.FSharp.Core.ReflectionAdapters /// - /// Used to specify the targeted version of the .NET Framework for some methods of ToolLocationHelper. + /// Used to specify the targeted version of the .NET Framework for some methods of ToolLocationHelper. This is meant to mimic + /// the official version here: https://source.dot.net/#q=TargetDotNetFrameworkVersion. /// type public TargetDotNetFrameworkVersion = | Version11 = 0 @@ -85,7 +86,11 @@ module internal MsBuildAdapters = | Version46 = 7 | Version461 = 8 | Version452 = 9 - | VersionLatest = 8 //TargetDotNetFrameworkVersion.Version461 + | Version462 = 10 + | Version47 = 11 + | Version471 = 12 + | Version472 = 13 + | VersionLatest = 10 //TargetDotNetFrameworkVersion.Version462 /// /// Used to specify the targeted bitness of the .NET Framework for some methods of ToolLocationHelper @@ -114,7 +119,11 @@ module internal ToolLocationHelper = let dotNetFrameworkVersion451 = Version(4, 5, 1) let dotNetFrameworkVersion452 = Version(4, 5, 2) let dotNetFrameworkVersion46 = Version(4, 6) - let dotNetFrameworkVersion461 = Version(4, 6, 1) + let dotNetFrameworkVersion461 = Version(4, 6, 1) + let dotNetFrameworkVersion462 = Version(4, 6, 2) + let dotNetFrameworkVersion47 = Version(4, 7) + let dotNetFrameworkVersion471 = Version(4, 7, 1) + let dotNetFrameworkVersion472 = Version(4, 7, 2) // visual studio versions. let visualStudioVersion100 = new Version(10, 0); @@ -206,6 +215,10 @@ module internal ToolLocationHelper = | TargetDotNetFrameworkVersion.Version452 -> dotNetFrameworkVersion452 | TargetDotNetFrameworkVersion.Version46 -> dotNetFrameworkVersion46 | TargetDotNetFrameworkVersion.Version461 -> dotNetFrameworkVersion461 + | TargetDotNetFrameworkVersion.Version462 -> dotNetFrameworkVersion462 + | TargetDotNetFrameworkVersion.Version47 -> dotNetFrameworkVersion47 + | TargetDotNetFrameworkVersion.Version471 -> dotNetFrameworkVersion471 + | TargetDotNetFrameworkVersion.Version472 -> dotNetFrameworkVersion472 | _ -> raise (getArgumentException version) let complusInstallRoot = Environment.GetEnvironmentVariable("COMPLUS_INSTALLROOT") @@ -745,6 +758,10 @@ module internal ToolLocationHelper = CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion452 visualStudioVersion150 // v4.5.2 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion46 visualStudioVersion140 // v4.6 CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion461 visualStudioVersion150 // v4.6.1 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion462 visualStudioVersion150 // v4.6.2 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion47 visualStudioVersion150 // v4.7 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion471 visualStudioVersion150 // v4.7.1 + CreateDotNetFrameworkSpecForV4 dotNetFrameworkVersion472 visualStudioVersion150 // v4.7.2 |] array.ToDictionary(fun spec -> spec.Version) diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index 8681cd2e058..659399a5a5a 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -43,10 +43,6 @@ - - ..\..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll - ..\..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 343c272c362..b65b63fec2c 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -51,10 +51,8 @@ True $(FsCheckLibDir)\net452\FsCheck.dll - - ..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - ..\..\packages\System.ValueTuple.4.3.0\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll - True + + ..\..\packages\System.ValueTuple.4.3.0\lib\portable-net40+sl4+win8+wp8\System.ValueTuple.dll diff --git a/tests/fsharp/FSharp.Tests.FSharpSuite.fsproj b/tests/fsharp/FSharp.Tests.FSharpSuite.fsproj index cdc40181188..d07fbd7b02d 100644 --- a/tests/fsharp/FSharp.Tests.FSharpSuite.fsproj +++ b/tests/fsharp/FSharp.Tests.FSharpSuite.fsproj @@ -47,16 +47,15 @@ - $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll + $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutablePackageVersion)\lib\netstandard2.0\System.Collections.Immutable.dll True - $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\portable-net45+win8\System.Reflection.Metadata.dll - $(FSharpSourcesRoot)\..\packages\System.Collections.Immutable.$(SystemCollectionsImmutableVersion)\lib\netstandard1.0\System.Collections.Immutable.dll + $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.$(SystemReflectionMetadataPackageVersion)\lib\netstandard2.0\System.Reflection.Metadata.dll True - $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard1.1\System.Reflection.Metadata.dll + $(FSharpSourcesRoot)\..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll True diff --git a/tests/fsharp/core/.gitignore b/tests/fsharp/core/.gitignore index 49d72838fd2..03d68f68b49 100644 --- a/tests/fsharp/core/.gitignore +++ b/tests/fsharp/core/.gitignore @@ -25,7 +25,7 @@ printing/z.output.test.*.txt printing/z.raw.output.test.*.txt printing/z.output.test.*.diff -quotes/cslib.dll +cslib*.dll parsing/crlf.dll parsing/crlf.pdb diff --git a/tests/fsharp/test-framework.fs b/tests/fsharp/test-framework.fs index aeb90af5ae8..5f9ea58a25b 100644 --- a/tests/fsharp/test-framework.fs +++ b/tests/fsharp/test-framework.fs @@ -162,7 +162,7 @@ let config configurationName envVars = let CSC = requireFile (packagesDir ++ "Microsoft.Net.Compilers.2.7.0" ++ "tools" ++ "csc.exe") let ILDASM = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.ILDAsm.2.0.3") ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "ildasm.exe") let coreclrdll = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.Runtime.CoreCLR.2.0.3") ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "coreclr.dll") - let PEVERIFY = requireFile (SCRIPT_ROOT ++ ".." ++ "fsharpqa" ++ "testenv" ++ "src" ++ "PEVerify" ++ "bin" ++ configurationName ++ "net46" ++ "PEVerify.exe") + let PEVERIFY = requireFile (SCRIPT_ROOT ++ ".." ++ "fsharpqa" ++ "testenv" ++ "src" ++ "PEVerify" ++ "bin" ++ configurationName ++ "net472" ++ "PEVerify.exe") let FSI_FOR_SCRIPTS = match envVars |> Map.tryFind "_fsiexe" with | Some fsiexe when (not (String.IsNullOrWhiteSpace fsiexe)) -> requireFile (SCRIPT_ROOT ++ ".." ++ ".." ++ (fsiexe.Trim([| '\"' |]))) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 8e108d04db3..813113f98f0 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -450,8 +450,6 @@ module CoreTests = fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] - copy_y cfg (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") - peverify cfg "lib.dll" csc cfg """/nologo /target:library /r:"%s" /r:lib.dll /out:lib2.dll /langversion:7.2""" cfg.FSCOREDLLPATH ["lib2.cs"] @@ -760,8 +758,6 @@ module CoreTests = fsc cfg "%s -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"] - copy_y cfg (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") - peverify cfg "test.exe" begin @@ -1899,7 +1895,6 @@ module TypecheckTests = let ``sigs pos27`` () = let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos27.exe" cfg.fsc_flags ["pos27.fs"] - copy_y cfg (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") peverify cfg "pos27.exe" [] diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl index 768deb722a1..31e868dd65f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl @@ -15,11 +15,6 @@ .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: .ver 4:5:0:0 } -.assembly extern System.ValueTuple -{ - .publickeytoken = (CC 7B 13 FF CD 2D DD 51 ) // .{...-.Q - .ver 4:0:1:0 -} .assembly ValueTupleAliasConstructor { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, @@ -34,20 +29,20 @@ } .mresource public FSharpSignatureData.ValueTupleAliasConstructor { - // Offset: 0x00000000 Length: 0x000001EA + // Offset: 0x00000000 Length: 0x000001E8 } .mresource public FSharpOptimizationData.ValueTupleAliasConstructor { // Offset: 0x000001F0 Length: 0x00000061 } .module ValueTupleAliasConstructor.exe -// MVID: {5B9C53DD-A8CF-BB34-A745-0383DD539C5B} +// MVID: {5BB658A2-A8CF-BB34-A745-0383A258B65B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01B00000 +// Image base: 0x01650000 // =============== CLASS MEMBERS DECLARATION =================== @@ -74,8 +69,8 @@ .line 3,3 : 9,22 'c:\\kevinransom\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\ValueTupleAliasConstructor.fs' IL_0000: ldc.i4.2 IL_0001: ldc.i4.2 - IL_0002: newobj instance void valuetype [System.ValueTuple]System.ValueTuple`2::.ctor(!0, - !1) + IL_0002: newobj instance void valuetype [mscorlib]System.ValueTuple`2::.ctor(!0, + !1) IL_0007: pop IL_0008: ret } // end of method $ValueTupleAliasConstructor::main@ diff --git a/tests/fsharpqa/Source/run.pl b/tests/fsharpqa/Source/run.pl index c999def6387..6555341a967 100644 --- a/tests/fsharpqa/Source/run.pl +++ b/tests/fsharpqa/Source/run.pl @@ -265,12 +265,12 @@ my $PEVERIFY = $ENV{PEVERIFY}; unless(defined($PEVERIFY)) { my $scriptPath = dirname(__FILE__); - $PEVERIFY = "$scriptPath\\..\\testenv\\src\\PEVerify\\bin\\Release\\net46\\PEVerify.exe"; + $PEVERIFY = "$scriptPath\\..\\testenv\\src\\PEVerify\\bin\\Release\\net472\\PEVerify.exe"; if (-e $PEVERIFY) { $ENV{PEVERIFY} = $PEVERIFY; } else { - $ENV{PEVERIFY} = "$scriptPath\\..\\testenv\\src\\PEVerify\\bin\\Debug\\net46\\PEVerify.exe"; + $ENV{PEVERIFY} = "$scriptPath\\..\\testenv\\src\\PEVerify\\bin\\Debug\\net472\\PEVerify.exe"; } } diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj index 089e75d0f3c..b85a25edd7f 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj @@ -12,7 +12,7 @@ Exe HostedCompilerServer HostedCompilerServer - v4.6 + v4.7.2 true ..\..\bin true @@ -49,11 +49,6 @@ {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} FSharp.Compiler.Private - - $(FSharpSourcesRoot)\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll - $(FSharpSourcesRoot)\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll - true - diff --git a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj index 3af2b4d23db..1d1327a0440 100644 --- a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj +++ b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj @@ -2,7 +2,7 @@ Exe - net46 + net472 diff --git a/tests/service/FscTests.fs b/tests/service/FscTests.fs index 82914dbdbae..57cc47083e7 100644 --- a/tests/service/FscTests.fs +++ b/tests/service/FscTests.fs @@ -48,7 +48,7 @@ type PEVerifier () = Some ("pedump", "--verify all") else let peverifyPath configuration = - Path.Combine(__SOURCE_DIRECTORY__, "..", "fsharpqa", "testenv", "src", "PEVerify", "bin", configuration, "net46", "PEVerify.exe") + Path.Combine(__SOURCE_DIRECTORY__, "..", "fsharpqa", "testenv", "src", "PEVerify", "bin", configuration, "net472", "PEVerify.exe") let peverify = if File.Exists(peverifyPath "Debug") then peverifyPath "Debug" else peverifyPath "Release" diff --git a/vsintegration/Directory.Build.props b/vsintegration/Directory.Build.props index 5a7b0782ce1..b3ecbe6d9d9 100644 --- a/vsintegration/Directory.Build.props +++ b/vsintegration/Directory.Build.props @@ -3,8 +3,8 @@ - net46 - v4.6 + net472 + v4.7.2 true diff --git a/vsintegration/Templates.Directory.Build.props b/vsintegration/Templates.Directory.Build.props index 9be1daa15b8..c9d39a043eb 100644 --- a/vsintegration/Templates.Directory.Build.props +++ b/vsintegration/Templates.Directory.Build.props @@ -3,8 +3,8 @@ - net46 - v4.6 + net472 + v4.7.2 true true false diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index f9d3f2150bf..e260839964a 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -3,7 +3,6 @@ - net46 Library true false diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj index 136f0b001df..937bbb5c5f5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj @@ -24,9 +24,7 @@ false 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 40026;42105;42107;42353 - v4.6 - - + v4.7.2 true false false diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb index 692619c912b..f74645515a5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/ApplicationPropPage.vb @@ -14,7 +14,6 @@ Imports Microsoft.VisualStudio.Editors Imports OLE = Microsoft.VisualStudio.OLE.Interop Imports Shell = Microsoft.VisualStudio.Shell -Imports Interop = Microsoft.VisualStudio.OLE.Interop Imports Microsoft.VisualStudio.Editors.PropertyPages Imports System.Runtime.InteropServices Imports System.ComponentModel diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb index ab27816df1d..21aaa80fdb5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/PropertyPages/BuildEventCommandLineDialogService.vb @@ -10,8 +10,6 @@ Imports System.Diagnostics Imports System.Runtime.CompilerServices Imports System.Runtime.InteropServices -Imports Interop = Microsoft.VisualStudio.Editors.Interop - Namespace Microsoft.VisualStudio.Editors.PropertyPages '-------------------------------------------------------------------------- @@ -21,7 +19,7 @@ Namespace Microsoft.VisualStudio.Editors.PropertyPages '-------------------------------------------------------------------------- _ Friend NotInheritable Class BuildEventCommandLineDialogService - Implements Interop.IVsBuildEventCommandLineDialogService + Implements Microsoft.VisualStudio.Editors.Interop.IVsBuildEventCommandLineDialogService Private m_serviceProvider As IServiceProvider @@ -29,8 +27,8 @@ Namespace Microsoft.VisualStudio.Editors.PropertyPages m_serviceProvider = sp End Sub - Function EditCommandLine(ByVal WindowText As String, ByVal HelpID As String, ByVal OriginalCommandLine As String, ByVal MacroProvider As Interop.IVsBuildEventMacroProvider, ByRef Result As String) As Integer _ - Implements Interop.IVsBuildEventCommandLineDialogService.EditCommandLine + Function EditCommandLine(ByVal WindowText As String, ByVal HelpID As String, ByVal OriginalCommandLine As String, ByVal MacroProvider As Microsoft.VisualStudio.Editors.Interop.IVsBuildEventMacroProvider, ByRef Result As String) As Integer _ + Implements Microsoft.VisualStudio.Editors.Interop.IVsBuildEventCommandLineDialogService.EditCommandLine Dim frm As New BuildEventCommandLineDialog Dim i As Integer diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 17e98f5e557..c83ec2ec89e 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -3,7 +3,6 @@ - net46 Library true false diff --git a/vsintegration/tests/GetTypesVSUnitTests/GetTypesVSUnitTests.fsproj b/vsintegration/tests/GetTypesVSUnitTests/GetTypesVSUnitTests.fsproj index 926e170e43d..3f58e648e49 100644 --- a/vsintegration/tests/GetTypesVSUnitTests/GetTypesVSUnitTests.fsproj +++ b/vsintegration/tests/GetTypesVSUnitTests/GetTypesVSUnitTests.fsproj @@ -3,7 +3,6 @@ - net46 Library true true diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index 6552af44642..19ae38d28a0 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -3,7 +3,6 @@ - net46 Library $(NoWarn);45;47;52;58;75 true diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 14b5987751f..ea8b5992d1f 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -3,7 +3,6 @@ - net46 Library $(NoWarn);58;75 NO_PROJECTCRACKER;$(DefineConstants) From b6db6d43d6a8b632e9ad0918ce5b175a9da31f7a Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 2 Nov 2018 13:17:22 -0700 Subject: [PATCH 40/48] consume roslyn d16p2 packages (#5862) --- RoslynPackageVersion.txt | 2 +- .../src/FSharp.Editor/Completion/CompletionProvider.fs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/RoslynPackageVersion.txt b/RoslynPackageVersion.txt index a8fc43bed08..0aca85accc6 100644 --- a/RoslynPackageVersion.txt +++ b/RoslynPackageVersion.txt @@ -1 +1 @@ -2.11.0-beta1-63418-03-8b75c84d +2.11.0-beta1-63431-08 diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs index fec42d030f7..82690b25487 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs @@ -52,7 +52,7 @@ type internal FSharpCompletionProvider |> List.filter (fun (keyword, _) -> not (PrettyNaming.IsOperatorName keyword)) |> List.sortBy (fun (keyword, _) -> keyword) |> List.mapi (fun n (keyword, description) -> - CommonCompletionItem.Create(keyword, CompletionItemRules.Default, Nullable Glyph.Keyword, sortText = sprintf "%06d" (1000000 + n)) + CommonCompletionItem.Create(keyword, null, CompletionItemRules.Default, Nullable Glyph.Keyword, sortText = sprintf "%06d" (1000000 + n)) .AddProperty("description", description) .AddProperty(IsKeywordPropName, "")) @@ -154,7 +154,7 @@ type internal FSharpCompletionProvider | _, idents -> Array.last idents let completionItem = - CommonCompletionItem.Create(name, glyph = Nullable glyph, rules = getRules intellisenseOptions.ShowAfterCharIsTyped, filterText = filterText) + CommonCompletionItem.Create(name, null, glyph = Nullable glyph, rules = getRules intellisenseOptions.ShowAfterCharIsTyped, filterText = filterText) .AddProperty(FullNamePropName, declarationItem.FullName) let completionItem = From 1e76cb971f4c8df8dd1278cc1d2f40f2269399d6 Mon Sep 17 00:00:00 2001 From: Jakub Majocha Date: Tue, 6 Nov 2018 05:08:57 +0100 Subject: [PATCH 41/48] fix options regression (#5863) --- .../FSharp.Editor/Options/SettingsPersistence.fs | 4 ++-- .../src/FSharp.Editor/Options/UIHelpers.fs | 16 +++------------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs index cec979e1656..cc985a00585 100644 --- a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs +++ b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs @@ -48,12 +48,12 @@ type SettingsStore(serviceProvider: IServiceProvider) = settingsManager.SetValueAsync(settings.GetType() |> storageKey, JsonConvert.SerializeObject settings, false) |> Async.AwaitTask |> Async.StartImmediate - member __.Register defaultSettings = + member __.Register (defaultSettings : 'options) = defaultSettings |> updateFromStore |> write let subset = defaultSettings.GetType() |> storageKey |> settingsManager.GetSubset PropertyChangedAsyncEventHandler ( fun _ _ -> - read() |> updateFromStore |> write + (read() :'options) |> updateFromStore |> write System.Threading.Tasks.Task.CompletedTask ) |> subset.add_SettingChangedAsync \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Options/UIHelpers.fs b/vsintegration/src/FSharp.Editor/Options/UIHelpers.fs index 8ed209c80e1..1a7c8584133 100644 --- a/vsintegration/src/FSharp.Editor/Options/UIHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Options/UIHelpers.fs @@ -10,7 +10,7 @@ open Microsoft.VisualStudio.ComponentModelHost module internal OptionsUIHelpers = [] - type AbstractOptionPage<'t>() as this = + type AbstractOptionPage<'options>() as this = inherit UIElementDialogPage() let view = lazy this.CreateView() @@ -26,20 +26,10 @@ module internal OptionsUIHelpers = override this.Child = upcast view.Value override this.SaveSettingsToStorage() = - this.GetResult() |> optionService.Value.Write + downcast view.Value.DataContext |> optionService.Value.Write<'options> override this.LoadSettingsFromStorage() = - optionService.Value.Read() |> this.SetViewModel - - //Override this method when using immutable settings type - member __.SetViewModel(settings: 't) = - // in case settings are a CLIMutable record - view.Value.DataContext <- null - view.Value.DataContext <- settings - - //Override this method when using immutable settings type - member __.GetResult() : 't = - downcast view.Value.DataContext + view.Value.DataContext <- optionService.Value.Read<'options>() //data binding helpers let radioButtonCoverter = From 14169daaa9b935a9cbce24086f46a17078e89939 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 5 Nov 2018 20:39:10 -0800 Subject: [PATCH 42/48] Use Framework valuetuple rather than netstandard1.0 one (#5867) --- .../ConsoleProject/Template/ConsoleApplication.fsproj | 2 +- .../ProjectTemplates/LibraryProject/Template/Library.fsproj | 2 +- .../ProjectTemplates/TutorialProject/Template/Tutorial.fsproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj index 2a102babc81..362d1964a66 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -47,7 +47,7 @@ True - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll True diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj index e8601a827d6..a9a75d23d78 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -43,7 +43,7 @@ True - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll True diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj index 02498d6e1d1..0d0abe089cd 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -50,7 +50,7 @@ True - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll True From 017fb40b752836eb19cfe9a17d2f789b9b95bc16 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Mon, 5 Nov 2018 23:41:25 -0800 Subject: [PATCH 43/48] merge --- .../Microsoft.VisualStudio.Editors.Designer.resx | 6 ------ .../Microsoft.VisualStudio.Editors.Designer.cs.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.de.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.en.xlf | 10 ---------- .../Microsoft.VisualStudio.Editors.Designer.es.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.fr.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.it.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.ja.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.ko.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.pl.xlf | 13 ++----------- ...icrosoft.VisualStudio.Editors.Designer.pt-BR.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.ru.xlf | 13 ++----------- .../Microsoft.VisualStudio.Editors.Designer.tr.xlf | 13 ++----------- ...rosoft.VisualStudio.Editors.Designer.zh-Hans.xlf | 13 ++----------- ...rosoft.VisualStudio.Editors.Designer.zh-Hant.xlf | 13 ++----------- 15 files changed, 26 insertions(+), 159 deletions(-) diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/Microsoft.VisualStudio.Editors.Designer.resx b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/Microsoft.VisualStudio.Editors.Designer.resx index b6c6a8091ed..697e650fcbb 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/Microsoft.VisualStudio.Editors.Designer.resx +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/Microsoft.VisualStudio.Editors.Designer.resx @@ -1696,15 +1696,9 @@ CONSIDER: get this from CodeDom Application - - Application (Web) - User - - User (Web) - Name diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf index da0a132c14e..ab9abd57bf9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.cs.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Aplikace - - Application (Web) - Aplikace (web) - - User Uživatel - - User (Web) - Uživatel (web) - - Name Název diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 8e3c01a1d57..c042c5dd65a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Anwendung - - Application (Web) - Anwendung (Web) - - User Benutzer - - User (Web) - Benutzer (Web) - - Name Name diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.en.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.en.xlf index 2b820cacf7e..8f158b4e155 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.en.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.en.xlf @@ -2344,21 +2344,11 @@ CONSIDER: get this from CodeDom Application - - Application (Web) - Application (Web) - - User User - - User (Web) - User (Web) - - Name Name diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf index 300e65a5405..3a0ae3c38e5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.es.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Aplicación - - Application (Web) - Aplicación (web) - - User Usuario - - User (Web) - Usuario (web) - - Name Nombre diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf index aa5728e6f96..588f1f2e23c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.fr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Application - - Application (Web) - Application (web) - - User Utilisateur - - User (Web) - Utilisateur (web) - - Name Nom  diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf index a580463b97b..ea9be117a47 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.it.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Applicazione - - Application (Web) - Applicazione (Web) - - User Utente - - User (Web) - Utente (Web) - - Name Nome diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf index e465fe5fae9..3c99c346714 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ja.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom アプリケーション - - Application (Web) - アプリケーション (Web) - - User ユーザー - - User (Web) - ユーザー (Web) - - Name 名前 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf index 245fef8a3b6..dd8dbaa95b5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ko.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom 응용 프로그램 - - Application (Web) - 응용 프로그램(웹) - - User 사용자 - - User (Web) - 사용자(웹) - - Name 이름 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf index f76be1ae69a..b317e8a727a 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pl.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Aplikacja - - Application (Web) - Aplikacja (sieć Web) - - User Użytkownik - - User (Web) - Użytkownik (sieć Web) - - Name Nazwa diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf index 112d552e161..8a9809a7edf 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.pt-BR.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Aplicativo - - Application (Web) - Aplicativo (Web) - - User Usuário - - User (Web) - Usuário (Web) - - Name Nome diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf index 0a3d32a55f4..3a81b127f71 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.ru.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Приложение - - Application (Web) - Приложение (веб) - - User Пользователь - - User (Web) - Пользователь (веб) - - Name Имя diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf index cddf8633f5f..2c5fd4566c7 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.tr.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom Uygulama - - Application (Web) - Uygulama (Web) - - User Kullanıcı - - User (Web) - Kullanıcı (Web) - - Name Ad diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf index 28f1a20d2e4..d6947890646 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hans.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom 应用程序 - - Application (Web) - 应用程序 (Web) - - User 用户 - - User (Web) - 用户 (Web) - - Name 名称 diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf index 9387967e2b7..95da5d0ce0d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.zh-Hant.xlf @@ -1828,8 +1828,9 @@ CONSIDER: get this from CodeDom {0} x {1} - {0} x {1} + {0} x {1} Format string for showing a graphic's size + # {0} = width (as an integer) # {1} = height (as an integer) #Example, for a bitmap of width=123, height = 456, the English version of this string would be "123x456" @@ -2343,21 +2344,11 @@ CONSIDER: get this from CodeDom 應用程式 - - Application (Web) - 應用程式 (Web) - - User 使用者 - - User (Web) - 使用者 (Web) - - Name 名稱 From 49375b50cf020aa771fbf96217381770d50f85eb Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 7 Nov 2018 12:50:39 -0800 Subject: [PATCH 44/48] CP: Use Framework valuetuple rather than netstandard1.0 one (#5872) * Use Framework valuetuple rather than netstandard1.0 one (#5867) * remove references from template --- build.cmd | 4 ++-- .../ConsoleProject/Template/ConsoleApplication.fsproj | 8 -------- .../ConsoleProject/Template/ConsoleApplication.vstemplate | 4 ++-- .../LibraryProject/Template/Library.fsproj | 8 -------- .../LibraryProject/Template/Library.vstemplate | 4 ++-- .../TutorialProject/Template/Tutorial.fsproj | 8 -------- .../TutorialProject/Template/Tutorial.vstemplate | 4 ++-- .../VisualFSharpTemplates/VisualFSharpTemplates.csproj | 2 +- 8 files changed, 9 insertions(+), 33 deletions(-) diff --git a/build.cmd b/build.cmd index dae4a3cafbf..9ae59374a90 100644 --- a/build.cmd +++ b/build.cmd @@ -611,8 +611,8 @@ if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" se :vsversionset if "%VisualStudioVersion%" == "" echo Error: Could not find an installation of Visual Studio && goto :failure -if exist "%VS160COMNTOOLS%\..\..\MSBuild\15.0\Bin\MSBuild.exe" ( - set _msbuildexe="%VS160COMNTOOLS%\..\..\MSBuild\15.0\Bin\MSBuild.exe" +if exist "%VS160COMNTOOLS%\..\..\MSBuild\Current\Bin\MSBuild.exe" ( + set _msbuildexe="%VS160COMNTOOLS%\..\..\MSBuild\Current\Bin\MSBuild.exe" goto :havemsbuild ) if exist "%VS150COMNTOOLS%\..\..\MSBuild\15.0\Bin\MSBuild.exe" ( diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj index 2a102babc81..19c297de5e2 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -42,14 +42,6 @@ - - ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll - True - - - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - True - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate index 5717c132c33..31989064070 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.vstemplate @@ -26,8 +26,8 @@ - - + + diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj index e8601a827d6..5878583967c 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -38,14 +38,6 @@ - - ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll - True - - - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - True - diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate index c74a2d18227..bd1ef57057b 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.vstemplate @@ -26,8 +26,8 @@ - - + + diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj index 02498d6e1d1..dd2eed1525f 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -45,14 +45,6 @@ - - ..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll - True - - - ..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - True - diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate index 76fd069d5f8..a7c9f403d3a 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.vstemplate @@ -24,8 +24,8 @@ - - + + diff --git a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj index 53ff7dae39c..461fb062bfc 100644 --- a/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj +++ b/vsintegration/Vsix/VisualFSharpTemplates/VisualFSharpTemplates.csproj @@ -6,7 +6,7 @@ VisualFSharpTemplate Library Microsoft\FSharpTemplates - false + true From f2de3ba6135173bf45259dd993a030536afb4c1d Mon Sep 17 00:00:00 2001 From: Will Smith Date: Wed, 7 Nov 2018 15:25:28 -0800 Subject: [PATCH 45/48] Optimizing string concatenations to use String.Concat overloads (#5570) * Optimize String.Concat calls * Small refactor * Added test * Another test * Fixing tests * using /noca * Fixing test * Fixing tests again * Minor adjustments from feedback * Quick fix * More tests * Updated baselines + more tests * Added better way to test IL directly in unit tests * Moved StringConcat.fs tests * Removed bad file * Using FSharpChecker directly * Added more tests * Comparing lines for tests * Better IL check output * Small cleanup * Fixed test --- src/fsharp/Optimizer.fs | 98 +- src/fsharp/TastOps.fs | 27 + src/fsharp/TastOps.fsi | 5 + .../FSharp.Compiler.UnitTests.fsproj | 4 +- tests/FSharp.Compiler.UnitTests/ILHelpers.fs | 117 +++ .../Language/StringConcat.fs | 845 ++++++++++++++++++ tests/fsharp/tests.fs | 2 +- 7 files changed, 1077 insertions(+), 21 deletions(-) create mode 100644 tests/FSharp.Compiler.UnitTests/ILHelpers.fs create mode 100644 tests/FSharp.Compiler.UnitTests/Language/StringConcat.fs diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 599392383d7..116911167eb 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1764,7 +1764,15 @@ let TryDetectQueryQuoteAndRun cenv (expr:Expr) = //printfn "Not eliminating because no Run found" None - +let IsSystemStringConcatOverload (methRef: ILMethodRef) = + methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" && + methRef.ReturnType.BasicQualifiedName = "System.String" && + methRef.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = "System.String") + +let IsSystemStringConcatArray (methRef: ILMethodRef) = + methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" && + methRef.ReturnType.BasicQualifiedName = "System.String" && + methRef.ArgTypes.Length = 1 && methRef.ArgTypes.Head.BasicQualifiedName = "System.String[]" //------------------------------------------------------------------------- // The traversal @@ -1824,7 +1832,6 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = assert ("unexpected reclink" = "") failwith "Unexpected reclink" - //------------------------------------------------------------------------- // Optimize/analyze an object expression //------------------------------------------------------------------------- @@ -1874,9 +1881,54 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = Info=UnknownValue} //------------------------------------------------------------------------- -// Optimize/analyze an application of an intrinsic operator to arguments +// Make and optimize String.Concat calls //------------------------------------------------------------------------- +and MakeOptimizedSystemStringConcatCall cenv env m args = + let rec optimizeArg e accArgs = + match e, accArgs with + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ when IsSystemStringConcatArray methRef -> + optimizeArgs args accArgs + + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, args, _), _ when IsSystemStringConcatOverload methRef -> + optimizeArgs args accArgs + + // Optimize string constants, e.g. "1" + "2" will turn into "12" + | Expr.Const(Const.String str1, _, _), Expr.Const(Const.String str2, _, _) :: accArgs -> + mkString cenv.g m (str1 + str2) :: accArgs + + | arg, _ -> arg :: accArgs + + and optimizeArgs args accArgs = + (args, accArgs) + ||> List.foldBack (fun arg accArgs -> optimizeArg arg accArgs) + + let args = optimizeArgs args [] + + let e = + match args with + | [ arg ] -> + arg + | [ arg1; arg2 ] -> + mkStaticCall_String_Concat2 cenv.g m arg1 arg2 + | [ arg1; arg2; arg3 ] -> + mkStaticCall_String_Concat3 cenv.g m arg1 arg2 arg3 + | [ arg1; arg2; arg3; arg4 ] -> + mkStaticCall_String_Concat4 cenv.g m arg1 arg2 arg3 arg4 + | args -> + let arg = mkArray (cenv.g.string_ty, args, m) + mkStaticCall_String_Concat_Array cenv.g m arg + + match e with + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsSystemStringConcatOverload methRef || IsSystemStringConcatArray methRef -> + OptimizeExprOpReductions cenv env (op, tyargs, args, m) + | _ -> + OptimizeExpr cenv env e + +//------------------------------------------------------------------------- +// Optimize/analyze an application of an intrinsic operator to arguments +//------------------------------------------------------------------------- + and OptimizeExprOp cenv env (op, tyargs, args, m) = // Special cases @@ -1940,22 +1992,30 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) = // if the types match up. | TOp.ILAsm([], [ty]), _, [a] when typeEquiv cenv.g (tyOfExpr cenv.g a) ty -> OptimizeExpr cenv env a - | _ -> - // Reductions - let args', arginfos = OptimizeExprsThenConsiderSplits cenv env args - let knownValue = - match op, arginfos with - | TOp.ValFieldGet (rf), [e1info] -> TryOptimizeRecordFieldGet cenv env (e1info, rf, tyargs, m) - | TOp.TupleFieldGet (tupInfo, n), [e1info] -> TryOptimizeTupleFieldGet cenv env (tupInfo, e1info, tyargs, n, m) - | TOp.UnionCaseFieldGet (cspec, n), [e1info] -> TryOptimizeUnionCaseGet cenv env (e1info, cspec, tyargs, n, m) - | _ -> None - match knownValue with - | Some valu -> - match TryOptimizeVal cenv env (false, valu, m) with - | Some res -> OptimizeExpr cenv env res (* discard e1 since guard ensures it has no effects *) - | None -> OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos valu - | None -> OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos UnknownValue + // Optimize calls when concatenating strings, e.g. "1" + "2" + "3" + "4" .. etc. + | TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] when IsSystemStringConcatArray methRef -> + MakeOptimizedSystemStringConcatCall cenv env m args + | TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, args when IsSystemStringConcatOverload methRef -> + MakeOptimizedSystemStringConcatCall cenv env m args + | _ -> + // Reductions + OptimizeExprOpReductions cenv env (op, tyargs, args, m) + +and OptimizeExprOpReductions cenv env (op, tyargs, args, m) = + let args', arginfos = OptimizeExprsThenConsiderSplits cenv env args + let knownValue = + match op, arginfos with + | TOp.ValFieldGet (rf), [e1info] -> TryOptimizeRecordFieldGet cenv env (e1info, rf, tyargs, m) + | TOp.TupleFieldGet (tupInfo, n), [e1info] -> TryOptimizeTupleFieldGet cenv env (tupInfo, e1info, tyargs, n, m) + | TOp.UnionCaseFieldGet (cspec, n), [e1info] -> TryOptimizeUnionCaseGet cenv env (e1info, cspec, tyargs, n, m) + | _ -> None + match knownValue with + | Some valu -> + match TryOptimizeVal cenv env (false, valu, m) with + | Some res -> OptimizeExpr cenv env res (* discard e1 since guard ensures it has no effects *) + | None -> OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos valu + | None -> OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos UnknownValue and OptimizeExprOpFallback cenv env (op, tyargs, args', m) arginfos valu = // The generic case - we may collect information, but the construction/projection doesn't disappear @@ -2682,7 +2742,7 @@ and TryInlineApplication cenv env finfo (tyargs: TType list, args: Expr list, m) // Inlining: beta reducing let expr' = MakeApplicationAndBetaReduce cenv.g (f2', f2ty, [tyargs], args', m) // Inlining: reoptimizing - Some (OptimizeExpr cenv {env with dontInline= Zset.add lambdaId env.dontInline} expr') + Some(OptimizeExpr cenv {env with dontInline= Zset.add lambdaId env.dontInline} expr') | _ -> None diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index dfebdb9bae0..c50593dd7a7 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -6366,6 +6366,18 @@ let mkIsInst ty e m = mkAsmExpr ([ isinst ], [ty], [e], [ ty ], m) let mspec_Type_GetTypeFromHandle (g: TcGlobals) = IL.mkILNonGenericStaticMethSpecInTy(g.ilg.typ_Type, "GetTypeFromHandle", [g.iltyp_RuntimeTypeHandle], g.ilg.typ_Type) let mspec_String_Length (g: TcGlobals) = mkILNonGenericInstanceMethSpecInTy (g.ilg.typ_String, "get_Length", [], g.ilg.typ_Int32) +let mspec_String_Concat2 (g: TcGlobals) = + mkILNonGenericStaticMethSpecInTy (g.ilg.typ_String, "Concat", [ g.ilg.typ_String; g.ilg.typ_String ], g.ilg.typ_String) + +let mspec_String_Concat3 (g: TcGlobals) = + mkILNonGenericStaticMethSpecInTy (g.ilg.typ_String, "Concat", [ g.ilg.typ_String; g.ilg.typ_String; g.ilg.typ_String ], g.ilg.typ_String) + +let mspec_String_Concat4 (g: TcGlobals) = + mkILNonGenericStaticMethSpecInTy (g.ilg.typ_String, "Concat", [ g.ilg.typ_String; g.ilg.typ_String; g.ilg.typ_String; g.ilg.typ_String ], g.ilg.typ_String) + +let mspec_String_Concat_Array (g: TcGlobals) = + mkILNonGenericStaticMethSpecInTy (g.ilg.typ_String, "Concat", [ mkILArr1DTy g.ilg.typ_String ], g.ilg.typ_String) + let fspec_Missing_Value (g: TcGlobals) = IL.mkILFieldSpecInTy(g.iltyp_Missing, "Value", g.iltyp_Missing) let mkInitializeArrayMethSpec (g: TcGlobals) = @@ -6587,6 +6599,21 @@ let mkGetStringLength g m e = /// ILCall(useCallvirt, isProtected, valu, newobj, valUseFlags, isProp, noTailCall, mref, actualTypeInst, actualMethInst, retTy) Expr.Op(TOp.ILCall(false, false, false, false, ValUseFlag.NormalValUse, true, false, mspec.MethodRef, [], [], [g.int32_ty]), [], [e], m) +let mkStaticCall_String_Concat2 g m arg1 arg2 = + let mspec = mspec_String_Concat2 g + Expr.Op(TOp.ILCall(false, false, false, false, ValUseFlag.NormalValUse, false, false, mspec.MethodRef, [], [], [g.string_ty]), [], [arg1; arg2], m) + +let mkStaticCall_String_Concat3 g m arg1 arg2 arg3 = + let mspec = mspec_String_Concat3 g + Expr.Op(TOp.ILCall(false, false, false, false, ValUseFlag.NormalValUse, false, false, mspec.MethodRef, [], [], [g.string_ty]), [], [arg1; arg2; arg3], m) + +let mkStaticCall_String_Concat4 g m arg1 arg2 arg3 arg4 = + let mspec = mspec_String_Concat4 g + Expr.Op(TOp.ILCall(false, false, false, false, ValUseFlag.NormalValUse, false, false, mspec.MethodRef, [], [], [g.string_ty]), [], [arg1; arg2; arg3; arg4], m) + +let mkStaticCall_String_Concat_Array g m arg = + let mspec = mspec_String_Concat_Array g + Expr.Op(TOp.ILCall(false, false, false, false, ValUseFlag.NormalValUse, false, false, mspec.MethodRef, [], [], [g.string_ty]), [], [arg], m) // Quotations can't contain any IL. // As a result, we aim to get rid of all IL generation in the typechecker and pattern match diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index 8856119d7be..0731970c195 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -1386,6 +1386,11 @@ val mkCallNewQuerySource : TcGlobals -> range -> TType -> TType -> Expr -> Expr val mkArray : TType * Exprs * range -> Expr +val mkStaticCall_String_Concat2 : TcGlobals -> range -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat3 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat4 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat_Array : TcGlobals -> range -> Expr -> Expr + //------------------------------------------------------------------------- // operations primarily associated with the optimization to fix // up loops to generate .NET code that does not include array bound checks diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index 06b8a4b422a..da3db8e565f 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -44,7 +44,7 @@ - ..\..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll + ..\..\..\packages\System.ValueTuple.$(SystemValueTuplePackageVersion)\lib\netstandard1.0\System.ValueTuple.dll @@ -54,6 +54,8 @@ + + diff --git a/tests/FSharp.Compiler.UnitTests/ILHelpers.fs b/tests/FSharp.Compiler.UnitTests/ILHelpers.fs new file mode 100644 index 00000000000..32c4e209d8b --- /dev/null +++ b/tests/FSharp.Compiler.UnitTests/ILHelpers.fs @@ -0,0 +1,117 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open System +open System.IO +open System.Diagnostics + +open NUnit.Framework + +open Microsoft.FSharp.Compiler.SourceCodeServices + +module ILChecker = + + let checker = FSharpChecker.Create() + + let private (++) a b = Path.Combine(a,b) + + let private getfullpath workDir path = + let rooted = + if Path.IsPathRooted(path) then path + else Path.Combine(workDir, path) + rooted |> Path.GetFullPath + + let private fileExists workDir path = + if path |> getfullpath workDir |> File.Exists then Some path else None + + let private requireFile nm = + if fileExists __SOURCE_DIRECTORY__ nm |> Option.isSome then nm else failwith (sprintf "couldn't find %s. Running 'build test' once might solve this issue" nm) + + let private exec exe args = + let startInfo = ProcessStartInfo(exe, String.concat " " args) + startInfo.RedirectStandardError <- true + startInfo.UseShellExecute <- false + use p = Process.Start(startInfo) + p.WaitForExit() + p.StandardError.ReadToEnd(), p.ExitCode + + /// Compile the source and check to see if the expected IL exists. + /// The first line of each expected IL string is found first. + let check source expectedIL = + let SCRIPT_ROOT = __SOURCE_DIRECTORY__ + let packagesDir = SCRIPT_ROOT ++ ".." ++ ".." ++ "packages" + let Is64BitOperatingSystem = sizeof = 8 + let architectureMoniker = if Is64BitOperatingSystem then "x64" else "x86" + let ildasmExe = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.ILDAsm.2.0.3") ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "ildasm.exe") + let coreclrDll = requireFile (packagesDir ++ ("runtime.win-" + architectureMoniker + ".Microsoft.NETCore.Runtime.CoreCLR.2.0.3") ++ "runtimes" ++ ("win-" + architectureMoniker) ++ "native" ++ "coreclr.dll") + + let tmp = Path.GetTempFileName() + let tmpFs = Path.ChangeExtension(tmp, ".fs") + let tmpDll = Path.ChangeExtension(tmp, ".dll") + let tmpIL = Path.ChangeExtension(tmp, ".il") + + let mutable errorMsgOpt = None + try + // ildasm requires coreclr.dll to run which has already been restored to the packages directory + File.Copy(coreclrDll, Path.GetDirectoryName(ildasmExe) ++ "coreclr.dll", overwrite=true) + + File.WriteAllText(tmpFs, source) + + let errors, exitCode = checker.Compile([| "fsc.exe"; "--optimize+"; "-o"; tmpDll; "-a"; tmpFs |]) |> Async.RunSynchronously + let errors = + String.concat "\n" (errors |> Array.map (fun x -> x.Message)) + + if exitCode = 0 then + exec ildasmExe [ sprintf "%s /out=%s" tmpDll tmpIL ] |> ignore + + let text = File.ReadAllText(tmpIL) + 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 -> + 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) + + expectedIL + |> 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 + 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)) + ) + + match errorMsgOpt with + | Some(msg) -> errorMsgOpt <- Some(msg + "\n\n\n==ENTIRE ACTUAL==\n" + textNoComments) + | _ -> () + else + errorMsgOpt <- Some(errors) + finally + try File.Delete(tmp) with | _ -> () + try File.Delete(tmpFs) with | _ -> () + try File.Delete(tmpDll) with | _ -> () + try File.Delete(tmpIL) with | _ -> () + + match errorMsgOpt with + | Some(errorMsg) -> + Assert.Fail(errorMsg) + | _ -> () + diff --git a/tests/FSharp.Compiler.UnitTests/Language/StringConcat.fs b/tests/FSharp.Compiler.UnitTests/Language/StringConcat.fs new file mode 100644 index 00000000000..fa18e7bb427 --- /dev/null +++ b/tests/FSharp.Compiler.UnitTests/Language/StringConcat.fs @@ -0,0 +1,845 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open System +open NUnit.Framework + +[] +module StringConcat = + + [] + let Optimizations () = + let baseSource = """ +module Test + +open System + +let arr = ResizeArray() + +let inline ss (x: int) = + arr.Add(x) + "_" + x.ToString() + "_" +""" + + let test1Source = """ +let test1 () = + ss 1 + ss 2 + ss 3 +""" + let test1IL = """.method public static string test1() cil managed + { + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0007: ldc.i4.1 + IL_0008: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_000d: ldstr "_" + IL_0012: ldloca.s V_0 + IL_0014: constrained. [mscorlib]System.Int32 + IL_001a: callvirt instance string [mscorlib]System.Object::ToString() + IL_001f: ldstr "_" + IL_0024: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0029: ldc.i4.2 + IL_002a: stloc.0 + IL_002b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0030: ldc.i4.2 + IL_0031: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0036: ldstr "_" + IL_003b: ldloca.s V_0 + IL_003d: constrained. [mscorlib]System.Int32 + IL_0043: callvirt instance string [mscorlib]System.Object::ToString() + IL_0048: ldstr "_" + IL_004d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0052: ldc.i4.3 + IL_0053: stloc.0 + IL_0054: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0059: ldc.i4.3 + IL_005a: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_005f: ldstr "_" + IL_0064: ldloca.s V_0 + IL_0066: constrained. [mscorlib]System.Int32 + IL_006c: callvirt instance string [mscorlib]System.Object::ToString() + IL_0071: ldstr "_" + IL_0076: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_007b: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0080: ret + }""" + + let test2Source = """ +let test2 () = + ss 1 + ss 2 + ss 3 + ss 4 +""" + let test2IL = """.method public static string test2() cil managed + { + + .maxstack 8 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0007: ldc.i4.1 + IL_0008: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_000d: ldstr "_" + IL_0012: ldloca.s V_0 + IL_0014: constrained. [mscorlib]System.Int32 + IL_001a: callvirt instance string [mscorlib]System.Object::ToString() + IL_001f: ldstr "_" + IL_0024: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0029: ldc.i4.2 + IL_002a: stloc.0 + IL_002b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0030: ldc.i4.2 + IL_0031: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0036: ldstr "_" + IL_003b: ldloca.s V_0 + IL_003d: constrained. [mscorlib]System.Int32 + IL_0043: callvirt instance string [mscorlib]System.Object::ToString() + IL_0048: ldstr "_" + IL_004d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0052: ldc.i4.3 + IL_0053: stloc.0 + IL_0054: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0059: ldc.i4.3 + IL_005a: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_005f: ldstr "_" + IL_0064: ldloca.s V_0 + IL_0066: constrained. [mscorlib]System.Int32 + IL_006c: callvirt instance string [mscorlib]System.Object::ToString() + IL_0071: ldstr "_" + IL_0076: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_007b: ldc.i4.4 + IL_007c: stloc.0 + IL_007d: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0082: ldc.i4.4 + IL_0083: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0088: ldstr "_" + IL_008d: ldloca.s V_0 + IL_008f: constrained. [mscorlib]System.Int32 + IL_0095: callvirt instance string [mscorlib]System.Object::ToString() + IL_009a: ldstr "_" + IL_009f: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00a4: call string [mscorlib]System.String::Concat(string, + string, + string, + string) + IL_00a9: ret + }""" + + let test3Source = """ +let test3 () = + ss 1 + ss 2 + ss 3 + ss 4 + ss 5 +""" + let test3IL = """.method public static string test3() cil managed + { + + .maxstack 8 + .locals init (int32 V_0) + IL_0000: ldc.i4.5 + IL_0001: newarr [mscorlib]System.String + IL_0006: dup + IL_0007: ldc.i4.0 + IL_0008: ldc.i4.1 + IL_0009: stloc.0 + IL_000a: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_000f: ldc.i4.1 + IL_0010: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0015: ldstr "_" + IL_001a: ldloca.s V_0 + IL_001c: constrained. [mscorlib]System.Int32 + IL_0022: callvirt instance string [mscorlib]System.Object::ToString() + IL_0027: ldstr "_" + IL_002c: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0031: stelem [mscorlib]System.String + IL_0036: dup + IL_0037: ldc.i4.1 + IL_0038: ldc.i4.2 + IL_0039: stloc.0 + IL_003a: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_003f: ldc.i4.2 + IL_0040: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0045: ldstr "_" + IL_004a: ldloca.s V_0 + IL_004c: constrained. [mscorlib]System.Int32 + IL_0052: callvirt instance string [mscorlib]System.Object::ToString() + IL_0057: ldstr "_" + IL_005c: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0061: stelem [mscorlib]System.String + IL_0066: dup + IL_0067: ldc.i4.2 + IL_0068: ldc.i4.3 + IL_0069: stloc.0 + IL_006a: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_006f: ldc.i4.3 + IL_0070: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0075: ldstr "_" + IL_007a: ldloca.s V_0 + IL_007c: constrained. [mscorlib]System.Int32 + IL_0082: callvirt instance string [mscorlib]System.Object::ToString() + IL_0087: ldstr "_" + IL_008c: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0091: stelem [mscorlib]System.String + IL_0096: dup + IL_0097: ldc.i4.3 + IL_0098: ldc.i4.4 + IL_0099: stloc.0 + IL_009a: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_009f: ldc.i4.4 + IL_00a0: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00a5: ldstr "_" + IL_00aa: ldloca.s V_0 + IL_00ac: constrained. [mscorlib]System.Int32 + IL_00b2: callvirt instance string [mscorlib]System.Object::ToString() + IL_00b7: ldstr "_" + IL_00bc: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00c1: stelem [mscorlib]System.String + IL_00c6: dup + IL_00c7: ldc.i4.4 + IL_00c8: ldc.i4.5 + IL_00c9: stloc.0 + IL_00ca: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_00cf: ldc.i4.5 + IL_00d0: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00d5: ldstr "_" + IL_00da: ldloca.s V_0 + IL_00dc: constrained. [mscorlib]System.Int32 + IL_00e2: callvirt instance string [mscorlib]System.Object::ToString() + IL_00e7: ldstr "_" + IL_00ec: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00f1: stelem [mscorlib]System.String + IL_00f6: call string [mscorlib]System.String::Concat(string[]) + IL_00fb: ret + }""" + + let test4Source = """ +let test4 () = + ss 5 + ss 6 + ss 7 + String.Concat(ss 8, ss 9) + ss 10 + "_50_" + "_60_" + String.Concat(ss 100, String.Concat(ss 101, ss 102), ss 103) + String.Concat([|"_104_";"_105_"|]) + ss 106 +""" + let test4IL = """.method public static string test4() cil managed + { + + .maxstack 8 + .locals init (int32 V_0) + IL_0000: ldc.i4.s 13 + IL_0002: newarr [mscorlib]System.String + IL_0007: dup + IL_0008: ldc.i4.0 + IL_0009: ldc.i4.5 + IL_000a: stloc.0 + IL_000b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0010: ldc.i4.5 + IL_0011: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0016: ldstr "_" + IL_001b: ldloca.s V_0 + IL_001d: constrained. [mscorlib]System.Int32 + IL_0023: callvirt instance string [mscorlib]System.Object::ToString() + IL_0028: ldstr "_" + IL_002d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0032: stelem [mscorlib]System.String + IL_0037: dup + IL_0038: ldc.i4.1 + IL_0039: ldc.i4.6 + IL_003a: stloc.0 + IL_003b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0040: ldc.i4.6 + IL_0041: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0046: ldstr "_" + IL_004b: ldloca.s V_0 + IL_004d: constrained. [mscorlib]System.Int32 + IL_0053: callvirt instance string [mscorlib]System.Object::ToString() + IL_0058: ldstr "_" + IL_005d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0062: stelem [mscorlib]System.String + IL_0067: dup + IL_0068: ldc.i4.2 + IL_0069: ldc.i4.7 + IL_006a: stloc.0 + IL_006b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0070: ldc.i4.7 + IL_0071: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0076: ldstr "_" + IL_007b: ldloca.s V_0 + IL_007d: constrained. [mscorlib]System.Int32 + IL_0083: callvirt instance string [mscorlib]System.Object::ToString() + IL_0088: ldstr "_" + IL_008d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0092: stelem [mscorlib]System.String + IL_0097: dup + IL_0098: ldc.i4.3 + IL_0099: ldc.i4.8 + IL_009a: stloc.0 + IL_009b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_00a0: ldc.i4.8 + IL_00a1: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00a6: ldstr "_" + IL_00ab: ldloca.s V_0 + IL_00ad: constrained. [mscorlib]System.Int32 + IL_00b3: callvirt instance string [mscorlib]System.Object::ToString() + IL_00b8: ldstr "_" + IL_00bd: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00c2: stelem [mscorlib]System.String + IL_00c7: dup + IL_00c8: ldc.i4.4 + IL_00c9: ldc.i4.s 9 + IL_00cb: stloc.0 + IL_00cc: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_00d1: ldc.i4.s 9 + IL_00d3: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00d8: ldstr "_" + IL_00dd: ldloca.s V_0 + IL_00df: constrained. [mscorlib]System.Int32 + IL_00e5: callvirt instance string [mscorlib]System.Object::ToString() + IL_00ea: ldstr "_" + IL_00ef: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00f4: stelem [mscorlib]System.String + IL_00f9: dup + IL_00fa: ldc.i4.5 + IL_00fb: ldc.i4.s 10 + IL_00fd: stloc.0 + IL_00fe: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0103: ldc.i4.s 10 + IL_0105: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_010a: ldstr "_" + IL_010f: ldloca.s V_0 + IL_0111: constrained. [mscorlib]System.Int32 + IL_0117: callvirt instance string [mscorlib]System.Object::ToString() + IL_011c: ldstr "_" + IL_0121: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0126: stelem [mscorlib]System.String + IL_012b: dup + IL_012c: ldc.i4.6 + IL_012d: ldstr "_50__60_" + IL_0132: stelem [mscorlib]System.String + IL_0137: dup + IL_0138: ldc.i4.7 + IL_0139: ldc.i4.s 100 + IL_013b: stloc.0 + IL_013c: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0141: ldc.i4.s 100 + IL_0143: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0148: ldstr "_" + IL_014d: ldloca.s V_0 + IL_014f: constrained. [mscorlib]System.Int32 + IL_0155: callvirt instance string [mscorlib]System.Object::ToString() + IL_015a: ldstr "_" + IL_015f: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0164: stelem [mscorlib]System.String + IL_0169: dup + IL_016a: ldc.i4.8 + IL_016b: ldc.i4.s 101 + IL_016d: stloc.0 + IL_016e: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0173: ldc.i4.s 101 + IL_0175: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_017a: ldstr "_" + IL_017f: ldloca.s V_0 + IL_0181: constrained. [mscorlib]System.Int32 + IL_0187: callvirt instance string [mscorlib]System.Object::ToString() + IL_018c: ldstr "_" + IL_0191: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0196: stelem [mscorlib]System.String + IL_019b: dup + IL_019c: ldc.i4.s 9 + IL_019e: ldc.i4.s 102 + IL_01a0: stloc.0 + IL_01a1: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_01a6: ldc.i4.s 102 + IL_01a8: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_01ad: ldstr "_" + IL_01b2: ldloca.s V_0 + IL_01b4: constrained. [mscorlib]System.Int32 + IL_01ba: callvirt instance string [mscorlib]System.Object::ToString() + IL_01bf: ldstr "_" + IL_01c4: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_01c9: stelem [mscorlib]System.String + IL_01ce: dup + IL_01cf: ldc.i4.s 10 + IL_01d1: ldc.i4.s 103 + IL_01d3: stloc.0 + IL_01d4: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_01d9: ldc.i4.s 103 + IL_01db: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_01e0: ldstr "_" + IL_01e5: ldloca.s V_0 + IL_01e7: constrained. [mscorlib]System.Int32 + IL_01ed: callvirt instance string [mscorlib]System.Object::ToString() + IL_01f2: ldstr "_" + IL_01f7: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_01fc: stelem [mscorlib]System.String + IL_0201: dup + IL_0202: ldc.i4.s 11 + IL_0204: ldstr "_104__105_" + IL_0209: stelem [mscorlib]System.String + IL_020e: dup + IL_020f: ldc.i4.s 12 + IL_0211: ldc.i4.s 106 + IL_0213: stloc.0 + IL_0214: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0219: ldc.i4.s 106 + IL_021b: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0220: ldstr "_" + IL_0225: ldloca.s V_0 + IL_0227: constrained. [mscorlib]System.Int32 + IL_022d: callvirt instance string [mscorlib]System.Object::ToString() + IL_0232: ldstr "_" + IL_0237: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_023c: stelem [mscorlib]System.String + IL_0241: call string [mscorlib]System.String::Concat(string[]) + IL_0246: ret + }""" + + let test5Source = """ +let test5 () = + ss 5 + ss 6 + ss 7 + String.Concat(ss 8, ss 9) + ss 10 + "_50_" + "_60_" + String.Concat(ss 100, (let x = String.Concat(ss 101, ss 102) in Console.WriteLine(x);x), ss 103) + String.Concat([|"_104_";"_105_"|]) + ss 106 +""" + let test5IL = """.method public static string test5() cil managed + { + + .maxstack 9 + .locals init (int32 V_0, + string V_1) + IL_0000: ldc.i4.s 12 + IL_0002: newarr [mscorlib]System.String + IL_0007: dup + IL_0008: ldc.i4.0 + IL_0009: ldc.i4.5 + IL_000a: stloc.0 + IL_000b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0010: ldc.i4.5 + IL_0011: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0016: ldstr "_" + IL_001b: ldloca.s V_0 + IL_001d: constrained. [mscorlib]System.Int32 + IL_0023: callvirt instance string [mscorlib]System.Object::ToString() + IL_0028: ldstr "_" + IL_002d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0032: stelem [mscorlib]System.String + IL_0037: dup + IL_0038: ldc.i4.1 + IL_0039: ldc.i4.6 + IL_003a: stloc.0 + IL_003b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0040: ldc.i4.6 + IL_0041: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0046: ldstr "_" + IL_004b: ldloca.s V_0 + IL_004d: constrained. [mscorlib]System.Int32 + IL_0053: callvirt instance string [mscorlib]System.Object::ToString() + IL_0058: ldstr "_" + IL_005d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0062: stelem [mscorlib]System.String + IL_0067: dup + IL_0068: ldc.i4.2 + IL_0069: ldc.i4.7 + IL_006a: stloc.0 + IL_006b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0070: ldc.i4.7 + IL_0071: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0076: ldstr "_" + IL_007b: ldloca.s V_0 + IL_007d: constrained. [mscorlib]System.Int32 + IL_0083: callvirt instance string [mscorlib]System.Object::ToString() + IL_0088: ldstr "_" + IL_008d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0092: stelem [mscorlib]System.String + IL_0097: dup + IL_0098: ldc.i4.3 + IL_0099: ldc.i4.8 + IL_009a: stloc.0 + IL_009b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_00a0: ldc.i4.8 + IL_00a1: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00a6: ldstr "_" + IL_00ab: ldloca.s V_0 + IL_00ad: constrained. [mscorlib]System.Int32 + IL_00b3: callvirt instance string [mscorlib]System.Object::ToString() + IL_00b8: ldstr "_" + IL_00bd: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00c2: stelem [mscorlib]System.String + IL_00c7: dup + IL_00c8: ldc.i4.4 + IL_00c9: ldc.i4.s 9 + IL_00cb: stloc.0 + IL_00cc: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_00d1: ldc.i4.s 9 + IL_00d3: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_00d8: ldstr "_" + IL_00dd: ldloca.s V_0 + IL_00df: constrained. [mscorlib]System.Int32 + IL_00e5: callvirt instance string [mscorlib]System.Object::ToString() + IL_00ea: ldstr "_" + IL_00ef: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00f4: stelem [mscorlib]System.String + IL_00f9: dup + IL_00fa: ldc.i4.5 + IL_00fb: ldc.i4.s 10 + IL_00fd: stloc.0 + IL_00fe: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0103: ldc.i4.s 10 + IL_0105: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_010a: ldstr "_" + IL_010f: ldloca.s V_0 + IL_0111: constrained. [mscorlib]System.Int32 + IL_0117: callvirt instance string [mscorlib]System.Object::ToString() + IL_011c: ldstr "_" + IL_0121: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0126: stelem [mscorlib]System.String + IL_012b: dup + IL_012c: ldc.i4.6 + IL_012d: ldstr "_50__60_" + IL_0132: stelem [mscorlib]System.String + IL_0137: dup + IL_0138: ldc.i4.7 + IL_0139: ldc.i4.s 100 + IL_013b: stloc.0 + IL_013c: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0141: ldc.i4.s 100 + IL_0143: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0148: ldstr "_" + IL_014d: ldloca.s V_0 + IL_014f: constrained. [mscorlib]System.Int32 + IL_0155: callvirt instance string [mscorlib]System.Object::ToString() + IL_015a: ldstr "_" + IL_015f: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0164: stelem [mscorlib]System.String + IL_0169: dup + IL_016a: ldc.i4.8 + IL_016b: ldc.i4.s 101 + IL_016d: stloc.0 + IL_016e: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0173: ldc.i4.s 101 + IL_0175: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_017a: ldstr "_" + IL_017f: ldloca.s V_0 + IL_0181: constrained. [mscorlib]System.Int32 + IL_0187: callvirt instance string [mscorlib]System.Object::ToString() + IL_018c: ldstr "_" + IL_0191: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0196: ldc.i4.s 102 + IL_0198: stloc.0 + IL_0199: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_019e: ldc.i4.s 102 + IL_01a0: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_01a5: ldstr "_" + IL_01aa: ldloca.s V_0 + IL_01ac: constrained. [mscorlib]System.Int32 + IL_01b2: callvirt instance string [mscorlib]System.Object::ToString() + IL_01b7: ldstr "_" + IL_01bc: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_01c1: call string [mscorlib]System.String::Concat(string, + string) + IL_01c6: stloc.1 + IL_01c7: ldloc.1 + IL_01c8: call void [mscorlib]System.Console::WriteLine(string) + IL_01cd: ldloc.1 + IL_01ce: stelem [mscorlib]System.String + IL_01d3: dup + IL_01d4: ldc.i4.s 9 + IL_01d6: ldc.i4.s 103 + IL_01d8: stloc.0 + IL_01d9: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_01de: ldc.i4.s 103 + IL_01e0: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_01e5: ldstr "_" + IL_01ea: ldloca.s V_0 + IL_01ec: constrained. [mscorlib]System.Int32 + IL_01f2: callvirt instance string [mscorlib]System.Object::ToString() + IL_01f7: ldstr "_" + IL_01fc: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0201: stelem [mscorlib]System.String + IL_0206: dup + IL_0207: ldc.i4.s 10 + IL_0209: ldstr "_104__105_" + IL_020e: stelem [mscorlib]System.String + IL_0213: dup + IL_0214: ldc.i4.s 11 + IL_0216: ldc.i4.s 106 + IL_0218: stloc.0 + IL_0219: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_021e: ldc.i4.s 106 + IL_0220: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0225: ldstr "_" + IL_022a: ldloca.s V_0 + IL_022c: constrained. [mscorlib]System.Int32 + IL_0232: callvirt instance string [mscorlib]System.Object::ToString() + IL_0237: ldstr "_" + IL_023c: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0241: stelem [mscorlib]System.String + IL_0246: call string [mscorlib]System.String::Concat(string[]) + IL_024b: ret + }""" + + let test6Source = """ +let inline inlineStringConcat str1 str2 = str1 + str2 + +let test6 () = + inlineStringConcat (inlineStringConcat (ss 1) (ss 2)) (ss 3) + ss 4 +""" + let test6IL = """.method public static string test6() cil managed + { + + .maxstack 8 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0007: ldc.i4.1 + IL_0008: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_000d: ldstr "_" + IL_0012: ldloca.s V_0 + IL_0014: constrained. [mscorlib]System.Int32 + IL_001a: callvirt instance string [mscorlib]System.Object::ToString() + IL_001f: ldstr "_" + IL_0024: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0029: ldc.i4.2 + IL_002a: stloc.0 + IL_002b: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0030: ldc.i4.2 + IL_0031: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0036: ldstr "_" + IL_003b: ldloca.s V_0 + IL_003d: constrained. [mscorlib]System.Int32 + IL_0043: callvirt instance string [mscorlib]System.Object::ToString() + IL_0048: ldstr "_" + IL_004d: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_0052: ldc.i4.3 + IL_0053: stloc.0 + IL_0054: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0059: ldc.i4.3 + IL_005a: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_005f: ldstr "_" + IL_0064: ldloca.s V_0 + IL_0066: constrained. [mscorlib]System.Int32 + IL_006c: callvirt instance string [mscorlib]System.Object::ToString() + IL_0071: ldstr "_" + IL_0076: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_007b: ldc.i4.4 + IL_007c: stloc.0 + IL_007d: call class [mscorlib]System.Collections.Generic.List`1 Test::get_arr() + IL_0082: ldc.i4.4 + IL_0083: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0088: ldstr "_" + IL_008d: ldloca.s V_0 + IL_008f: constrained. [mscorlib]System.Int32 + IL_0095: callvirt instance string [mscorlib]System.Object::ToString() + IL_009a: ldstr "_" + IL_009f: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_00a4: call string [mscorlib]System.String::Concat(string, + string, + string, + string) + IL_00a9: ret + }""" + + let test7Source = """ +let test7 () = + let x = 1 + x.ToString() + x.ToString() + x.ToString() +""" + let test7IL = """.method public static string test7() cil managed + { + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: constrained. [mscorlib]System.Int32 + IL_000a: callvirt instance string [mscorlib]System.Object::ToString() + IL_000f: ldloca.s V_0 + IL_0011: constrained. [mscorlib]System.Int32 + IL_0017: callvirt instance string [mscorlib]System.Object::ToString() + IL_001c: ldloca.s V_0 + IL_001e: constrained. [mscorlib]System.Int32 + IL_0024: callvirt instance string [mscorlib]System.Object::ToString() + IL_0029: call string [mscorlib]System.String::Concat(string, + string, + string) + IL_002e: ret + }""" + + let test8Source = """ +let test8 () = + let x = 1 + x.ToString() + x.ToString() + x.ToString() + x.ToString() +""" + let test8IL = """.method public static string test8() cil managed + { + + .maxstack 6 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: ldloca.s V_0 + IL_0004: constrained. [mscorlib]System.Int32 + IL_000a: callvirt instance string [mscorlib]System.Object::ToString() + IL_000f: ldloca.s V_0 + IL_0011: constrained. [mscorlib]System.Int32 + IL_0017: callvirt instance string [mscorlib]System.Object::ToString() + IL_001c: ldloca.s V_0 + IL_001e: constrained. [mscorlib]System.Int32 + IL_0024: callvirt instance string [mscorlib]System.Object::ToString() + IL_0029: ldloca.s V_0 + IL_002b: constrained. [mscorlib]System.Int32 + IL_0031: callvirt instance string [mscorlib]System.Object::ToString() + IL_0036: call string [mscorlib]System.String::Concat(string, + string, + string, + string) + IL_003b: ret + }""" + + let test9Source = """ +let test9 () = + let x = 1 + x.ToString() + x.ToString() + x.ToString() + x.ToString() + x.ToString() +""" + let test9IL = """.method public static string test9() cil managed + { + + .maxstack 6 + .locals init (int32 V_0) + IL_0000: ldc.i4.1 + IL_0001: stloc.0 + IL_0002: ldc.i4.5 + IL_0003: newarr [mscorlib]System.String + IL_0008: dup + IL_0009: ldc.i4.0 + IL_000a: ldloca.s V_0 + IL_000c: constrained. [mscorlib]System.Int32 + IL_0012: callvirt instance string [mscorlib]System.Object::ToString() + IL_0017: stelem [mscorlib]System.String + IL_001c: dup + IL_001d: ldc.i4.1 + IL_001e: ldloca.s V_0 + IL_0020: constrained. [mscorlib]System.Int32 + IL_0026: callvirt instance string [mscorlib]System.Object::ToString() + IL_002b: stelem [mscorlib]System.String + IL_0030: dup + IL_0031: ldc.i4.2 + IL_0032: ldloca.s V_0 + IL_0034: constrained. [mscorlib]System.Int32 + IL_003a: callvirt instance string [mscorlib]System.Object::ToString() + IL_003f: stelem [mscorlib]System.String + IL_0044: dup + IL_0045: ldc.i4.3 + IL_0046: ldloca.s V_0 + IL_0048: constrained. [mscorlib]System.Int32 + IL_004e: callvirt instance string [mscorlib]System.Object::ToString() + IL_0053: stelem [mscorlib]System.String + IL_0058: dup + IL_0059: ldc.i4.4 + IL_005a: ldloca.s V_0 + IL_005c: constrained. [mscorlib]System.Int32 + IL_0062: callvirt instance string [mscorlib]System.Object::ToString() + IL_0067: stelem [mscorlib]System.String + IL_006c: call string [mscorlib]System.String::Concat(string[]) + IL_0071: ret + }""" + + let sources = + [ + baseSource + test1Source + test2Source + test3Source + test4Source + test5Source + test6Source + test7Source + test8Source + test9Source + ] + let source = String.Join("", sources) + ILChecker.check source + [ + test1IL + test2IL + test3IL + test4IL + test5IL + test6IL + test7IL + test8IL + test9IL + ] diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 4dbb5242b59..c79abb4f791 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -1878,7 +1878,7 @@ module OptimizationTests = |> Seq.filter (fun line -> line.Contains(".locals init")) |> Seq.length - log "Ran ok - optimizations removed %d textual occurrences of optimizable identifiers from target IL" numElim + log "Ran ok - optimizations removed %d textual occurrences of optimizable identifiers from target IL" numElim [] let stats () = From 932c5a754e1fe65ae67c1b74dd5624e3088d3093 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 8 Nov 2018 13:15:09 -0800 Subject: [PATCH 46/48] buildfromsource resources --- .../FSharp.Compiler.Private/FSComp.fs | 32 ++++++++++++++++--- .../FSharp.Compiler.Private/FSComp.resx | 18 +++++++++++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs index 1be5487161c..b856cd72449 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.fs @@ -4375,18 +4375,36 @@ type internal SR private() = /// Cannot take the address of the value returned from the expression. Assign the returned value to a let-bound value before taking the address. /// (Originally from ..\FSComp.txt:1449) static member tastCantTakeAddressOfExpression() = (3237, GetStringFunc("tastCantTakeAddressOfExpression",",,,") ) - /// This type does not inherit Attribute, it will not work correctly with other .NET languages. + /// Cannot call the extension member as it requires the value to be mutable or a byref type due to the extending type being used as a byref. /// (Originally from ..\FSComp.txt:1450) + static member tcCannotCallExtensionMemberInrefToByref() = (3238, GetStringFunc("tcCannotCallExtensionMemberInrefToByref",",,,") ) + /// Byref types are not allowed to have optional type extensions. + /// (Originally from ..\FSComp.txt:1451) + static member tcByrefsMayNotHaveTypeExtensions() = (3239, GetStringFunc("tcByrefsMayNotHaveTypeExtensions",",,,") ) + /// Cannot call the byref extension method '%s. The first parameter requires the value to be mutable or a non-readonly byref type. + /// (Originally from ..\FSComp.txt:1452) + static member tcCannotCallExtensionMethodInrefToByref(a0 : System.String) = (3240, GetStringFunc("tcCannotCallExtensionMethodInrefToByref",",,,%s,,,") a0) + /// Cannot partially apply the extension method '%s' because the first parameter is a byref type. + /// (Originally from ..\FSComp.txt:1453) + static member tcCannotPartiallyApplyExtensionMethodForByref(a0 : System.String) = (3241, GetStringFunc("tcCannotPartiallyApplyExtensionMethodForByref",",,,%s,,,") a0) + /// This type does not inherit Attribute, it will not work correctly with other .NET languages. + /// (Originally from ..\FSComp.txt:1454) static member tcTypeDoesNotInheritAttribute() = (3242, GetStringFunc("tcTypeDoesNotInheritAttribute",",,,") ) /// Invalid anonymous record expression - /// (Originally from ..\FSComp.txt:1451) + /// (Originally from ..\FSComp.txt:1455) static member parsInvalidAnonRecdExpr() = (3243, GetStringFunc("parsInvalidAnonRecdExpr",",,,") ) /// Invalid anonymous record type - /// (Originally from ..\FSComp.txt:1452) + /// (Originally from ..\FSComp.txt:1456) static member parsInvalidAnonRecdType() = (3244, GetStringFunc("parsInvalidAnonRecdType",",,,") ) /// The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record - /// (Originally from ..\FSComp.txt:1453) + /// (Originally from ..\FSComp.txt:1457) static member tcCopyAndUpdateNeedsRecordType() = (3245, GetStringFunc("tcCopyAndUpdateNeedsRecordType",",,,") ) + /// The parameter '%s' has an invalid type '%s'. This is not permitted by the rules of Common IL. + /// (Originally from ..\FSComp.txt:1458) + static member chkInvalidFunctionParameterType(a0 : System.String, a1 : System.String) = (3300, GetStringFunc("chkInvalidFunctionParameterType",",,,%s,,,%s,,,") a0 a1) + /// The function or method has an invalid return type '%s'. This is not permitted by the rules of Common IL. + /// (Originally from ..\FSComp.txt:1459) + static member chkInvalidFunctionReturnType(a0 : System.String) = (3301, GetStringFunc("chkInvalidFunctionReturnType",",,,%s,,,") a0) /// Call this method once to validate that all known resources are valid; throws if not static member RunStartupValidation() = @@ -5810,8 +5828,14 @@ type internal SR private() = ignore(GetString("chkNoSpanLikeVariable")) ignore(GetString("chkNoSpanLikeValueFromExpression")) ignore(GetString("tastCantTakeAddressOfExpression")) + ignore(GetString("tcCannotCallExtensionMemberInrefToByref")) + ignore(GetString("tcByrefsMayNotHaveTypeExtensions")) + ignore(GetString("tcCannotCallExtensionMethodInrefToByref")) + ignore(GetString("tcCannotPartiallyApplyExtensionMethodForByref")) ignore(GetString("tcTypeDoesNotInheritAttribute")) ignore(GetString("parsInvalidAnonRecdExpr")) ignore(GetString("parsInvalidAnonRecdType")) ignore(GetString("tcCopyAndUpdateNeedsRecordType")) + ignore(GetString("chkInvalidFunctionParameterType")) + ignore(GetString("chkInvalidFunctionReturnType")) () diff --git a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx index a92406320af..0a54bcbfa78 100644 --- a/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx +++ b/src/buildfromsource/FSharp.Compiler.Private/FSComp.resx @@ -4378,6 +4378,18 @@ Cannot take the address of the value returned from the expression. Assign the returned value to a let-bound value before taking the address. + + Cannot call the extension member as it requires the value to be mutable or a byref type due to the extending type being used as a byref. + + + Byref types are not allowed to have optional type extensions. + + + Cannot call the byref extension method '{0}. The first parameter requires the value to be mutable or a non-readonly byref type. + + + Cannot partially apply the extension method '{0}' because the first parameter is a byref type. + This type does not inherit Attribute, it will not work correctly with other .NET languages. @@ -4390,4 +4402,10 @@ The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record + + The parameter '{0}' has an invalid type '{1}'. This is not permitted by the rules of Common IL. + + + The function or method has an invalid return type '{0}'. This is not permitted by the rules of Common IL. + \ No newline at end of file From 9d441c44df61c2a2764ef22fc987e599d95df63f Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 8 Nov 2018 16:27:21 -0800 Subject: [PATCH 47/48] don't copy System.ValueTuple.dll --- tests/fsharp/tests.fs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 60dab88c307..559107215fa 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -329,7 +329,6 @@ module CoreTests = fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"] - copy_y cfg (cfg.FSCBinPath ++ "System.ValueTuple.dll") ("." ++ "System.ValueTuple.dll") peverify cfg "lib.dll" fsc cfg "%s -r:lib.dll" cfg.fsc_flags ["test.fsx"] From e8acfc6ac513347f17df2573b65fc7eb92f2d8f7 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Mon, 12 Nov 2018 14:12:43 -0800 Subject: [PATCH 48/48] Dev16 fixes - cross project referencing (#5833) * Trying to fix dev16 with latest changes * Dev16 is partially working * Fixed several issues, should be working dev16 * Using try..with on computing options * Deleting unused code * Minor refactor * Check command line option cps stamps for recompute as a backup * Using ProjectId for project options * Updating binoutputpath for legacy projects to workspace project * Removing cps stamp as we don't need it * Updated roslyn package. Using IWorkspaceProjectContext.Id. * update to Roslyn d16p1 packages --- RoslynPackageVersion.txt | 2 +- .../Diagnostics/UnusedDeclarationsAnalyzer.fs | 5 +- .../Formatting/EditorFormattingService.fs | 4 +- .../Formatting/IndentationService.fs | 2 +- .../FSharpProjectOptionsManager.fs | 302 ++++++++++++++---- .../LanguageService/LanguageService.fs | 7 +- .../LegacyProjectWorkspaceMap.fs | 143 ++++----- .../LanguageService/ProjectSitesAndFiles.fs | 32 +- .../LanguageService/SymbolHelpers.fs | 4 +- .../Navigation/NavigateToSearchService.fs | 2 +- .../QuickInfo/QuickInfoProvider.fs | 2 +- .../FSharp.ProjectSystem.FSharp/Project.fs | 12 +- 12 files changed, 342 insertions(+), 175 deletions(-) diff --git a/RoslynPackageVersion.txt b/RoslynPackageVersion.txt index a8fc43bed08..3b0ec879ace 100644 --- a/RoslynPackageVersion.txt +++ b/RoslynPackageVersion.txt @@ -1 +1 @@ -2.11.0-beta1-63418-03-8b75c84d +2.11.0-beta1-63505-03 diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs index 355cb0606e6..a25cfab6f1e 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs @@ -106,8 +106,8 @@ type internal UnusedDeclarationsAnalyzer() = do Trace.TraceInformation("{0:n3} (start) UnusedDeclarationsAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds) do! Async.Sleep DefaultTuning.UnusedDeclarationsAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time - match getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document) with - | Some (_parsingOptions, projectOptions) -> + match! getProjectInfoManager(document).TryGetOptionsForEditingDocumentOrProject(document) with + | (_parsingOptions, projectOptions) -> let! sourceText = document.GetTextAsync() let checker = getChecker document let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) @@ -117,7 +117,6 @@ type internal UnusedDeclarationsAnalyzer() = unusedRanges |> Seq.map (fun m -> Diagnostic.Create(Descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath))) |> Seq.toImmutableArray - | None -> return ImmutableArray.Empty } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs index 5fff337649b..db6de9af2df 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs @@ -151,7 +151,7 @@ type internal FSharpEditorFormattingService let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document + let! projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, checkerProvider.Checker, indentStyle, projectOptionsOpt, position) return textChange |> Option.toList |> toIList } @@ -162,7 +162,7 @@ type internal FSharpEditorFormattingService let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) - match projectInfoManager.TryGetOptionsForEditingDocumentOrProject document with + match! projectInfoManager.TryGetOptionsForEditingDocumentOrProject document with | Some (parsingOptions, _) -> let! textChanges = FSharpEditorFormattingService.GetPasteChanges(document.Id, sourceText, document.FilePath, settings.Formatting, tabSize, parsingOptions, currentClipboard, span) return textChanges |> Option.defaultValue Seq.empty |> toIList diff --git a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs index 20acd00c462..29a731ab154 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs @@ -100,7 +100,7 @@ type internal FSharpIndentationService let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document + let! projectOptionsOpt = projectInfoManager.TryGetOptionsForEditingDocumentOrProject document let indent = FSharpIndentationService.GetDesiredIndentation(document.Id, sourceText, document.FilePath, lineNumber, tabSize, indentStyle, projectOptionsOpt) return match indent with diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs index 007ca3fbe18..3ac84824c80 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs @@ -3,6 +3,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System +open System.Collections.Generic open System.Collections.Concurrent open System.Collections.Immutable open System.ComponentModel.Composition @@ -17,6 +18,213 @@ open Microsoft.VisualStudio.FSharp.Editor.SiteProvider open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem open Microsoft.VisualStudio.Shell +open System.Threading +open Microsoft.VisualStudio.Shell.Interop +open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList + +[] +module private FSharpProjectOptionsHelpers = + + let mapCpsProjectToSite(workspace:VisualStudioWorkspaceImpl, project:Project, serviceProvider:System.IServiceProvider, cpsCommandLineOptions: IDictionary) = + let hier = workspace.GetHierarchy(project.Id) + let sourcePaths, referencePaths, options = + match cpsCommandLineOptions.TryGetValue(project.Id) with + | true, (sourcePaths, options) -> sourcePaths, [||], options + | false, _ -> [||], [||], [||] + { + new IProvideProjectSite with + member x.GetProjectSite() = + let fst (a, _, _) = a + let snd (_, b, _) = b + let mutable errorReporter = + let reporter = ProjectExternalErrorReporter(project.Id, "FS", serviceProvider) + Some(reporter:> IVsLanguageServiceBuildErrorReporter2) + + { + new IProjectSite with + member __.Description = project.Name + member __.CompilationSourceFiles = sourcePaths + member __.CompilationOptions = + Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)] + member __.CompilationReferences = referencePaths + member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None) + member __.ProjectFileName = project.FilePath + member __.AdviseProjectSiteChanges(_,_) = () + member __.AdviseProjectSiteCleaned(_,_) = () + member __.AdviseProjectSiteClosed(_,_) = () + member __.IsIncompleteTypeCheckEnvironment = false + member __.TargetFrameworkMoniker = "" + member __.ProjectGuid = project.Id.Id.ToString() + member __.LoadTime = System.DateTime.Now + member __.ProjectProvider = Some (x) + member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v + } + interface IVsHierarchy with + member __.SetSite(psp) = hier.SetSite(psp) + member __.GetSite(psp) = hier.GetSite(ref psp) + member __.QueryClose(pfCanClose)= hier.QueryClose(ref pfCanClose) + member __.Close() = hier.Close() + member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid) + member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid) + member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar) + member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var) + member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) = + hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested) + member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName) + member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid) + member __.Unused0() = hier.Unused0() + member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie) + member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie) + member __.Unused1() = hier.Unused1() + member __.Unused2() = hier.Unused2() + member __.Unused3() = hier.Unused3() + member __.Unused4() = hier.Unused4() + } + +[] +type private FSharpProjectOptionsMessage = + | TryGetOptions of Project * AsyncReplyChannel<(FSharpParsingOptions * FSharpProjectOptions) option> + | ClearOptions of ProjectId + +[] +type private FSharpProjectOptionsReactor (workspace: VisualStudioWorkspaceImpl, settings: EditorOptions, serviceProvider, checkerProvider: FSharpCheckerProvider) = + let cancellationTokenSource = new CancellationTokenSource() + + // Hack to store command line options from HandleCommandLineChanges + let cpsCommandLineOptions = new ConcurrentDictionary() + + let cache = Dictionary() + + let rec tryComputeOptions (project: Project) = + let projectId = project.Id + let projectStamp = project.Version + match cache.TryGetValue(projectId) with + | false, _ -> + + // Because this code can be kicked off before the hack, HandleCommandLineChanges, occurs, + // the command line options will not be available and we should bail if one of the project references does not give us anything. + let mutable canBail = false + + let referencedProjects = + if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then + project.ProjectReferences + |> Seq.choose (fun projectReference -> + let referenceProject = project.Solution.GetProject(projectReference.ProjectId) + let result = + tryComputeOptions referenceProject + |> Option.map (fun (_, projectOptions) -> + (referenceProject.OutputFilePath, projectOptions) + ) + + if result.IsNone then + canBail <- true + + result + ) + |> Seq.toArray + else + [||] + + if canBail then + None + else + + let hier = workspace.GetHierarchy(projectId) + let projectSite = + match hier with + // Legacy + | (:? IProvideProjectSite as provideSite) -> provideSite.GetProjectSite() + // Cps + | _ -> + let provideSite = mapCpsProjectToSite(workspace, project, serviceProvider, cpsCommandLineOptions) + provideSite.GetProjectSite() + + let otherOptions = + project.ProjectReferences + |> Seq.map (fun x -> "-r:" + project.Solution.GetProject(x.ProjectId).OutputFilePath) + |> Array.ofSeq + |> Array.append ( + project.MetadataReferences.OfType() + |> Seq.map (fun x -> "-r:" + x.FilePath) + |> Array.ofSeq + |> Array.append ( + // Clear any references from CompilationOptions. + // We get the references from Project.ProjectReferences/Project.MetadataReferences. + projectSite.CompilationOptions + |> Array.filter (fun x -> not (x.Contains("-r:"))) + ) + ) + + let projectOptions = + { + ProjectFileName = projectSite.ProjectFileName + ProjectId = Some(projectId.ToFSharpProjectIdString()) + SourceFiles = projectSite.CompilationSourceFiles + OtherOptions = otherOptions + ReferencedProjects = referencedProjects + IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment + UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(project.FilePath)) + LoadTime = projectSite.LoadTime + UnresolvedReferences = None + OriginalLoadReferences = [] + ExtraProjectInfo= None + Stamp = Some(int64 (projectStamp.GetHashCode())) + } + + // This can happen if we didn't receive the callback from HandleCommandLineChanges yet. + if Array.isEmpty projectOptions.SourceFiles then + None + else + checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompileIfAlreadySeen = true, userOpName = "computeOptions") + + let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) + + cache.[projectId] <- (projectStamp, parsingOptions, projectOptions) + + Some(parsingOptions, projectOptions) + + | true, (projectStamp2, parsingOptions, projectOptions) -> + if projectStamp <> projectStamp2 then + cache.Remove(projectId) |> ignore + tryComputeOptions project + else + Some(parsingOptions, projectOptions) + + let loop (agent: MailboxProcessor) = + async { + while true do + match! agent.Receive() with + | FSharpProjectOptionsMessage.TryGetOptions(project, reply) -> + try + reply.Reply(tryComputeOptions project) + with + | _ -> + reply.Reply(None) + | FSharpProjectOptionsMessage.ClearOptions(projectId) -> + cache.Remove(projectId) |> ignore + } + + let agent = MailboxProcessor.Start((fun agent -> loop agent), cancellationToken = cancellationTokenSource.Token) + + member __.TryGetOptionsByProjectAsync(project) = + agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptions(project, reply)) + + member __.ClearOptionsByProjectId(projectId) = + agent.Post(FSharpProjectOptionsMessage.ClearOptions(projectId)) + + member __.SetCpsCommandLineOptions(projectId, sourcePaths, options) = + cpsCommandLineOptions.[projectId] <- (sourcePaths, options) + + member __.TryGetCachedOptionsByProjectId(projectId) = + match cache.TryGetValue(projectId) with + | true, result -> Some(result) + | _ -> None + + interface IDisposable with + member __.Dispose() = + cancellationTokenSource.Cancel() + cancellationTokenSource.Dispose() + (agent :> IDisposable).Dispose() /// Exposes FCS FSharpProjectOptions information management as MEF component. // @@ -33,22 +241,23 @@ type internal FSharpProjectOptionsManager settings: EditorOptions ) = - // A table of information about projects, excluding single-file projects. - let projectOptionsTable = FSharpProjectOptionsTable() + let reactor = new FSharpProjectOptionsReactor(workspace, settings, serviceProvider, checkerProvider) // A table of information about single-file projects. Currently we only need the load time of each such file, plus // the original options for editing let singleFileProjectTable = ConcurrentDictionary() - let tryGetOrCreateProjectId (projectFileName:string) = - let projectDisplayName = projectDisplayNameOf projectFileName - Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)) - - /// Retrieve the projectOptionsTable - member __.FSharpOptions = projectOptionsTable + do + // We need to listen to this event for lifecycle purposes. + workspace.WorkspaceChanged.Add(fun args -> + match args.Kind with + | WorkspaceChangeKind.ProjectRemoved -> reactor.ClearOptionsByProjectId(args.ProjectId) + | _ -> () + ) /// Clear a project from the project table - member this.ClearInfoForProject(projectId:ProjectId) = projectOptionsTable.ClearInfoForProject(projectId) + member this.ClearInfoForProject(projectId:ProjectId) = + reactor.ClearOptionsByProjectId(projectId) /// Clear a project from the single file project table member this.ClearInfoForSingleFileProject(projectId) = @@ -58,7 +267,7 @@ type internal FSharpProjectOptionsManager member this.AddOrUpdateSingleFileProject(projectId, data) = singleFileProjectTable.[projectId] <- data /// Get the exact options for a single-file script - member this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, fileContents) = + member this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, fileContents, solution) = async { let extraProjectInfo = Some(box workspace) if SourceFile.MustBeSingleFileProject(fileName) then @@ -70,40 +279,28 @@ type internal FSharpProjectOptionsManager // compiled and #r will refer to files on disk let referencedProjectFileNames = [| |] let site = ProjectSitesAndFiles.CreateProjectSiteForScript(fileName, referencedProjectFileNames, options) - let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, options.ExtraProjectInfo, Some projectOptionsTable) + let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, options.ExtraProjectInfo, solution, None) let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) return (deps, parsingOptions, projectOptions) else let site = ProjectSitesAndFiles.ProjectSiteOfSingleFile(fileName) - let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, extraProjectInfo, Some projectOptionsTable) + let deps, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, (tryGetOrCreateProjectId fileName), fileName, extraProjectInfo, solution, None) let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) return (deps, parsingOptions, projectOptions) } - /// Update the info for a project in the project table - member this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, site, userOpName, invalidateConfig) = - Logger.Log LogEditorFunctionId.LanguageService_UpdateProjectInfo - projectOptionsTable.AddOrUpdateProject(projectId, (fun isRefresh -> - let extraProjectInfo = Some(box workspace) - let referencedProjects, projectOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences, site, serviceProvider, Some(projectId), site.ProjectFileName, extraProjectInfo, Some projectOptionsTable) - if invalidateConfig then checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompileIfAlreadySeen = not isRefresh, userOpName = userOpName + ".UpdateProjectInfo") - let referencedProjectIds = referencedProjects |> Array.choose tryGetOrCreateProjectId - let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) - referencedProjectIds, parsingOptions, Some site, projectOptions)) - /// Get compilation defines relevant for syntax processing. /// Quicker then TryGetOptionsForDocumentOrProject as it doesn't need to recompute the exact project /// options for a script. member this.GetCompilationDefinesForEditingDocument(document:Document) = - let projectOptionsOpt = this.TryGetOptionsForProject(document.Project.Id) - let parsingOptions = - match projectOptionsOpt with - | Some (parsingOptions, _site, _projectOptions) -> parsingOptions + let parsingOptions = + match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with + | Some (_, parsingOptions, _) -> parsingOptions | _ -> { FSharpParsingOptions.Default with IsInteractive = IsScript document.Name } - CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - /// Try and get the Options for a project - member this.TryGetOptionsForProject(projectId:ProjectId) = projectOptionsTable.TryGetOptionsForProject(projectId) + member this.TryGetOptionsByProject(project) = + reactor.TryGetOptionsByProjectAsync(project) /// Get the exact options for a document or project member this.TryGetOptionsForDocumentOrProject(document: Document) = @@ -122,13 +319,18 @@ type internal FSharpProjectOptionsManager // NOTE: we don't use FCS cross-project references from scripts to projects. The projects must have been // compiled and #r will refer to files on disk. let tryGetOrCreateProjectId _ = None - let! _referencedProjectFileNames, parsingOptions, projectOptions = this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, sourceText.ToString()) + let! _referencedProjectFileNames, parsingOptions, projectOptions = this.ComputeSingleFileOptions (tryGetOrCreateProjectId, fileName, loadTime, sourceText.ToString(), document.Project.Solution) this.AddOrUpdateSingleFileProject(projectId, (loadTime, parsingOptions, projectOptions)) return Some (parsingOptions, None, projectOptions) with ex -> Assert.Exception(ex) return None - | _ -> return this.TryGetOptionsForProject(projectId) + | _ -> + match! reactor.TryGetOptionsByProjectAsync(document.Project) with + | Some(parsingOptions, projectOptions) -> + return Some(parsingOptions, None, projectOptions) + | _ -> + return None } /// Get the options for a document or project relevant for syntax processing. @@ -136,36 +338,18 @@ type internal FSharpProjectOptionsManager member this.TryGetOptionsForEditingDocumentOrProject(document:Document) = let projectId = document.Project.Id match singleFileProjectTable.TryGetValue(projectId) with - | true, (_loadTime, parsingOptions, originalOptions) -> Some (parsingOptions, originalOptions) - | _ -> this.TryGetOptionsForProject(projectId) |> Option.map(fun (parsingOptions, _, projectOptions) -> parsingOptions, projectOptions) - - /// get a siteprovider - member this.ProvideProjectSiteProvider(project:Project) = provideProjectSiteProvider(workspace, project, serviceProvider, Some projectOptionsTable) - - /// Tell the checker to update the project info for the specified project id - member this.UpdateProjectInfoWithProjectId(projectId:ProjectId, userOpName, invalidateConfig) = - let hier = workspace.GetHierarchy(projectId) - match hier with - | null -> () - | h when (h.IsCapabilityMatch("CPS")) -> - let project = workspace.CurrentSolution.GetProject(projectId) - if not (isNull project) then - let siteProvider = this.ProvideProjectSiteProvider(project) - let projectSite = siteProvider.GetProjectSite() - if projectSite.CompilationSourceFiles.Length <> 0 then - this.UpdateProjectInfo(tryGetOrCreateProjectId, projectId, projectSite, userOpName, invalidateConfig) - | _ -> () - - /// Tell the checker to update the project info for the specified project id - member this.UpdateDocumentInfoWithProjectId(projectId:ProjectId, documentId:DocumentId, userOpName, invalidateConfig) = - if workspace.IsDocumentOpen(documentId) then - this.UpdateProjectInfoWithProjectId(projectId, userOpName, invalidateConfig) + | true, (_loadTime, parsingOptions, originalOptions) -> async { return Some (parsingOptions, originalOptions) } + | _ -> + async { + let! result = this.TryGetOptionsForDocumentOrProject(document) + return result |> Option.map(fun (parsingOptions, _, projectOptions) -> parsingOptions, projectOptions) + } [] /// This handles commandline change notifications from the Dotnet Project-system /// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath /// binpath is more accurate because a project file can have multiple in memory projects based on configuration - member this.HandleCommandLineChanges(path:string, sources:ImmutableArray, references:ImmutableArray, options:ImmutableArray) = + member __.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) = use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs) let projectId = @@ -178,9 +362,7 @@ type internal FSharpProjectOptionsManager 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 referencePaths = references |> Seq.map(fun r -> fullPath r.Reference) |> Seq.toArray - projectOptionsTable.SetOptionsWithProjectId(projectId, sourcePaths, referencePaths, options.ToArray()) - this.UpdateProjectInfoWithProjectId(projectId, "HandleCommandLineChanges", invalidateConfig=true) + reactor.SetCpsCommandLineOptions(projectId, sourcePaths, options.ToArray()) member __.Checker = checkerProvider.Checker diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index a623075db83..0f377367386 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -206,7 +206,7 @@ type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSoluti let projectDisplayName = projectDisplayNameOf projectFileName Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)) - let mutable legacyProjectWorkspaceMap = Unchecked.defaultof + let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, projectInfoManager, package.ComponentModel.GetService()) override this.Initialize() = base.Initialize() @@ -216,9 +216,6 @@ type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSoluti this.Workspace.DocumentClosed.Add <| fun args -> tryRemoveSingleFileProject args.Document.Project.Id - legacyProjectWorkspaceMap <- LegacyProjectWorkspaceMap(this.Workspace, solution, projectInfoManager, package.ComponentModel.GetService(), this.SystemServiceProvider) - legacyProjectWorkspaceMap.Initialize() - let theme = package.ComponentModel.DefaultExportProvider.GetExport().Value theme.SetColors() @@ -240,7 +237,7 @@ type internal FSharpLanguageService(package : FSharpPackage, solution: IVsSoluti singleFileProjects.[projectId] <- projectContext - let _referencedProjectFileNames, parsingOptions, projectOptions = projectInfoManager.ComputeSingleFileOptions (tryGetOrCreateProjectId workspace, fileName, loadTime, fileContents) |> Async.RunSynchronously + let _referencedProjectFileNames, parsingOptions, projectOptions = projectInfoManager.ComputeSingleFileOptions (tryGetOrCreateProjectId workspace, fileName, loadTime, fileContents, workspace.CurrentSolution) |> Async.RunSynchronously projectInfoManager.AddOrUpdateSingleFileProject(projectId, (loadTime, parsingOptions, projectOptions)) override this.ContentTypeName = FSharpConstants.FSharpContentTypeName diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs index dfca72cba99..13bbb8ad9c9 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs @@ -20,32 +20,28 @@ open Microsoft.VisualStudio.LanguageServices.ProjectSystem open Microsoft.VisualStudio.Shell.Interop [] -type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl, - solution: IVsSolution, +type internal LegacyProjectWorkspaceMap(solution: IVsSolution, projectInfoManager: FSharpProjectOptionsManager, - projectContextFactory: IWorkspaceProjectContextFactory, - serviceProvider: IServiceProvider) as this = + projectContextFactory: IWorkspaceProjectContextFactory) as this = let invalidPathChars = set (Path.GetInvalidPathChars()) let optionsAssociation = ConditionalWeakTable() let isPathWellFormed (path: string) = not (String.IsNullOrWhiteSpace path) && path |> Seq.forall (fun c -> not (Set.contains c invalidPathChars)) + let legacyProjectIdLookup = ConcurrentDictionary() let legacyProjectLookup = ConcurrentDictionary() + let setupQueue = ConcurrentQueue() - let tryGetOrCreateProjectId (workspace: VisualStudioWorkspaceImpl) (projectFileName: string) = - let projectDisplayName = projectDisplayNameOf projectFileName - Some (workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName)) - - member this.Initialize() = + do solution.AdviseSolutionEvents(this) |> ignore /// Sync the Roslyn information for the project held in 'projectContext' to match the information given by 'site'. /// Also sync the info in ProjectInfoManager if necessary. - member this.SyncLegacyProject(projectId: ProjectId, projectContext: IWorkspaceProjectContext, site: IProjectSite, workspace: VisualStudioWorkspaceImpl, forceUpdate, userOpName) = + member this.SyncLegacyProject(projectContext: IWorkspaceProjectContext, site: IProjectSite) = let wellFormedFilePathSetIgnoreCase (paths: seq) = HashSet(paths |> Seq.filter isPathWellFormed |> Seq.map (fun s -> try Path.GetFullPath(s) with _ -> s), StringComparer.OrdinalIgnoreCase) - let mutable updated = forceUpdate + let projectId = projectContext.Id // Sync the source files in projectContext. Note that these source files are __not__ maintained in order in projectContext // as edits are made. It seems this is ok because the source file list is only used to drive roslyn per-file checking. @@ -58,12 +54,10 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl, for file in updatedFiles do if not(originalFiles.Contains(file)) then projectContext.AddSourceFile(file) - updated <- true for file in originalFiles do if not(updatedFiles.Contains(file)) then projectContext.RemoveSourceFile(file) - updated <- true let updatedRefs = site.CompilationReferences |> wellFormedFilePathSetIgnoreCase let originalRefs = @@ -74,12 +68,10 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl, for ref in updatedRefs do if not(originalRefs.Contains(ref)) then projectContext.AddMetadataReference(ref, MetadataReferenceProperties.Assembly) - updated <- true for ref in originalRefs do if not(updatedRefs.Contains(ref)) then projectContext.RemoveMetadataReference(ref) - updated <- true // Update the project options association let ok,originalOptions = optionsAssociation.TryGetValue(projectContext) @@ -99,94 +91,93 @@ type internal LegacyProjectWorkspaceMap(workspace: VisualStudioWorkspaceImpl, if ok then optionsAssociation.Remove(projectContext) |> ignore optionsAssociation.Add(projectContext, updatedOptions) - updated <- true - - // update the cached options - if updated then - projectInfoManager.UpdateProjectInfo(tryGetOrCreateProjectId workspace, projectId, site, userOpName + ".SyncLegacyProject", invalidateConfig=true) + projectContext.BinOutputPath <- Option.toObj site.CompilationBinOutputPath let info = (updatedFiles, updatedRefs) legacyProjectLookup.AddOrUpdate(projectId, info, fun _ _ -> info) |> ignore - member this.SetupLegacyProjectFile(siteProvider: IProvideProjectSite, workspace: VisualStudioWorkspaceImpl, userOpName) = - let userOpName = userOpName + ".SetupProjectFile" - let rec setup (site: IProjectSite) = + member this.SetupLegacyProjectFile(siteProvider: IProvideProjectSite) = + let rec setup (site: IProjectSite) = let projectGuid = Guid(site.ProjectGuid) let projectFileName = site.ProjectFileName let projectDisplayName = projectDisplayNameOf projectFileName - // This projectId is not guaranteed to be the same ProjectId that will actually be created once we call CreateProjectContext - // in Roslyn versions once https://github.com/dotnet/roslyn/pull/26931 is merged. Roslyn will still guarantee that once - // there is a project in the workspace with the same path, it'll return the ID of that. So this is sufficient to use - // in that case as long as we only use it to call GetProject. - let fakeProjectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName) - - if isNull (workspace.ProjectTracker.GetProject fakeProjectId) then - let hierarchy = - site.ProjectProvider - |> Option.map (fun p -> p :?> IVsHierarchy) - |> Option.toObj - - // Roslyn is expecting site to be an IVsHierarchy. - // It just so happens that the object that implements IProvideProjectSite is also - // an IVsHierarchy. This assertion is to ensure that the assumption holds true. - Debug.Assert(not (isNull hierarchy), "About to CreateProjectContext with a non-hierarchy site") - - let projectContext = - projectContextFactory.CreateProjectContext( - FSharpConstants.FSharpLanguageName, - projectDisplayName, - projectFileName, - projectGuid, - hierarchy, - Option.toObj site.CompilationBinOutputPath) - - // The real project ID that was actually added. See comments for fakeProjectId why this one is actually good. - let realProjectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName) - - // Sync IProjectSite --> projectContext, and IProjectSite --> ProjectInfoManage - this.SyncLegacyProject(realProjectId, projectContext, site, workspace, forceUpdate=true, userOpName=userOpName) - - site.BuildErrorReporter <- Some (projectContext :?> Microsoft.VisualStudio.Shell.Interop.IVsLanguageServiceBuildErrorReporter2) - - // TODO: consider forceUpdate = false here. forceUpdate=true may be causing repeated computation? - site.AdviseProjectSiteChanges(FSharpConstants.FSharpLanguageServiceCallbackName, - AdviseProjectSiteChanges(fun () -> this.SyncLegacyProject(realProjectId, projectContext, site, workspace, forceUpdate=true, userOpName="AdviseProjectSiteChanges."+userOpName))) - - site.AdviseProjectSiteClosed(FSharpConstants.FSharpLanguageServiceCallbackName, - AdviseProjectSiteChanges(fun () -> - projectInfoManager.ClearInfoForProject(realProjectId) - optionsAssociation.Remove(projectContext) |> ignore - projectContext.Dispose())) - - for referencedSite in ProjectSitesAndFiles.GetReferencedProjectSites(Some realProjectId, site, serviceProvider, Some (workspace :>obj), Some projectInfoManager.FSharpOptions ) do - setup referencedSite + let hierarchy = + site.ProjectProvider + |> Option.map (fun p -> p :?> IVsHierarchy) + |> Option.toObj + + // Roslyn is expecting site to be an IVsHierarchy. + // It just so happens that the object that implements IProvideProjectSite is also + // an IVsHierarchy. This assertion is to ensure that the assumption holds true. + Debug.Assert(not (isNull hierarchy), "About to CreateProjectContext with a non-hierarchy site") + + let projectContext = + projectContextFactory.CreateProjectContext( + FSharpConstants.FSharpLanguageName, + projectDisplayName, + projectFileName, + projectGuid, + hierarchy, + Option.toObj site.CompilationBinOutputPath) + + legacyProjectIdLookup.[projectGuid] <- projectContext.Id + + // Sync IProjectSite --> projectContext, and IProjectSite --> ProjectInfoManage + this.SyncLegacyProject(projectContext, site) + + site.BuildErrorReporter <- Some (projectContext :?> Microsoft.VisualStudio.Shell.Interop.IVsLanguageServiceBuildErrorReporter2) + + // TODO: consider forceUpdate = false here. forceUpdate=true may be causing repeated computation? + site.AdviseProjectSiteChanges(FSharpConstants.FSharpLanguageServiceCallbackName, + AdviseProjectSiteChanges(fun () -> this.SyncLegacyProject(projectContext, site))) + + site.AdviseProjectSiteClosed(FSharpConstants.FSharpLanguageServiceCallbackName, + AdviseProjectSiteChanges(fun () -> + projectInfoManager.ClearInfoForProject(projectContext.Id) + optionsAssociation.Remove(projectContext) |> ignore + projectContext.Dispose())) setup (siteProvider.GetProjectSite()) interface IVsSolutionEvents with - member __.OnAfterCloseSolution(_) = VSConstants.S_OK + member __.OnAfterCloseSolution(_) = + // Clear + let mutable setup = Unchecked.defaultof<_> + while setupQueue.TryDequeue(&setup) do () + VSConstants.S_OK member __.OnAfterLoadProject(_, _) = VSConstants.S_OK member __.OnAfterOpenProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> - this.SetupLegacyProjectFile(siteProvider, workspace, "LegacyProjectWorkspaceMap.Initialize") + let setup = fun () -> this.SetupLegacyProjectFile(siteProvider) + let _, o = solution.GetProperty(int __VSPROPID.VSPROPID_IsSolutionOpen) + if (match o with | :? bool as isOpen -> isOpen | _ -> false) then + setup () + else + setupQueue.Enqueue(setup) | _ -> () VSConstants.S_OK - member __.OnAfterOpenSolution(_, _) = VSConstants.S_OK + member __.OnAfterOpenSolution(_, _) = + let mutable setup = Unchecked.defaultof<_> + while setupQueue.TryDequeue(&setup) do + setup () + VSConstants.S_OK member __.OnBeforeCloseProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> let site = siteProvider.GetProjectSite() - let projectFileName = site.ProjectFileName - let projectDisplayName = projectDisplayNameOf projectFileName - let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(projectFileName, projectDisplayName) - legacyProjectLookup.TryRemove(projectId) |> ignore + let projectGuid = Guid(site.ProjectGuid) + match legacyProjectIdLookup.TryGetValue(projectGuid) with + | true, projectId -> + legacyProjectIdLookup.TryRemove(projectGuid) |> ignore + legacyProjectLookup.TryRemove(projectId) |> ignore + | _ -> () | _ -> () VSConstants.S_OK diff --git a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs index e9ce1769584..7d8e11fbbaf 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/ProjectSitesAndFiles.fs @@ -221,7 +221,7 @@ type internal ProjectSitesAndFiles() = | _ -> None | Some _ -> None - static let rec referencedProvideProjectSites(projectIdOpt: ProjectId option, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo:obj option, projectOptionsTable:FSharpProjectOptionsTable option) = + static let rec referencedProvideProjectSites(projectIdOpt: ProjectId option, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo:obj option, solution: Solution, projectOptionsTable:FSharpProjectOptionsTable option) = let getReferencesForSolutionService (solutionService:IVsSolution) = [| match referencedProjects projectSite, extraProjectInfo with @@ -230,14 +230,14 @@ type internal ProjectSitesAndFiles() = if not (String.IsNullOrWhiteSpace(path)) then match projectIdOpt with | Some(projectId) -> - let project = workspace.CurrentSolution.GetProject(projectId) + let project = solution.GetProject(projectId) if not (isNull project) then - for reference in project.ProjectReferences do - let project = workspace.CurrentSolution.GetProject(reference.ProjectId) - if not (isNull project) && project.Language = FSharpConstants.FSharpLanguageName then - let siteProvider = provideProjectSiteProvider (workspace, project, serviceProvider, projectOptionsTable) - let referenceProject = workspace.ProjectTracker.GetProject(reference.ProjectId) - let outputPath = referenceProject.BinOutputPath + let references = project.ProjectReferences |> Seq.toArray + for reference in references do + let referenceProject = solution.GetProject(reference.ProjectId) + if not (isNull referenceProject) && project.Language = FSharpConstants.FSharpLanguageName then + let siteProvider = provideProjectSiteProvider (workspace, referenceProject, serviceProvider, projectOptionsTable) + let outputPath = referenceProject.OutputFilePath yield Some project.Id, project.FilePath, outputPath, siteProvider | _ -> () @@ -259,8 +259,8 @@ type internal ProjectSitesAndFiles() = | None -> () } - static let rec referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) = - [| for (projectIdOpt, projectFileName, outputPath, _projectSiteProvider) in referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) do + static let rec referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, solution, projectOptionsTable) = + [| for (projectIdOpt, projectFileName, outputPath, _projectSiteProvider) in referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, solution, projectOptionsTable) do let referencedProjectOptionsOpt = projectOptionsTable |> Option.bind (fun x -> @@ -276,10 +276,10 @@ type internal ProjectSitesAndFiles() = | _ -> () |] - and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectIdOpt, fileName, extraProjectInfo, projectOptionsTable) = + and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectIdOpt, fileName, extraProjectInfo, solution, projectOptionsTable) = let referencedProjectFileNames, referencedProjectOptions = if enableInMemoryCrossProjectReferences then - referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) + referencedProjectsOf(projectIdOpt, projectSite, serviceProvider, extraProjectInfo, solution, projectOptionsTable) |> Array.unzip else [| |], [| |] let option = @@ -319,16 +319,16 @@ type internal ProjectSitesAndFiles() = failwith ".fsx or .fsscript should have been treated as implicit project" new ProjectSiteOfSingleFile(filename) :> IProjectSite - static member GetReferencedProjectSites(projectIdOpt, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo, projectOptions) = - referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, projectOptions) + static member GetReferencedProjectSites(projectIdOpt, projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo, solution, projectOptions) = + referencedProvideProjectSites (projectIdOpt, projectSite, serviceProvider, extraProjectInfo, solution, projectOptions) |> Seq.map (fun (_, _, _, ps) -> ps.GetProjectSite()) |> Seq.toArray /// Create project options for this project site. - static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite:IProjectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable) = + static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite:IProjectSite, serviceProvider, projectId, filename, extraProjectInfo, solution, projectOptionsTable) = match projectSite with | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions() - | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable) + | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, projectSite, serviceProvider, projectId, filename, extraProjectInfo, solution, projectOptionsTable) /// Create project site for these project options static member CreateProjectSiteForScript (filename, referencedProjectFileNames, checkOptions) = diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs index 5bddff6417f..4bcd38a7aa5 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs @@ -44,8 +44,8 @@ module internal SymbolHelpers = projects |> Seq.map (fun project -> async { - match projectInfoManager.TryGetOptionsForProject(project.Id) with - | Some (_parsingOptions, _site, projectOptions) -> + match! projectInfoManager.TryGetOptionsByProject(project) with + | Some (_parsingOptions, projectOptions) -> let! projectCheckResults = checker.ParseAndCheckProject(projectOptions, userOpName = userOpName) let! uses = projectCheckResults.GetUsesOfSymbol(symbol) let distinctUses = uses |> Array.distinctBy (fun symbolUse -> symbolUse.RangeAlternate) diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs index 0be1e027d58..ff829a2081b 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs @@ -247,7 +247,7 @@ type internal FSharpNavigateToSearchService interface INavigateToSearchService_RemoveInterfaceAboveAndRenameThisAfterInternalsVisibleToUsersUpdate with member __.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> = asyncMaybe { - let! parsingOptions, _site, _options = projectInfoManager.TryGetOptionsForProject(project.Id) + let! parsingOptions, _options = projectInfoManager.TryGetOptionsByProject(project) let! items = project.Documents |> Seq.map (fun document -> getCachedIndexedNavigableItems(document, parsingOptions, kinds)) diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs index d612ecc7432..a581ad0a00e 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs @@ -56,7 +56,7 @@ module private FSharpQuickInfo = let extLineText = (extSourceText.Lines.GetLineFromPosition extSpan.Start).ToString() // project options need to be retrieved because the signature file could be in another project - let! extParsingOptions, _extSite, extProjectOptions = projectInfoManager.TryGetOptionsForProject extDocId.ProjectId + let! extParsingOptions, extProjectOptions = projectInfoManager.TryGetOptionsByProject document.Project let extDefines = CompilerEnvironment.GetCompilationDefinesForEditing extParsingOptions let! extLexerSymbol = Tokenizer.getSymbolAtPosition(extDocId, extSourceText, extSpan.Start, declRange.FileName, extDefines, SymbolLookupKind.Greedy, true) let! _, _, extCheckFileResults = checker.ParseAndCheckDocument(extDocument, extProjectOptions, allowStaleResults=true, sourceText=extSourceText, userOpName = userOpName) diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs index d33ea17447b..b3215f98956 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs @@ -366,8 +366,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem let mutable normalizedRefs : string[] option = None - let mutable binOutputPath : string option = None - #if DEBUG let logger = new Microsoft.Build.Logging.ConsoleLogger(Microsoft.Build.Framework.LoggerVerbosity.Diagnostic, (fun s -> Trace.WriteLine("MSBuild: " + s)), @@ -1260,7 +1258,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem let updatedNormalizedRefs = flags |> Array.choose (fun flag -> if flag.StartsWith("-r:") then Some flag.[3..] else None) |> Array.map (fun fn -> Path.GetFullPath(Path.Combine(x.ProjectFolder, fn))) sourcesAndFlags <- Some (updatedNormalizedSources, flags) normalizedRefs <- Some updatedNormalizedRefs - binOutputPath <- x.GetCurrentOutputAssembly() |> Option.ofObj if projectSite.State = ProjectSiteOptionLifetimeState.Opening then // This is the first time, so set up interface for language service to talk to us @@ -1288,7 +1285,6 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem member __.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources member __.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags member __.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs - member __.CompilationBinOutputPath = binOutputPath override x.ComputeSourcesAndFlags() = @@ -1410,7 +1406,9 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem member __.CompilationSourceFiles = x.CompilationSourceFiles member __.CompilationOptions = x.CompilationOptions member __.CompilationReferences = x.CompilationReferences - member __.CompilationBinOutputPath = x.CompilationBinOutputPath + member __.CompilationBinOutputPath = + let outputPath = x.GetCurrentOutputAssembly() + if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) member __.Description = match sourcesAndFlags with @@ -1437,7 +1435,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // that does _not_ reference "this" to get its information. // CreateStaticProjectSite can be called on a project that failed to load (as in Close) member private x.CreateStaticProjectSite() = - let outputPath = x.CompilationBinOutputPath + let outputPath = x.GetCurrentOutputAssembly() let sourceFiles = x.CompilationSourceFiles let options = x.CompilationOptions let refs = x.CompilationReferences @@ -1453,7 +1451,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem member __.CompilationSourceFiles = sourceFiles member __.CompilationOptions = options member __.CompilationReferences = refs - member __.CompilationBinOutputPath = outputPath + member __.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) member __.ProjectFileName = projFileName member __.BuildErrorReporter with get() = staticBuildErrorReporter