@@ -145,7 +145,7 @@ type Exception with
145145 | IntfImplInIntrinsicAugmentation m
146146 | OverrideInExtrinsicAugmentation m
147147 | IntfImplInExtrinsicAugmentation m
148- | ValueRestriction(_, _, _, _, _, m)
148+ | ValueRestriction(_, _, _, _, m)
149149 | LetRecUnsound(_, _, m)
150150 | ObsoleteError(_, m)
151151 | ObsoleteWarning(_, m)
@@ -579,11 +579,8 @@ module OldStyleMessages =
579579 let DeprecatedE () = Message( " Deprecated" , " %s " )
580580 let LibraryUseOnlyE () = Message( " LibraryUseOnly" , " " )
581581 let MissingFieldsE () = Message( " MissingFields" , " %s " )
582- let ValueRestriction1E () = Message( " ValueRestriction1" , " %s%s%s " )
583- let ValueRestriction2E () = Message( " ValueRestriction2" , " %s%s%s " )
584- let ValueRestriction3E () = Message( " ValueRestriction3" , " %s " )
585- let ValueRestriction4E () = Message( " ValueRestriction4" , " %s%s%s " )
586- let ValueRestriction5E () = Message( " ValueRestriction5" , " %s%s%s " )
582+ let ValueRestrictionFunctionE () = Message( " ValueRestrictionFunction" , " %s%s%s " )
583+ let ValueRestrictionE () = Message( " ValueRestriction" , " %s%s%s " )
587584 let RecoverableParseErrorE () = Message( " RecoverableParseError" , " " )
588585 let ReservedKeywordE () = Message( " ReservedKeyword" , " %s " )
589586 let IndentationProblemE () = Message( " IndentationProblem" , " %s " )
@@ -1760,63 +1757,52 @@ type Exception with
17601757
17611758 | MissingFields( sl, _) -> os.AppendString( MissingFieldsE() .Format( String.concat " ," sl + " ." ))
17621759
1763- | ValueRestriction( denv, infoReader, hasSig , v, _, _) ->
1760+ | ValueRestriction( denv, infoReader, v, _, _) ->
17641761 let denv =
17651762 { denv with
17661763 showInferenceTyparAnnotations = true
17671764 }
17681765
17691766 let tau = v.TauType
17701767
1771- if hasSig then
1772- if isFunTy denv.g tau && ( arityOfVal v) .HasNoArgs then
1773- let msg =
1774- ValueRestriction1E() .Format
1775- v.DisplayName
1776- ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1777- v.DisplayName
1768+ match v.MemberInfo with
1769+ | Some membInfo ->
1770+ // We should not reach here since obj would be inferred instead of retaining a generic type variable
1771+ (*
1772+ let a = [] @ [] // ERROR: Value restriction
1773+ module b =
1774+ let c = [] @ [] // ERROR: Value restriction
1775+ type d() =
1776+ let e = [] @ [] // inferred as 'obj list'
1777+ new(_) =
1778+ let f = [] @ [] // inferred as 'obj list'
1779+ d()
1780+ member _.g = [] @ [] // inferred as 'obj list'
1781+ member _.h with set () =
1782+ let i = [] @ [] // inferred as 'obj list'
1783+ ()
1784+ *)
1785+ assert ( membInfo.MemberFlags.MemberKind <> SynMemberKind.PropertyGet)
1786+ assert ( membInfo.MemberFlags.MemberKind <> SynMemberKind.PropertySet)
1787+ assert ( membInfo.MemberFlags.MemberKind <> SynMemberKind.Constructor)
1788+ | _ -> ()
17781789
1779- os.AppendString msg
1780- else
1781- let msg =
1782- ValueRestriction2E() .Format
1783- v.DisplayName
1784- ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1785- v.DisplayName
1790+ if isFunTy denv.g tau && ( arityOfVal v) .HasNoArgs then
1791+ let msg =
1792+ ValueRestrictionFunctionE() .Format
1793+ v.DisplayName
1794+ ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1795+ v.DisplayName
17861796
1787- os.AppendString msg
1797+ os.AppendString msg
17881798 else
1789- match v.MemberInfo with
1790- | Some membInfo when
1791- ( match membInfo.MemberFlags.MemberKind with
1792- | SynMemberKind.PropertyGet
1793- | SynMemberKind.PropertySet
1794- | SynMemberKind.Constructor -> true // can't infer extra polymorphism
1795- // can infer extra polymorphism
1796- | _ -> false )
1797- ->
1798- let msg =
1799- ValueRestriction3E()
1800- .Format( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1801-
1802- os.AppendString msg
1803- | _ ->
1804- if isFunTy denv.g tau && ( arityOfVal v) .HasNoArgs then
1805- let msg =
1806- ValueRestriction4E() .Format
1807- v.DisplayName
1808- ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1809- v.DisplayName
1810-
1811- os.AppendString msg
1812- else
1813- let msg =
1814- ValueRestriction5E() .Format
1815- v.DisplayName
1816- ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1817- v.DisplayName
1799+ let msg =
1800+ ValueRestrictionE() .Format
1801+ v.DisplayName
1802+ ( NicePrint.stringOfQualifiedValOrMember denv infoReader ( mkLocalValRef v))
1803+ v.DisplayName
18181804
1819- os.AppendString msg
1805+ os.AppendString msg
18201806
18211807 | Parsing.RecoverableParseError -> os.AppendString( RecoverableParseErrorE() .Format)
18221808
0 commit comments