koffi 1.3.11 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/CMakeLists.txt +7 -2
  2. package/ChangeLog.md +53 -15
  3. package/README.md +6 -0
  4. package/build/qemu/2.0.1/koffi_darwin_arm64.tar.gz +0 -0
  5. package/build/qemu/2.0.1/koffi_darwin_x64.tar.gz +0 -0
  6. package/build/qemu/2.0.1/koffi_freebsd_arm64.tar.gz +0 -0
  7. package/build/qemu/2.0.1/koffi_freebsd_ia32.tar.gz +0 -0
  8. package/build/qemu/2.0.1/koffi_freebsd_x64.tar.gz +0 -0
  9. package/build/qemu/2.0.1/koffi_linux_arm32hf.tar.gz +0 -0
  10. package/build/qemu/2.0.1/koffi_linux_arm64.tar.gz +0 -0
  11. package/build/qemu/2.0.1/koffi_linux_ia32.tar.gz +0 -0
  12. package/build/qemu/2.0.1/koffi_linux_riscv64hf64.tar.gz +0 -0
  13. package/build/qemu/2.0.1/koffi_linux_x64.tar.gz +0 -0
  14. package/build/qemu/2.0.1/koffi_openbsd_ia32.tar.gz +0 -0
  15. package/build/qemu/2.0.1/koffi_openbsd_x64.tar.gz +0 -0
  16. package/build/qemu/2.0.1/koffi_win32_arm64.tar.gz +0 -0
  17. package/build/qemu/2.0.1/koffi_win32_ia32.tar.gz +0 -0
  18. package/build/qemu/2.0.1/koffi_win32_x64.tar.gz +0 -0
  19. package/doc/changes.md +156 -1
  20. package/doc/conf.py +14 -1
  21. package/doc/contribute.md +0 -1
  22. package/doc/dist/doctrees/benchmarks.doctree +0 -0
  23. package/doc/dist/doctrees/changes.doctree +0 -0
  24. package/doc/dist/doctrees/environment.pickle +0 -0
  25. package/doc/dist/doctrees/functions.doctree +0 -0
  26. package/doc/dist/doctrees/index.doctree +0 -0
  27. package/doc/dist/doctrees/types.doctree +0 -0
  28. package/doc/dist/html/.buildinfo +1 -1
  29. package/doc/dist/html/_sources/benchmarks.md.txt +2 -2
  30. package/doc/dist/html/_sources/changes.md.txt +156 -1
  31. package/doc/dist/html/_sources/functions.md.txt +14 -10
  32. package/doc/dist/html/_sources/types.md.txt +18 -1
  33. package/doc/dist/html/benchmarks.html +7 -3
  34. package/doc/dist/html/changes.html +230 -14
  35. package/doc/dist/html/contribute.html +5 -1
  36. package/doc/dist/html/functions.html +25 -18
  37. package/doc/dist/html/genindex.html +5 -1
  38. package/doc/dist/html/index.html +13 -19
  39. package/doc/dist/html/memory.html +7 -3
  40. package/doc/dist/html/objects.inv +0 -0
  41. package/doc/dist/html/platforms.html +6 -2
  42. package/doc/dist/html/search.html +5 -1
  43. package/doc/dist/html/searchindex.js +1 -1
  44. package/doc/dist/html/start.html +5 -1
  45. package/doc/dist/html/types.html +28 -4
  46. package/doc/functions.md +138 -14
  47. package/doc/templates/badges.html +5 -0
  48. package/doc/types.md +45 -12
  49. package/package.json +9 -7
  50. package/qemu/registry/machines.json +5 -5
  51. package/qemu/registry/sha256sum.txt +16 -16
  52. package/src/abi_arm32.cc +91 -19
  53. package/src/abi_arm32_fwd.S +121 -57
  54. package/src/abi_arm64.cc +91 -19
  55. package/src/abi_arm64_fwd.S +96 -0
  56. package/src/abi_arm64_fwd.asm +128 -0
  57. package/src/abi_riscv64.cc +89 -19
  58. package/src/abi_riscv64_fwd.S +96 -0
  59. package/src/abi_x64_sysv.cc +94 -22
  60. package/src/abi_x64_sysv_fwd.S +96 -0
  61. package/src/abi_x64_win.cc +89 -19
  62. package/src/abi_x64_win_fwd.asm +128 -0
  63. package/src/abi_x86.cc +94 -19
  64. package/src/abi_x86_fwd.S +96 -0
  65. package/src/abi_x86_fwd.asm +128 -0
  66. package/src/call.cc +97 -63
  67. package/src/call.hh +2 -1
  68. package/src/ffi.cc +453 -141
  69. package/src/ffi.hh +23 -9
  70. package/src/parser.cc +18 -41
  71. package/src/util.cc +117 -27
  72. package/src/util.hh +3 -2
  73. package/test/callbacks.js +54 -8
  74. package/test/misc.c +29 -14
  75. package/test/raylib.js +1 -1
  76. package/test/sqlite.js +25 -17
  77. package/test/sync.js +44 -32
  78. package/vendor/libcc/libcc.cc +18 -5
  79. package/vendor/libcc/libcc.hh +70 -23
  80. package/build/qemu/1.3.11/koffi_darwin_arm64.tar.gz +0 -0
  81. package/build/qemu/1.3.11/koffi_darwin_x64.tar.gz +0 -0
  82. package/build/qemu/1.3.11/koffi_freebsd_arm64.tar.gz +0 -0
  83. package/build/qemu/1.3.11/koffi_freebsd_ia32.tar.gz +0 -0
  84. package/build/qemu/1.3.11/koffi_freebsd_x64.tar.gz +0 -0
  85. package/build/qemu/1.3.11/koffi_linux_arm32hf.tar.gz +0 -0
  86. package/build/qemu/1.3.11/koffi_linux_arm64.tar.gz +0 -0
  87. package/build/qemu/1.3.11/koffi_linux_ia32.tar.gz +0 -0
  88. package/build/qemu/1.3.11/koffi_linux_riscv64hf64.tar.gz +0 -0
  89. package/build/qemu/1.3.11/koffi_linux_x64.tar.gz +0 -0
  90. package/build/qemu/1.3.11/koffi_openbsd_ia32.tar.gz +0 -0
  91. package/build/qemu/1.3.11/koffi_openbsd_x64.tar.gz +0 -0
  92. package/build/qemu/1.3.11/koffi_win32_arm64.tar.gz +0 -0
  93. package/build/qemu/1.3.11/koffi_win32_ia32.tar.gz +0 -0
  94. package/build/qemu/1.3.11/koffi_win32_x64.tar.gz +0 -0
