Lua to JavaScript Transpiler
MIT License
A Lua parser and standard library targeting the Mozilla Parser API AST.
Generated and minified sources are available on NPM
npm install lua2js
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:
self
is used as this
]]
's even when using the [==[
syntax.goto
statement and labels from lua 5.2 are unimplemented._ENV
or _G
.pairs
ipairs
next
all work on both lua tables and javascript objects/arraysgetmetatable
and setmetatable
only work on LuaTable'srequires
and package
interface tables are missing.debug
library is missing.coroutine
library is missing (and no runtime support for coroutines exists)`bit32
library from lua 5.2 is incomplete.string.format
is less powerful then the lua version.string.find
, string.match
, string.gsub
) is unimplemented.load
, dostring
, dofile
, etc...) is unimplemented.Boolean Options
decorateLuaObjects
: Mark lua functions so __lua.call
can 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 let
statements to maintain ES5 compatibility.loose
: Try not to throw parse errors, and collect them in ast.errors
instead.luaCalls
: Rewrite function calls to use __lua.call
to 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+b
becomes __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.
test.js
and 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.