package binaryen_dsl

  1. Overview
  2. Docs

Source file b.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
module CI = Cstubs_internals

external binaryen_stub_1_BinaryenModuleCreate : unit -> CI.voidp
  = "binaryen_stub_1_BinaryenModuleCreate" 

external binaryen_stub_2_BinaryenModuleDispose : _ CI.fatptr -> unit
  = "binaryen_stub_2_BinaryenModuleDispose" 

external binaryen_stub_3_BinaryenTypeNone : unit -> Unsigned.uint64
  = "binaryen_stub_3_BinaryenTypeNone" 

external binaryen_stub_4_BinaryenTypeInt32 : unit -> Unsigned.uint64
  = "binaryen_stub_4_BinaryenTypeInt32" 

external binaryen_stub_5_BinaryenTypeInt64 : unit -> Unsigned.uint64
  = "binaryen_stub_5_BinaryenTypeInt64" 

external binaryen_stub_6_BinaryenTypeFloat32 : unit -> Unsigned.uint64
  = "binaryen_stub_6_BinaryenTypeFloat32" 

external binaryen_stub_7_BinaryenTypeFloat64 : unit -> Unsigned.uint64
  = "binaryen_stub_7_BinaryenTypeFloat64" 

external binaryen_stub_8_BinaryenTypeAnyref : unit -> Unsigned.uint64
  = "binaryen_stub_8_BinaryenTypeAnyref" 

external binaryen_stub_9_BinaryenTypeUnreachable : unit -> Unsigned.uint64
  = "binaryen_stub_9_BinaryenTypeUnreachable" 

external binaryen_stub_10_BinaryenTypeAuto : unit -> Unsigned.uint64
  = "binaryen_stub_10_BinaryenTypeAuto" 

external binaryen_stub_11_BinaryenTypeCreate
  : _ CI.fatptr -> Unsigned.uint32 -> Unsigned.uint64
  = "binaryen_stub_11_BinaryenTypeCreate" 

external binaryen_stub_12_BinaryenAddInt32 : unit -> int32
  = "binaryen_stub_12_BinaryenAddInt32" 

external binaryen_stub_13_BinaryenSubInt32 : unit -> int32
  = "binaryen_stub_13_BinaryenSubInt32" 

external binaryen_stub_14_BinaryenMulInt32 : unit -> int32
  = "binaryen_stub_14_BinaryenMulInt32" 

external binaryen_stub_15_BinaryenDivSInt32 : unit -> int32
  = "binaryen_stub_15_BinaryenDivSInt32" 

external binaryen_stub_16_BinaryenLtSInt32 : unit -> int32
  = "binaryen_stub_16_BinaryenLtSInt32" 

external binaryen_stub_17_BinaryenLeSInt32 : unit -> int32
  = "binaryen_stub_17_BinaryenLeSInt32" 

external binaryen_stub_18_BinaryenGtSInt32 : unit -> int32
  = "binaryen_stub_18_BinaryenGtSInt32" 

external binaryen_stub_19_BinaryenGeSInt32 : unit -> int32
  = "binaryen_stub_19_BinaryenGeSInt32" 

external binaryen_stub_20_BinaryenEqInt32 : unit -> int32
  = "binaryen_stub_20_BinaryenEqInt32" 

external binaryen_stub_21_BinaryenNeInt32 : unit -> int32
  = "binaryen_stub_21_BinaryenNeInt32" 

external binaryen_stub_22_BinaryenLiteralInt32 : int32 -> CI.managed_buffer
  = "binaryen_stub_22_BinaryenLiteralInt32" 

external binaryen_stub_23_BinaryenLiteralInt64 : int64 -> CI.managed_buffer
  = "binaryen_stub_23_BinaryenLiteralInt64" 

external binaryen_stub_24_BinaryenLiteralFloat32 : float -> CI.managed_buffer
  = "binaryen_stub_24_BinaryenLiteralFloat32" 

external binaryen_stub_25_BinaryenLiteralFloat64 : float -> CI.managed_buffer
  = "binaryen_stub_25_BinaryenLiteralFloat64" 

