A Lua parser and standard library targeting the Mozilla Parser API AST.
Generated and minified sources are available on NPM
npm install lua2js- Development: peg.js
- Runtime: None =)
Many lua programs run unmodified on lua2js.  See the lua-tests folder for some examples.
When the luaCalls option is on, the arguments to javascript functions will be adjusted in the following ways:
- If the function was being called with : syntax, the variable that would be passed as selfis used asthis
- If a LuaTable is passed as an argument if the table only has numeric entries, an array will be passed. If there are no numeric entire, a javascript object will be passed. If both are present, the LuaTable object will be passed.
- If the last argument is a function that returned multiple values, they will be unpacked as normal.
- Long form strings and comments will choke on internal ]]'s even when using the[==[syntax.
- The gotostatement and labels from lua 5.2 are unimplemented.
- The global environment doesn't exist in _ENVor_G.
- pairs- ipairs- nextall work on both lua tables and javascript objects/arrays
- MetaTable and operator overloading work on LuaTables
- getmetatableand- setmetatableonly work on LuaTable's
- requiresand- packageinterface tables are missing.
- The debuglibrary is missing.
- The coroutinelibrary is missing (and no runtime support for coroutines exists)`
- The bit32library from lua 5.2 is incomplete.
- string.formatis less powerful then the lua version.
- Pattern matching (string.find,string.match,string.gsub) is unimplemented.
- Code loading (load,dostring,dofile, etc...) is unimplemented.
Boolean Options
- decorateLuaObjects: Mark lua functions so- __lua.callcan call them differently. Also the- {}syntax will create a LuaTable object instead of a normal javascript object.
- encloseWithFunctions: Protect variable scoping by creating functions and calling them.
- forceVar: Forbid generation of- letstatements to maintain ES5 compatibility.
- loose: Try not to throw parse errors, and collect them in- ast.errorsinstead.
- luaCalls: Rewrite function calls to use- __lua.callto fix-up various lua<->javascript calling convention differences.
- luaOperators: Use functions in the standard library instead of conventional operators to improve Lua compatibility. (e.g.- a+bbecomes- __lua.add(a,b))
- noSharedObjects: Make sure all AST nodes are unique objects. Can prevent bugs when performing transformations on the returned AST.
- allowRegularFunctions: Normally all functions are emitted in- something = function() { ... }format. Enable this to emit the more normal (but sometimes less compatible)- function something() { ... }.
You can run a suite of tests using the npm test command.  The tests require having nodeunit installed globally and a working Lua interpreter on your path.  The tests fall into three categories.
- Simple Tests: These are contained in an array toward the top of test.jsand test simple lua programs without the Lua interpreter.
- ./lua-tests/: A collection of various lua programs from around the internet. These are interpreted in node and their output compared against the systems lua interpreter.
- ./lua-testmore/: Selected tests from the lua-TestMore project. Similar to the above.
Code and documentation copyright 2014 Rob Blanckaert. Code released under the MIT license.