koffi 1.3.0 → 1.3.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 (27) hide show
  1. package/build/qemu/{1.3.0 → 1.3.1}/koffi_darwin_arm64.tar.gz +0 -0
  2. package/build/qemu/{1.3.0 → 1.3.1}/koffi_darwin_x64.tar.gz +0 -0
  3. package/build/qemu/{1.3.0 → 1.3.1}/koffi_freebsd_arm64.tar.gz +0 -0
  4. package/build/qemu/{1.3.0 → 1.3.1}/koffi_freebsd_ia32.tar.gz +0 -0
  5. package/build/qemu/{1.3.0 → 1.3.1}/koffi_freebsd_x64.tar.gz +0 -0
  6. package/build/qemu/{1.3.0 → 1.3.1}/koffi_linux_arm32hf.tar.gz +0 -0
  7. package/build/qemu/{1.3.0 → 1.3.1}/koffi_linux_arm64.tar.gz +0 -0
  8. package/build/qemu/{1.3.0 → 1.3.1}/koffi_linux_ia32.tar.gz +0 -0
  9. package/build/qemu/{1.3.0 → 1.3.1}/koffi_linux_riscv64hf64.tar.gz +0 -0
  10. package/build/qemu/{1.3.0 → 1.3.1}/koffi_linux_x64.tar.gz +0 -0
  11. package/build/qemu/{1.3.0 → 1.3.1}/koffi_openbsd_ia32.tar.gz +0 -0
  12. package/build/qemu/{1.3.0 → 1.3.1}/koffi_openbsd_x64.tar.gz +0 -0
  13. package/build/qemu/{1.3.0 → 1.3.1}/koffi_win32_arm64.tar.gz +0 -0
  14. package/build/qemu/{1.3.0 → 1.3.1}/koffi_win32_ia32.tar.gz +0 -0
  15. package/build/qemu/{1.3.0 → 1.3.1}/koffi_win32_x64.tar.gz +0 -0
  16. package/doc/conf.py +2 -2
  17. package/doc/dist/html/_static/pygments.css +54 -54
  18. package/doc/dist/html/functions.html +66 -66
  19. package/doc/dist/html/index.html +2 -2
  20. package/doc/dist/html/memory.html +2 -2
  21. package/doc/dist/html/objects.inv +0 -0
  22. package/doc/dist/html/platforms.html +1 -1
  23. package/doc/dist/html/searchindex.js +1 -1
  24. package/doc/dist/html/start.html +45 -45
  25. package/doc/dist/html/types.html +152 -152
  26. package/package.json +3 -3
  27. package/src/ffi.cc +1 -1
@@ -476,9 +476,9 @@
476
476
  </table>
477
477
  </div>
478
478
  <p>Primitive types can be specified by name (in a string) or through <code class="docutils literal notranslate"><span class="pre">koffi.types</span></code>:</p>
479
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// These two lines do the same:</span>
480
- <span class="linenos">2</span><span class="kd">let</span> <span class="nx">struct1</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span> <span class="nx">dummy</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span> <span class="p">});</span>
481
- <span class="linenos">3</span><span class="kd">let</span> <span class="nx">struct2</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span> <span class="nx">dummy</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">types</span><span class="p">.</span><span class="kr">long</span> <span class="p">});</span>
479
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// These two lines do the same:</span><span class="w"></span>
480
+ <span class="linenos">2</span><span class="kd">let</span><span class="w"> </span><span class="nx">struct1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span><span class="w"> </span><span class="nx">dummy</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="w"> </span><span class="p">});</span><span class="w"></span>
481
+ <span class="linenos">3</span><span class="kd">let</span><span class="w"> </span><span class="nx">struct2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span><span class="w"> </span><span class="nx">dummy</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">types</span><span class="p">.</span><span class="kr">long</span><span class="w"> </span><span class="p">});</span><span class="w"></span>
482
482
  </pre></div>
483
483
  </div>
484
484
  </section>
@@ -498,22 +498,22 @@
498
498
  <span class="linenos">9</span><span class="p">}</span><span class="w"> </span><span class="n">A</span><span class="p">;</span><span class="w"></span>
499
499
  </pre></div>
500
500
  </div>
501
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span> <span class="nx">A</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="p">{</span>
502
- <span class="linenos">2</span> <span class="nx">a</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
503
- <span class="linenos">3</span> <span class="nx">b</span><span class="o">:</span> <span class="s1">&#39;char&#39;</span><span class="p">,</span>
504
- <span class="linenos">4</span> <span class="nx">c</span><span class="o">:</span> <span class="s1">&#39;string&#39;</span><span class="p">,</span>
505
- <span class="linenos">5</span> <span class="nx">d</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span>
506
- <span class="linenos">6</span> <span class="nx">d1</span><span class="o">:</span> <span class="s1">&#39;double&#39;</span><span class="p">,</span>
507
- <span class="linenos">7</span> <span class="nx">d2</span><span class="o">:</span> <span class="s1">&#39;double&#39;</span>
508
- <span class="linenos">8</span> <span class="p">})</span>
509
- <span class="linenos">9</span><span class="p">});</span>
501
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">A</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;A&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
502
+ <span class="linenos">2</span><span class="w"> </span><span class="nx">a</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
503
+ <span class="linenos">3</span><span class="w"> </span><span class="nx">b</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;char&#39;</span><span class="p">,</span><span class="w"></span>
504
+ <span class="linenos">4</span><span class="w"> </span><span class="nx">c</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;string&#39;</span><span class="p">,</span><span class="w"></span>
505
+ <span class="linenos">5</span><span class="w"> </span><span class="nx">d</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">({</span><span class="w"></span>
506
+ <span class="linenos">6</span><span class="w"> </span><span class="nx">d1</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;double&#39;</span><span class="p">,</span><span class="w"></span>
507
+ <span class="linenos">7</span><span class="w"> </span><span class="nx">d2</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;double&#39;</span><span class="w"></span>
508
+ <span class="linenos">8</span><span class="w"> </span><span class="p">})</span><span class="w"></span>
509
+ <span class="linenos">9</span><span class="p">});</span><span class="w"></span>
510
510
  </pre></div>
511
511
  </div>
512
512
  <p>Koffi follows the C and ABI rules regarding struct alignment and padding.</p>
513
513
  <p>Once a struct is declared, you can use it by name (with a string, like you can do for primitive types) or the through the value returned by the call to <code class="docutils literal notranslate"><span class="pre">koffi.struct()</span></code>. Only the latter is possible when declaring an anonymous struct.</p>