external binaryen_stub_26_BinaryenBlock
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> Unsigned.size_t ->
    Unsigned.uint64 -> CI.voidp = "binaryen_stub_26_BinaryenBlock" 

external binaryen_stub_27_BinaryenConst
  : _ CI.fatptr -> _ CI.fatptr -> CI.voidp = "binaryen_stub_27_BinaryenConst" 

external binaryen_stub_28_BinaryenBinary
  : _ CI.fatptr -> int32 -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_28_BinaryenBinary" 

external binaryen_stub_29_BinaryenUnreachable : _ CI.fatptr -> CI.voidp
  = "binaryen_stub_29_BinaryenUnreachable" 

external binaryen_stub_30_BinaryenReturn
  : _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_30_BinaryenReturn" 

external binaryen_stub_31_BinaryenIf
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_31_BinaryenIf" 

external binaryen_stub_32_BinaryenLoop
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_32_BinaryenLoop" 

external binaryen_stub_33_BinaryenBreak
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_33_BinaryenBreak" 

external binaryen_stub_34_BinaryenLocalGet
  : _ CI.fatptr -> int -> Unsigned.uint64 -> CI.voidp
  = "binaryen_stub_34_BinaryenLocalGet" 

external binaryen_stub_35_BinaryenLocalSet
  : _ CI.fatptr -> int -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_35_BinaryenLocalSet" 

external binaryen_stub_36_BinaryenLoad
  : _ CI.fatptr -> int -> bool -> int -> int -> Unsigned.uint64 ->
    _ CI.fatptr -> CI.voidp
  = "binaryen_stub_36_BinaryenLoad_byte7" "binaryen_stub_36_BinaryenLoad" 

external binaryen_stub_37_BinaryenStore
  : _ CI.fatptr -> int -> int -> int -> _ CI.fatptr -> _ CI.fatptr ->
    Unsigned.uint64 -> CI.voidp
  = "binaryen_stub_37_BinaryenStore_byte7" "binaryen_stub_37_BinaryenStore" 

external binaryen_stub_38_BinaryenCall
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> Unsigned.size_t ->
    Unsigned.uint64 -> CI.voidp = "binaryen_stub_38_BinaryenCall" 

external binaryen_stub_39_BinaryenMemoryFill
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_39_BinaryenMemoryFill" 

external binaryen_stub_40_BinaryenMemoryCopy
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_40_BinaryenMemoryCopy" 

external binaryen_stub_41_BinaryenAddFunction
  : _ CI.fatptr -> _ CI.fatptr -> Unsigned.uint64 -> Unsigned.uint64 ->
    _ CI.fatptr -> Unsigned.size_t -> _ CI.fatptr -> CI.voidp
  =
  "binaryen_stub_41_BinaryenAddFunction_byte7" "binaryen_stub_41_BinaryenAddFunction"
  

external binaryen_stub_42_BinaryenAddFunctionImport
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr ->
    Unsigned.uint64 -> Unsigned.uint64 -> unit
  =
  "binaryen_stub_42_BinaryenAddFunctionImport_byte6" "binaryen_stub_42_BinaryenAddFunctionImport"
  

external binaryen_stub_43_BinaryenAddFunctionExport
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_43_BinaryenAddFunctionExport" 

external binaryen_stub_44_BinaryenAddGlobal
  : _ CI.fatptr -> _ CI.fatptr -> Unsigned.uint64 -> bool -> _ CI.fatptr ->
    CI.voidp = "binaryen_stub_44_BinaryenAddGlobal" 

external binaryen_stub_45_BinaryenGlobalGet
  : _ CI.fatptr -> _ CI.fatptr -> Unsigned.uint64 -> CI.voidp
  = "binaryen_stub_45_BinaryenGlobalGet" 

external binaryen_stub_46_BinaryenGlobalSet
  : _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr -> CI.voidp
  = "binaryen_stub_46_BinaryenGlobalSet" 

external binaryen_stub_47_BinaryenDrop
  : _ CI.fatptr -> _ CI.fatptr -> CI.voidp = "binaryen_stub_47_BinaryenDrop" 

