Skip to content

Commit 6ec86c0

Browse files
Support ValueOption module
1 parent 4e24d35 commit 6ec86c0

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

src/Fable.Transforms/Replacements.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,11 +1687,11 @@ let options isStruct (com: ICompiler) (_: Context) r (t: Type) (i: CallInfo) (th
16871687
| "get_IsNone", Some c -> Test(c, OptionTest false, r) |> Some
16881688
| _ -> None
16891689

1690-
let optionModule (com: ICompiler) (ctx: Context) r (t: Type) (i: CallInfo) (_: Expr option) (args: Expr list) =
1690+
let optionModule isStruct (com: ICompiler) (ctx: Context) r (t: Type) (i: CallInfo) (_: Expr option) (args: Expr list) =
16911691
let toArray r t arg =
16921692
Helper.LibCall(com, "Option", "toArray", Array(t, MutableArray), [arg], ?loc=r)
16931693
match i.CompiledName, args with
1694-
| "None", _ -> NewOption(None, t, false) |> makeValue r |> Some
1694+
| "None", _ -> NewOption(None, t, isStruct) |> makeValue r |> Some
16951695
| "GetValue", [c] ->
16961696
Helper.LibCall(com, "Option", "value", t, args, ?loc=r) |> Some
16971697
| ("OfObj" | "OfNullable"), _ ->
@@ -2900,7 +2900,8 @@ let private replacedModules =
29002900
Types.option, options false
29012901
Types.valueOption, options true
29022902
"System.Nullable`1", nullables
2903-
"Microsoft.FSharp.Core.OptionModule", optionModule
2903+
"Microsoft.FSharp.Core.OptionModule", optionModule false
2904+
"Microsoft.FSharp.Core.ValueOption", optionModule true
29042905
"Microsoft.FSharp.Core.ResultModule", results
29052906
Types.bigint, bigints
29062907
"Microsoft.FSharp.Core.NumericLiterals.NumericLiteralI", bigints

tests/Dart/src/OptionTests.fs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ let tests() =
7474
Option.isNone o2 |> equal false
7575
Option.isSome o2 |> equal true
7676

77+
testCase "ValueOption.isSome/isNone works" <| fun () ->
78+
let o1: int voption = ValueNone
79+
let o2 = ValueSome 5
80+
ValueOption.isNone o1 |> equal true
81+
ValueOption.isSome o1 |> equal false
82+
ValueOption.isNone o2 |> equal false
83+
ValueOption.isSome o2 |> equal true
84+
7785
testCase "Option.IsSome/IsNone works" <| fun () ->
7886
let o1: int option = None
7987
let o2 = Some 5
@@ -82,6 +90,14 @@ let tests() =
8290
o2.IsNone |> equal false
8391
o2.IsSome |> equal true
8492

93+
testCase "ValueOption.IsSome/IsNone works" <| fun () ->
94+
let o1: int voption = ValueNone
95+
let o2 = Some 5
96+
o1.IsNone |> equal true
97+
o1.IsSome |> equal false
98+
o2.IsNone |> equal false
99+
o2.IsSome |> equal true
100+
85101
testCase "Option.iter works" <| fun () -> // See #198
86102
let mutable res = false
87103
let getOnlyOnce =

0 commit comments

Comments
 (0)