514
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// The following two function declarations are equivalent, and declare a function taking an A value and returning A</span>
515
- <span class="linenos">2</span><span class="kd">const</span> <span class="nx">Function1</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;A Function(A value)&#39;</span><span class="p">);</span>
516
- <span class="linenos">3</span><span class="kd">const</span> <span class="nx">Function2</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Function&#39;</span><span class="p">,</span> <span class="nx">A</span><span class="p">,</span> <span class="p">[</span><span class="nx">A</span><span class="p">]);</span>
514
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// The following two function declarations are equivalent, and declare a function taking an A value and returning A</span><span class="w"></span>
515
+ <span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">Function1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;A Function(A value)&#39;</span><span class="p">);</span><span class="w"></span>
516
+ <span class="linenos">3</span><span class="kd">const</span><span class="w"> </span><span class="nx">Function2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Function&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">A</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">A</span><span class="p">]);</span><span class="w"></span>
517
517
  </pre></div>
518
518
  </div>
519
519
  </section>
@@ -529,23 +529,23 @@
529
529
  <section id="struct-pointers">
530
530
  <h3>Struct pointers<a class="headerlink" href="#struct-pointers" title="Permalink to this heading">#</a></h3>
531
531
  <p>The following Win32 example uses <code class="docutils literal notranslate"><span class="pre">GetCursorPos()</span></code> (with an output parameter) to retrieve and show the current cursor position.</p>
532
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
533
- <span class="linenos"> 2</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;kernel32.dll&#39;</span><span class="p">);</span>
532
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
533
+ <span class="linenos"> 2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;kernel32.dll&#39;</span><span class="p">);</span><span class="w"></span>
534
534
  <span class="linenos"> 3</span>
535
- <span class="linenos"> 4</span><span class="c1">// Type declarations</span>
536
- <span class="linenos"> 5</span><span class="kd">const</span> <span class="nx">POINT</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;POINT&#39;</span><span class="p">,</span> <span class="p">{</span>
537
- <span class="linenos"> 6</span> <span class="nx">x</span><span class="o">:</span> <span class="s1">&#39;long&#39;</span><span class="p">,</span>
538
- <span class="linenos"> 7</span> <span class="nx">y</span><span class="o">:</span> <span class="s1">&#39;long&#39;</span>
539
- <span class="linenos"> 8</span><span class="p">});</span>
535
+ <span class="linenos"> 4</span><span class="c1">// Type declarations</span><span class="w"></span>
536
+ <span class="linenos"> 5</span><span class="kd">const</span><span class="w"> </span><span class="nx">POINT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;POINT&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
537
+ <span class="linenos"> 6</span><span class="w"> </span><span class="nx">x</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;long&#39;</span><span class="p">,</span><span class="w"></span>
538
+ <span class="linenos"> 7</span><span class="w"> </span><span class="nx">y</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;long&#39;</span><span class="w"></span>
539
+ <span class="linenos"> 8</span><span class="p">});</span><span class="w"></span>
540
540
  <span class="linenos"> 9</span>
541
- <span class="linenos">10</span><span class="c1">// Functions declarations</span>
542
- <span class="linenos">11</span><span class="kd">const</span> <span class="nx">GetCursorPos</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int __stdcall GetCursorPos(_Out_ POINT *pos)&#39;</span><span class="p">);</span>
541
+ <span class="linenos">10</span><span class="c1">// Functions declarations</span><span class="w"></span>
542
+ <span class="linenos">11</span><span class="kd">const</span><span class="w"> </span><span class="nx">GetCursorPos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int __stdcall GetCursorPos(_Out_ POINT *pos)&#39;</span><span class="p">);</span><span class="w"></span>
543
543
  <span class="linenos">12</span>
544
- <span class="linenos">13</span><span class="c1">// Get and show cursor position</span>
545
- <span class="linenos">14</span><span class="kd">let</span> <span class="nx">pos</span> <span class="o">=</span> <span class="p">{};</span>
546
- <span class="linenos">15</span><span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">GetCursorPos</span><span class="p">(</span><span class="nx">pos</span><span class="p">))</span>
547
- <span class="linenos">16</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Failed to get cursor position&#39;</span><span class="p">);</span>
548
- <span class="linenos">17</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">pos</span><span class="p">);</span>
544
+ <span class="linenos">13</span><span class="c1">// Get and show cursor position</span><span class="w"></span>
545
+ <span class="linenos">14</span><span class="kd">let</span><span class="w"> </span><span class="nx">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span><span class="w"></span>
546
+ <span class="linenos">15</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">GetCursorPos</span><span class="p">(</span><span class="nx">pos</span><span class="p">))</span><span class="w"></span>
547
+ <span class="linenos">16</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Failed to get cursor position&#39;</span><span class="p">);</span><span class="w"></span>
548
+ <span class="linenos">17</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">pos</span><span class="p">);</span><span class="w"></span>
549
549
  </pre></div>
550
550
  </div>
551
551
  </section>
@@ -672,54 +672,54 @@
672
672
  <span class="linenos">116</span><span class="p">}</span><span class="w"></span>
673
673
  </pre></div>
674
674
  </div>
675
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
676
- <span class="linenos"> 2</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;./handles.so&#39;</span><span class="p">);</span>
675
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
676
+ <span class="linenos"> 2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;./handles.so&#39;</span><span class="p">);</span><span class="w"></span>
677
677
  <span class="linenos"> 3</span>