external binaryen_stub_48_BinaryenSetMemory
  : _ CI.fatptr -> int -> int -> _ CI.fatptr -> _ CI.fatptr -> _ CI.fatptr ->
    _ CI.fatptr -> _ CI.fatptr -> Unsigned.size_t -> bool -> unit
  =
  "binaryen_stub_48_BinaryenSetMemory_byte10" "binaryen_stub_48_BinaryenSetMemory"
  

external binaryen_stub_49_BinaryenSetDebugInfo : bool -> unit
  = "binaryen_stub_49_BinaryenSetDebugInfo" 

external binaryen_stub_50_BinaryenModuleAllocateAndWriteText
  : _ CI.fatptr -> CI.voidp
  = "binaryen_stub_50_BinaryenModuleAllocateAndWriteText" 

external binaryen_stub_51_BinaryenModuleAllocateAndWrite
  : _ CI.fatptr -> _ CI.fatptr -> CI.managed_buffer
  = "binaryen_stub_51_BinaryenModuleAllocateAndWrite" 

external binaryen_stub_52_clean_binary_result : _ CI.fatptr -> unit
  = "binaryen_stub_52_clean_binary_result" 

external binaryen_stub_53_dump_bytes_to_path
  : _ CI.fatptr -> Unsigned.size_t -> _ CI.fatptr -> unit
  = "binaryen_stub_53_dump_bytes_to_path" 

type 'a result = 'a
type 'a return = 'a
type 'a fn =
 | Returns  : 'a CI.typ   -> 'a return fn
 | Function : 'a CI.typ * 'b fn  -> ('a -> 'b) fn
let map_result f x = f x
let returning t = Returns t
let (@->) f p = Function (f, p)
let foreign : type a b. string -> (a -> b) fn -> (a -> b) =
  fun name t -> match t, name with
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Size_t,
        Function
          (CI.View {CI.ty = CI.Pointer _; write = x5; _}, Returns CI.Void))),
  "dump_bytes_to_path" ->
  (fun x1 x3 x4 ->
    let CI.CPointer x7 = x5 x4 in
    let CI.CPointer x2 = x1 in
    let x6 = x7 in binaryen_stub_53_dump_bytes_to_path x2 x3 x6)
| Function (CI.Struct _, Returns CI.Void), "clean_binary_result" ->
  (fun x8 ->
    let CI.CPointer x9 = Ctypes.addr x8 in
    binaryen_stub_52_clean_binary_result x9)
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x13; _},
        Returns (CI.Struct _ as x16))),
  "BinaryenModuleAllocateAndWrite" ->
  (fun x10 x12 ->
    let CI.CPointer x15 = x13 x12 in
    let CI.CPointer x11 = x10 in
    let x14 = x15 in
    CI.make_structured x16
      (binaryen_stub_51_BinaryenModuleAllocateAndWrite x11 x14))
| Function
    (CI.Pointer _, Returns (CI.View {CI.ty = CI.Pointer x19; read = x20; _})),
  "BinaryenModuleAllocateAndWriteText" ->
  (fun x17 ->
    let CI.CPointer x18 = x17 in
    x20
    (CI.make_ptr x19
       (binaryen_stub_50_BinaryenModuleAllocateAndWriteText x18)))
| Function (CI.Primitive CI.Bool, Returns CI.Void), "BinaryenSetDebugInfo" ->
  binaryen_stub_49_BinaryenSetDebugInfo
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int,
        Function
          (CI.Primitive CI.Int,
           Function
             (CI.View {CI.ty = CI.Pointer _; write = x27; _},
              Function
                (CI.Pointer _,
                 Function
                   (CI.Pointer _,
                    Function
                      (CI.Pointer _,
                       Function
                         (CI.Pointer _,
                          Function
                            (CI.Primitive CI.Size_t,
                             Function (CI.Primitive CI.Bool, Returns CI.Void)))))))))),
  "BinaryenSetMemory" ->
  (fun x22 x24 x25 x26 x30 x32 x34 x36 x38 x39 ->
    let CI.CPointer x37 = x36 in
    let CI.CPointer x35 = x34 in
    let CI.CPointer x33 = x32 in
    let CI.CPointer x31 = x30 in
    let CI.CPointer x29 = x27 x26 in
    let CI.CPointer x23 = x22 in
    let x28 = x29 in
    binaryen_stub_48_BinaryenSetMemory x23 x24 x25 x28 x31 x33 x35 x37 x38
    x39)