package/src/abi_x86.cc CHANGED
@@ -56,6 +56,22 @@ extern "C" int Trampoline12; extern "C" int TrampolineX12;
56
56
  extern "C" int Trampoline13; extern "C" int TrampolineX13;
57
57
  extern "C" int Trampoline14; extern "C" int TrampolineX14;
58
58
  extern "C" int Trampoline15; extern "C" int TrampolineX15;
59
+ extern "C" int Trampoline16; extern "C" int TrampolineX16;
60
+ extern "C" int Trampoline17; extern "C" int TrampolineX17;
61
+ extern "C" int Trampoline18; extern "C" int TrampolineX18;
62
+ extern "C" int Trampoline19; extern "C" int TrampolineX19;
63
+ extern "C" int Trampoline20; extern "C" int TrampolineX20;
64
+ extern "C" int Trampoline21; extern "C" int TrampolineX21;
65
+ extern "C" int Trampoline22; extern "C" int TrampolineX22;
66
+ extern "C" int Trampoline23; extern "C" int TrampolineX23;
67
+ extern "C" int Trampoline24; extern "C" int TrampolineX24;
68
+ extern "C" int Trampoline25; extern "C" int TrampolineX25;
69
+ extern "C" int Trampoline26; extern "C" int TrampolineX26;
70
+ extern "C" int Trampoline27; extern "C" int TrampolineX27;
71
+ extern "C" int Trampoline28; extern "C" int TrampolineX28;
72
+ extern "C" int Trampoline29; extern "C" int TrampolineX29;
73
+ extern "C" int Trampoline30; extern "C" int TrampolineX30;
74
+ extern "C" int Trampoline31; extern "C" int TrampolineX31;
59
75
 