678
- <span class="linenos"> 4</span><span class="kd">const</span> <span class="nx">Concat</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">&#39;Concat&#39;</span><span class="p">);</span>
679
- <span class="linenos"> 5</span><span class="kd">const</span> <span class="nx">ConcatNewOut</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool ConcatNewOut(Concat *out)&#39;</span><span class="p">);</span>
680
- <span class="linenos"> 6</span><span class="kd">const</span> <span class="nx">ConcatNew</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Concat ConcatNew()&#39;</span><span class="p">);</span>
681
- <span class="linenos"> 7</span><span class="kd">const</span> <span class="nx">ConcatFree</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;void ConcatFree(Concat c)&#39;</span><span class="p">);</span>
682
- <span class="linenos"> 8</span><span class="kd">const</span> <span class="nx">ConcatAppend</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool ConcatAppend(Concat c, const char *frag)&#39;</span><span class="p">);</span>
683
- <span class="linenos"> 9</span><span class="kd">const</span> <span class="nx">ConcatBuild</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;const char *ConcatBuild(Concat c)&#39;</span><span class="p">);</span>
678
+ <span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">Concat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">&#39;Concat&#39;</span><span class="p">);</span><span class="w"></span>
679
+ <span class="linenos"> 5</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatNewOut</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool ConcatNewOut(Concat *out)&#39;</span><span class="p">);</span><span class="w"></span>
680
+ <span class="linenos"> 6</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatNew</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Concat ConcatNew()&#39;</span><span class="p">);</span><span class="w"></span>
681
+ <span class="linenos"> 7</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatFree</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;void ConcatFree(Concat c)&#39;</span><span class="p">);</span><span class="w"></span>
682
+ <span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatAppend</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool ConcatAppend(Concat c, const char *frag)&#39;</span><span class="p">);</span><span class="w"></span>
683
+ <span class="linenos"> 9</span><span class="kd">const</span><span class="w"> </span><span class="nx">ConcatBuild</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;const char *ConcatBuild(Concat c)&#39;</span><span class="p">);</span><span class="w"></span>
684
684
  <span class="linenos">10</span>
685
- <span class="linenos">11</span><span class="kd">let</span> <span class="nx">c</span> <span class="o">=</span> <span class="nx">ConcatNew</span><span class="p">();</span>
686
- <span class="linenos">12</span><span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">c</span><span class="p">)</span> <span class="p">{</span>
687
- <span class="linenos">13</span> <span class="c1">// This is stupid, it does the same, but try both versions (return value, output parameter)</span>
688
- <span class="linenos">14</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ConcatNewOut</span><span class="p">(</span><span class="nx">c</span><span class="p">))</span>
689
- <span class="linenos">15</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
690
- <span class="linenos">16</span><span class="p">}</span>
685
+ <span class="linenos">11</span><span class="kd">let</span><span class="w"> </span><span class="nx">c</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">ConcatNew</span><span class="p">();</span><span class="w"></span>
686
+ <span class="linenos">12</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">c</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
687
+ <span class="linenos">13</span><span class="w"> </span><span class="c1">// This is stupid, it does the same, but try both versions (return value, output parameter)</span><span class="w"></span>
688
+ <span class="linenos">14</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">ConcatNewOut</span><span class="p">(</span><span class="nx">c</span><span class="p">))</span><span class="w"></span>
689
+ <span class="linenos">15</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
690
+ <span class="linenos">16</span><span class="p">}</span><span class="w"></span>
691
691
  <span class="linenos">17</span>
692
- <span class="linenos">18</span><span class="k">try</span> <span class="p">{</span>
693
- <span class="linenos">19</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="s1">&#39;Hello... &#39;</span><span class="p">))</span>
694
- <span class="linenos">20</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
695
- <span class="linenos">21</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="s1">&#39;World!\n&#39;</span><span class="p">))</span>
696
- <span class="linenos">22</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
692
+ <span class="linenos">18</span><span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
693
+ <span class="linenos">19</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Hello... &#39;</span><span class="p">))</span><span class="w"></span>
694
+ <span class="linenos">20</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
695
+ <span class="linenos">21</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;World!\n&#39;</span><span class="p">))</span><span class="w"></span>
696
+ <span class="linenos">22</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
697
697
  <span class="linenos">23</span>
698
- <span class="linenos">24</span> <span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mf">1</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;=</span> <span class="mf">30</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
699
- <span class="linenos">25</span> <span class="kd">let</span> <span class="nx">frag</span><span class="p">;</span>
700
- <span class="linenos">26</span> <span class="k">if</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">15</span> <span class="o">==</span> <span class="mf">0</span><span class="p">)</span> <span class="p">{</span>
701
- <span class="linenos">27</span> <span class="nx">frag</span> <span class="o">=</span> <span class="s1">&#39;FizzBuzz&#39;</span><span class="p">;</span>
702
- <span class="linenos">28</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">5</span> <span class="o">==</span> <span class="mf">0</span><span class="p">)</span> <span class="p">{</span>
703
- <span class="linenos">29</span> <span class="nx">frag</span> <span class="o">=</span> <span class="s1">&#39;Buzz&#39;</span><span class="p">;</span>
704
- <span class="linenos">30</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">i</span> <span class="o">%</span> <span class="mf">3</span> <span class="o">==</span> <span class="mf">0</span><span class="p">)</span> <span class="p">{</span>
705
- <span class="linenos">31</span> <span class="nx">frag</span> <span class="o">=</span> <span class="s1">&#39;Fizz&#39;</span><span class="p">;</span>
706
- <span class="linenos">32</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
707
- <span class="linenos">33</span> <span class="nx">frag</span> <span class="o">=</span> <span class="nb">String</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
708
- <span class="linenos">34</span> <span class="p">}</span>
698
+ <span class="linenos">24</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">&lt;=</span><span class="w"> </span><span class="mf">30</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
699
+ <span class="linenos">25</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">frag</span><span class="p">;</span><span class="w"></span>
700
+ <span class="linenos">26</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mf">15</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
701
+ <span class="linenos">27</span><span class="w"> </span><span class="nx">frag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;FizzBuzz&#39;</span><span class="p">;</span><span class="w"></span>
702
+ <span class="linenos">28</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mf">5</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
703
+ <span class="linenos">29</span><span class="w"> </span><span class="nx">frag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;Buzz&#39;</span><span class="p">;</span><span class="w"></span>
704
+ <span class="linenos">30</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">i</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mf">3</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
705
+ <span class="linenos">31</span><span class="w"> </span><span class="nx">frag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">&#39;Fizz&#39;</span><span class="p">;</span><span class="w"></span>
706
+ <span class="linenos">32</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
707
+ <span class="linenos">33</span><span class="w"> </span><span class="nx">frag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">String</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span><span class="w"></span>
708
+ <span class="linenos">34</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
709
709
  <span class="linenos">35</span>
710
- <span class="linenos">36</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="nx">frag</span><span class="p">))</span>
711
- <span class="linenos">37</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
712
- <span class="linenos">38</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="s1">&#39; &#39;</span><span class="p">))</span>
713
- <span class="linenos">39</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
714
- <span class="linenos">40</span> <span class="p">}</span>
710
+ <span class="linenos">36</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span><span class="w"> </span><span class="nx">frag</span><span class="p">))</span><span class="w"></span>
711
+ <span class="linenos">37</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
712
+ <span class="linenos">38</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">ConcatAppend</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="p">))</span><span class="w"></span>
713
+ <span class="linenos">39</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
714
+ <span class="linenos">40</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
715
715
  <span class="linenos">41</span>
