diff --git a/jscomp/ppx_entry.ml b/jscomp/ppx_entry.ml index d9cd936fc5..201d26d346 100644 --- a/jscomp/ppx_entry.ml +++ b/jscomp/ppx_entry.ml @@ -377,7 +377,7 @@ let handle_typ ptyp_desc = Ptyp_object ( methods, closed_flag) ; ptyp_attributes ; ptyp_loc = loc - } -> + } -> let methods = List.map (fun (label, ptyp_attrs, core_type ) -> match find_uncurry_attrs_and_remove ptyp_attrs with | None, _ -> label, ptyp_attrs , self.typ self core_type @@ -400,6 +400,24 @@ let handle_typ end | _ -> super.typ self ty +let handle_ctyp + (super : Ast_mapper.mapper) + (self : Ast_mapper.mapper) + (ty : Parsetree.class_type) = + match ty with + | {pcty_attributes ; + pcty_desc ; (* we won't have [ class type v = u -> object[@uncurry] ]*) + pcty_loc = loc + } -> + begin match find_uncurry_attrs_and_remove pcty_attributes with + | Some _, pcty_attributes' -> + Ext_ref.protect uncurry true begin fun () -> + self.class_type self {ty with pcty_attributes = pcty_attributes'} + end + | None, _ -> super.class_type self ty + end + + let handle_debugger loc payload = match payload with | Parsetree.PStr ( []) @@ -732,6 +750,7 @@ let rec unsafe_mapper : Ast_mapper.mapper = | _ -> Ast_mapper.default_mapper.expr mapper e ); typ = (fun self typ -> handle_typ Ast_mapper.default_mapper self typ); + class_type = (fun self ctyp -> handle_ctyp Ast_mapper.default_mapper self ctyp); structure_item = (fun mapper (str : Parsetree.structure_item) -> begin match str.pstr_desc with | Pstr_extension ( ({txt = "bs.raw"; loc}, payload), _attrs) diff --git a/jscomp/test/attr_test.ml b/jscomp/test/attr_test.ml index 276f58daba..646479170f 100644 --- a/jscomp/test/attr_test.ml +++ b/jscomp/test/attr_test.ml @@ -10,78 +10,15 @@ 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/demo.ml b/jscomp/test/demo.ml index 10da20f625..e57401f886 100644 --- a/jscomp/test/demo.ml +++ b/jscomp/test/demo.ml @@ -1,8 +1,8 @@ -(* open Ui_defs *) + class type widget = - object - method on : string * (event -> unit [@uncurry]) -> unit [@uncurry] + object [@uncurry] + method on : string * (event -> unit ) -> unit end and event = object @@ -12,57 +12,55 @@ and event = class type title = - object - method title__set : string -> unit [@uncurry] + object [@uncurry] + method title__set : string -> unit method title : string end class type text = - object - method text__set : string -> unit [@uncurry] + object [@uncurry] + method text__set : string -> unit method text : string end class type measure = - object - method minHeight__set : int -> unit [@uncurry] + object [@uncurry] + method minHeight__set : int -> unit method minHeight : int - method minWidth__set : int -> unit [@uncurry] + method minWidth__set : int -> unit method minWidth : int - method maxHeight__set : int -> unit [@uncurry] - method maxHeight : int [@uncurry] - method maxWidth__set : int -> unit [@uncurry] + method maxHeight__set : int -> unit + method maxHeight : int + method maxWidth__set : int -> unit method maxWidth : int - end class type layout = - object - method orientation__set : string -> unit [@uncurry] + object [@uncurry] + method orientation__set : string -> unit method orientation : string end class type applicationContext = - object - method exit : int -> unit [@uncurry] - (* exit'overloading : int -> string -> unit *) + object [@uncurry] + method exit : int -> unit end class type contentable = - object - method content__set : #widget Js.t -> unit [@uncurry] - method content : #widget Js.t [@uncurry] + object[@uncurry] + method content__set : #widget Js.t -> unit + method content : #widget Js.t method contentWidth : int - method contentWidth__set : int -> unit [@uncurry] + method contentWidth__set : int -> unit end class type hostedWindow = - object + object [@uncurry] inherit widget inherit title inherit contentable - method show : unit -> unit [@uncurry] - method hide : unit -> unit [@uncurry] - method focus : unit -> unit [@uncurry] - method appContext__set : applicationContext -> unit [@uncurry] + method show : unit -> unit + method hide : unit -> unit + method focus : unit -> unit + method appContext__set : applicationContext -> unit end class type hostedContent = @@ -73,51 +71,31 @@ class type hostedContent = class type stackPanel = - object + object [@uncurry] inherit measure inherit layout inherit widget - method addChild : #widget Js.t -> unit [@uncurry] + method addChild : #widget Js.t -> unit end -(* class type columns = *) -(* object *) -(* method width : int *) -(* end *) -class type any = - object - end - -type column -type titleRow - - - - -external mk_text : text: 'b -> = "" [@@bs.obj] -external mk_label : label : 'a -> = "" [@@bs.obj] -external mk_width : width : 'a -> = "" [@@bs.obj] -external mk_column : width: int -> unit -> column = "" [@@bs.obj] -external mk_titleRow : title: string -> unit -> titleRow = "" [@@bs.obj] - class type grid = - object + object [@uncurry] inherit widget inherit measure - method columns__set : array -> unit [@uncurry] + method columns__set : Js.t array -> unit method titleRows__set : -