| Function (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x44))),
  "BinaryenDrop" ->
  (fun x40 x42 ->
    let CI.CPointer x43 = x42 in
    let CI.CPointer x41 = x40 in
    CI.make_ptr x44 (binaryen_stub_47_BinaryenDrop x41 x43))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x48; _},
        Function (CI.Pointer _, Returns (CI.Pointer x53)))),
  "BinaryenGlobalSet" ->
  (fun x45 x47 x51 ->
    let CI.CPointer x52 = x51 in
    let CI.CPointer x50 = x48 x47 in
    let CI.CPointer x46 = x45 in
    let x49 = x50 in
    CI.make_ptr x53 (binaryen_stub_46_BinaryenGlobalSet x46 x49 x52))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x57; _},
        Function
          (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x61; _},
           Returns (CI.Pointer x63)))),
  "BinaryenGlobalGet" ->
  (fun x54 x56 x60 ->
    let CI.CPointer x59 = x57 x56 in
    let CI.CPointer x55 = x54 in
    let x58 = x59 in
    let x62 = x61 x60 in
    CI.make_ptr x63 (binaryen_stub_45_BinaryenGlobalGet x55 x58 x62))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x67; _},
        Function
          (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x71; _},
           Function
             (CI.Primitive CI.Bool,
              Function (CI.Pointer _, Returns (CI.Pointer x76)))))),
  "BinaryenAddGlobal" ->
  (fun x64 x66 x70 x73 x74 ->
    let CI.CPointer x75 = x74 in
    let CI.CPointer x69 = x67 x66 in
    let CI.CPointer x65 = x64 in
    let x68 = x69 in
    let x72 = x71 x70 in
    CI.make_ptr x76 (binaryen_stub_44_BinaryenAddGlobal x65 x68 x72 x73 x75))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x80; _},
        Function
          (CI.View {CI.ty = CI.Pointer _; write = x84; _},
           Returns (CI.Pointer x87)))),
  "BinaryenAddFunctionExport" ->
  (fun x77 x79 x83 ->
    let CI.CPointer x86 = x84 x83 in
    let CI.CPointer x82 = x80 x79 in
    let CI.CPointer x78 = x77 in
    let x81 = x82 in
    let x85 = x86 in
    CI.make_ptr x87 (binaryen_stub_43_BinaryenAddFunctionExport x78 x81 x85))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x91; _},
        Function
          (CI.View {CI.ty = CI.Pointer _; write = x95; _},
           Function
             (CI.View {CI.ty = CI.Pointer _; write = x99; _},
              Function
                (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x103; _},
                 Function
                   (CI.View
                      {CI.ty = CI.Primitive CI.Uint64_t; write = x106; _},
                    Returns CI.Void)))))),
  "BinaryenAddFunctionImport" ->
  (fun x88 x90 x94 x98 x102 x105 ->
    let CI.CPointer x101 = x99 x98 in
    let CI.CPointer x97 = x95 x94 in
    let CI.CPointer x93 = x91 x90 in
    let CI.CPointer x89 = x88 in
    let x92 = x93 in
    let x96 = x97 in
    let x100 = x101 in
    let x104 = x103 x102 in
    let x107 = x106 x105 in
    binaryen_stub_42_BinaryenAddFunctionImport x89 x92 x96 x100 x104 x107)
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x111; _},
        Function
          (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x115; _},
           Function
             (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x118; _},
              Function
                (CI.Pointer _,
                 Function
                   (CI.Primitive CI.Size_t,
                    Function (CI.Pointer _, Returns (CI.Pointer x125)))))))),
  "BinaryenAddFunction" ->
  (fun x108 x110 x114 x117 x120 x122 x123 ->
    let CI.CPointer x124 = x123 in
    let CI.CPointer x121 = x120 in
    let CI.CPointer x113 = x111 x110 in
    let CI.CPointer x109 = x108 in
    let x112 = x113 in
    let x116 = x115 x114 in
    let x119 = x118 x117 in
    CI.make_ptr x125
      (binaryen_stub_41_BinaryenAddFunction x109 x112 x116 x119 x121 x122
        x124))
