summaryrefslogtreecommitdiff
path: root/doc/ext_ffi_tutorial.html
diff options
context:
space:
mode:
authorMike Pall <mike>2011-11-11 20:41:44 +0100
committerMike Pall <mike>2011-11-11 20:41:44 +0100
commit0123e4fc895f4a52422dff05a29596e389b4749c (patch)
treee67a1c9bda90a721212973c204f357f4b7a2456b /doc/ext_ffi_tutorial.html
parentfa1675baad93dbe503d834eb380b2a8efdf301fe (diff)
downloadluajit-0123e4fc895f4a52422dff05a29596e389b4749c.tar.gz
luajit-0123e4fc895f4a52422dff05a29596e389b4749c.tar.bz2
luajit-0123e4fc895f4a52422dff05a29596e389b4749c.zip
FFI: Extend metamethod tutorial.
Diffstat (limited to 'doc/ext_ffi_tutorial.html')
-rw-r--r--doc/ext_ffi_tutorial.html21
1 files changed, 20 insertions, 1 deletions
diff --git a/doc/ext_ffi_tutorial.html b/doc/ext_ffi_tutorial.html
index 9349aea4..fb46a842 100644
--- a/doc/ext_ffi_tutorial.html
+++ b/doc/ext_ffi_tutorial.html
@@ -15,6 +15,7 @@ span.mark { color: #4040c0; font-family: Courier New, Courier, monospace;
15pre.mark { padding-left: 2em; } 15pre.mark { padding-left: 2em; }
16table.idiomtable { line-height: 1.2; } 16table.idiomtable { line-height: 1.2; }
17table.idiomtable tt { font-size: 100%; } 17table.idiomtable tt { font-size: 100%; }
18table.idiomtable td { vertical-align: top; }
18tr.idiomhead td { font-weight: bold; } 19tr.idiomhead td { font-weight: bold; }
19td.idiomc { width: 12em; } 20td.idiomc { width: 12em; }
20td.idiomlua { width: 14em; } 21td.idiomlua { width: 14em; }
@@ -454,7 +455,7 @@ the origin.
454<span class="mark">&#9315;</span> If we run out of operators, we can 455<span class="mark">&#9315;</span> If we run out of operators, we can
455define named methods, too. Here the <tt>__index</tt> table defines an 456define named methods, too. Here the <tt>__index</tt> table defines an
456<tt>area</tt> function. For custom indexing needs, one might want to 457<tt>area</tt> function. For custom indexing needs, one might want to
457define <tt>__index</tt> and <tt>__newindex</tt> functions instead. 458define <tt>__index</tt> and <tt>__newindex</tt> <em>functions</em> instead.
458</p> 459</p>
459<p> 460<p>
460<span class="mark">&#9316;</span> This associates the metamethods with 461<span class="mark">&#9316;</span> This associates the metamethods with
@@ -478,6 +479,24 @@ defined metamethods. Note that <tt>area</tt> is a method and must be
478called with the Lua syntax for methods: <tt>a:area()</tt>, not 479called with the Lua syntax for methods: <tt>a:area()</tt>, not
479<tt>a.area()</tt>. 480<tt>a.area()</tt>.
480</p> 481</p>
482<p>
483The C&nbsp;type metamethod mechanism is most useful when used in
484conjunction with C&nbsp;libraries that are written in an object-oriented
485style. Creators return a pointer to a new instance and methods take an
486instance pointer as the first argument. Sometimes you can just point
487<tt>__index</tt> to the library namespace and <tt>__gc</tt> to the
488destructor and you're done. But often enough you'll want to add
489convenience wrappers, e.g. to return actual Lua strings or when
490returning multiple values.
491</p>
492<p>
493Some C libraries only declare instance pointers as an opaque
494<tt>void&nbsp;*</tt> type. In this case you can use a fake type for all
495declarations, e.g. a pointer to a named (incomplete) struct will do:
496<tt>typedef struct foo_type *foo_handle</tt>. The C&nbsp;side doesn't
497know what you declare with the LuaJIT FFI, but as long as the underlying
498types are compatible, everything still works.
499</p>
481 500
482<h2 id="idioms">Translating C&nbsp;Idioms</h2> 501<h2 id="idioms">Translating C&nbsp;Idioms</h2>
483<p> 502<p>