60
76
  extern "C" napi_value CallSwitchStack(Napi::Function *func, size_t argc, napi_value *argv,
61
77
  uint8_t *old_sp, Span<uint8_t> *new_stack,
@@ -77,9 +93,25 @@ static void *const Trampolines[][2] = {
77
93
  { &Trampoline12, &TrampolineX12 },
78
94
  { &Trampoline13, &TrampolineX13 },
79
95
  { &Trampoline14, &TrampolineX14 },
80
- { &Trampoline15, &TrampolineX15 }
96
+ { &Trampoline15, &TrampolineX15 },
97
+ { &Trampoline16, &TrampolineX16 },
98
+ { &Trampoline17, &TrampolineX17 },
99
+ { &Trampoline18, &TrampolineX18 },
100
+ { &Trampoline19, &TrampolineX19 },
101
+ { &Trampoline20, &TrampolineX20 },
102
+ { &Trampoline21, &TrampolineX21 },
103
+ { &Trampoline22, &TrampolineX22 },
104
+ { &Trampoline23, &TrampolineX23 },
105
+ { &Trampoline24, &TrampolineX24 },
106
+ { &Trampoline25, &TrampolineX25 },
107
+ { &Trampoline26, &TrampolineX26 },
108
+ { &Trampoline27, &TrampolineX27 },
109
+ { &Trampoline28, &TrampolineX28 },
110
+ { &Trampoline29, &TrampolineX29 },
111
+ { &Trampoline30, &TrampolineX30 },
112
+ { &Trampoline31, &TrampolineX31 }
81
113
  };
82
- RG_STATIC_ASSERT(RG_LEN(Trampolines) == MaxTrampolines);
114
+ RG_STATIC_ASSERT(RG_LEN(Trampolines) == MaxTrampolines * 2);
83
115
 
84
116
  static RG_THREAD_LOCAL CallData *exec_call;
85
117
 
@@ -308,10 +340,10 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
308
340
  if (value.IsFunction()) {
309
341
  Napi::Function func = value.As<Napi::Function>();
310
342
 
311
- ptr = ReserveTrampoline(param.type->proto, func);
343
+ ptr = ReserveTrampoline(param.type->ref.proto, func);
312
344
  if (RG_UNLIKELY(!ptr))
313
345
  return false;
314
- } else if (CheckValueTag(instance, value, param.type)) {
346
+ } else if (CheckValueTag(instance, value, param.type->ref.marker)) {
315
347
  ptr = value.As<Napi::External<uint8_t>>().Data();
316
348
  } else if (IsNullOrUndefined(value)) {
317
349
  ptr = nullptr;
@@ -322,6 +354,8 @@ bool CallData::Prepare(const Napi::CallbackInfo &info)
322
354
 
323
355
  *(void **)((param.fast ? fast_ptr : args_ptr)++) = ptr;
324
356
  } break;
357
+
358
+ case PrimitiveKind::Prototype: { RG_UNREACHABLE(); } break;
325
359
  }
326
360
  }
327
361
 
@@ -361,6 +395,8 @@ void CallData::Execute()
361
395
  case PrimitiveKind::Array: { RG_UNREACHABLE(); } break;
362
396
  case PrimitiveKind::Float32: { result.f = PERFORM_CALL(F); } break;
363
397
  case PrimitiveKind::Float64: { result.d = PERFORM_CALL(D); } break;
398
+
399
+ case PrimitiveKind::Prototype: { RG_UNREACHABLE(); } break;
364
400
  }
365
401
 
366
402
  #undef PERFORM_CALL
@@ -368,10 +404,16 @@ void CallData::Execute()
368
404
 
369
405
  Napi::Value CallData::Complete()