716
- <span class="linenos">42</span> <span class="kd">let</span> <span class="nx">str</span> <span class="o">=</span> <span class="nx">ConcatBuild</span><span class="p">(</span><span class="nx">c</span><span class="p">);</span>
717
- <span class="linenos">43</span> <span class="k">if</span> <span class="p">(</span><span class="nx">str</span> <span class="o">==</span> <span class="kc">null</span><span class="p">)</span>
718
- <span class="linenos">44</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span>
719
- <span class="linenos">45</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">str</span><span class="p">);</span>
720
- <span class="linenos">46</span><span class="p">}</span> <span class="k">finally</span> <span class="p">{</span>
721
- <span class="linenos">47</span> <span class="nx">ConcatFree</span><span class="p">(</span><span class="nx">c</span><span class="p">);</span>
722
- <span class="linenos">48</span><span class="p">}</span>
716
+ <span class="linenos">42</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">str</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">ConcatBuild</span><span class="p">(</span><span class="nx">c</span><span class="p">);</span><span class="w"></span>
717
+ <span class="linenos">43</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">str</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"></span>
718
+ <span class="linenos">44</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;Allocation failure&#39;</span><span class="p">);</span><span class="w"></span>
719
+ <span class="linenos">45</span><span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">str</span><span class="p">);</span><span class="w"></span>
720
+ <span class="linenos">46</span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
721
+ <span class="linenos">47</span><span class="w"> </span><span class="nx">ConcatFree</span><span class="p">(</span><span class="nx">c</span><span class="p">);</span><span class="w"></span>
722
+ <span class="linenos">48</span><span class="p">}</span><span class="w"></span>
723
723
  </pre></div>
724
724
  </div>
725
725
  </section>
@@ -747,77 +747,77 @@
747
747
  <span class="linenos">17</span><span class="p">}</span><span class="w"></span>
748
748
  </pre></div>
749
749
  </div>
750
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
751
- <span class="linenos">2</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;./length.so&#39;</span><span class="p">);</span>
750
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
751
+ <span class="linenos">2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;./length.so&#39;</span><span class="p">);</span><span class="w"></span>
752
752
  <span class="linenos">3</span>
753
- <span class="linenos">4</span><span class="kd">const</span> <span class="nx">ComputeTotalLength</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int64_t ComputeTotalLength(const char **strings)&#39;</span><span class="p">);</span>
753
+ <span class="linenos">4</span><span class="kd">const</span><span class="w"> </span><span class="nx">ComputeTotalLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;int64_t ComputeTotalLength(const char **strings)&#39;</span><span class="p">);</span><span class="w"></span>
754
754
  <span class="linenos">5</span>
755
- <span class="linenos">6</span><span class="kd">let</span> <span class="nx">strings</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Get&#39;</span><span class="p">,</span> <span class="s1">&#39;Total&#39;</span><span class="p">,</span> <span class="s1">&#39;Length&#39;</span><span class="p">,</span> <span class="kc">null</span><span class="p">];</span>
756
- <span class="linenos">7</span><span class="kd">let</span> <span class="nx">total</span> <span class="o">=</span> <span class="nx">ComputeTotalLength</span><span class="p">(</span><span class="nx">strings</span><span class="p">);</span>
755
+ <span class="linenos">6</span><span class="kd">let</span><span class="w"> </span><span class="nx">strings</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;Get&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Total&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Length&#39;</span><span class="p">,</span><span class="w"> </span><span class="kc">null</span><span class="p">];</span><span class="w"></span>
756
+ <span class="linenos">7</span><span class="kd">let</span><span class="w"> </span><span class="nx">total</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">ComputeTotalLength</span><span class="p">(</span><span class="nx">strings</span><span class="p">);</span><span class="w"></span>
757
757
  <span class="linenos">8</span>
758
- <span class="linenos">9</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">total</span><span class="p">);</span> <span class="c1">// Prints 14n (big int)</span>
758
+ <span class="linenos">9</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">total</span><span class="p">);</span><span class="w"> </span><span class="c1">// Prints 14n (big int)</span><span class="w"></span>
759
759
  </pre></div>
760
760
  </div>
761
761
  <p>By default, just like for objects, array arguments are copied from JS to C but not vice-versa. You can however change the direction as documented in the section on <a class="reference internal" href="functions#output-parameters"><span class="std std-doc">output parameters</span></a>.</p>
762
762
  <p>Here is an example based on the Win32 API, listing files in the current directory with <code class="docutils literal notranslate"><span class="pre">FindFirstFileW()</span></code> and <code class="docutils literal notranslate"><span class="pre">FindNextFileW()</span></code>:</p>
763
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
764
- <span class="linenos"> 2</span><span class="kd">const</span> <span class="nx">lib</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;kernel32.dll&#39;</span><span class="p">);</span>
763
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
764
+ <span class="linenos"> 2</span><span class="kd">const</span><span class="w"> </span><span class="nx">lib</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">load</span><span class="p">(</span><span class="s1">&#39;kernel32.dll&#39;</span><span class="p">);</span><span class="w"></span>
765
765
  <span class="linenos"> 3</span>
