aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorMike Pall <mike>2012-10-14 21:48:04 +0200
committerMike Pall <mike>2012-10-14 21:48:04 +0200
commitd70d77549b397a8b9ebeed199f32e7827214c00b (patch)
tree9337bcd70521cf80f1e39971abe2e0efc32082ef /doc
parenta0ee70de6de0ade39de17b5678b23bf311d20d9e (diff)
downloadluajit-d70d77549b397a8b9ebeed199f32e7827214c00b.tar.gz
luajit-d70d77549b397a8b9ebeed199f32e7827214c00b.tar.bz2
luajit-d70d77549b397a8b9ebeed199f32e7827214c00b.zip
Documentation cleanup and reorganization.
Diffstat (limited to 'doc')
-rw-r--r--doc/changes.html4
-rw-r--r--doc/contact.html4
-rw-r--r--doc/ext_c_api.html4
-rw-r--r--doc/ext_ffi.html4
-rw-r--r--doc/ext_ffi_api.html4
-rw-r--r--doc/ext_ffi_semantics.html4
-rw-r--r--doc/ext_ffi_tutorial.html4
-rw-r--r--doc/ext_jit.html4
-rw-r--r--doc/extensions.html70
-rw-r--r--doc/faq.html4
-rw-r--r--doc/install.html4
-rw-r--r--doc/luajit.html182
-rw-r--r--doc/running.html4
-rw-r--r--doc/status.html156
14 files changed, 245 insertions, 207 deletions
diff --git a/doc/changes.html b/doc/changes.html
index f3f8604c..50706a11 100644
--- a/doc/changes.html
+++ b/doc/changes.html
@@ -23,6 +23,8 @@ div.major { max-width: 600px; padding: 1em; margin: 1em 0 1em 0; }
23<ul><li> 23<ul><li>
24<a href="luajit.html">LuaJIT</a> 24<a href="luajit.html">LuaJIT</a>
25<ul><li> 25<ul><li>
26<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
27</li><li>
26<a href="install.html">Installation</a> 28<a href="install.html">Installation</a>
27</li><li> 29</li><li>
28<a href="running.html">Running</a> 30<a href="running.html">Running</a>
@@ -53,8 +55,6 @@ div.major { max-width: 600px; padding: 1em; margin: 1em 0 1em 0; }
53</li><li> 55</li><li>
54<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 56<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
55</li><li> 57</li><li>
56<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
57</li><li>
58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
59</li><li> 59</li><li>
60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/contact.html b/doc/contact.html
index aa725005..54c3aa9c 100644
--- a/doc/contact.html
+++ b/doc/contact.html
@@ -20,6 +20,8 @@
20<ul><li> 20<ul><li>
21<a href="luajit.html">LuaJIT</a> 21<a href="luajit.html">LuaJIT</a>
22<ul><li> 22<ul><li>
23<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24</li><li>
23<a href="install.html">Installation</a> 25<a href="install.html">Installation</a>
24</li><li> 26</li><li>
25<a href="running.html">Running</a> 27<a href="running.html">Running</a>
@@ -50,8 +52,6 @@
50</li><li> 52</li><li>
51<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 53<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
52</li><li> 54</li><li>
53<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
54</li><li>
55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
56</li><li> 56</li><li>
57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_c_api.html b/doc/ext_c_api.html
index df4084bf..812dce86 100644
--- a/doc/ext_c_api.html
+++ b/doc/ext_c_api.html
@@ -20,6 +20,8 @@
20<ul><li> 20<ul><li>
21<a href="luajit.html">LuaJIT</a> 21<a href="luajit.html">LuaJIT</a>
22<ul><li> 22<ul><li>
23<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24</li><li>
23<a href="install.html">Installation</a> 25<a href="install.html">Installation</a>
24</li><li> 26</li><li>
25<a href="running.html">Running</a> 27<a href="running.html">Running</a>
@@ -50,8 +52,6 @@
50</li><li> 52</li><li>
51<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 53<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
52</li><li> 54</li><li>
53<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
54</li><li>
55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
56</li><li> 56</li><li>
57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_ffi.html b/doc/ext_ffi.html
index 00623a3a..1dad3384 100644
--- a/doc/ext_ffi.html
+++ b/doc/ext_ffi.html
@@ -20,6 +20,8 @@
20<ul><li> 20<ul><li>
21<a href="luajit.html">LuaJIT</a> 21<a href="luajit.html">LuaJIT</a>
22<ul><li> 22<ul><li>
23<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24</li><li>
23<a href="install.html">Installation</a> 25<a href="install.html">Installation</a>
24</li><li> 26</li><li>
25<a href="running.html">Running</a> 27<a href="running.html">Running</a>
@@ -50,8 +52,6 @@
50</li><li> 52</li><li>
51<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 53<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
52</li><li> 54</li><li>
53<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
54</li><li>
55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
56</li><li> 56</li><li>
57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_ffi_api.html b/doc/ext_ffi_api.html
index 503c6e4a..e894f84b 100644
--- a/doc/ext_ffi_api.html
+++ b/doc/ext_ffi_api.html
@@ -25,6 +25,8 @@ td.abiparam { font-weight: bold; width: 6em; }
25<ul><li> 25<ul><li>
26<a href="luajit.html">LuaJIT</a> 26<a href="luajit.html">LuaJIT</a>
27<ul><li> 27<ul><li>
28<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
29</li><li>
28<a href="install.html">Installation</a> 30<a href="install.html">Installation</a>
29</li><li> 31</li><li>
30<a href="running.html">Running</a> 32<a href="running.html">Running</a>
@@ -55,8 +57,6 @@ td.abiparam { font-weight: bold; width: 6em; }
55</li><li> 57</li><li>
56<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 58<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
57</li><li> 59</li><li>
58<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
59</li><li>
60<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 60<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
61</li><li> 61</li><li>
62<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 62<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_ffi_semantics.html b/doc/ext_ffi_semantics.html
index 275b5184..f8da1e60 100644
--- a/doc/ext_ffi_semantics.html
+++ b/doc/ext_ffi_semantics.html
@@ -25,6 +25,8 @@ td.convop { font-style: italic; width: 40%; }
25<ul><li> 25<ul><li>
26<a href="luajit.html">LuaJIT</a> 26<a href="luajit.html">LuaJIT</a>
27<ul><li> 27<ul><li>
28<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
29</li><li>
28<a href="install.html">Installation</a> 30<a href="install.html">Installation</a>
29</li><li> 31</li><li>
30<a href="running.html">Running</a> 32<a href="running.html">Running</a>
@@ -55,8 +57,6 @@ td.convop { font-style: italic; width: 40%; }
55</li><li> 57</li><li>
56<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 58<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
57</li><li> 59</li><li>
58<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
59</li><li>
60<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 60<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
61</li><li> 61</li><li>
62<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 62<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_ffi_tutorial.html b/doc/ext_ffi_tutorial.html
index c5dc68ae..b8a08227 100644
--- a/doc/ext_ffi_tutorial.html
+++ b/doc/ext_ffi_tutorial.html
@@ -27,6 +27,8 @@ td.idiomlua b { font-weight: normal; color: #2142bf; }
27<ul><li> 27<ul><li>
28<a href="luajit.html">LuaJIT</a> 28<a href="luajit.html">LuaJIT</a>
29<ul><li> 29<ul><li>
30<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
31</li><li>
30<a href="install.html">Installation</a> 32<a href="install.html">Installation</a>
31</li><li> 33</li><li>
32<a href="running.html">Running</a> 34<a href="running.html">Running</a>
@@ -57,8 +59,6 @@ td.idiomlua b { font-weight: normal; color: #2142bf; }
57</li><li> 59</li><li>
58<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 60<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
59</li><li> 61</li><li>
60<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
61</li><li>
62<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 62<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
63</li><li> 63</li><li>
64<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 64<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/ext_jit.html b/doc/ext_jit.html
index 6d683899..c42ab788 100644
--- a/doc/ext_jit.html
+++ b/doc/ext_jit.html
@@ -20,6 +20,8 @@
20<ul><li> 20<ul><li>
21<a href="luajit.html">LuaJIT</a> 21<a href="luajit.html">LuaJIT</a>
22<ul><li> 22<ul><li>
23<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
24</li><li>
23<a href="install.html">Installation</a> 25<a href="install.html">Installation</a>
24</li><li> 26</li><li>
25<a href="running.html">Running</a> 27<a href="running.html">Running</a>
@@ -50,8 +52,6 @@
50</li><li> 52</li><li>
51<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 53<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
52</li><li> 54</li><li>
53<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
54</li><li>
55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 55<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
56</li><li> 56</li><li>
57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 57<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/extensions.html b/doc/extensions.html
index a5baf11c..0679921a 100644
--- a/doc/extensions.html
+++ b/doc/extensions.html
@@ -37,6 +37,8 @@ td.excinterop {
37<ul><li> 37<ul><li>
38<a href="luajit.html">LuaJIT</a> 38<a href="luajit.html">LuaJIT</a>
39<ul><li> 39<ul><li>
40<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
41</li><li>
40<a href="install.html">Installation</a> 42<a href="install.html">Installation</a>
41</li><li> 43</li><li>
42<a href="running.html">Running</a> 44<a href="running.html">Running</a>
@@ -67,8 +69,6 @@ td.excinterop {
67</li><li> 69</li><li>
68<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 70<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
69</li><li> 71</li><li>
70<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
71</li><li>
72<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 72<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
73</li><li> 73</li><li>
74<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 74<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
@@ -90,7 +90,7 @@ or LuaJIT.
90</p> 90</p>
91<p> 91<p>
92LuaJIT extends the standard Lua VM with new functionality and adds 92LuaJIT extends the standard Lua VM with new functionality and adds
93several extension modules. Please note that this page is only about 93several extension modules. Please note this page is only about
94<em>functional</em> enhancements and not about performance enhancements, 94<em>functional</em> enhancements and not about performance enhancements,
95such as the optimized VM, the faster interpreter or the JIT compiler. 95such as the optimized VM, the faster interpreter or the JIT compiler.
96</p> 96</p>
@@ -236,6 +236,70 @@ across arbitrary C&nbsp;functions. Keep this in mind when
236upgrading from LuaJIT 1.x. 236upgrading from LuaJIT 1.x.
237</p> 237</p>
238 238
239<h2 id="lua52">Extensions from Lua 5.2</h2>
240<p>
241LuaJIT supports some language and library extensions from Lua&nbsp;5.2.
242Features that are unlikely to break existing code are unconditionally
243enabled:
244</p>
245<ul>
246<li><tt>goto</tt> and <tt>::labels::</tt>.</li>
247<li>Hex escapes <tt>'\x3F'</tt> and <tt>'\*'</tt> escape in strings.</li>
248<li><tt>load(string|reader, chunkname [,mode [,env]])</tt>.
249<tt>loadstring()</tt> is an alias.</li>
250<li><tt>math.log(x [,base])</tt>.
251<li><tt>string.rep(s, n [,sep])</tt>.
252<li><tt>string.format()</tt>: <tt>%q</tt> reversible.
253<tt>%s</tt> checks <tt>__tostring</tt>.
254<tt>%a</tt> and <tt>"%A</tt> added.</li>
255<li>String matching pattern <tt>%g</tt> added.</li>
256<li><tt>io.read("*L")</tt>.</li>
257<li><tt>io.lines()</tt> and <tt>file:lines()</tt> process
258<tt>io.read()</tt> options.</li>
259<li><tt>os.exit(status|true|false [,close])</tt>.</li>
260<li><tt>package.searchpath(name, path [, sep [, rep]])</tt>.</li>
261<li><tt>package.loadlib(name, "*")</tt>.</li>
262<li><tt>debug.getinfo()</tt> returns <tt>nparams</tt> and <tt>isvararg</tt>
263for option <tt>"u"</tt>.</li>
264<li><tt>debug.getlocal()</tt> accepts function instead of level.</li>
265<li><tt>debug.getlocal()</tt> and <tt>debug.setlocal()</tt> accept negative
266indexes for varargs.</li>
267<li><tt>debug.getupvalue()</tt> and <tt>debug.setupvalue()</tt> handle
268C&nbsp;functions.</li>
269<li><tt>debug.upvalueid()</tt> and <tt>debug.upvaluejoin()</tt>.</li>
270<li>Command line option <tt>-E</tt>.</li>
271<li>Command line checks <tt>__tostring</tt> for errors.</li>
272</ul>
273<p>
274Other features are only enabled, if LuaJIT is built with
275<tt>-DLUAJIT_ENABLE_LUA52COMPAT</tt>:
276</p>
277<ul>
278<li><tt>goto</tt> is a keyword and not a valid variable name anymore.</li>
279<li><tt>break</tt> can be placed anywhere. Empty statements (<tt>;;</tt>)
280are allowed.</li>
281<li><tt>__lt</tt>, <tt>__le</tt> are invoked for mixed types.</li>
282<li><tt>__len</tt> for tables. <tt>rawlen()</tt> library function.</li>
283<li><tt>pairs()</tt> and <tt>ipairs()</tt> check for <tt>__pairs</tt> and
284<tt>__ipairs</tt>.</li>
285<li><tt>coroutine.running()</tt> returns two results.</li>
286<li><tt>table.pack()</tt> and <tt>table.unpack()</tt>
287(same as <tt>unpack()</tt>).</li>
288<li><tt>io.write()</tt> and <tt>file:write()</tt> return file handle
289instead of <tt>true</tt>.</li>
290<li><tt>os.execute()</tt> and <tt>pipe:close()</tt> return detailed
291exit status.</li>
292<li><tt>debug.setmetatable()</tt> returns object.</li>
293<li><tt>debug.getuservalue()</tt> and <tt>debug.setuservalue()</tt>.</li>
294<li>Remove <tt>math.mod()</tt>, <tt>string.gfind()</tt>.
295</ul>
296<p>
297Note: this provides only partial compatibility with Lua 5.2 at the
298language and Lua library level. LuaJIT is API+ABI-compatible with
299Lua&nbsp;5.1, which prevents implementing features that would otherwise
300break the Lua/C API and ABI (e.g. <tt>_ENV</tt>).
301</p>
302
239<h2 id="exceptions">C++ Exception Interoperability</h2> 303<h2 id="exceptions">C++ Exception Interoperability</h2>
240<p> 304<p>
241LuaJIT has built-in support for interoperating with C++&nbsp;exceptions. 305LuaJIT has built-in support for interoperating with C++&nbsp;exceptions.
diff --git a/doc/faq.html b/doc/faq.html
index a36e878d..21997e77 100644
--- a/doc/faq.html
+++ b/doc/faq.html
@@ -23,6 +23,8 @@ dd { margin-left: 1.5em; }
23<ul><li> 23<ul><li>
24<a href="luajit.html">LuaJIT</a> 24<a href="luajit.html">LuaJIT</a>
25<ul><li> 25<ul><li>
26<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
27</li><li>
26<a href="install.html">Installation</a> 28<a href="install.html">Installation</a>
27</li><li> 29</li><li>
28<a href="running.html">Running</a> 30<a href="running.html">Running</a>
@@ -53,8 +55,6 @@ dd { margin-left: 1.5em; }
53</li><li> 55</li><li>
54<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 56<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
55</li><li> 57</li><li>
56<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
57</li><li>
58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
59</li><li> 59</li><li>
60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/install.html b/doc/install.html
index b8a4fc71..cbf33f6c 100644
--- a/doc/install.html
+++ b/doc/install.html
@@ -48,6 +48,8 @@ td.compatno {
48<ul><li> 48<ul><li>
49<a href="luajit.html">LuaJIT</a> 49<a href="luajit.html">LuaJIT</a>
50<ul><li> 50<ul><li>
51<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
52</li><li>
51<a class="current" href="install.html">Installation</a> 53<a class="current" href="install.html">Installation</a>
52</li><li> 54</li><li>
53<a href="running.html">Running</a> 55<a href="running.html">Running</a>
@@ -78,8 +80,6 @@ td.compatno {
78</li><li> 80</li><li>
79<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 81<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
80</li><li> 82</li><li>
81<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
82</li><li>
83<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 83<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
84</li><li> 84</li><li>
85<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 85<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/luajit.html b/doc/luajit.html
index d8f20b35..9ab12899 100644
--- a/doc/luajit.html
+++ b/doc/luajit.html
@@ -9,6 +9,87 @@
9<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen"> 9<link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
10<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print"> 10<link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
11<meta name="description" content="LuaJIT is a Just-In-Time (JIT) compiler for the Lua language."> 11<meta name="description" content="LuaJIT is a Just-In-Time (JIT) compiler for the Lua language.">
12<style type="text/css">
13table.feature {
14 width: inherit;
15 line-height: 1.2;
16 margin: 0;
17}
18table.feature td {
19 width: 80px;
20 height: 40px;
21 vertical-align: middle;
22 text-align: center;
23 font-weight: bold;
24 border: 4px solid #e6ecff;
25 border-radius: 12px;
26}
27table.os td {
28 background: #7080d0;
29 background-image: linear-gradient(#4060c0 10%, #b0b0ff 95%);
30 background-image: -moz-linear-gradient(#4060c0 10%, #b0b0ff 95%);
31 background-image: -webkit-linear-gradient(#4060c0 10%, #b0b0ff 95%);
32 background-image: -o-linear-gradient(#4060c0 10%, #b0b0ff 95%);
33 background-image: -ms-linear-gradient(#4060c0 10%, #b0b0ff 95%);
34}
35table.os1 td {
36 color: #ffff80;
37}
38table.os2 td {
39 color: #ffa040;
40}
41table.compiler td {
42 color: #2080ff;
43 background: #62bf41;
44 background-image: linear-gradient(#62bf41 10%, #b0ffb0 95%);
45 background-image: -moz-linear-gradient(#62bf41 10%, #b0ffb0 95%);
46 background-image: -webkit-linear-gradient(#62bf41 10%, #b0ffb0 95%);
47 background-image: -o-linear-gradient(#62bf41 10%, #b0ffb0 95%);
48 background-image: -ms-linear-gradient(#62bf41 10%, #b0ffb0 95%);
49}
50table.cpu td {
51 color: #ffff00;
52 background: #cf7251;
53 background-image: linear-gradient(#bf6241 10%, #ffb0b0 95%);
54 background-image: -moz-linear-gradient(#bf6241 10%, #ffb0b0 95%);
55 background-image: -webkit-linear-gradient(#bf6241 10%, #ffb0b0 95%);
56 background-image: -o-linear-gradient(#bf6241 10%, #ffb0b0 95%);
57 background-image: -ms-linear-gradient(#bf6241 10%, #ffb0b0 95%);
58}
59table.fcompat td {
60 color: #2060e0;
61 background: #61cfcf;
62 background-image: linear-gradient(#41bfbf 10%, #b0ffff 95%);
63 background-image: -moz-linear-gradient(#41bfbf 10%, #b0ffff 95%);
64 background-image: -webkit-linear-gradient(#41bfbf 10%, #b0ffff 95%);
65 background-image: -o-linear-gradient(#41bfbf 10%, #b0ffff 95%);
66 background-image: -ms-linear-gradient(#41bfbf 10%, #b0ffff 95%);
67}
68table.stats td {
69 color: #ffffff;
70 background: #a0a0a0;
71 background-image: linear-gradient(#808080 10%, #d0d0d0 95%);
72 background-image: -moz-linear-gradient(#808080 10%, #d0d0d0 95%);
73 background-image: -webkit-linear-gradient(#808080 10%, #d0d0d0 95%);
74 background-image: -o-linear-gradient(#808080 10%, #d0d0d0 95%);
75 background-image: -ms-linear-gradient(#808080 10%, #d0d0d0 95%);
76}
77table.stats td.speed {
78 color: #ff4020;
79}
80table.stats td.kb {
81 color: #ffff80;
82 background: #808080;
83 background-image: linear-gradient(#606060 10%, #c0c0c0 95%);
84 background-image: -moz-linear-gradient(#606060 10%, #c0c0c0 95%);
85 background-image: -webkit-linear-gradient(#606060 10%, #c0c0c0 95%);
86 background-image: -o-linear-gradient(#606060 10%, #c0c0c0 95%);
87 background-image: -ms-linear-gradient(#606060 10%, #c0c0c0 95%);
88}
89table.feature small {
90 font-size: 50%;
91}
92</style>
12</head> 93</head>
13<body> 94<body>
14<div id="site"> 95<div id="site">
@@ -21,6 +102,8 @@
21<ul><li> 102<ul><li>
22<a class="current" href="luajit.html">LuaJIT</a> 103<a class="current" href="luajit.html">LuaJIT</a>
23<ul><li> 104<ul><li>
105<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
106</li><li>
24<a href="install.html">Installation</a> 107<a href="install.html">Installation</a>
25</li><li> 108</li><li>
26<a href="running.html">Running</a> 109<a href="running.html">Running</a>
@@ -51,8 +134,6 @@
51</li><li> 134</li><li>
52<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 135<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
53</li><li> 136</li><li>
54<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
55</li><li>
56<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 137<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
57</li><li> 138</li><li>
58<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 139<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
@@ -60,77 +141,78 @@
60</div> 141</div>
61<div id="main"> 142<div id="main">
62<p> 143<p>
63LuaJIT is a <b>Just-In-Time Compiler</b> for the Lua<sup>*</sup> 144LuaJIT is a <b>Just-In-Time Compiler</b> (JIT) for the
64programming language. 145<a href="http://www.lua.org/"><span class="ext">&raquo;</span>&nbsp;Lua</a> programming language.
65</p> 146Lua is a powerful, dynamic and light-weight programming language.
66<p> 147It may be embedded or used as a general-purpose, stand-alone language.
67LuaJIT is Copyright &copy; 2005-2012 Mike Pall.
68LuaJIT is open source software, released under the
69<a href="http://www.opensource.org/licenses/mit-license.php"><span class="ext">&raquo;</span>&nbsp;MIT license</a>.
70</p>
71<p class="indent" style="color: #606060;">
72* Lua is a powerful, dynamic and light-weight programming language
73designed for extending applications. Lua is also frequently used as a
74general-purpose, stand-alone language. More information about
75Lua can be found at: <a href="http://www.lua.org/"><span class="ext">&raquo;</span>&nbsp;http://www.lua.org/</a>
76</p> 148</p>
77<h2>Compatibility</h2>
78<p> 149<p>
79LuaJIT implements the full set of language features defined by Lua 5.1. 150LuaJIT is Copyright &copy; 2005-2012 Mike Pall, released under the
80The virtual machine (VM) is <b>API- and ABI-compatible</b> to the 151<a href="http://www.opensource.org/licenses/mit-license.php"><span class="ext">&raquo;</span>&nbsp;MIT open source license</a>.
81standard Lua interpreter and can be deployed as a drop-in replacement.
82</p> 152</p>
83<p> 153<p>
84LuaJIT offers more performance, at the expense of portability. It
85currently runs on all popular operating systems based on
86<b>x86</b> or <b>x64</b> CPUs (Linux, Windows, OSX etc.) or embedded
87systems based on <b>ARM</b> (Android, iOS), <b>PPC</b> or <b>MIPS</b> CPUs.
88Other platforms will be supported in the future, based on user demand
89and sponsoring.
90</p> 154</p>
91 155
156<h2>Compatibility</h2>
157<table class="feature os os1">
158<tr><td>Windows</td><td>Linux</td><td>BSD</td><td>OSX</td><td>POSIX</td></tr>
159</table>
160<table class="feature os os2">
161<tr><td><span style="font-size:90%;">Embedded</span></td><td>Android</td><td>iOS</td><td>PS3</td></tr>
162</table>
163<table class="feature compiler">
164<tr><td>GCC</td><td>CLANG<br>LLVM</td><td>MSVC</td></tr>
165</table>
166<table class="feature cpu">
167<tr><td>x86</td><td>x64</td><td>ARM</td><td>PPC</td><td>e500</td><td>MIPS</td></tr>
168</table>
169<table class="feature fcompat">
170<tr><td>Lua&nbsp;5.1<br>API+ABI</td><td>+&nbsp;JIT</td><td>+&nbsp;BitOp</td><td>+&nbsp;FFI</td><td>Drop-in<br>DLL/.so</td></tr>
171</table>
172
92<h2>Overview</h2> 173<h2>Overview</h2>
93<p> 174<table class="feature stats">
175<tr>
176<td class="speed">3x<br>-&nbsp;&nbsp;100x</td>
177<td class="kb">115&nbsp;<small>KB</small><br>VM</td>
178<td class="kb">90&nbsp;<small>KB</small><br>JIT</td>
179<td class="kloc">73&nbsp;<small>KLOC</small><br>C</td>
180<td class="kloc">24&nbsp;<small>KLOC</small><br>ASM</td>
181<td class="kloc">11&nbsp;<small>KLOC</small><br>Lua</td>
182</tr>
183</table>
184<p style="margin-top: 1em;">
94LuaJIT has been successfully used as a <b>scripting middleware</b> in 185LuaJIT has been successfully used as a <b>scripting middleware</b> in
95games, 3D modellers, numerical simulations, trading platforms and many 186games, appliances, network and graphics apps, numerical simulations,
96other specialty applications. It combines high flexibility with high 187trading platforms and many other specialty applications. It scales from
97performance and an unmatched <b>low memory footprint</b>: less than 188embedded devices, smartphones, desktops up to server farms. It combines
98<b>125K</b> for the VM plus less than <b>85K</b> for the JIT compiler (on x86). 189high flexibility with <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;high performance</a>
190and an unmatched <b>low memory footprint</b>.
99</p> 191</p>
100<p> 192<p>
101LuaJIT has been in continuous development since 2005. It's widely 193LuaJIT has been in continuous development since 2005. It's widely
102considered to be <b>one of the fastest dynamic language 194considered to be <b>one of the fastest dynamic language
103implementations</b>. It has outperformed other dynamic languages on many 195implementations</b>. It has outperformed other dynamic languages on many
104cross-language benchmarks since its first release &mdash; often by a 196cross-language benchmarks since its first release &mdash; often by a
105substantial margin. In 2009 other dynamic language VMs started to catch up 197substantial margin.
106with the performance of LuaJIT 1.x. Well, I couldn't let that slide. ;-)
107</p> 198</p>
108<p> 199<p>
1092009 also marks the first release of the long-awaited <b>LuaJIT 2.0</b>. 200For <b>LuaJIT 2.0</b> the whole VM has been rewritten from the ground up
110The whole VM has been rewritten from the ground up and relentlessly 201and relentlessly optimized for performance. It combines a <b>high-speed
111optimized for performance. It combines a high-speed interpreter, 202interpreter</b>, written in assembler, with a <b>state-of-the-art JIT
112written in assembler, with a state-of-the-art JIT compiler. 203compiler</b>.
113</p> 204</p>
114<p> 205<p>
115An innovative <b>trace compiler</b> is integrated with advanced, 206An innovative <b>trace compiler</b> is integrated with advanced,
116SSA-based optimizations and a highly tuned code generation backend. This 207SSA-based optimizations and highly tuned code generation backends.
117allows a substantial reduction of the overhead associated with dynamic 208A substantial reduction of the overhead associated with dynamic languages
118language features. 209allows it to break into the performance range traditionally reserved for
119</p> 210offline, static language compilers.
120<p>
121It's destined to break into the <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;performance</a>
122range traditionally reserved for offline, static language compilers.
123</p> 211</p>
124 212
125<h2>More ...</h2> 213<h2>More ...</h2>
126<p> 214<p>
127Click on the LuaJIT sub-topics in the navigation bar to learn more 215Please select a sub-topic in the navigation bar to learn more about LuaJIT.
128about LuaJIT.
129</p>
130<p><p>
131Click on the Logo in the upper left corner to visit
132the LuaJIT project page on the web. All other links to online
133resources are marked with a '<span class="ext">&raquo;</span>'.
134</p> 216</p>
135<br class="flush"> 217<br class="flush">
136</div> 218</div>
diff --git a/doc/running.html b/doc/running.html
index e725f636..eddb7ad7 100644
--- a/doc/running.html
+++ b/doc/running.html
@@ -42,6 +42,8 @@ td.param_default {
42<ul><li> 42<ul><li>
43<a href="luajit.html">LuaJIT</a> 43<a href="luajit.html">LuaJIT</a>
44<ul><li> 44<ul><li>
45<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
46</li><li>
45<a href="install.html">Installation</a> 47<a href="install.html">Installation</a>
46</li><li> 48</li><li>
47<a class="current" href="running.html">Running</a> 49<a class="current" href="running.html">Running</a>
@@ -72,8 +74,6 @@ td.param_default {
72</li><li> 74</li><li>
73<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 75<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
74</li><li> 76</li><li>
75<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
76</li><li>
77<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 77<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
78</li><li> 78</li><li>
79<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 79<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
diff --git a/doc/status.html b/doc/status.html
index eae43966..6bb4df89 100644
--- a/doc/status.html
+++ b/doc/status.html
@@ -23,6 +23,8 @@ ul li { padding-bottom: 0.3em; }
23<ul><li> 23<ul><li>
24<a href="luajit.html">LuaJIT</a> 24<a href="luajit.html">LuaJIT</a>
25<ul><li> 25<ul><li>
26<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
27</li><li>
26<a href="install.html">Installation</a> 28<a href="install.html">Installation</a>
27</li><li> 29</li><li>
28<a href="running.html">Running</a> 30<a href="running.html">Running</a>
@@ -53,8 +55,6 @@ ul li { padding-bottom: 0.3em; }
53</li><li> 55</li><li>
54<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a> 56<a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
55</li><li> 57</li><li>
56<a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
57</li><li>
58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a> 58<a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
59</li><li> 59</li><li>
60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a> 60<a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
@@ -62,7 +62,7 @@ ul li { padding-bottom: 0.3em; }
62</div> 62</div>
63<div id="main"> 63<div id="main">
64<p> 64<p>
65The <span style="color: #0000c0;">LuaJIT 1.x</span> series represents 65The <span style="color: #0000c0;">LuaJIT&nbsp;1.x</span> series represents
66the current <span style="color: #0000c0;">stable branch</span>. 66the current <span style="color: #0000c0;">stable branch</span>.
67Only a single bug has been discovered in the last three years. So, if 67Only a single bug has been discovered in the last three years. So, if
68you need a rock-solid VM, you are encouraged to fetch the latest 68you need a rock-solid VM, you are encouraged to fetch the latest
@@ -70,85 +70,34 @@ release of LuaJIT 1.x from the <a href="http://luajit.org/download.html"><span c
70page. 70page.
71</p> 71</p>
72<p> 72<p>
73<span style="color: #c00000;">LuaJIT 2.0</span> is the currently active 73<span style="color: #c00000;">LuaJIT&nbsp;2.0</span> is the currently active
74<span style="color: #c00000;">development branch</span>. 74<span style="color: #c00000;">development branch</span> in beta test.
75It still has <b>Beta Test</b> status, but it's not undergoing substantial 75It has <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;much better performance</a> than
76changes anymore. 76LuaJIT&nbsp;1.x and runs on many more platforms and architectures.
77It has <a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;much better performance</a> than LuaJIT 1.x. 77It's nearing a stable release, so you should definitely
78It's nearly feature-complete, so you should definitely
79start to evaluate it for new projects right now. 78start to evaluate it for new projects right now.
80</p> 79</p>
81 80
82<h2>Current Status</h2> 81<h2>Current Status</h2>
83<p> 82<p>
84This is a list of the things you should know about the LuaJIT 2.0 beta test: 83LuaJIT ought to run all Lua&nbsp;5.1-compatible source code just fine.
84It's considered a serious bug if the VM crashes or produces unexpected
85results &mdash; please report this.
86</p>
87<p>
88Known incompatibilities and issues in LuaJIT&nbsp;2.0:
85</p> 89</p>
86<ul> 90<ul>
87<li> 91<li>
88Obviously there will be some <b>bugs</b> in a VM which has been 92There are some differences in <b>implementation-defined</b> behavior.
89rewritten from the ground up. Please report your findings together with 93These either have a good reason, are arbitrary design choices
90the circumstances needed to reproduce the bug. If possible, reduce the
91problem down to a simple test case.<br>
92There is no formal bug tracker at the moment. The best place for
93discussion is the <a href="http://luajit.org/list.html"><span class="ext">&raquo;</span>&nbsp;LuaJIT mailing list</a>. Of course
94you may also send your bug reports <a href="contact.html">directly to me</a>,
95especially when they contain lengthy debug output or if you require
96confidentiality.
97</li>
98<li>
99The x86 JIT compiler only generates code for CPUs with support for
100<b>SSE2</b> instructions. I.e. you need at least a P4, Core 2/i3/i5/i7,
101Atom or K8/K10 to get the full benefit.<br>
102If you run LuaJIT on older CPUs without SSE2 support, the JIT compiler
103is disabled and the VM falls back to the LuaJIT interpreter. This is faster
104than the Lua interpreter, but not nearly as fast as the JIT compiler of course.
105Run the command line executable without arguments to show the current status
106(<tt>JIT: ON</tt> or <tt>JIT: OFF</tt>).
107</li>
108<li>
109The VM is complete in the sense that it <b>should</b> run all Lua code
110just fine. It's considered a serious bug if the VM crashes or produces
111unexpected results &mdash; please report this. There are only very few
112known incompatibilities with standard Lua:
113<ul>
114<li>
115The Lua <b>debug API</b> is missing a couple of features (return
116hooks for non-Lua functions) and shows slightly different behavior
117(no per-coroutine hooks, no tail call counting).
118</li>
119<li>
120Some of the <b>configuration options</b> of Lua&nbsp;5.1 are not supported:
121<ul>
122<li>The <b>number type</b> cannot be changed (it's always a <tt>double</tt>).</li>
123<li>The stand-alone executable cannot be linked with <b>readline</b>
124to enable line editing. It's planned to add support for loading it
125on-demand.</li>
126</ul>
127</li>
128<li>
129Most other issues you're likely to find (e.g. with the existing test
130suites) are differences in the <b>implementation-defined</b> behavior.
131These either have a good reason (like early tail call resolving which
132may cause differences in error reporting), are arbitrary design choices
133or are due to quirks in the VM. The latter cases may get fixed if a 94or are due to quirks in the VM. The latter cases may get fixed if a
134demonstrable need is shown. 95demonstrable need is shown.
135</li> 96</li>
136</ul>
137</li>
138<li> 97<li>
139The <b>JIT compiler</b> falls back to the 98The Lua <b>debug API</b> is missing a couple of features (return
140interpreter in some cases. All of this works transparently, so unless 99hooks for non-Lua functions) and shows slightly different behavior
141you use <tt>-jv</tt>, you'll probably never notice (the interpreter is 100in LuaJIT (no per-coroutine hooks, no tail call counting).
142<a href="http://luajit.org/performance.html"><span class="ext">&raquo;</span>&nbsp;quite fast</a>, too). Here are the known issues:
143<ul>
144<li>
145Most known issues cause a <b>NYI</b> (not yet implemented) trace abort
146message. E.g. for calls to some internal library
147functions. Reporting these is only mildly useful, except if you have good
148example code that shows the problem. Obviously, reports accompanied with
149a patch to fix the issue are more than welcome. But please check back
150with me, before writing major improvements, to avoid duplication of
151effort.
152</li> 101</li>
153<li> 102<li>
154Some checks are missing in the JIT-compiled code for obscure situations 103Some checks are missing in the JIT-compiled code for obscure situations
@@ -159,10 +108,8 @@ this.
159<li> 108<li>
160Currently some <b>out-of-memory</b> errors from <b>on-trace code</b> are not 109Currently some <b>out-of-memory</b> errors from <b>on-trace code</b> are not
161handled correctly. The error may fall through an on-trace 110handled correctly. The error may fall through an on-trace
162<tt>pcall</tt> (x86) or it may be passed on to the function set with 111<tt>pcall</tt> or it may be passed on to the function set with
163<tt>lua_atpanic</tt> (x64). 112<tt>lua_atpanic</tt> on x64. This issue will be fixed in LuaJIT&nbsp;2.1.
164</li>
165</ul>
166</li> 113</li>
167</ul> 114</ul>
168 115
@@ -170,65 +117,10 @@ handled correctly. The error may fall through an on-trace
170<p> 117<p>
171Please refer to the 118Please refer to the
172<a href="http://www.freelists.org/post/luajit/LuaJIT-Roadmap-20122013"><span class="ext">&raquo;</span>&nbsp;LuaJIT 119<a href="http://www.freelists.org/post/luajit/LuaJIT-Roadmap-20122013"><span class="ext">&raquo;</span>&nbsp;LuaJIT
173Roadmap 2012/2013</a> for the latest release plan. Here's the general 120Roadmap 2012/2013</a> for details.
174project plan for LuaJIT 2.0: 121</p>
122<p>
175</p> 123</p>
176<ul>
177<li>
178The main goal right now is to stabilize LuaJIT 2.0 and get it out of
179beta test. <b>Correctness</b> has priority over completeness. This
180implies the first stable release will certainly NOT compile every
181library function call and will fall back to the interpreter from time
182to time. This is perfectly ok, since it still executes all Lua code,
183just not at the highest possible speed.
184</li>
185<li>
186The next step is to get it to compile more library functions and handle
187more cases where the compiler currently bails out. This doesn't mean it
188will compile every corner case. It's much more important that it
189performs well in a majority of use cases. Every compiler has to make
190these trade-offs &mdash; <b>completeness</b> just cannot be the
191overriding goal for a low-footprint, low-overhead JIT compiler.
192</li>
193<li>
194More <b>optimizations</b> will be added in parallel to the last step on
195an as-needed basis. Sinking of stores
196to aggregates and sinking of allocations are high on the list.
197More complex optimizations with less pay-off, such as value-range-propagation
198(VRP) will have to wait.
199</li>
200<li>
201LuaJIT 2.0 has been designed with <b>portability</b> in mind.
202Nonetheless, it compiles to native code and needs to be adapted to each
203architecture. The two major work items are porting the the fast interpreter,
204which is written in assembler, and porting the compiler backend.
205Most other portability issues like endianess or 32 vs. 64&nbsp;bit CPUs
206have already been taken care of.<br>
207Several ports are already available, thanks to the
208<a href="http://luajit.org/sponsors.html"><span class="ext">&raquo;</span>&nbsp;LuaJIT sponsorship program</a>.
209More ports will follow in the future &mdash; companies which are
210interested in sponsoring a port to a particular architecture, please
211use the given contact address.
212</li>
213<li>
214<b>Documentation</b> about the <b>internals</b> of LuaJIT is still sorely
215missing. Although the source code is included and is IMHO well
216commented, many basic design decisions are in need of an explanation.
217The rather un-traditional compiler architecture and the many highly
218optimized data structures are a barrier for outside participation in
219the development. Alas, as I've repeatedly stated, I'm better at
220writing code than papers and I'm not in need of any academic merits.
221Someday I will find the time for it. :-)
222</li>
223<li>
224Producing good code for unbiased branches is a key problem for trace
225compilers. This is the main cause for "trace explosion".
226<b>Hyperblock scheduling</b> promises to solve this nicely at the
227price of a major redesign of the compiler. This would also pave the
228way for emitting predicated instructions, which is a prerequisite
229for efficient <b>vectorization</b>.
230</li>
231</ul>
232<br class="flush"> 124<br class="flush">
233</div> 125</div>
234<div id="foot"> 126<div id="foot">