370
406
  {
371
- PopOutArguments();
407
+ RG_DEFER {
408
+ PopOutArguments();
409
+
410
+ if (func->ret.type->dispose) {
411
+ func->ret.type->dispose(env, func->ret.type, result.ptr);
412
+ }
413
+ };
372
414
 
373
415
  switch (func->ret.type->primitive) {
374
- case PrimitiveKind::Void: return env.Null();
416
+ case PrimitiveKind::Void: return env.Undefined();
375
417
  case PrimitiveKind::Bool: return Napi::Boolean::New(env, result.u32);
376
418
  case PrimitiveKind::Int8: return Napi::Number::New(env, (double)result.i8);
377
419
  case PrimitiveKind::UInt8: return Napi::Number::New(env, (double)result.u8);
@@ -387,7 +429,7 @@ Napi::Value CallData::Complete()
387
429
  case PrimitiveKind::Callback: {
388
430
  if (result.ptr) {
389
431
  Napi::External<void> external = Napi::External<void>::New(env, result.ptr);
390
- SetValueTag(instance, external, func->ret.type);
432
+ SetValueTag(instance, external, func->ret.type->ref.marker);
391
433
 
392
434
  return external;
393
435
  } else {
@@ -404,6 +446,8 @@ Napi::Value CallData::Complete()
404
446
  case PrimitiveKind::Array: { RG_UNREACHABLE(); } break;
405
447
  case PrimitiveKind::Float32: return Napi::Number::New(env, (double)result.f);
406
448
  case PrimitiveKind::Float64: return Napi::Number::New(env, result.d);
449
+
450
+ case PrimitiveKind::Prototype: { RG_UNREACHABLE(); } break;
407
451
  }
408
452
 
409
453
  RG_UNREACHABLE();
@@ -411,12 +455,10 @@ Napi::Value CallData::Complete()
411
455
 
412
456
  void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegisters *out_reg)
413
457
  {
414
- const TrampolineInfo &trampoline = instance->trampolines[idx];
415
-
416
- if (RG_UNLIKELY(trampoline.generation != mem->generation)) {
417
- ThrowError<Napi::Error>(env, "Cannot use non-persistent callback beyond FFI call");
458
+ if (RG_UNLIKELY(env.IsExceptionPending()))
418
459
  return;
419
- }
460
+
461
+ const TrampolineInfo &trampoline = instance->trampolines[idx];
420
462
 
421
463
  const FunctionInfo *proto = trampoline.proto;
422
464
  Napi::Function func = trampoline.func.Value();
@@ -436,6 +478,18 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
436
478
  #endif
437
479
  }
438
480
 
481
+ RG_DEFER_N(err_guard) {
482
+ int pop = out_reg->ret_pop;
483
+ memset(out_reg, 0, RG_SIZE(*out_reg));
484
+ out_reg->x87_double = true;
485
+ out_reg->ret_pop = pop;
486
+ };
487
+
488
+ if (RG_UNLIKELY(trampoline.generation >= 0 && trampoline.generation != (int32_t)mem->generation)) {
489
+ ThrowError<Napi::Error>(env, "Cannot use non-registered callback beyond FFI call");
490
+ return;
491
+ }
492
+
439
493
  LocalArray<napi_value, MaxParameters> arguments;
440
494
 
441
495
  // Convert to JS arguments
@@ -507,12 +561,20 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
507
561
 
508
562
  Napi::Value arg = str ? Napi::String::New(env, str) : env.Null();
509
563
  arguments.Append(arg);
564
+
565
+ if (param.type->dispose) {
566
+ param.type->dispose(env, param.type, str);
567
+ }
510
568
  } break;
511
569
  case PrimitiveKind::String16: {
512
570
  const char16_t *str16 = *(const char16_t **)(args_ptr++);
513
571
 
514
572
  Napi::Value arg = str16 ? Napi::String::New(env, str16) : env.Null();
515
573
  arguments.Append(arg);
574
+
575
+ if (param.type->dispose) {
576
+ param.type->dispose(env, param.type, str16);
577
+ }
516
578
  } break;
517
579
  case PrimitiveKind::Pointer:
518
580
  case PrimitiveKind::Callback: {
@@ -520,12 +582,16 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
520
582
 
521
583
  if (ptr2) {
522
584
  Napi::External<void> external = Napi::External<void>::New(env, ptr2);
523
- SetValueTag(instance, external, param.type);
585
+ SetValueTag(instance, external, param.type->ref.marker);
524
586
 
525
587
  arguments.Append(external);
526
588
  } else {
527
589
  arguments.Append(env.Null());
528
590
  }
591
+
592
+ if (param.type->dispose) {
593
+ param.type->dispose(env, param.type, ptr2);
594
+ }
529
595
  } break;
530
596
  case PrimitiveKind::Record: {
531
597
  RG_ASSERT(!param.fast);
@@ -551,6 +617,8 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
551
617
  Napi::Value arg = Napi::Number::New(env, d);
552
618
  arguments.Append(arg);
553
619
  } break;
620
+
621
+ case PrimitiveKind::Prototype: { RG_UNREACHABLE(); } break;
554
622
  }