766
- <span class="linenos"> 4</span><span class="kd">const</span> <span class="nx">HANDLE</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">&#39;HANDLE&#39;</span><span class="p">);</span>
767
- <span class="linenos"> 5</span><span class="kd">const</span> <span class="nx">FILETIME</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;FILETIME&#39;</span><span class="p">,</span> <span class="p">{</span>
768
- <span class="linenos"> 6</span> <span class="nx">dwLowDateTime</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
769
- <span class="linenos"> 7</span> <span class="nx">dwHighDateTime</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span>
770
- <span class="linenos"> 8</span><span class="p">});</span>
771
- <span class="linenos"> 9</span><span class="kd">const</span> <span class="nx">WIN32_FIND_DATA</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;WIN32_FIND_DATA&#39;</span><span class="p">,</span> <span class="p">{</span>
772
- <span class="linenos">10</span> <span class="nx">dwFileAttributes</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
773
- <span class="linenos">11</span> <span class="nx">ftCreationTime</span><span class="o">:</span> <span class="nx">FILETIME</span><span class="p">,</span>
774
- <span class="linenos">12</span> <span class="nx">ftLastAccessTime</span><span class="o">:</span> <span class="nx">FILETIME</span><span class="p">,</span>
775
- <span class="linenos">13</span> <span class="nx">ftLastWriteTime</span><span class="o">:</span> <span class="nx">FILETIME</span><span class="p">,</span>
776
- <span class="linenos">14</span> <span class="nx">nFileSizeHigh</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
777
- <span class="linenos">15</span> <span class="nx">nFileSizeLow</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
778
- <span class="linenos">16</span> <span class="nx">dwReserved0</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
779
- <span class="linenos">17</span> <span class="nx">dwReserved1</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span>
780
- <span class="linenos">18</span> <span class="nx">cFileName</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;char16&#39;</span><span class="p">,</span> <span class="mf">260</span><span class="p">),</span>
781
- <span class="linenos">19</span> <span class="nx">cAlternateFileName</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;char16&#39;</span><span class="p">,</span> <span class="mf">14</span><span class="p">),</span>
782
- <span class="linenos">20</span> <span class="nx">dwFileType</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span> <span class="c1">// Obsolete. Do not use.</span>
783
- <span class="linenos">21</span> <span class="nx">dwCreatorType</span><span class="o">:</span> <span class="s1">&#39;uint&#39;</span><span class="p">,</span> <span class="c1">// Obsolete. Do not use</span>
784
- <span class="linenos">22</span> <span class="nx">wFinderFlags</span><span class="o">:</span> <span class="s1">&#39;ushort&#39;</span> <span class="c1">// Obsolete. Do not use</span>
785
- <span class="linenos">23</span><span class="p">});</span>
766
+ <span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">HANDLE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">handle</span><span class="p">(</span><span class="s1">&#39;HANDLE&#39;</span><span class="p">);</span><span class="w"></span>
767
+ <span class="linenos"> 5</span><span class="kd">const</span><span class="w"> </span><span class="nx">FILETIME</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;FILETIME&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
768
+ <span class="linenos"> 6</span><span class="w"> </span><span class="nx">dwLowDateTime</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
769
+ <span class="linenos"> 7</span><span class="w"> </span><span class="nx">dwHighDateTime</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="w"></span>
770
+ <span class="linenos"> 8</span><span class="p">});</span><span class="w"></span>
771
+ <span class="linenos"> 9</span><span class="kd">const</span><span class="w"> </span><span class="nx">WIN32_FIND_DATA</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;WIN32_FIND_DATA&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
772
+ <span class="linenos">10</span><span class="w"> </span><span class="nx">dwFileAttributes</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
773
+ <span class="linenos">11</span><span class="w"> </span><span class="nx">ftCreationTime</span><span class="o">:</span><span class="w"> </span><span class="nx">FILETIME</span><span class="p">,</span><span class="w"></span>
774
+ <span class="linenos">12</span><span class="w"> </span><span class="nx">ftLastAccessTime</span><span class="o">:</span><span class="w"> </span><span class="nx">FILETIME</span><span class="p">,</span><span class="w"></span>
775
+ <span class="linenos">13</span><span class="w"> </span><span class="nx">ftLastWriteTime</span><span class="o">:</span><span class="w"> </span><span class="nx">FILETIME</span><span class="p">,</span><span class="w"></span>
776
+ <span class="linenos">14</span><span class="w"> </span><span class="nx">nFileSizeHigh</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
777
+ <span class="linenos">15</span><span class="w"> </span><span class="nx">nFileSizeLow</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
778
+ <span class="linenos">16</span><span class="w"> </span><span class="nx">dwReserved0</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
779
+ <span class="linenos">17</span><span class="w"> </span><span class="nx">dwReserved1</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"></span>
780
+ <span class="linenos">18</span><span class="w"> </span><span class="nx">cFileName</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;char16&#39;</span><span class="p">,</span><span class="w"> </span><span class="mf">260</span><span class="p">),</span><span class="w"></span>
781
+ <span class="linenos">19</span><span class="w"> </span><span class="nx">cAlternateFileName</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;char16&#39;</span><span class="p">,</span><span class="w"> </span><span class="mf">14</span><span class="p">),</span><span class="w"></span>
782
+ <span class="linenos">20</span><span class="w"> </span><span class="nx">dwFileType</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"> </span><span class="c1">// Obsolete. Do not use.</span><span class="w"></span>
783
+ <span class="linenos">21</span><span class="w"> </span><span class="nx">dwCreatorType</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;uint&#39;</span><span class="p">,</span><span class="w"> </span><span class="c1">// Obsolete. Do not use</span><span class="w"></span>
784
+ <span class="linenos">22</span><span class="w"> </span><span class="nx">wFinderFlags</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;ushort&#39;</span><span class="w"> </span><span class="c1">// Obsolete. Do not use</span><span class="w"></span>
785
+ <span class="linenos">23</span><span class="p">});</span><span class="w"></span>
786
786
  <span class="linenos">24</span>
787
- <span class="linenos">25</span><span class="kd">const</span> <span class="nx">FindFirstFile</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;HANDLE __stdcall FindFirstFileW(string16 path, _Out_ WIN32_FIND_DATA *data)&#39;</span><span class="p">);</span>
788
- <span class="linenos">26</span><span class="kd">const</span> <span class="nx">FindNextFile</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool __stdcall FindNextFileW(HANDLE h, _Out_ WIN32_FIND_DATA *data)&#39;</span><span class="p">);</span>
789
- <span class="linenos">27</span><span class="kd">const</span> <span class="nx">FindClose</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool __stdcall FindClose(HANDLE h)&#39;</span><span class="p">);</span>
790
- <span class="linenos">28</span><span class="kd">const</span> <span class="nx">GetLastError</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;uint GetLastError()&#39;</span><span class="p">);</span>
787
+ <span class="linenos">25</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindFirstFile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;HANDLE __stdcall FindFirstFileW(string16 path, _Out_ WIN32_FIND_DATA *data)&#39;</span><span class="p">);</span><span class="w"></span>
788
+ <span class="linenos">26</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindNextFile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool __stdcall FindNextFileW(HANDLE h, _Out_ WIN32_FIND_DATA *data)&#39;</span><span class="p">);</span><span class="w"></span>
789
+ <span class="linenos">27</span><span class="kd">const</span><span class="w"> </span><span class="nx">FindClose</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;bool __stdcall FindClose(HANDLE h)&#39;</span><span class="p">);</span><span class="w"></span>
790
+ <span class="linenos">28</span><span class="kd">const</span><span class="w"> </span><span class="nx">GetLastError</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;uint GetLastError()&#39;</span><span class="p">);</span><span class="w"></span>
791
791
  <span class="linenos">29</span>
792
- <span class="linenos">30</span><span class="kd">function</span> <span class="nx">list</span><span class="p">(</span><span class="nx">dirname</span><span class="p">)</span> <span class="p">{</span>
793
- <span class="linenos">31</span> <span class="kd">let</span> <span class="nx">filenames</span> <span class="o">=</span> <span class="p">[];</span>
792
+ <span class="linenos">30</span><span class="kd">function</span><span class="w"> </span><span class="nx">list</span><span class="p">(</span><span class="nx">dirname</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
793
+ <span class="linenos">31</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">filenames</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span><span class="w"></span>
794
794
  <span class="linenos">32</span>
795
- <span class="linenos">33</span> <span class="kd">let</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">{};</span>
796
- <span class="linenos">34</span> <span class="kd">let</span> <span class="nx">h</span> <span class="o">=</span> <span class="nx">FindFirstFile</span><span class="p">(</span><span class="nx">dirname</span> <span class="o">+</span> <span class="s1">&#39;\\*&#39;</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
795
+ <span class="linenos">33</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">data</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{};</span><span class="w"></span>
796
+ <span class="linenos">34</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">h</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">FindFirstFile</span><span class="p">(</span><span class="nx">dirname</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s1">&#39;\\*&#39;</span><span class="p">,</span><span class="w"> </span><span class="nx">data</span><span class="p">);</span><span class="w"></span>
797
797
  <span class="linenos">35</span>
798
- <span class="linenos">36</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">h</span><span class="p">)</span> <span class="p">{</span>
799
- <span class="linenos">37</span> <span class="k">if</span> <span class="p">(</span><span class="nx">GetLastError</span><span class="p">()</span> <span class="o">==</span> <span class="mf">2</span><span class="p">)</span> <span class="c1">// ERROR_FILE_NOT_FOUND</span>
800
- <span class="linenos">38</span> <span class="k">return</span> <span class="nx">filenames</span><span class="p">;</span>
801
- <span class="linenos">39</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;FindFirstFile() failed&#39;</span><span class="p">);</span>
802
- <span class="linenos">40</span> <span class="p">}</span>
798
+ <span class="linenos">36</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="nx">h</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
799
+ <span class="linenos">37</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">GetLastError</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mf">2</span><span class="p">)</span><span class="w"> </span><span class="c1">// ERROR_FILE_NOT_FOUND</span><span class="w"></span>
800
+ <span class="linenos">38</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">filenames</span><span class="p">;</span><span class="w"></span>
801
+ <span class="linenos">39</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;FindFirstFile() failed&#39;</span><span class="p">);</span><span class="w"></span>
802
+ <span class="linenos">40</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
803
803
  <span class="linenos">41</span>
804
- <span class="linenos">42</span> <span class="k">try</span> <span class="p">{</span>
805
- <span class="linenos">43</span> <span class="k">do</span> <span class="p">{</span>
806
- <span class="linenos">44</span> <span class="k">if</span> <span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span> <span class="o">!=</span> <span class="s1">&#39;.&#39;</span> <span class="o">&amp;&amp;</span> <span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span> <span class="o">!=</span> <span class="s1">&#39;..&#39;</span><span class="p">)</span>
807
- <span class="linenos">45</span> <span class="nx">filenames</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span><span class="p">);</span>
808
- <span class="linenos">46</span> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="nx">FindNextFile</span><span class="p">(</span><span class="nx">h</span><span class="p">,</span> <span class="nx">data</span><span class="p">));</span>
804
+ <span class="linenos">42</span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
805
+ <span class="linenos">43</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
806
+ <span class="linenos">44</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39;.&#39;</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s1">&#39;..&#39;</span><span class="p">)</span><span class="w"></span>
807
+ <span class="linenos">45</span><span class="w"> </span><span class="nx">filenames</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">data</span><span class="p">.</span><span class="nx">cFileName</span><span class="p">);</span><span class="w"></span>
808
+ <span class="linenos">46</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">FindNextFile</span><span class="p">(</span><span class="nx">h</span><span class="p">,</span><span class="w"> </span><span class="nx">data</span><span class="p">));</span><span class="w"></span>
809
809
  <span class="linenos">47</span>
810
- <span class="linenos">48</span> <span class="k">if</span> <span class="p">(</span><span class="nx">GetLastError</span><span class="p">()</span> <span class="o">!=</span> <span class="mf">18</span><span class="p">)</span> <span class="c1">// ERROR_NO_MORE_FILES</span>
811
- <span class="linenos">49</span> <span class="k">throw</span> <span class="ow">new</span> <span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;FindNextFile() failed&#39;</span><span class="p">);</span>
812
- <span class="linenos">50</span> <span class="p">}</span> <span class="k">finally</span> <span class="p">{</span>
813
- <span class="linenos">51</span> <span class="nx">FindClose</span><span class="p">(</span><span class="nx">h</span><span class="p">);</span>
814
- <span class="linenos">52</span> <span class="p">}</span>
810
+ <span class="linenos">48</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">GetLastError</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mf">18</span><span class="p">)</span><span class="w"> </span><span class="c1">// ERROR_NO_MORE_FILES</span><span class="w"></span>
811
+ <span class="linenos">49</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="ne">Error</span><span class="p">(</span><span class="s1">&#39;FindNextFile() failed&#39;</span><span class="p">);</span><span class="w"></span>
812
+ <span class="linenos">50</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
813
+ <span class="linenos">51</span><span class="w"> </span><span class="nx">FindClose</span><span class="p">(</span><span class="nx">h</span><span class="p">);</span><span class="w"></span>
814
+ <span class="linenos">52</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
815
815
  <span class="linenos">53</span>
816
- <span class="linenos">54</span> <span class="k">return</span> <span class="nx">filenames</span><span class="p">;</span>
817
- <span class="linenos">55</span><span class="p">}</span>
816
+ <span class="linenos">54</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">filenames</span><span class="p">;</span><span class="w"></span>
817
+ <span class="linenos">55</span><span class="p">}</span><span class="w"></span>
818
818
  <span class="linenos">56</span>