| Function
    (CI.Pointer _,
     Function
       (CI.Pointer _,
        Function
          (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x134))))),
  "BinaryenMemoryCopy" ->
  (fun x126 x128 x130 x132 ->
    let CI.CPointer x133 = x132 in
    let CI.CPointer x131 = x130 in
    let CI.CPointer x129 = x128 in
    let CI.CPointer x127 = x126 in
    CI.make_ptr x134
      (binaryen_stub_40_BinaryenMemoryCopy x127 x129 x131 x133))
| Function
    (CI.Pointer _,
     Function
       (CI.Pointer _,
        Function
          (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x143))))),
  "BinaryenMemoryFill" ->
  (fun x135 x137 x139 x141 ->
    let CI.CPointer x142 = x141 in
    let CI.CPointer x140 = x139 in
    let CI.CPointer x138 = x137 in
    let CI.CPointer x136 = x135 in
    CI.make_ptr x143
      (binaryen_stub_39_BinaryenMemoryFill x136 x138 x140 x142))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x147; _},
        Function
          (CI.Pointer _,
           Function
             (CI.Primitive CI.Size_t,
              Function
                (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x154; _},
                 Returns (CI.Pointer x156)))))),
  "BinaryenCall" ->
  (fun x144 x146 x150 x152 x153 ->
    let CI.CPointer x151 = x150 in
    let CI.CPointer x149 = x147 x146 in
    let CI.CPointer x145 = x144 in
    let x148 = x149 in
    let x155 = x154 x153 in
    CI.make_ptr x156 (binaryen_stub_38_BinaryenCall x145 x148 x151 x152 x155))
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int,
        Function
          (CI.Primitive CI.Int,
           Function
             (CI.Primitive CI.Int,
              Function
                (CI.Pointer _,
                 Function
                   (CI.Pointer _,
                    Function
                      (CI.View
                         {CI.ty = CI.Primitive CI.Uint64_t; write = x167; _},
                       Returns (CI.Pointer x169)))))))),
  "BinaryenStore" ->
  (fun x157 x159 x160 x161 x162 x164 x166 ->
    let CI.CPointer x165 = x164 in
    let CI.CPointer x163 = x162 in
    let CI.CPointer x158 = x157 in
    let x168 = x167 x166 in
    CI.make_ptr x169
      (binaryen_stub_37_BinaryenStore x158 x159 x160 x161 x163 x165 x168))
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int,
        Function
          (CI.Primitive CI.Bool,
           Function
             (CI.Primitive CI.Int,
              Function
                (CI.Primitive CI.Int,
                 Function
                   (CI.View
                      {CI.ty = CI.Primitive CI.Uint64_t; write = x177; _},
                    Function (CI.Pointer _, Returns (CI.Pointer x181)))))))),
  "BinaryenLoad" ->
  (fun x170 x172 x173 x174 x175 x176 x179 ->
    let CI.CPointer x180 = x179 in
    let CI.CPointer x171 = x170 in
    let x178 = x177 x176 in
    CI.make_ptr x181
      (binaryen_stub_36_BinaryenLoad x171 x172 x173 x174 x175 x178 x180))
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int,
        Function (CI.Pointer _, Returns (CI.Pointer x187)))),
  "BinaryenLocalSet" ->
  (fun x182 x184 x185 ->
    let CI.CPointer x186 = x185 in
    let CI.CPointer x183 = x182 in
    CI.make_ptr x187 (binaryen_stub_35_BinaryenLocalSet x183 x184 x186))
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int,
        Function
          (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x192; _},
           Returns (CI.Pointer x194)))),
  "BinaryenLocalGet" ->
  (fun x188 x190 x191 ->
    let CI.CPointer x189 = x188 in
    let x193 = x192 x191 in
    CI.make_ptr x194 (binaryen_stub_34_BinaryenLocalGet x189 x190 x193))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x198; _},
        Function
          (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x205))))),
  "BinaryenBreak" ->
  (fun x195 x197 x201 x203 ->
    let CI.CPointer x204 = x203 in
    let CI.CPointer x202 = x201 in
    let CI.CPointer x200 = x198 x197 in
    let CI.CPointer x196 = x195 in
    let x199 = x200 in
    CI.make_ptr x205 (binaryen_stub_33_BinaryenBreak x196 x199 x202 x204))