555
623
  }
556
624
 
@@ -561,6 +629,9 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
561
629
  [](Napi::Function *func, size_t argc, napi_value *argv) { return (napi_value)func->Call(argc, argv); });
562
630
  Napi::Value value(env, ret);
563
631
 
632
+ if (RG_UNLIKELY(env.IsExceptionPending()))
633
+ return;
634
+
564
635
  switch (type->primitive) {
565
636
  case PrimitiveKind::Void: {} break;
566
637
  case PrimitiveKind::Bool: {
@@ -630,14 +701,14 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
630
701
  case PrimitiveKind::Pointer: {
631
702
  uint8_t *ptr;
632
703
 
633
- if (CheckValueTag(instance, value, type)) {
704
+ if (CheckValueTag(instance, value, type->ref.marker)) {
634
705
  ptr = value.As<Napi::External<uint8_t>>().Data();
635
- } else if (IsObject(value) && type->ref->primitive == PrimitiveKind::Record) {
706
+ } else if (IsObject(value) && type->ref.type->primitive == PrimitiveKind::Record) {
636
707
  Napi::Object obj = value.As<Napi::Object>();
637
708
 
638
- ptr = AllocHeap(type->ref->size, 16);
709
+ ptr = AllocHeap(type->ref.type->size, 16);
639
710
 
640
- if (!PushObject(obj, type->ref, ptr))
711
+ if (!PushObject(obj, type->ref.type, ptr))
641
712
  return;
642
713
  } else if (IsNullOrUndefined(value)) {
643
714
  ptr = nullptr;
@@ -689,10 +760,10 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
689
760
  if (value.IsFunction()) {
690
761
  Napi::Function func2 = value.As<Napi::Function>();
691
762
 
692
- ptr = ReserveTrampoline(type->proto, func2);
763
+ ptr = ReserveTrampoline(type->ref.proto, func2);
693
764
  if (RG_UNLIKELY(!ptr))
694
765
  return;
695
- } else if (CheckValueTag(instance, value, type)) {
766
+ } else if (CheckValueTag(instance, value, type->ref.marker)) {
696
767
  ptr = value.As<Napi::External<uint8_t>>().Data();
697
768
  } else if (IsNullOrUndefined(value)) {
698
769
  ptr = nullptr;
@@ -703,7 +774,11 @@ void CallData::Relay(Size idx, uint8_t *own_sp, uint8_t *caller_sp, BackRegister
703
774
 
704
775
  out_reg->eax = (uint32_t)ptr;
705
776
  } break;
777
+
778
+ case PrimitiveKind::Prototype: { RG_UNREACHABLE(); } break;
706
779
  }
780
+
781
+ err_guard.Disable();
707
782
  }
708
783
 
709
784
  void *GetTrampoline(Size idx, const FunctionInfo *proto)
package/src/abi_x86_fwd.S CHANGED
@@ -101,6 +101,22 @@ ForwardCallRD:
101
101
  .global Trampoline13
102
102
  .global Trampoline14
103
103
  .global Trampoline15
104
+ .global Trampoline16
105
+ .global Trampoline17
106
+ .global Trampoline18
107
+ .global Trampoline19
108
+ .global Trampoline20
109
+ .global Trampoline21
110
+ .global Trampoline22
111
+ .global Trampoline23
112
+ .global Trampoline24
113
+ .global Trampoline25
114
+ .global Trampoline26
115
+ .global Trampoline27
116
+ .global Trampoline28
117
+ .global Trampoline29
118
+ .global Trampoline30
119
+ .global Trampoline31
104
120
  .global TrampolineX0
105
121
  .global TrampolineX1
106
122
  .global TrampolineX2
@@ -117,6 +133,22 @@ ForwardCallRD:
117
133
  .global TrampolineX13
118
134
  .global TrampolineX14
119
135
  .global TrampolineX15
136
+ .global TrampolineX16
137
+ .global TrampolineX17
138
+ .global TrampolineX18
139
+ .global TrampolineX19
140
+ .global TrampolineX20
141
+ .global TrampolineX21
142
+ .global TrampolineX22
143
+ .global TrampolineX23
144
+ .global TrampolineX24
145
+ .global TrampolineX25
146
+ .global TrampolineX26
147
+ .global TrampolineX27
148
+ .global TrampolineX28
149
+ .global TrampolineX29
150
+ .global TrampolineX30
151
+ .global TrampolineX31
120
152
  .global RelayCallback
121
153
  .global CallSwitchStack
122
154
 
@@ -224,6 +256,38 @@ Trampoline14:
224
256
  trampoline 14
225
257
  Trampoline15:
226
258
  trampoline 15
259
+ Trampoline16:
260
+ trampoline 16
261
+ Trampoline17:
262
+ trampoline 17
263
+ Trampoline18:
264
+ trampoline 18
265
+ Trampoline19:
266
+ trampoline 19
267
+ Trampoline20:
268
+ trampoline 20
269
+ Trampoline21:
270
+ trampoline 21
271
+ Trampoline22:
272
+ trampoline 22
273
+ Trampoline23:
274
+ trampoline 23
275
+ Trampoline24:
276
+ trampoline 24
277
+ Trampoline25:
278
+ trampoline 25
279
+ Trampoline26:
280
+ trampoline 26
281
+ Trampoline27:
282
+ trampoline 27
283
+ Trampoline28:
284
+ trampoline 28
285
+ Trampoline29:
286
+ trampoline 29
287
+ Trampoline30:
288
+ trampoline 30
289
+ Trampoline31:
290
+ trampoline 31
227
291
 
228
292
  TrampolineX0:
229
293
  trampoline_x87 0
@@ -257,6 +321,38 @@ TrampolineX14:
257
321
  trampoline_x87 14
258
322
  TrampolineX15:
259
323
  trampoline_x87 15
324
+ TrampolineX16:
325
+ trampoline_x87 16
326
+ TrampolineX17:
327
+ trampoline_x87 17
328
+ TrampolineX18:
329
+ trampoline_x87 18
330
+ TrampolineX19:
331
+ trampoline_x87 19
332
+ TrampolineX20:
333
+ trampoline_x87 20
334
+ TrampolineX21:
335
+ trampoline_x87 21
336
+ TrampolineX22:
337
+ trampoline_x87 22
338
+ TrampolineX23:
339
+ trampoline_x87 23
340
+ TrampolineX24:
341
+ trampoline_x87 24
342
+ TrampolineX25:
343
+ trampoline_x87 25
344
+ TrampolineX26:
345
+ trampoline_x87 26
346
+ TrampolineX27:
347
+ trampoline_x87 27
348
+ TrampolineX28:
349
+ trampoline_x87 28
350
+ TrampolineX29:
351
+ trampoline_x87 29
352
+ TrampolineX30:
353
+ trampoline_x87 30
354
+ TrampolineX31:
355
+ trampoline_x87 31
260
356
 
261
357
  # When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
262
358
  # The problem is that we're still running on the separate Koffi stack, and V8 will
@@ -105,6 +105,22 @@ public Trampoline12
105
105
  public Trampoline13
106
106
  public Trampoline14
107
107
  public Trampoline15
108
+ public Trampoline16
109
+ public Trampoline17
110
+ public Trampoline18
111
+ public Trampoline19
112
+ public Trampoline20
113
+ public Trampoline21
114
+ public Trampoline22
115
+ public Trampoline23
116
+ public Trampoline24
117
+ public Trampoline25
118
+ public Trampoline26
119
+ public Trampoline27
120
+ public Trampoline28
121
+ public Trampoline29
122
+ public Trampoline30
123
+ public Trampoline31
108
124
  public TrampolineX0
109
125
  public TrampolineX1
110
126
  public TrampolineX2
@@ -121,6 +137,22 @@ public TrampolineX12
121
137
  public TrampolineX13
122
138
  public TrampolineX14
123
139
  public TrampolineX15
140
+ public TrampolineX16
141
+ public TrampolineX17
142
+ public TrampolineX18
143
+ public TrampolineX19
144
+ public TrampolineX20
145
+ public TrampolineX21
146
+ public TrampolineX22
147
+ public TrampolineX23
148
+ public TrampolineX24
149
+ public TrampolineX25
150
+ public TrampolineX26
151
+ public TrampolineX27
152
+ public TrampolineX28
153
+ public TrampolineX29
154
+ public TrampolineX30
155
+ public TrampolineX31
124
156
  extern RelayCallback : PROC
125
157
  public CallSwitchStack
126
158
 
@@ -227,6 +259,54 @@ Trampoline14 endp
227
259
  Trampoline15 proc
228
260
  trampoline 15
229
261
  Trampoline15 endp
262
+ Trampoline16 proc
263
+ trampoline 16
264
+ Trampoline16 endp
265
+ Trampoline17 proc
266
+ trampoline 17
267
+ Trampoline17 endp
268
+ Trampoline18 proc
269
+ trampoline 18
270
+ Trampoline18 endp
271
+ Trampoline19 proc
272
+ trampoline 19
273
+ Trampoline19 endp
274
+ Trampoline20 proc
275
+ trampoline 20
276
+ Trampoline20 endp
277
+ Trampoline21 proc
278
+ trampoline 21
279
+ Trampoline21 endp
280
+ Trampoline22 proc
281
+ trampoline 22
282
+ Trampoline22 endp
283
+ Trampoline23 proc
284
+ trampoline 23
285
+ Trampoline23 endp
286
+ Trampoline24 proc
287
+ trampoline 24
288
+ Trampoline24 endp
289
+ Trampoline25 proc
290
+ trampoline 25
291
+ Trampoline25 endp
292
+ Trampoline26 proc
293
+ trampoline 26
294
+ Trampoline26 endp
295
+ Trampoline27 proc
296
+ trampoline 27
297
+ Trampoline27 endp
298
+ Trampoline28 proc
299
+ trampoline 28
300
+ Trampoline28 endp
301
+ Trampoline29 proc
302
+ trampoline 29
303
+ Trampoline29 endp
304
+ Trampoline30 proc
305
+ trampoline 30
306
+ Trampoline30 endp
307
+ Trampoline31 proc
308
+ trampoline 31
309
+ Trampoline31 endp
230
310
 
231
311
  TrampolineX0 proc
232
312
  trampoline_x87 0
@@ -276,6 +356,54 @@ TrampolineX14 endp
276
356
  TrampolineX15 proc
277
357
  trampoline_x87 15
278
358
  TrampolineX15 endp
359
+ TrampolineX16 proc
360
+ trampoline_x87 16
361
+ TrampolineX16 endp
362
+ TrampolineX17 proc
363
+ trampoline_x87 17
364
+ TrampolineX17 endp
365
+ TrampolineX18 proc
366
+ trampoline_x87 18
367
+ TrampolineX18 endp
368
+ TrampolineX19 proc
369
+ trampoline_x87 19
370
+ TrampolineX19 endp
371
+ TrampolineX20 proc
372
+ trampoline_x87 20
373
+ TrampolineX20 endp
374
+ TrampolineX21 proc
375
+ trampoline_x87 21
376
+ TrampolineX21 endp
377
+ TrampolineX22 proc
378
+ trampoline_x87 22
379
+ TrampolineX22 endp
380
+ TrampolineX23 proc
381
+ trampoline_x87 23
382
+ TrampolineX23 endp
383
+ TrampolineX24 proc
384
+ trampoline_x87 24
385
+ TrampolineX24 endp
386
+ TrampolineX25 proc
387
+ trampoline_x87 25
388
+ TrampolineX25 endp
389
+ TrampolineX26 proc
390
+ trampoline_x87 26
391
+ TrampolineX26 endp
392
+ TrampolineX27 proc
393
+ trampoline_x87 27
394
+ TrampolineX27 endp
395
+ TrampolineX28 proc
396
+ trampoline_x87 28
397
+ TrampolineX28 endp
398
+ TrampolineX29 proc
399
+ trampoline_x87 29
400
+ TrampolineX29 endp
401
+ TrampolineX30 proc
402
+ trampoline_x87 30
403
+ TrampolineX30 endp
404
+ TrampolineX31 proc
405
+ trampoline_x87 31
406
+ TrampolineX31 endp
279
407
 
280
408
  ; When a callback is relayed, Koffi will call into Node.js and V8 to execute Javascript.
281
409
  ; The problem is that we're still running on the separate Koffi stack, and V8 will