Skip to content

Commit

Permalink
Fixed #3915
Browse files Browse the repository at this point in the history
  • Loading branch information
ncave committed Oct 1, 2024
1 parent b1446ea commit 83802a8
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
9 changes: 7 additions & 2 deletions src/Fable.Transforms/FSharp2Fable.Util.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1075,8 +1075,13 @@ module Patterns =
let (|UnionCaseTesterFor|_|) (memb: FSharpMemberOrFunctionOrValue) =
match memb.DeclaringEntity with
| Some ent when ent.IsFSharpUnion ->
// if memb.IsUnionCaseTester then // TODO: this currently fails, use when fixed
if memb.IsPropertyGetterMethod && memb.LogicalName.StartsWith("get_Is") then
// if memb.IsUnionCaseTester then // insufficient, could be an interface member
if
memb.IsPropertyGetterMethod
&& not memb.IsDispatchSlot
&& not memb.IsOverrideOrExplicitInterfaceImplementation
&& memb.LogicalName.StartsWith("get_Is")
then
let unionCaseName = memb.LogicalName |> Naming.replacePrefix "get_Is" ""
ent.UnionCases |> Seq.tryFind (fun uc -> uc.Name = unionCaseName)
else
Expand Down
11 changes: 9 additions & 2 deletions src/Fable.Transforms/Rust/Fable2Rust.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,11 @@ module Util =
else
mkGenericPathExpr (splitNameParts ident.Name) None

let isThisArgumentIdentExpr (expr: Fable.Expr) =
match expr with
| Fable.IdentExpr ident -> ident.IsThisArgument
| _ -> false

// let transformExprMaybeIdentExpr (com: IRustCompiler) ctx (expr: Fable.Expr) =
// match expr with
// | Fable.IdentExpr ident when ident.IsThisArgument ->
Expand Down Expand Up @@ -1602,7 +1607,9 @@ module Util =
let prepareRefForPatternMatch (com: IRustCompiler) ctx typ (name: string option) fableExpr =
let expr = com.TransformExpr(ctx, fableExpr)

if (name.IsSome && isRefScoped ctx name.Value) || (isInRefType com typ) then
if isThisArgumentIdentExpr fableExpr then
expr
elif (name.IsSome && isRefScoped ctx name.Value) || (isInRefType com typ) then
expr
elif shouldBeRefCountWrapped com ctx typ |> Option.isSome then
expr |> makeAsRef
Expand Down Expand Up @@ -4576,7 +4583,7 @@ module Util =
let isIgnoredMember (memb: Fable.MemberFunctionOrValue) = ent.IsFSharpExceptionDeclaration // to filter out compiler-generated exception equality

let isInterfaceMember (memb: Fable.MemberFunctionOrValue) =
memb.IsDispatchSlot
(memb.IsDispatchSlot || memb.IsOverrideOrExplicitInterfaceImplementation)
&& (memb.DeclaringEntity
|> Option.bind com.TryGetEntity
|> Option.map (fun ent -> ent.IsInterface)
Expand Down

0 comments on commit 83802a8

Please sign in to comment.