@@ -855,6 +855,57 @@ and FSharpDelegateSignature(cenv, info : SlotSig) =
855855 | Some ty -> FSharpType( cenv, ty)
856856 override x.ToString () = " <delegate signature>"
857857
858+ and FSharpAbstractParameter ( cenv , info : SlotParam ) =
859+
860+ member __.Name =
861+ let ( TSlotParam ( name , _ , _ , _ , _ , _ )) = info
862+ name
863+
864+ member __.Type = FSharpType( cenv, info.Type)
865+
866+ member __.IsInArg =
867+ let ( TSlotParam ( _ , _ , isIn , _ , _ , _ )) = info
868+ isIn
869+
870+ member __.IsOutArg =
871+ let ( TSlotParam ( _ , _ , _ , isOut , _ , _ )) = info
872+ isOut
873+
874+ member __.IsOptionalArg =
875+ let ( TSlotParam ( _ , _ , _ , _ , isOptional , _ )) = info
876+ isOptional
877+
878+ member __.Attributes =
879+ let ( TSlotParam ( _ , _ , _ , _ , _ , attribs )) = info
880+ attribs |> List.map ( fun a -> FSharpAttribute( cenv, AttribInfo.FSAttribInfo( cenv.g, a)))
881+ |> makeReadOnlyCollection
882+
883+ and FSharpAbstractSignature ( cenv , info : SlotSig ) =
884+
885+ member __.AbstractArguments =
886+ info.FormalParams
887+ |> List.map ( List.map ( fun p -> FSharpAbstractParameter( cenv, p)) >> makeReadOnlyCollection)
888+ |> makeReadOnlyCollection
889+
890+ member __.AbstractReturnType =
891+ match info.FormalReturnType with
892+ | None -> FSharpType( cenv, cenv.g.unit_ ty)
893+ | Some ty -> FSharpType( cenv, ty)
894+
895+ member __.DeclaringTypeGenericParameters =
896+ info.ClassTypars
897+ |> List.map ( fun t -> FSharpGenericParameter( cenv, t))
898+ |> makeReadOnlyCollection
899+
900+ member __.MethodGenericParameters =
901+ info.MethodTypars
902+ |> List.map ( fun t -> FSharpGenericParameter( cenv, t))
903+ |> makeReadOnlyCollection
904+
905+ member __.Name = info.Name
906+
907+ member __.DeclaringType = FSharpType( cenv, info.ImplementedType)
908+
858909and FSharpGenericParameterMemberConstraint ( cenv , info : TraitConstraintInfo ) =
859910 let ( TTrait ( tys , nm , flags , atys , rty , _ )) = info
860911 member __.MemberSources =
@@ -1338,6 +1389,17 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
13381389 | M m -> m.IsFSharpExplicitInterfaceImplementation
13391390 | V v -> v.IsFSharpExplicitInterfaceImplementation cenv.g
13401391
1392+ member __.ImplementedAbstractSignatures =
1393+ checkIsResolved()
1394+ let sigs =
1395+ match d with
1396+ | E e -> e.GetAddMethod() .ImplementedSlotSignatures
1397+ | P p -> p.ImplementedSlotSignatures
1398+ | M m -> m.ImplementedSlotSignatures
1399+ | V v -> v.ImplementedSlotSignatures
1400+ sigs |> List.map ( fun s -> FSharpAbstractSignature ( cenv, s))
1401+ |> makeReadOnlyCollection
1402+
13411403 member __.IsImplicitConstructor =
13421404 if isUnresolved() then false else
13431405 match fsharpInfo() with
0 commit comments