Skip to content

Commit 7027a4c

Browse files
committed
Change how partial application wrappers are defined. In theory it should require a tiny bit less memory and execute a tiny bit faster, but I've been unable to prove it.
1 parent b54f034 commit 7027a4c

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

compiler/src/Generate/JavaScript/Functions.hs

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,96 +15,106 @@ functions :: B.Builder
1515
functions =
1616
[r|
1717

18-
function F(arity, fun, wrapper) {
19-
wrapper.a = arity;
20-
wrapper.f = fun;
21-
return wrapper;
22-
}
23-
2418
/* @__NO_SIDE_EFFECTS__ */
2519
function F2(fun) {
26-
return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
20+
var wrapper = function(a) { return function(b) { return fun(a,b); }; };
21+
wrapper.a2 = fun;
22+
return wrapper;
2723
}
2824
/* @__NO_SIDE_EFFECTS__ */
2925
function F3(fun) {
30-
return F(3, fun, function(a) {
26+
var wrapper = function(a) {
3127
return function(b) { return function(c) { return fun(a, b, c); }; };
32-
});
28+
};
29+
wrapper.a3 = fun;
30+
return wrapper;
3331
}
3432
/* @__NO_SIDE_EFFECTS__ */
3533
function F4(fun) {
36-
return F(4, fun, function(a) { return function(b) { return function(c) {
34+
var wrapper = function(a) { return function(b) { return function(c) {
3735
return function(d) { return fun(a, b, c, d); }; }; };
38-
});
36+
};
37+
wrapper.a4 = fun;
38+
return wrapper;
3939
}
4040
/* @__NO_SIDE_EFFECTS__ */
4141
function F5(fun) {
42-
return F(5, fun, function(a) { return function(b) { return function(c) {
42+
var wrapper = function(a) { return function(b) { return function(c) {
4343
return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
44-
});
44+
};
45+
wrapper.a5 = fun;
46+
return wrapper;
4547
}
4648
/* @__NO_SIDE_EFFECTS__ */
4749
function F6(fun) {
48-
return F(6, fun, function(a) { return function(b) { return function(c) {
50+
var wrapper = function(a) { return function(b) { return function(c) {
4951
return function(d) { return function(e) { return function(f) {
5052
return fun(a, b, c, d, e, f); }; }; }; }; };
51-
});
53+
};
54+
wrapper.a6 = fun;
55+
return wrapper;
5256
}
5357
/* @__NO_SIDE_EFFECTS__ */
5458
function F7(fun) {
55-
return F(7, fun, function(a) { return function(b) { return function(c) {
59+
var wrapper = function(a) { return function(b) { return function(c) {
5660
return function(d) { return function(e) { return function(f) {
5761
return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
58-
});
62+
};
63+
wrapper.a7 = fun;
64+
return wrapper;
5965
}
6066
/* @__NO_SIDE_EFFECTS__ */
6167
function F8(fun) {
62-
return F(8, fun, function(a) { return function(b) { return function(c) {
68+
var wrapper = function(a) { return function(b) { return function(c) {
6369
return function(d) { return function(e) { return function(f) {
6470
return function(g) { return function(h) {
6571
return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
66-
});
72+
};
73+
wrapper.a8 = fun;
74+
return wrapper;
6775
}
6876
/* @__NO_SIDE_EFFECTS__ */
6977
function F9(fun) {
70-
return F(9, fun, function(a) { return function(b) { return function(c) {
78+
var wrapper = function(a) { return function(b) { return function(c) {
7179
return function(d) { return function(e) { return function(f) {
7280
return function(g) { return function(h) { return function(i) {
7381
return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
74-
});
82+
};
83+
wrapper.a9 = fun;
84+
return wrapper;
7585
}
7686

7787
/* @__NO_SIDE_EFFECTS__ */
7888
function A2(fun, a, b) {
79-
return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
89+
return fun.a2 ? fun.a2(a, b) : fun(a)(b);
8090
}
8191
/* @__NO_SIDE_EFFECTS__ */
8292
function A3(fun, a, b, c) {
83-
return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
93+
return fun.a3 ? fun.a3(a, b, c) : fun(a)(b)(c);
8494
}
8595
/* @__NO_SIDE_EFFECTS__ */
8696
function A4(fun, a, b, c, d) {
87-
return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
97+
return fun.a4 ? fun.a4(a, b, c, d) : fun(a)(b)(c)(d);
8898
}
8999
/* @__NO_SIDE_EFFECTS__ */
90100
function A5(fun, a, b, c, d, e) {
91-
return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
101+
return fun.a5 ? fun.a5(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
92102
}
93103
/* @__NO_SIDE_EFFECTS__ */
94104
function A6(fun, a, b, c, d, e, f) {
95-
return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
105+
return fun.a6 ? fun.a6(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f);
96106
}
97107
/* @__NO_SIDE_EFFECTS__ */
98108
function A7(fun, a, b, c, d, e, f, g) {
99-
return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
109+
return fun.a7 ? fun.a7(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g);
100110
}
101111
/* @__NO_SIDE_EFFECTS__ */
102112
function A8(fun, a, b, c, d, e, f, g, h) {
103-
return fun.a === 8 ? fun.f(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
113+
return fun.a8 ? fun.a8(a, b, c, d, e, f, g, h) : fun(a)(b)(c)(d)(e)(f)(g)(h);
104114
}
105115
/* @__NO_SIDE_EFFECTS__ */
106116
function A9(fun, a, b, c, d, e, f, g, h, i) {
107-
return fun.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
117+
return fun.a9 ? fun.a9(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
108118
}
109119

110120
|]

0 commit comments

Comments
 (0)