Skip to content

Commit 2ad17ed

Browse files
committed
optimize return (function ..) ()
1 parent ed2b9c7 commit 2ad17ed

File tree

7 files changed

+124
-17
lines changed

7 files changed

+124
-17
lines changed

jscomp/core/js_pass_tailcall_inline.ml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,17 @@ let subst (export_set : Set_ident.t) stats =
195195
| (None | Some _) ->
196196
[self#statement st ]
197197
end
198+
199+
| [{statement_desc =
200+
Return {return_value =
201+
{expression_desc =
202+
Call({expression_desc = Fun (false, params, block, env)},args,_info)}} } ]
203+
204+
when Ext_list.same_length params args
205+
->
206+
let no_tailcall = Js_fun_env.no_tailcall env in
207+
let processed_blocks = ( self#block block) (* see #278 before changes*) in
208+
inline_call no_tailcall params args processed_blocks
198209
| x :: xs
199210
->
200211
self#statement x :: self#block xs

jscomp/main/builtin_cmj_datasets.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(* ba29c4872145a0d30b8c762e4ed8921d *)
1+
(* 99c8b9ad581d95c57eb4f8cf8cbd0394 *)
22
let module_names : string array = Obj.magic (
33
"Gc" (* 220 *),
44
"Js" (* 23 *),
@@ -180,7 +180,7 @@ let module_data : string array = Obj.magic (
180180
(* Random *)"\132\149\166\190\000\000\000\250\000\000\000T\000\000\001\019\000\000\001\007\160\b\000\0004\000\176#int\144\160\160A@@@\176$bits\144\160\160A@@@\176$bool\144\160\160A@@@\176$init\144\160\160A@@@\176%State\145\b\000\000(\000\160\160A@@\160\160A@@\160\160A@@\160\160A@@\160\160B@@\160\160B@@@\160\160B@@\160\160B@@\160\160A@@@\176%float\144\160\160A@@@\176%int32\144\160\160A@@@\176%int64\144\160\160A@@@\176)full_init\144\160\160A@@@\176)get_state\144\160\160A@@@\176)nativeint\144\160\160A@@@\176)self_init\144\160\160A@@@\176)set_state\144\160\160A@@@A",
181181
(* Stream *)"\132\149\166\190\000\000\0012\000\000\000k\000\000\001U\000\000\001@\160\b\000\000T\000\176$dump\144\160\160B@@@\176$from\144\160\160A@@@\176$iapp\144\160\160B@@@\176$iter\144\160\160B@@@\176$junk\144\160\160A@@@\176$lapp\144\160\160B@@@\176$next\144\160\160A@@@\176$peek\144\160\160A@@@\176%count\144\160\160A@@@\176%empty\144\160\160A@@@\176%icons\144\160\160B@@@\176%ising\144\160\160A@@@\176%lcons\144\160\160B@@@\176%lsing\144\160\160A@@@\176%npeek\144\160\160B@@@\176%slazy\144\160\160A@@@\176&sempty\144@\144\146A\176'of_list\144\160\160A@@@\176(of_bytes\144\160\160A@@@\176)of_string\144\160\160A@@@\176*of_channel\144\160\160A@@@A",
182182
(* String *)"\132\149\166\190\000\000\t\019\000\000\002c\000\000\007\250\000\000\007\177\160\b\000\000\140\000\176#map\144\160\160B@@@\176#sub\144\160\160C@@@\176$blit\144\160\160E@@@\176$copy\144\160\160A@@\144\180A\160\176\001\0040!s@@\147\192\151\176\162i\1450unsafe_to_string\160\145\176@%BytesA@\176\192&_none_A@\000\255\004\002A\160\147\192\151\176\162C\145$copy\160\145\004\015@\004\r\160\147\192\151\176\162j\1450unsafe_of_string\160\145\004\025@\004\023\160\144\004&@\176\1924stdlib-406/string.mlm\001\b\155\001\b\164\192\004\002m\001\b\155\001\b\171@@@\176\192\004\004m\001\b\155\001\b\157\004\003@A@\176\004\002\192\004\006m\001\b\155\001\b\178@@\176$fill\144\160\160D@@@\176$init\144\160\160B@@\144\180B\160\176\001\004-!n@\160\176\001\004.!f@@\147\192\151\176\004>\160\004;@\0048\160\147\192\151\176\162A\145$init\160\145\004D@\004B\160\144\004\022\160\144\004\021@\176\192\004-k\001\bz\001\b|\192\004.k\001\bz\001\b\134@A@\176\004\003\192\0040k\001\bz\001\b\141@@\176$iter\144\160\160B@@@\176$make\144\160\160B@@\144\180B\160\176\001\004*!n@\160\176\001\004+!c@@\147\192\151\176\004h\160\004e@\004b\160\147\192\151\176\162@\145$make\160\145\004n@\004l\160\144\004\022\160\144\004\021@\176\192\004Wi\001\bW\001\bY\192\004Xi\001\bW\001\bc@A@\176\004\003\192\004Zi\001\bW\001\bj@@\176$mapi\144\160\160B@@@\176$trim\144\160\160A@@@\176%equal\144\160\160B@@\144\180B\160\176\001\005\173$prim@\160\176\001\005\172\004\003@@\151\176\149\1761caml_string_equalB \160\144\004\012\160\144\004\011@\176\192\004|\001\000\204\001\025\162\001\025\162\192\004}\001\000\204\001\025\162\001\025\225@\176%index\144\160\160B@@@\176%iteri\144\160\160B@@@\176&concat\144\160\160B@@@\176&rindex\144\160\160B@@@\176'compare\144\160\160B@@\144\180B\160\176\001\004\171!x@\160\176\001\004\172!y@@\151\176\149\1763caml_string_compareB \160\144\004\r\160\144\004\012@\176\192\004\170\001\000\203\001\025o\001\025\139\192\004\171\001\000\203\001\025o\001\025\161@\176'escaped\144\160\160A@@@\176(contains\144\160\160B@@@\176)index_opt\144\160\160B@@@\176)lowercase\144\160\160A@@\144\180A\160\176\001\005{!s@@\147\192\151\176\004\234\160\004\231@\004\228\160\147\192\151\176\162`\145)lowercase\160\145\004\240@\004\238\160\147\192\151\176\004\225\160\004\222@\004\244\160\144\004\025@\176\192\004\221\001\000\222\001\027t\001\027\130\192\004\222\001\000\222\001\027t\001\027\137@@@\176\192\004\224\001\000\222\001\027t\001\027v\004\003@A@\176\004\002\192\004\226\001\000\222\001\027t\001\027\144@@\176)uppercase\144\160\160A@@\144\180A\160\176\001\005y!s@@\147\192\151\176\005\001\018\160\005\001\015@\005\001\012\160\147\192\151\176\162_\145)uppercase\160\145\005\001\024@\005\001\022\160\147\192\151\176\005\001\t\160\005\001\006@\005\001\028\160\144\004\025@\176\192\005\001\005\001\000\220\001\027E\001\027S\192\005\001\006\001\000\220\001\027E\001\027Z@@@\176\192\005\001\b\001\000\220\001\027E\001\027G\004\003@A@\176\004\002\192\005\001\n\001\000\220\001\027E\001\027a@@\176*capitalize\144\160\160A@@\144\180A\160\176\001\005}!s@@\147\192\151\176\005\001:\160\005\0017@\005\0014\160\147\192\151\176\162a\145*capitalize\160\145\005\001@@\005\001>\160\147\192\151\176\005\0011\160\005\001.@\005\001D\160\144\004\025@\176\192\005\001-\001\000\224\001\027\164\001\027\179\192\005\001.\001\000\224\001\027\164\001\027\186@@@\176\192\005\0010\001\000\224\001\027\164\001\027\166\004\003@A@\176\004\002\192\005\0012\001\000\224\001\027\164\001\027\193@@\176*index_from\144\160\160C@@@\176*rindex_opt\144\160\160B@@@\176+rindex_from\144\160\160C@@@\176,uncapitalize\144\160\160A@@\144\180A\160\176\001\005\127!s@@\147\192\151\176\005\001q\160\005\001n@\005\001k\160\147\192\151\176\162b\145,uncapitalize\160\145\005\001w@\005\001u\160\147\192\151\176\005\001h\160\005\001e@\005\001{\160\144\004\025@\176\192\005\001d\001\000\226\001\027\215\001\027\232\192\005\001e\001\000\226\001\027\215\001\027\239@@@\176\192\005\001g\001\000\226\001\027\215\001\027\217\004\003@A@\176\004\002\192\005\001i\001\000\226\001\027\215\001\027\246@@\176-contains_from\144\160\160C@@@\176-split_on_char\144\160\160B@@@\176.index_from_opt\144\160\160C@@@\176.rcontains_from\144\160\160C@@@\176/lowercase_ascii\144\160\160A@@\144\180A\160\176\001\004\164!s@@\147\192\151\176\005\001\173\160\005\001\170@\005\001\167\160\147\192\151\176\162d\145/lowercase_ascii\160\145\005\001\179@\005\001\177\160\147\192\151\176\005\001\164\160\005\001\161@\005\001\183\160\144\004\025@\176\192\005\001\160\001\000\195\001\024\188\001\024\208\192\005\001\161\001\000\195\001\024\188\001\024\215@@@\176\192\005\001\163\001\000\195\001\024\188\001\024\190\004\003@A@\176\004\002\192\005\001\165\001\000\195\001\024\188\001\024\222@@\176/rindex_from_opt\144\160\160C@@@\176/uppercase_ascii\144\160\160A@@\144\180A\160\176\001\004\162!s@@\147\192\151\176\005\001\218\160\005\001\215@\005\001\212\160\147\192\151\176\162c\145/uppercase_ascii\160\145\005\001\224@\005\001\222\160\147\192\151\176\005\001\209\160\005\001\206@\005\001\228\160\144\004\025@\176\192\005\001\205\001\000\193\001\024\129\001\024\149\192\005\001\206\001\000\193\001\024\129\001\024\156@@@\176\192\005\001\208\001\000\193\001\024\129\001\024\131\004\003@A@\176\004\002\192\005\001\210\001\000\193\001\024\129\001\024\163@@\1760capitalize_ascii\144\160\160A@@\144\180A\160\176\001\004\166!s@@\147\192\151\176\005\002\002\160\005\001\255@\005\001\252\160\147\192\151\176\162e\1450capitalize_ascii\160\145\005\002\b@\005\002\006\160\147\192\151\176\005\001\249\160\005\001\246@\005\002\012\160\144\004\025@\176\192\005\001\245\001\000\197\001\024\248\001\025\r\192\005\001\246\001\000\197\001\024\248\001\025\020@@@\176\192\005\001\248\001\000\197\001\024\248\001\024\250\004\003@A@\176\004\002\192\005\001\250\001\000\197\001\024\248\001\025\027@@\1762uncapitalize_ascii\144\160\160A@@\144\180A\160\176\001\004\168!s@@\147\192\151\176\005\002*\160\005\002'@\005\002$\160\147\192\151\176\162f\1452uncapitalize_ascii\160\145\005\0020@\005\002.\160\147\192\151\176\005\002!\160\005\002\030@\005\0024\160\144\004\025@\176\192\005\002\029\001\000\199\001\0257\001\025N\192\005\002\030\001\000\199\001\0257\001\025U@@@\176\192\005\002 \001\000\199\001\0257\001\0259\004\003@A@\176\004\002\192\005\002\"\001\000\199\001\0257\001\025\\@@A",
183-
(* Belt_Id *)"\132\149\166\190\000\000\002\224\000\000\000\215\000\000\002\187\000\000\002\167\160\b\000\000 \000\176(hashable\144\160\160B@@@\176)hashableU\144\160\160B@@\144\180B\160\176\001\004\183$hash@\160\176\001\004\184\"eq@@\151\176\177@\147\160$hash\160\"eq@@\160\144\004\015\160\144\004\014@\176\1921others/belt_Id.ml\000e\001\011s\001\011s\192\004\002\000h\001\011\150\001\011\153@\176*comparable\144\160\160A@@@\176+comparableU\144\160\160A@@\144\180A\160\176\001\004x#cmp@@\151\176\177@\147\160#cmp@@\160\144\004\n@\176\192\004\027r\001\007\150\001\007\150\192\004\028u\001\007\185\001\007\188@\176,MakeHashable\144\160\160A@@\144\180A\160\176\001\005)!M@@\197A\176\001\004\175$hash@\151\176\162@\145$hash\160\144\004\012@\176\192&_none_A@\000\255\004\002A\197B\176\001\004\174$hash@\180A\160\176\001\004\176!a@@\147\192\144\004\022\160\144\004\007@\176\192\004A\000s\001\0120\001\012W\192\004B\000s\001\0120\001\012]@@\197A\176\001\004\178\"eq@\151\176\162A\145\"eq\160\144\004(@\004\028\197B\176\001\004\177\"eq@\180B\160\176\001\004\179!a@\160\176\001\004\180!b@@\147\192\144\004\022\160\144\004\n\160\144\004\t@\176\192\004_\000u\001\012i\001\012\142\192\004`\000u\001\012i\001\012\148@@\151\176\177@\147\160\0040\160\004\024@@\160\144\0044\160\144\004\029@\176\192\004l\000o\001\011\253\001\011\253\192\004m\000v\001\012\149\001\012\152@\176-MakeHashableU\144\160\160A@@\144\180A\160\176\001\005+!M@@\144\004\003\176.MakeComparable\144\160\160A@@\144\180A\160\176\001\005-!M@@\197A\176\001\004s#cmp@\151\176\162@\145#cmp\160\144\004\012@\004\\\197B\176\001\004r#cmp@\180B\160\176\001\004t!a@\160\176\001\004u!b@@\147\192\144\004\022\160\144\004\n\160\144\004\t@\176\192\004\159\000@\001\b\185\001\b\224\192\004\160\000@\001\b\185\001\b\231@@\151\176\177@\147\160\004\023@@\160\144\004\026@\176\192\004\169{\001\b\n\001\b\n\192\004\170\000A\001\b\232\001\b\235@\176/MakeComparableU\144\160\160A@@\144\180A\160\176\001\005/!M@@\144\004\003A",
183+
(* Belt_Id *)"\132\149\166\190\000\000\002\224\000\000\000\215\000\000\002\187\000\000\002\167\160\b\000\000 \000\176(hashable\144\160\160B@@@\176)hashableU\144\160\160B@@\144\180B\160\176\001\004\183$hash@\160\176\001\004\184\"eq@@\151\176\177@\147\160$hash\160\"eq@@\160\144\004\015\160\144\004\014@\176\1921others/belt_Id.ml\000e\001\011s\001\011s\192\004\002\000h\001\011\150\001\011\153@\176*comparable\144\160\160A@@@\176+comparableU\144\160\160A@@\144\180A\160\176\001\004x#cmp@@\151\176\177@\147\160#cmp@@\160\144\004\n@\176\192\004\027r\001\007\150\001\007\150\192\004\028u\001\007\185\001\007\188@\176,MakeHashable\144\160\160A@@\144\180A\160\176\001\005'!M@@\197A\176\001\004\175$hash@\151\176\162@\145$hash\160\144\004\012@\176\192&_none_A@\000\255\004\002A\197B\176\001\004\174$hash@\180A\160\176\001\004\176!a@@\147\192\144\004\022\160\144\004\007@\176\192\004A\000s\001\0120\001\012W\192\004B\000s\001\0120\001\012]@@\197A\176\001\004\178\"eq@\151\176\162A\145\"eq\160\144\004(@\004\028\197B\176\001\004\177\"eq@\180B\160\176\001\004\179!a@\160\176\001\004\180!b@@\147\192\144\004\022\160\144\004\n\160\144\004\t@\176\192\004_\000u\001\012i\001\012\142\192\004`\000u\001\012i\001\012\148@@\151\176\177@\147\160\0040\160\004\024@@\160\144\0044\160\144\004\029@\176\192\004l\000o\001\011\253\001\011\253\192\004m\000v\001\012\149\001\012\152@\176-MakeHashableU\144\160\160A@@\144\180A\160\176\001\005)!M@@\144\004\003\176.MakeComparable\144\160\160A@@\144\180A\160\176\001\005*!M@@\197A\176\001\004s#cmp@\151\176\162@\145#cmp\160\144\004\012@\004\\\197B\176\001\004r#cmp@\180B\160\176\001\004t!a@\160\176\001\004u!b@@\147\192\144\004\022\160\144\004\n\160\144\004\t@\176\192\004\159\000@\001\b\185\001\b\224\192\004\160\000@\001\b\185\001\b\231@@\151\176\177@\147\160\004\023@@\160\144\004\026@\176\192\004\169{\001\b\n\001\b\n\192\004\170\000A\001\b\232\001\b\235@\176/MakeComparableU\144\160\160A@@\144\180A\160\176\001\005,!M@@\144\004\003A",
184184
(* Complex *)"\132\149\166\190\000\000\000\194\000\000\000M\000\000\000\234\000\000\000\229\160\b\000\000<\000\176#add\144\160\160B@@@\176#arg\144\160\160A@@@\176#div\144\160\160B@@@\176#exp\144\160\160A@@@\176#inv\144\160\160A@@@\176#log\144\160\160A@@@\176#mul\144\160\160B@@@\176#neg\144\160\160A@@@\176#pow\144\160\160B@@@\176#sub\144\160\160B@@@\176$conj\144\160\160A@@@\176$norm\144\160\160A@@@\176$sqrt\144\160\160A@@@\176%norm2\144\160\160A@@@\176%polar\144\160\160B@@@A",
185185
(* Hashtbl *)"\132\149\166\190\000\000\001\212\000\000\000\138\000\000\001\200\000\000\001\171\160\b\000\000`\000\176#add\144\160\160C@@@\176#mem\144\160\160B@@@\176$Make\144\160\160A@@@\176$copy\144\160\160A@@@\176$find\144\160\160B@@@\176$fold\144\160\160C@@@\176$hash\144\160\160A@@@\176$iter\144\160\160B@@@\176%clear\144\160\160A@@@\176%reset\144\160\160A@@@\176%stats\144\160\160A@@@\176&create\144\160\160B@@@\176&length\144\160\160A@@\144\180A\160\176\001\005\021!h@@\151\176\162@\160$sizeA\160\144\004\t@\176\1925stdlib-406/hashtbl.ml\000|\001\015\142\001\015\157\192\004\002\000|\001\015\142\001\015\163@\176&remove\144\160\160B@@@\176'replace\144\160\160C@@@\176(find_all\144\160\160B@@@\176(find_opt\144\160\160B@@@\176)randomize\144\160\160A@@@\176*MakeSeeded\144\160\160A@@@\176*hash_param\144\160\160C@@@\176+seeded_hash\144\160\160B@@@\176-is_randomized\144\160\160A@@@\1761seeded_hash_param\144\160\160D@@@\1762filter_map_inplace\144\160\160B@@@A",
186186
(* Js_cast *)"\132\149\166\190\000\000\000\003\000\000\000\001\000\000\000\003\000\000\000\003\160\128A",

jscomp/test/event_ffi.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,8 @@ function h34(x) {
3434
}
3535

3636
function ocaml_run(b, c) {
37-
return (function (x, y, z) {
38-
return (x + y | 0) + z | 0;
39-
})(1, b, c);
37+
var x = 1;
38+
return (x + b | 0) + c | 0;
4039
}
4140

4241
function a0() {

jscomp/test/mutable_uncurry_test.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
'use strict';
2+
3+
var Caml_obj = require("../../lib/js/caml_obj.js");
4+
5+
function eq(param, param$1) {
6+
var x = param.contents;
7+
var y = param$1.contents;
8+
return x === y;
9+
}
10+
11+
function eq2(x, param) {
12+
var y = param.contents;
13+
return Caml_obj.caml_equal(x.contents, y);
14+
}
15+
16+
console.log(eq({
17+
contents: 1
18+
}, {
19+
contents: 2
20+
}));
21+
22+
var u = {
23+
hi: (function (param, param$1) {
24+
var x = param.contents;
25+
var y = param$1.contents;
26+
return x === y;
27+
})
28+
};
29+
30+
var h = u.hi({
31+
contents: 1
32+
}, {
33+
contents: 2
34+
});
35+
36+
exports.eq = eq;
37+
exports.eq2 = eq2;
38+
exports.u = u;
39+
exports.h = h;
40+
/* Not a pure module */

0 commit comments

Comments
 (0)