npm install lua2jsA Lua parser and standard library targeting the [Mozilla Parser API][parserapi] AST.
[parserapi]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
Generated and minified sources are available on NPM
``sh`
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 self is used as this
- 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.
- {[expression] = value} table fields.]]
- Long form strings and comments will choke on internal 's even when using the ==[ syntax.goto
- The statement and labels from lua 5.2 are unimplemented._ENV
- The global environment doesn't exist in or _G.
- pairs ipairs next all work on both lua tables and javascript objects/arrays
- MetaTable and operator overloading work on LuaTables
- getmetatable and setmetatable only work on LuaTable'srequires
- and package interface tables are missing.debug
- The library is missing.coroutine
- The library is missing (and no runtime support for coroutines exists)
- The bit32 library from lua 5.2 is unimplemented.
- string.format is unimplemented.
- 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.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 compatability.
- 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 varrious 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.
- Simple Tests: These are contained in an array toward the top of 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.