Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion jscomp/ppx_entry.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 ( [])
Expand Down Expand Up @@ -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)
Expand Down
67 changes: 2 additions & 65 deletions jscomp/test/attr_test.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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


100 changes: 39 additions & 61 deletions jscomp/test/demo.ml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 =
Expand All @@ -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 -> <text : 'b> = "" [@@bs.obj]
external mk_label : label : 'a -> <label: 'a > = "" [@@bs.obj]
external mk_width : width : 'a -> <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 : <width : int; .. > array -> unit [@uncurry]
method columns__set : <width : int; .. > Js.t array -> unit
method titleRows__set :
<label : <text : string; .. > ; ..> array -> unit [@uncurry]
<label : <text : string; .. > Js.t ; ..> Js.t array -> unit
method dataSource__set :
<label : <text : string; .. > ; ..> array array -> unit [@uncurry]
<label : <text : string; .. > Js.t ; ..> Js.t array array -> unit
end

external set_interval : (unit -> unit [@uncurry]) -> float -> unit = ""
[@@bs.call "setInterval"] [@@bs.module "@runtime" "Runtime"]
external set_grid_columns : grid -> column array -> unit = "" [@@bs.call "set"]
external set_grid_titleRows : grid -> string array -> unit = "" [@@bs.call "set"]
external to_fixed : float -> int -> string = ""[@@bs.send "toFixed"]
external set_interval : (unit -> unit [@uncurry]) -> float -> unit = "setInterval"
[@@bs.call] [@@bs.module "@runtime" "Runtime"]


external to_fixed : float -> int -> string = "toFixed" [@@bs.send ]

class type button =
object
Expand Down Expand Up @@ -209,8 +187,8 @@ let ui_layout
stackPanel##addChild inputCode;
stackPanel##addChild button;

let mk_titleRow = fun text -> (mk_label ~label:(mk_text ~text )) in
let u = mk_width 200 in
let mk_titleRow text = {label = {text } [@bs.obj] }[@bs.obj] in
let u = {width = 200} [@bs.obj] in
grid##minHeight__set 300;
grid##titleRows__set
[| mk_titleRow "Ticker";
Expand Down
64 changes: 18 additions & 46 deletions lib/js/test/demo.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// GENERATED CODE BY BUCKLESCRIPT VERSION 0.5.0 , PLEASE EDIT WITH CARE
'use strict';

var Runtime = require("@runtime");
var UI = require("@ui");
var Curry = require("../curry");
var Runtime = require("@runtime");
var BUI = require("@blp/ui");
var Curry = require("../curry");

var data = /* array */[
/* record */[
Expand Down Expand Up @@ -45,31 +45,22 @@ function ui_layout(compile, lookup, appContext) {
stackPanel.addChild(grid);
stackPanel.addChild(inputCode);
stackPanel.addChild(button);
var mk_titleRow = function (text) {
return {
"label": {
"text": text
}
};
};
var u = {
"width": 200
};
grid.minHeight = 300;
grid.titleRows = /* array */[
{
"label": {
"text": "Ticker"
}
},
{
"label": {
"text": "Bid"
}
},
{
"label": {
"text": "Ask"
}
},
{
"label": {
"text": "Result"
}
}
mk_titleRow("Ticker"),
mk_titleRow("Bid"),
mk_titleRow("Ask"),
mk_titleRow("Result")
];
grid.columns = /* array */[
u,
Expand Down Expand Up @@ -104,30 +95,11 @@ function ui_layout(compile, lookup, appContext) {
"bid": bid,
"ask": ask
});
var text = bid.toFixed(2);
var text$1 = ask.toFixed(2);
var text$2 = result.toFixed(2);
return /* array */[
{
"label": {
"text": param[/* ticker */0]
}
},
{
"label": {
"text": text
}
},
{
"label": {
"text": text$1
}
},
{
"label": {
"text": text$2
}
}
mk_titleRow(param[/* ticker */0]),
mk_titleRow(bid.toFixed(2)),
mk_titleRow(ask.toFixed(2)),
mk_titleRow(result.toFixed(2))
];
});
}, 100);
Expand All @@ -136,4 +108,4 @@ function ui_layout(compile, lookup, appContext) {

exports.data = data;
exports.ui_layout = ui_layout;
/* @runtime Not a pure module */
/* @ui Not a pure module */