From 4415ea6fdbfd783b8ee8df68b837c8add3fc9fe3 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Mon, 19 Feb 2018 12:51:55 +0300 Subject: [PATCH 1/3] Symbols API: do not provide vanilla symbols for class constructor --- src/Compiler/Symbols/Symbols.fs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Compiler/Symbols/Symbols.fs b/src/Compiler/Symbols/Symbols.fs index ec343ad2a8d..f6840dfceea 100644 --- a/src/Compiler/Symbols/Symbols.fs +++ b/src/Compiler/Symbols/Symbols.fs @@ -266,7 +266,10 @@ type FSharpSymbol(cenv: SymbolEnv, item: unit -> Item, access: FSharpSymbol -> C static member Create(cenv, item): FSharpSymbol = let dflt() = FSharpSymbol(cenv, (fun () -> item), (fun _ _ _ -> true)) - match item with + match item with + | Item.Value v when v.Deref.IsClassConstructor -> + FSharpMemberOrFunctionOrValue(cenv, C (FSMeth(cenv.g, generalizeTyconRef v.TopValDeclaringEntity |> snd, v, None)), item) :> _ + | Item.Value v -> FSharpMemberOrFunctionOrValue(cenv, V v, item) :> _ | Item.UnionCase (uinfo, _) -> FSharpUnionCase(cenv, uinfo.UnionCaseRef) :> _ | Item.ExnCase tcref -> FSharpEntity(cenv, tcref) :>_ @@ -632,7 +635,8 @@ type FSharpEntity(cenv: SymbolEnv, entity: EntityRef) = protect <| fun () -> ([ let entityTy = generalizedTyconRef cenv.g entity let createMember (minfo: MethInfo) = - if minfo.IsConstructor then FSharpMemberOrFunctionOrValue(cenv, C minfo, Item.CtorGroup (minfo.DisplayName, [minfo])) + if minfo.IsConstructor || minfo.IsClassConstructor + then FSharpMemberOrFunctionOrValue(cenv, C minfo, Item.CtorGroup (minfo.DisplayName, [minfo])) else FSharpMemberOrFunctionOrValue(cenv, M minfo, Item.MethodGroup (minfo.DisplayName, [minfo], None)) if x.IsFSharpAbbreviation then () From 7f3ebcf7feb96a5a226c83a80f7fd467519cb6fd Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 1 Sep 2022 19:22:48 +0200 Subject: [PATCH 2/3] Fix --- src/Compiler/Symbols/Symbols.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Compiler/Symbols/Symbols.fs b/src/Compiler/Symbols/Symbols.fs index f6840dfceea..281bcde3e78 100644 --- a/src/Compiler/Symbols/Symbols.fs +++ b/src/Compiler/Symbols/Symbols.fs @@ -268,7 +268,7 @@ type FSharpSymbol(cenv: SymbolEnv, item: unit -> Item, access: FSharpSymbol -> C let dflt() = FSharpSymbol(cenv, (fun () -> item), (fun _ _ _ -> true)) match item with | Item.Value v when v.Deref.IsClassConstructor -> - FSharpMemberOrFunctionOrValue(cenv, C (FSMeth(cenv.g, generalizeTyconRef v.TopValDeclaringEntity |> snd, v, None)), item) :> _ + FSharpMemberOrFunctionOrValue(cenv, C (FSMeth(cenv.g, generalizeTyconRef cenv.g v.DeclaringEntity |> snd, v, None)), item) :> _ | Item.Value v -> FSharpMemberOrFunctionOrValue(cenv, V v, item) :> _ | Item.UnionCase (uinfo, _) -> FSharpUnionCase(cenv, uinfo.UnionCaseRef) :> _ From 780042fde5fdbb204cb7c31c526f2633fddadcc4 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Mon, 26 Sep 2022 12:38:13 +0200 Subject: [PATCH 3/3] Formatting --- src/Compiler/Symbols/Symbols.fs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Compiler/Symbols/Symbols.fs b/src/Compiler/Symbols/Symbols.fs index 281bcde3e78..9adb5ffb1f9 100644 --- a/src/Compiler/Symbols/Symbols.fs +++ b/src/Compiler/Symbols/Symbols.fs @@ -635,9 +635,10 @@ type FSharpEntity(cenv: SymbolEnv, entity: EntityRef) = protect <| fun () -> ([ let entityTy = generalizedTyconRef cenv.g entity let createMember (minfo: MethInfo) = - if minfo.IsConstructor || minfo.IsClassConstructor - then FSharpMemberOrFunctionOrValue(cenv, C minfo, Item.CtorGroup (minfo.DisplayName, [minfo])) - else FSharpMemberOrFunctionOrValue(cenv, M minfo, Item.MethodGroup (minfo.DisplayName, [minfo], None)) + if minfo.IsConstructor || minfo.IsClassConstructor then + FSharpMemberOrFunctionOrValue(cenv, C minfo, Item.CtorGroup (minfo.DisplayName, [minfo])) + else + FSharpMemberOrFunctionOrValue(cenv, M minfo, Item.MethodGroup (minfo.DisplayName, [minfo], None)) if x.IsFSharpAbbreviation then () elif x.IsFSharp then