| Function
    (CI.Pointer _,
     Function
       (CI.View {CI.ty = CI.Pointer _; write = x209; _},
        Function (CI.Pointer _, Returns (CI.Pointer x214)))),
  "BinaryenLoop" ->
  (fun x206 x208 x212 ->
    let CI.CPointer x213 = x212 in
    let CI.CPointer x211 = x209 x208 in
    let CI.CPointer x207 = x206 in
    let x210 = x211 in
    CI.make_ptr x214 (binaryen_stub_32_BinaryenLoop x207 x210 x213))
| Function
    (CI.Pointer _,
     Function
       (CI.Pointer _,
        Function
          (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x223))))),
  "BinaryenIf" ->
  (fun x215 x217 x219 x221 ->
    let CI.CPointer x222 = x221 in
    let CI.CPointer x220 = x219 in
    let CI.CPointer x218 = x217 in
    let CI.CPointer x216 = x215 in
    CI.make_ptr x223 (binaryen_stub_31_BinaryenIf x216 x218 x220 x222))
| Function (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x228))),
  "BinaryenReturn" ->
  (fun x224 x226 ->
    let CI.CPointer x227 = x226 in
    let CI.CPointer x225 = x224 in
    CI.make_ptr x228 (binaryen_stub_30_BinaryenReturn x225 x227))
| Function (CI.Pointer _, Returns (CI.Pointer x231)), "BinaryenUnreachable" ->
  (fun x229 ->
    let CI.CPointer x230 = x229 in
    CI.make_ptr x231 (binaryen_stub_29_BinaryenUnreachable x230))
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Int32_t,
        Function
          (CI.Pointer _, Function (CI.Pointer _, Returns (CI.Pointer x239))))),
  "BinaryenBinary" ->
  (fun x232 x234 x235 x237 ->
    let CI.CPointer x238 = x237 in
    let CI.CPointer x236 = x235 in
    let CI.CPointer x233 = x232 in
    CI.make_ptr x239 (binaryen_stub_28_BinaryenBinary x233 x234 x236 x238))
| Function (CI.Pointer _, Function (CI.Struct _, Returns (CI.Pointer x244))),
  "BinaryenConst" ->
  (fun x240 x242 ->
    let CI.CPointer x243 = Ctypes.addr x242 in
    let CI.CPointer x241 = x240 in
    CI.make_ptr x244 (binaryen_stub_27_BinaryenConst x241 x243))
| Function
    (CI.Pointer _,
     Function
       (CI.Pointer _,
        Function
          (CI.Pointer _,
           Function
             (CI.Primitive CI.Size_t,
              Function
                (CI.View {CI.ty = CI.Primitive CI.Uint64_t; write = x253; _},
                 Returns (CI.Pointer x255)))))),
  "BinaryenBlock" ->
  (fun x245 x247 x249 x251 x252 ->
    let CI.CPointer x250 = x249 in
    let CI.CPointer x248 = x247 in
    let CI.CPointer x246 = x245 in
    let x254 = x253 x252 in
    CI.make_ptr x255
      (binaryen_stub_26_BinaryenBlock x246 x248 x250 x251 x254))
| Function (CI.Primitive CI.Double, Returns (CI.Struct _ as x257)),
  "BinaryenLiteralFloat64" ->
  (fun x256 ->
    CI.make_structured x257 (binaryen_stub_25_BinaryenLiteralFloat64 x256))
