Skip to content

Commit 8768f1a

Browse files
committed
Handle variants with no parameters in transform and move build tests
1 parent f22be9c commit 8768f1a

15 files changed

+227
-97
lines changed

jscomp/build_tests/uncurried_accessors/input.js

Lines changed: 0 additions & 15 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/rescript.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Record_Curried.res

Lines changed: 0 additions & 10 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Record_Uncurried.res

Lines changed: 0 additions & 11 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Variant_Curried_1Param.res

Lines changed: 0 additions & 10 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Variant_Curried_2Param.res

Lines changed: 0 additions & 11 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Variant_Uncurried_1Param.res

Lines changed: 0 additions & 11 deletions
This file was deleted.

jscomp/build_tests/uncurried_accessors/src/Variant_Uncurried_2Param.res

Lines changed: 0 additions & 12 deletions
This file was deleted.

jscomp/frontend/ast_derive_projector.ml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ let init () =
1414
{
1515
structure_gen =
1616
(fun (tdcls : tdcls) _explict_nonrec ->
17-
let handle_uncurried_fn_tranform ~loc ~arity fn =
17+
let handle_uncurried_accessor_tranform ~loc ~arity accessor =
18+
(* Accessors with no params (arity of 0) are simply values and not functions *)
1819
match Config.uncurried.contents with
19-
| Uncurried -> Ast_uncurried.uncurriedFun ~loc ~arity fn
20-
| Legacy | Swap -> fn
20+
| Uncurried when arity > 0 ->
21+
Ast_uncurried.uncurriedFun ~loc ~arity accessor
22+
| _ -> accessor
2123
in
2224
let handle_tdcl tdcl =
2325
let core_type =
@@ -46,7 +48,7 @@ let init () =
4648
(Exp.ident {txt = Lident txt; loc})
4749
{txt = Longident.Lident pld_label; loc})
4850
(*arity will alwys be 1 since these are single param functions*)
49-
|> handle_uncurried_fn_tranform ~arity:1 ~loc))
51+
|> handle_uncurried_accessor_tranform ~arity:1 ~loc))
5052
| Ptype_variant constructor_declarations ->
5153
Ext_list.map constructor_declarations
5254
(fun
@@ -102,7 +104,7 @@ let init () =
102104
in
103105
Ext_list.fold_right vars exp (fun var b ->
104106
Ast_compatible.fun_ (Pat.var {loc; txt = var}) b)
105-
|> handle_uncurried_fn_tranform ~loc ~arity))
107+
|> handle_uncurried_accessor_tranform ~loc ~arity))
106108
| Ptype_abstract | Ptype_open ->
107109
Ast_derive_util.notApplicable tdcl.ptype_loc derivingName;
108110
[]
@@ -113,8 +115,10 @@ let init () =
113115
(fun (tdcls : Parsetree.type_declaration list) _explict_nonrec ->
114116
let handle_uncurried_type_tranform ~loc ~arity t =
115117
match Config.uncurried.contents with
116-
| Uncurried -> Ast_uncurried.uncurriedType ~loc ~arity t
117-
| Legacy | Swap -> t
118+
(* Accessors with no params (arity of 0) are simply values and not functions *)
119+
| Uncurried when arity > 0 ->
120+
Ast_uncurried.uncurriedType ~loc ~arity t
121+
| _ -> t
118122
in
119123
let handle_tdcl tdcl =
120124
let core_type =

jscomp/test/DerivingAccessorsCurried.js

Lines changed: 57 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//Assert that deriving accessors does not break
2+
//In curried mode
3+
4+
@deriving(accessors)
5+
type myRecord = { myField: int }
6+
7+
@deriving(accessors)
8+
type variant = | NoParam | Num(int) | DoubleNum(int, int)
9+
10+
//Asserts the correct signature for derived accessor
11+
let _myFieldAlias: myRecord => int = myField
12+
let _noParamAlias: variant = noParam
13+
let _numAlias: int => variant = num
14+
let _doubleNumAlias: (int, int) => variant = doubleNum
15+
16+
//Asserts that inference works when composing
17+
//with derived functions
18+
let compose = (a, accessor) => accessor(a)
19+
let _composedMyField = compose({ myField: 1 }, myField)
20+
let _composedNum = compose(1, num)
21+

jscomp/test/DerivingAccessorsUncurried.js

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//Assert that deriving accessors does not break
2+
//In uncurried mode
3+
@@uncurried
4+
5+
@deriving(accessors)
6+
type myRecord = { myField: int }
7+
8+
@deriving(accessors)
9+
type variant = | NoParam | Num(int) | DoubleNum(int, int)
10+
11+
//Asserts the correct signature for derived accessor
12+
let _myFieldAlias: myRecord => int = myField
13+
let _noParamAlias: variant = noParam
14+
let _numAlias: int => variant = num
15+
let _doubleNumAlias: (int, int) => variant = doubleNum
16+
17+
//Asserts that inference works when composing
18+
//with derived functions
19+
let compose = (a, accessor) => accessor(a)
20+
let _composedMyField = compose({ myField: 1 }, myField)
21+
let _composedNum = compose(1, num)
22+

jscomp/test/DerivingAccessorsUnurried.js

Lines changed: 57 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jscomp/test/build.ninja

Lines changed: 3 additions & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)