1
+ (* Copyright (C) 2019- Authors of BuckleScript
2
+ *
3
+ * This program is free software: you can redistribute it and/or modify
4
+ * it under the terms of the GNU Lesser General Public License as published by
5
+ * the Free Software Foundation, either version 3 of the License, or
6
+ * (at your option) any later version.
7
+ *
8
+ * In addition to the permissions granted to you by the LGPL, you may combine
9
+ * or link a "work that uses the Library" with a publicly distributed version
10
+ * of this file to produce a combined library or application, then distribute
11
+ * that combined work under the terms of your choosing, with no requirement
12
+ * to comply with the obligations normally placed on you by section 4 of the
13
+ * LGPL version 3 (or the corresponding section of a later version of the LGPL
14
+ * should you choose to use a later version).
15
+ *
16
+ * This program is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * along with this program; if not, write to the Free Software
23
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *)
24
+
25
+
26
+ type obj = Caml_obj_extern .t
27
+
28
+ let spliceApply : obj -> obj -> obj = fun% raw fn args -> {|
29
+ var i, argLen;
30
+ argLen = args.length
31
+ var applied = []
32
+ for (i = 0 ; i < argLen - 1 ; ++ i){
33
+ applied.push(args[i])
34
+ }
35
+ var lastOne = args[argLen - 1 ]
36
+ for (i = 0 ; i < lastOne.length; ++ i ){
37
+ applied.push(lastOne[i])
38
+ }
39
+ return fn.apply(null,applied)
40
+ | }
41
+
42
+ let spliceObjApply : obj -> obj -> obj -> obj = fun% raw obj name args -> {|
43
+ var i, argLen;
44
+ argLen = args.length
45
+ var applied = []
46
+ for (i = 0 ; i < argLen - 1 ; ++ i){
47
+ applied.push(args[i])
48
+ }
49
+ var lastOne = args[argLen - 1 ]
50
+ for (i = 0 ; i < lastOne.length; ++ i ){
51
+ applied.push(lastOne[i])
52
+ }
53
+ return (obj[name]).apply(obj,applied)
54
+ | }
0 commit comments