Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit34a181b

Browse files
dsymelatkin
authored andcommitted
Fix 34 - extension member duplicate check
fixesdotnet#34closesdotnet#443commit4f6c739Author: Don Syme <donsyme@fastmail.fm>Date: Tue May 12 17:38:00 2015 +0100 Fix 34 - extension member duplicate check (5)commit17b1cdbAuthor: Don Syme <donsyme@fastmail.fm>Date: Tue May 12 17:37:19 2015 +0100 Fix 34 - extension member duplicate check (4)commite9bfa81Author: Don Syme <donsyme@fastmail.fm>Date: Tue May 12 17:35:46 2015 +0100 Fix 34 - extension member duplicate check (3)commit8d85332Author: Don Syme <donsyme@fastmail.fm>Date: Tue May 12 17:25:32 2015 +0100 Fix 34 - extension member duplicate check (2)
1 parentb1464a7 commit34a181b

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

‎src/fsharp/check.fs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,18 @@ let CheckTopBinding cenv env (TBind(v,e,_) as bind) =
11251125
checkfalse v.DisplayName
11261126
checkfalse v.CompiledName
11271127

1128+
// Check if an F# extension member clashes
1129+
if v.IsExtensionMemberthen
1130+
tcref.ModuleOrNamespaceType.AllValsAndMembersByLogicalNameUncached.[v.LogicalName]|> List.iter(fun v2->
1131+
if v2.IsExtensionMember&&not(valEq v v2)&& v.CompiledName= v2.CompiledNamethen
1132+
letminfo1= FSMeth(cenv.g, generalizedTyconRef tcref, mkLocalValRef v, Some0UL)
1133+
letminfo2= FSMeth(cenv.g, generalizedTyconRef tcref, mkLocalValRef v2, Some0UL)
1134+
if tyconRefEq cenv.g v.MemberApparentParent v2.MemberApparentParent&&
1135+
MethInfosEquivByNameAndSig EraseAlltrue cenv.g cenv.amap v.Range minfo1 minfo2then
1136+
errorR(Duplicate(kind,v.DisplayName,v.Range)))
1137+
1138+
1139+
11281140
// Properties get 'get_X', only if there are no args
11291141
// Properties get 'get_X'
11301142
match v.ValReprInfowith

‎tests/fsharp/typecheck/sigs/neg23.bsl‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,11 @@ neg23.fs(92,18,92,21): typecheck error FS0439: The method 'X04' has curried argu
3838
neg23.fs(110,21,110,22): typecheck error FS0439: The method 'F' has curried arguments but has the same name as another methodin this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
3939

4040
neg23.fs(113,21,113,22): typecheck error FS0439: The method 'F' has curried arguments but has the same name as another methodin this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
41+
42+
neg23.fs(164,18,164,29): typecheck error FS0037: Two members called 'GroupRowsBy' have the same signature
43+
44+
neg23.fs(165,18,165,29): typecheck error FS0037: Two members called 'GroupRowsBy' have the same signature
45+
46+
neg23.fs(168,17,168,20): typecheck error FS0037: Two members called 'Foo' have the same signature
47+
48+
neg23.fs(169,17,169,20): typecheck error FS0037: Two members called 'Foo' have the same signature

‎tests/fsharp/typecheck/sigs/neg23.fs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,15 @@ module PositiveTests =
155155
lety2:int->int= c.M2(3,4)
156156
lety3:int* int-> int-> int= c.M2
157157

158+
159+
typeFrame=
160+
class
161+
end
162+
moduleX=
163+
typeFramewith
164+
memberframe.GroupRowsBy(key)=()
165+
memberframe.GroupRowsBy(key)=()
166+
167+
// Up to erasure
168+
memberthis.Foo(x:int->int)= printfn"method 1"
169+
memberthis.Foo(x:FSharpFunc<int,int>)= printfn"method 2"

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp