Skip to content

Commit e0ecf15

Browse files
committed
Merge pull request #410 from bloomberg/enhance_better_syntax_error
[feature] fix #406 for better error message
2 parents fc50dd6 + 7734e78 commit e0ecf15

File tree

7 files changed

+118
-8
lines changed

7 files changed

+118
-8
lines changed

jscomp/ppx_entry.ml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,6 @@ let find_uncurry_attrs_and_remove (attrs : Parsetree.attributes ) =
309309
| _ -> false ) attrs
310310

311311

312-
let uncurry_attr loc : Parsetree.attribute =
313-
{txt = "uncurry"; loc}, PStr []
314-
315-
316312
let uncurry_fn_type loc ty ptyp_attributes
317313
(args : Parsetree.core_type ) body : Parsetree.core_type =
318314
let open Parsetree in
@@ -677,7 +673,12 @@ let rec unsafe_mapper : Ast_mapper.mapper =
677673
body)},
678674
_)}])
679675
->
680-
handle_uncurry_generation loc pat body e mapper
676+
begin match body.pexp_desc with
677+
| Pexp_fun _ ->
678+
Location.raise_errorf ~loc
679+
"`fun %%uncurry (param0, param1) -> ` instead of `fun %%uncurry param0 param1 ->` "
680+
| _ -> handle_uncurry_generation loc pat body e mapper
681+
end
681682
| Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "#@"; loc}},
682683
[("", fn);
683684
("", pat)])

jscomp/test/.depend

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ array_test.cmj : ../stdlib/pervasives.cmi mt.cmi ../stdlib/list.cmi \
5555
../stdlib/array.cmi array_test.cmi
5656
array_test.cmx : ../stdlib/pervasives.cmx mt.cmx ../stdlib/list.cmx \
5757
../stdlib/array.cmx array_test.cmi
58+
attr_test.cmj :
59+
attr_test.cmx :
5860
b.cmj :
5961
b.cmx :
6062
basic_module_test.cmj : ../stdlib/set.cmi pr6726.cmj offset.cmj \
@@ -705,6 +707,8 @@ array_test.cmo : ../stdlib/pervasives.cmi mt.cmi ../stdlib/list.cmi \
705707
../stdlib/array.cmi array_test.cmi
706708
array_test.cmj : ../stdlib/pervasives.cmj mt.cmj ../stdlib/list.cmj \
707709
../stdlib/array.cmj array_test.cmi
710+
attr_test.cmo :
711+
attr_test.cmj :
708712
b.cmo :
709713
b.cmj :
710714
basic_module_test.cmo : ../stdlib/set.cmi pr6726.cmo offset.cmo \

jscomp/test/a.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ module U = Make(Test_order)
2222
include N
2323
(* let v = "xhg" *)
2424
(* let () = v.[0] <- 'a' *)
25-
25+
(* let u = fun %uncurry x y -> x + y *)
2626
end : sig end)

jscomp/test/attr_test.ml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
2+
let u = fun [@uncurry] (x,y) -> x + y
3+
4+
let h = u (1,2) [@uncurry]
5+
6+
type u = < v : int ; y : int > [@uncurry]
7+
8+
type number = float
9+
10+
class type date =
11+
object [@uncurry]
12+
method toDateString : unit -> string
13+
method toTimeString : unit -> string
14+
method toLocaleString : unit -> string
15+
method toLocaleDateString : unit -> string
16+
method toLocaleTimeString : unit -> string
17+
method valueOf : unit -> number
18+
method getTime : unit -> number
19+
method getFullYear : unit -> number
20+
method getUTCFullYear : unit -> number
21+
method getMonth : unit -> number
22+
method getUTCMonth : unit -> number
23+
method getDate : unit -> number
24+
method getUTCDate : unit -> number
25+
method getDay : unit -> number
26+
method getUTCDay : unit -> number
27+
method getHours : unit -> number
28+
method getUTCHours : unit -> number
29+
method getMinutes : unit -> number
30+
method getUTCMinutes : unit -> number
31+
method getSeconds : unit -> number
32+
method getUTCSeconds : unit -> number
33+
method getMilliseconds : unit -> number
34+
method getUTCMilliseconds : unit -> number
35+
method getTimezoneOffset : unit -> number
36+
method setTime : number -> number
37+
38+
method setMilliseconds : number -> number
39+
method setUTCMilliseconds : number -> number
40+
41+
method setSeconds : number -> number
42+
method setSeconds__2 : number * number -> number
43+
44+
method setUTCSeconds : number -> number
45+
method setUTCSeconds__2 : number * number -> number
46+
47+
method setMinutes : number -> number
48+
method setMinutes__2 : number * number -> number
49+
method setMinutes__3 : number * number * number -> number
50+
51+
method setUTCMinutes : number -> number
52+
method setUTCMinutes__2 : number * number -> number
53+
method setUTCMinutes__3 : number * number * number -> number
54+
55+
method setHours : number -> number
56+
method setHours__2 : number * number -> number
57+
method setHours__3 : number * number * number -> number
58+
method setHours__4 : number * number * number * number -> number
59+
60+
method setUTCHours : number -> number
61+
method setUTCHours__2 : number * number -> number
62+
method setUTCHours__3 : number * number * number -> number
63+
method setUTCHours__4 : number * number * number * number -> number
64+
65+
66+
67+
method setDate : number -> number
68+
method setUTCDate : number -> number
69+
method setMonth : number -> number
70+
method setMonth__2 : number * number -> number
71+
method setUTCMonth : number * number
72+
method setUTCMonth__2 : number * number -> number
73+
74+
75+
method setFullYear : number -> number
76+
method setFullYear__2 : number * number -> number
77+
method setFullYear__3 : number * number * number -> number
78+
79+
method setUTCFullYear : number -> number
80+
method setUTCFullYear__2 : number * number -> number
81+
method setUTCFullYear__3 : number * number * number -> number
82+
83+
method toUTCString : unit -> string
84+
method toISOString : unit -> string
85+
method toJSON__ : unit -> string
86+
method toJSON__1 : 'a -> string
87+
end

jscomp/test/test.mllib

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,4 +306,6 @@ test_index
306306

307307
obj_literal_ppx_test
308308
obj_literal_ppx
309-
gpr_405_test
309+
gpr_405_test
310+
311+
attr_test

lib/js/test/attr_test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// GENERATED CODE BY BUCKLESCRIPT VERSION 0.5.0 , PLEASE EDIT WITH CARE
2+
'use strict';
3+
4+
5+
function u(param) {
6+
return param[0] + param[1] | 0;
7+
}
8+
9+
var h = u(/* tuple */[
10+
1,
11+
2
12+
]);
13+
14+
exports.u = u;
15+
exports.h = h;
16+
/* h Not a pure module */

ocaml

Submodule ocaml updated from 75c5940 to a967bca

0 commit comments

Comments
 (0)