819
- <span class="linenos">57</span><span class="kd">let</span> <span class="nx">filenames</span> <span class="o">=</span> <span class="nx">list</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">);</span>
820
- <span class="linenos">58</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">filenames</span><span class="p">);</span>
819
+ <span class="linenos">57</span><span class="kd">let</span><span class="w"> </span><span class="nx">filenames</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">list</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">);</span><span class="w"></span>
820
+ <span class="linenos">58</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">filenames</span><span class="p">);</span><span class="w"></span>
821
821
  </pre></div>
822
822
  </div>
823
823
  </section>
@@ -825,12 +825,12 @@
825
825
  <h3>Pointers to primitive types<a class="headerlink" href="#pointers-to-primitive-types" title="Permalink to this heading">#</a></h3>
826
826
  <p>In javascript, it is not possible to pass a primitive value by reference to another function. This means that you cannot call a function and expect it to modify the value of one of its number or string parameter.</p>
827
827
  <p>However, arrays and objects (among others) are reference type values. Assigning an array or an object from one variable to another does not invole any copy. Instead, as the following example illustrates, the new variable references the same list as the first:</p>
828
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">let</span> <span class="nx">list1</span> <span class="o">=</span> <span class="p">[</span><span class="mf">1</span><span class="p">,</span> <span class="mf">2</span><span class="p">];</span>
829
- <span class="linenos">2</span><span class="kd">let</span> <span class="nx">list2</span> <span class="o">=</span> <span class="nx">list1</span><span class="p">;</span>
828
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">let</span><span class="w"> </span><span class="nx">list1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">];</span><span class="w"></span>
829
+ <span class="linenos">2</span><span class="kd">let</span><span class="w"> </span><span class="nx">list2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">list1</span><span class="p">;</span><span class="w"></span>
830
830
  <span class="linenos">3</span>
831
- <span class="linenos">4</span><span class="nx">list2</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span> <span class="o">=</span> <span class="mf">42</span><span class="p">;</span>
831
+ <span class="linenos">4</span><span class="nx">list2</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">42</span><span class="p">;</span><span class="w"></span>
832
832
  <span class="linenos">5</span>
833
- <span class="linenos">6</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">list1</span><span class="p">);</span> <span class="c1">// Prints [1, 42]</span>
833
+ <span class="linenos">6</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">list1</span><span class="p">);</span><span class="w"> </span><span class="c1">// Prints [1, 42]</span><span class="w"></span>
834
834
  </pre></div>
835
835
  </div>
836
836
  <p>All of this means that C functions that are expected to modify their primitive output values (such as an <code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">*</span></code> parameter) cannot be used directly. However, thanks to Koffi’s transparent array support, you can use Javascript arrays to approximate reference semantics with single-element arrays.</p>
@@ -842,12 +842,12 @@
842
842
  </pre></div>
843
843
  </div>
844
844
  <p>You can simply pass a single-element array as the third argument:</p>
845
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span> <span class="nx">AddInt</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;void AddInt(_Inout_ int *dest, int add)&#39;</span><span class="p">);</span>
845
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="kd">const</span><span class="w"> </span><span class="nx">AddInt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;void AddInt(_Inout_ int *dest, int add)&#39;</span><span class="p">);</span><span class="w"></span>
846
846
  <span class="linenos">2</span>
847
- <span class="linenos">3</span><span class="kd">let</span> <span class="nx">sum</span> <span class="o">=</span> <span class="p">[</span><span class="mf">36</span><span class="p">];</span>
848
- <span class="linenos">4</span><span class="nx">AddInt</span><span class="p">(</span><span class="nx">sum</span><span class="p">,</span> <span class="mf">6</span><span class="p">);</span>
847
+ <span class="linenos">3</span><span class="kd">let</span><span class="w"> </span><span class="nx">sum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">36</span><span class="p">];</span><span class="w"></span>
848
+ <span class="linenos">4</span><span class="nx">AddInt</span><span class="p">(</span><span class="nx">sum</span><span class="p">,</span><span class="w"> </span><span class="mf">6</span><span class="p">);</span><span class="w"></span>
849
849
  <span class="linenos">5</span>
850
- <span class="linenos">6</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">sum</span><span class="p">[</span><span class="mf">0</span><span class="p">]);</span> <span class="c1">// Prints 42</span>
850
+ <span class="linenos">6</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">sum</span><span class="p">[</span><span class="mf">0</span><span class="p">]);</span><span class="w"> </span><span class="c1">// Prints 42</span><span class="w"></span>
851
851
  </pre></div>
852
852
  </div>
853
853
  </section>
@@ -861,24 +861,24 @@
861
861
  <li><p><strong>C to JS</strong> (return value, output parameters, callbacks): Koffi will use a TypedArray if possible. But you can change this behavior when you create the array type with the optional hint argument: <code class="docutils literal notranslate"><span class="pre">koffi.array('uint8_t',</span> <span class="pre">64,</span> <span class="pre">'array')</span></code>. For non-number types, such as arrays of strings or structs, Koffi creates normal arrays.</p></li>
862
862
  </ul>
863
863
  <p>See the example below:</p>
864
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span> <span class="nx">koffi</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span>
864
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kd">const</span><span class="w"> </span><span class="nx">koffi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;koffi&#39;</span><span class="p">);</span><span class="w"></span>
865
865
  <span class="linenos"> 2</span>
866
- <span class="linenos"> 3</span><span class="c1">// Those two structs are exactly the same, only the array conversion hint is different</span>
867
- <span class="linenos"> 4</span><span class="kd">const</span> <span class="nx">Foo1</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;Foo&#39;</span><span class="p">,</span> <span class="p">{</span>
868
- <span class="linenos"> 5</span> <span class="nx">i</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
869
- <span class="linenos"> 6</span> <span class="nx">a16</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;int16_t&#39;</span><span class="p">,</span> <span class="mf">8</span><span class="p">)</span>
870
- <span class="linenos"> 7</span><span class="p">});</span>
871
- <span class="linenos"> 8</span><span class="kd">const</span> <span class="nx">Foo2</span> <span class="o">=</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;Foo&#39;</span><span class="p">,</span> <span class="p">{</span>
872
- <span class="linenos"> 9</span> <span class="nx">i</span><span class="o">:</span> <span class="s1">&#39;int&#39;</span><span class="p">,</span>
873
- <span class="linenos">10</span> <span class="nx">a16</span><span class="o">:</span> <span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;int16_t&#39;</span><span class="p">,</span> <span class="mf">8</span><span class="p">,</span> <span class="s1">&#39;array&#39;</span><span class="p">)</span>
874
- <span class="linenos">11</span><span class="p">});</span>
866
+ <span class="linenos"> 3</span><span class="c1">// Those two structs are exactly the same, only the array conversion hint is different</span><span class="w"></span>
867
+ <span class="linenos"> 4</span><span class="kd">const</span><span class="w"> </span><span class="nx">Foo1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;Foo&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
868
+ <span class="linenos"> 5</span><span class="w"> </span><span class="nx">i</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
869
+ <span class="linenos"> 6</span><span class="w"> </span><span class="nx">a16</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;int16_t&#39;</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">)</span><span class="w"></span>
870
+ <span class="linenos"> 7</span><span class="p">});</span><span class="w"></span>
871
+ <span class="linenos"> 8</span><span class="kd">const</span><span class="w"> </span><span class="nx">Foo2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">struct</span><span class="p">(</span><span class="s1">&#39;Foo&#39;</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
872
+ <span class="linenos"> 9</span><span class="w"> </span><span class="nx">i</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;int&#39;</span><span class="p">,</span><span class="w"></span>
873
+ <span class="linenos">10</span><span class="w"> </span><span class="nx">a16</span><span class="o">:</span><span class="w"> </span><span class="nx">koffi</span><span class="p">.</span><span class="nx">array</span><span class="p">(</span><span class="s1">&#39;int16_t&#39;</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;array&#39;</span><span class="p">)</span><span class="w"></span>
874
+ <span class="linenos">11</span><span class="p">});</span><span class="w"></span>
875
875
  <span class="linenos">12</span>
