From 7734e780df09a104471aec676b292b876b6a4aa2 Mon Sep 17 00:00:00 2001 From: Hongbo Zhang Date: Tue, 24 May 2016 15:35:36 -0400 Subject: [PATCH] [feature] fix #406 for better error message --- jscomp/ppx_entry.ml | 11 ++--- jscomp/test/.depend | 4 ++ jscomp/test/a.ml | 2 +- jscomp/test/attr_test.ml | 87 ++++++++++++++++++++++++++++++++++++++++ jscomp/test/test.mllib | 4 +- lib/js/test/attr_test.js | 16 ++++++++ ocaml | 2 +- 7 files changed, 118 insertions(+), 8 deletions(-) create mode 100644 jscomp/test/attr_test.ml create mode 100644 lib/js/test/attr_test.js diff --git a/jscomp/ppx_entry.ml b/jscomp/ppx_entry.ml index 7bf175d0b5..d9cd936fc5 100644 --- a/jscomp/ppx_entry.ml +++ b/jscomp/ppx_entry.ml @@ -309,10 +309,6 @@ let find_uncurry_attrs_and_remove (attrs : Parsetree.attributes ) = | _ -> false ) attrs -let uncurry_attr loc : Parsetree.attribute = - {txt = "uncurry"; loc}, PStr [] - - let uncurry_fn_type loc ty ptyp_attributes (args : Parsetree.core_type ) body : Parsetree.core_type = let open Parsetree in @@ -677,7 +673,12 @@ let rec unsafe_mapper : Ast_mapper.mapper = body)}, _)}]) -> - handle_uncurry_generation loc pat body e mapper + begin match body.pexp_desc with + | Pexp_fun _ -> + Location.raise_errorf ~loc + "`fun %%uncurry (param0, param1) -> ` instead of `fun %%uncurry param0 param1 ->` " + | _ -> handle_uncurry_generation loc pat body e mapper + end | Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "#@"; loc}}, [("", fn); ("", pat)]) diff --git a/jscomp/test/.depend b/jscomp/test/.depend index 0618ec9ba4..d202a2098a 100644 --- a/jscomp/test/.depend +++ b/jscomp/test/.depend @@ -55,6 +55,8 @@ array_test.cmj : ../stdlib/pervasives.cmi mt.cmi ../stdlib/list.cmi \ ../stdlib/array.cmi array_test.cmi array_test.cmx : ../stdlib/pervasives.cmx mt.cmx ../stdlib/list.cmx \ ../stdlib/array.cmx array_test.cmi +attr_test.cmj : +attr_test.cmx : b.cmj : b.cmx : 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 \ ../stdlib/array.cmi array_test.cmi array_test.cmj : ../stdlib/pervasives.cmj mt.cmj ../stdlib/list.cmj \ ../stdlib/array.cmj array_test.cmi +attr_test.cmo : +attr_test.cmj : b.cmo : b.cmj : basic_module_test.cmo : ../stdlib/set.cmi pr6726.cmo offset.cmo \ diff --git a/jscomp/test/a.ml b/jscomp/test/a.ml index 76f0290817..434be5576f 100644 --- a/jscomp/test/a.ml +++ b/jscomp/test/a.ml @@ -22,5 +22,5 @@ module U = Make(Test_order) include N (* let v = "xhg" *) (* let () = v.[0] <- 'a' *) - +(* let u = fun %uncurry x y -> x + y *) end : sig end) diff --git a/jscomp/test/attr_test.ml b/jscomp/test/attr_test.ml new file mode 100644 index 0000000000..276f58daba --- /dev/null +++ b/jscomp/test/attr_test.ml @@ -0,0 +1,87 @@ + +let u = fun [@uncurry] (x,y) -> x + y + +let h = u (1,2) [@uncurry] + +type u = < v : int ; y : int > [@uncurry] + +type number = float + +class type date = + object [@uncurry] + method toDateString : unit -> string + method toTimeString : unit -> string + method toLocaleString : unit -> string + method toLocaleDateString : unit -> string + method toLocaleTimeString : unit -> string + method valueOf : unit -> number + method getTime : unit -> number + method getFullYear : unit -> number + method getUTCFullYear : unit -> number + method getMonth : unit -> number + method getUTCMonth : unit -> number + method getDate : unit -> number + method getUTCDate : unit -> number + method getDay : unit -> number + method getUTCDay : unit -> number + method getHours : unit -> number + method getUTCHours : unit -> number + method getMinutes : unit -> number + method getUTCMinutes : unit -> number + method getSeconds : unit -> number + method getUTCSeconds : unit -> number + method getMilliseconds : unit -> number + method getUTCMilliseconds : unit -> number + method getTimezoneOffset : unit -> number + method setTime : number -> number + + method setMilliseconds : number -> number + method setUTCMilliseconds : number -> number + + method setSeconds : number -> number + method setSeconds__2 : number * number -> number + + method setUTCSeconds : number -> number + method setUTCSeconds__2 : number * number -> number + + method setMinutes : number -> number + method setMinutes__2 : number * number -> number + method setMinutes__3 : number * number * number -> number + + method setUTCMinutes : number -> number + method setUTCMinutes__2 : number * number -> number + method setUTCMinutes__3 : number * number * number -> number + + method setHours : number -> number + method setHours__2 : number * number -> number + method setHours__3 : number * number * number -> number + method setHours__4 : number * number * number * number -> number + + method setUTCHours : number -> number + method setUTCHours__2 : number * number -> number + method setUTCHours__3 : number * number * number -> number + method setUTCHours__4 : number * number * number * number -> number + + + + method setDate : number -> number + method setUTCDate : number -> number + method setMonth : number -> number + method setMonth__2 : number * number -> number + method setUTCMonth : number * number + method setUTCMonth__2 : number * number -> number + + + method setFullYear : number -> number + method setFullYear__2 : number * number -> number + method setFullYear__3 : number * number * number -> number + + method setUTCFullYear : number -> number + method setUTCFullYear__2 : number * number -> number + method setUTCFullYear__3 : number * number * number -> number + + method toUTCString : unit -> string + method toISOString : unit -> string + method toJSON__ : unit -> string + method toJSON__1 : 'a -> string + end diff --git a/jscomp/test/test.mllib b/jscomp/test/test.mllib index 751bb1bf32..49af88b778 100644 --- a/jscomp/test/test.mllib +++ b/jscomp/test/test.mllib @@ -306,4 +306,6 @@ test_index obj_literal_ppx_test obj_literal_ppx -gpr_405_test \ No newline at end of file +gpr_405_test + +attr_test \ No newline at end of file diff --git a/lib/js/test/attr_test.js b/lib/js/test/attr_test.js new file mode 100644 index 0000000000..715dc40189 --- /dev/null +++ b/lib/js/test/attr_test.js @@ -0,0 +1,16 @@ +// GENERATED CODE BY BUCKLESCRIPT VERSION 0.5.0 , PLEASE EDIT WITH CARE +'use strict'; + + +function u(param) { + return param[0] + param[1] | 0; +} + +var h = u(/* tuple */[ + 1, + 2 + ]); + +exports.u = u; +exports.h = h; +/* h Not a pure module */ diff --git a/ocaml b/ocaml index 75c5940342..a967bca429 160000 --- a/ocaml +++ b/ocaml @@ -1 +1 @@ -Subproject commit 75c5940342bbf2abdc87ee75b3c4534d14eec673 +Subproject commit a967bca429163fa95420095c5358202bdfc7392f