| Function (CI.Primitive CI.Float, Returns (CI.Struct _ as x259)),
  "BinaryenLiteralFloat32" ->
  (fun x258 ->
    CI.make_structured x259 (binaryen_stub_24_BinaryenLiteralFloat32 x258))
| Function (CI.Primitive CI.Int64_t, Returns (CI.Struct _ as x261)),
  "BinaryenLiteralInt64" ->
  (fun x260 ->
    CI.make_structured x261 (binaryen_stub_23_BinaryenLiteralInt64 x260))
| Function (CI.Primitive CI.Int32_t, Returns (CI.Struct _ as x263)),
  "BinaryenLiteralInt32" ->
  (fun x262 ->
    CI.make_structured x263 (binaryen_stub_22_BinaryenLiteralInt32 x262))
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenNeInt32" ->
  binaryen_stub_21_BinaryenNeInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenEqInt32" ->
  binaryen_stub_20_BinaryenEqInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenGeSInt32" ->
  binaryen_stub_19_BinaryenGeSInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenGtSInt32" ->
  binaryen_stub_18_BinaryenGtSInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenLeSInt32" ->
  binaryen_stub_17_BinaryenLeSInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenLtSInt32" ->
  binaryen_stub_16_BinaryenLtSInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenDivSInt32" ->
  binaryen_stub_15_BinaryenDivSInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenMulInt32" ->
  binaryen_stub_14_BinaryenMulInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenSubInt32" ->
  binaryen_stub_13_BinaryenSubInt32
| Function (CI.Void, Returns (CI.Primitive CI.Int32_t)), "BinaryenAddInt32" ->
  binaryen_stub_12_BinaryenAddInt32
| Function
    (CI.Pointer _,
     Function
       (CI.Primitive CI.Uint32_t,
        Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x277; _}))),
  "BinaryenTypeCreate" ->
  (fun x274 x276 ->
    let CI.CPointer x275 = x274 in
    x277 (binaryen_stub_11_BinaryenTypeCreate x275 x276))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x279; _})),
  "BinaryenTypeAuto" ->
  (fun x278 -> x279 (binaryen_stub_10_BinaryenTypeAuto x278))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x281; _})),
  "BinaryenTypeUnreachable" ->
  (fun x280 -> x281 (binaryen_stub_9_BinaryenTypeUnreachable x280))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x283; _})),
  "BinaryenTypeAnyref" ->
  (fun x282 -> x283 (binaryen_stub_8_BinaryenTypeAnyref x282))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x285; _})),
  "BinaryenTypeFloat64" ->
  (fun x284 -> x285 (binaryen_stub_7_BinaryenTypeFloat64 x284))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x287; _})),
  "BinaryenTypeFloat32" ->
  (fun x286 -> x287 (binaryen_stub_6_BinaryenTypeFloat32 x286))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x289; _})),
  "BinaryenTypeInt64" ->
  (fun x288 -> x289 (binaryen_stub_5_BinaryenTypeInt64 x288))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x291; _})),
  "BinaryenTypeInt32" ->
  (fun x290 -> x291 (binaryen_stub_4_BinaryenTypeInt32 x290))
| Function
    (CI.Void,
     Returns (CI.View {CI.ty = CI.Primitive CI.Uint64_t; read = x293; _})),
  "BinaryenTypeNone" ->
  (fun x292 -> x293 (binaryen_stub_3_BinaryenTypeNone x292))
| Function (CI.Pointer _, Returns CI.Void), "BinaryenModuleDispose" ->
  (fun x294 ->
    let CI.CPointer x295 = x294 in binaryen_stub_2_BinaryenModuleDispose x295)
| Function (CI.Void, Returns (CI.Pointer x297)), "BinaryenModuleCreate" ->
  (fun x296 -> CI.make_ptr x297 (binaryen_stub_1_BinaryenModuleCreate x296))
| _, s ->  Printf.ksprintf failwith "No match for %s" s


let foreign_value : type a. string -> a Ctypes.typ -> a Ctypes.ptr =
  fun name t -> match t, name with
| _, s ->  Printf.ksprintf failwith "No match for %s" s