876
- <span class="linenos">13</span><span class="c1">// Uses an hypothetical C function that just returns the struct passed as a parameter</span>
877
- <span class="linenos">14</span><span class="kd">const</span> <span class="nx">ReturnFoo1</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Foo1 ReturnFoo(Foo1 p)&#39;</span><span class="p">);</span>
878
- <span class="linenos">15</span><span class="kd">const</span> <span class="nx">ReturnFoo2</span> <span class="o">=</span> <span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Foo2 ReturnFoo(Foo2 p)&#39;</span><span class="p">);</span>
876
+ <span class="linenos">13</span><span class="c1">// Uses an hypothetical C function that just returns the struct passed as a parameter</span><span class="w"></span>
877
+ <span class="linenos">14</span><span class="kd">const</span><span class="w"> </span><span class="nx">ReturnFoo1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Foo1 ReturnFoo(Foo1 p)&#39;</span><span class="p">);</span><span class="w"></span>
878
+ <span class="linenos">15</span><span class="kd">const</span><span class="w"> </span><span class="nx">ReturnFoo2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">lib</span><span class="p">.</span><span class="nx">func</span><span class="p">(</span><span class="s1">&#39;Foo2 ReturnFoo(Foo2 p)&#39;</span><span class="p">);</span><span class="w"></span>
879
879
  <span class="linenos">16</span>
880
- <span class="linenos">17</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">ReturnFoo1</span><span class="p">({</span> <span class="nx">i</span><span class="o">:</span> <span class="mf">5</span><span class="p">,</span> <span class="nx">a16</span><span class="o">:</span> <span class="p">[</span><span class="mf">6</span><span class="p">,</span> <span class="mf">8</span><span class="p">]</span> <span class="p">}))</span> <span class="c1">// Prints { i: 5, a16: Int16Array(2) [6, 8] }</span>
881
- <span class="linenos">18</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">ReturnFoo2</span><span class="p">({</span> <span class="nx">i</span><span class="o">:</span> <span class="mf">5</span><span class="p">,</span> <span class="nx">a16</span><span class="o">:</span> <span class="p">[</span><span class="mf">6</span><span class="p">,</span> <span class="mf">8</span><span class="p">]</span> <span class="p">}))</span> <span class="c1">// Prints { i: 5, a16: [6, 8] }</span>
880
+ <span class="linenos">17</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">ReturnFoo1</span><span class="p">({</span><span class="w"> </span><span class="nx">i</span><span class="o">:</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="nx">a16</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">]</span><span class="w"> </span><span class="p">}))</span><span class="w"> </span><span class="c1">// Prints { i: 5, a16: Int16Array(2) [6, 8] }</span><span class="w"></span>
881
+ <span class="linenos">18</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">ReturnFoo2</span><span class="p">({</span><span class="w"> </span><span class="nx">i</span><span class="o">:</span><span class="w"> </span><span class="mf">5</span><span class="p">,</span><span class="w"> </span><span class="nx">a16</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mf">6</span><span class="p">,</span><span class="w"> </span><span class="mf">8</span><span class="p">]</span><span class="w"> </span><span class="p">}))</span><span class="w"> </span><span class="c1">// Prints { i: 5, a16: [6, 8] }</span><span class="w"></span>
882
882
  </pre></div>
883
883
  </div>
884
884
  <section id="handling-of-strings">
@@ -900,9 +900,9 @@
900
900
  <li><p><code class="docutils literal notranslate"><span class="pre">koffi.introspect(type)</span></code> to get the definition of a type (only for structs for now)</p></li>
901
901
  </ul>
902
902
  <p>Just like before, you can refer to primitive types by their name or through <code class="docutils literal notranslate"><span class="pre">koffi.types</span></code>:</p>
903
- <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// These two lines do the same:</span>
904
- <span class="linenos">2</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">sizeof</span><span class="p">(</span><span class="s1">&#39;long&#39;</span><span class="p">));</span>
905
- <span class="linenos">3</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">sizeof</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">types</span><span class="p">.</span><span class="kr">long</span><span class="p">));</span>
903
+ <div class="highlight-js notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="c1">// These two lines do the same:</span><span class="w"></span>
904
+ <span class="linenos">2</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">sizeof</span><span class="p">(</span><span class="s1">&#39;long&#39;</span><span class="p">));</span><span class="w"></span>
905
+ <span class="linenos">3</span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">sizeof</span><span class="p">(</span><span class="nx">koffi</span><span class="p">.</span><span class="nx">types</span><span class="p">.</span><span class="kr">long</span><span class="p">));</span><span class="w"></span>
906
906
  </pre></div>
907
907
  </div>
908
908
  </section>