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.
pairsipairsnextall work on both lua tables and javascript objects/arrays- MetaTable and operator overloading work on LuaTables
getmetatableandsetmetatableonly work on LuaTable'srequiresandpackageinterface 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 ofletstatements to maintain ES5 compatibility.loose: Try not to throw parse errors, and collect them inast.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 insomething = 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.