diff options
| author | Li Jin <dragon-fly@qq.com> | 2020-02-13 21:44:22 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2020-02-13 21:44:22 +0800 |
| commit | b06a818e78d1a26c34f2c87f607e78ad156e4921 (patch) | |
| tree | 94681ba34e7866686bb0d4f13c83b47779f4b989 | |
| parent | c241ea241e8e9c152f6eb14f163b2ae39749f7bf (diff) | |
| download | yuescript-b06a818e78d1a26c34f2c87f607e78ad156e4921.tar.gz yuescript-b06a818e78d1a26c34f2c87f607e78ad156e4921.tar.bz2 yuescript-b06a818e78d1a26c34f2c87f607e78ad156e4921.zip | |
update readme and rockspec.
| -rw-r--r-- | README.md | 83 | ||||
| -rw-r--r-- | moonplus-0.1-1.rockspec | 4 | ||||
| -rw-r--r-- | src/Moonscript.h (renamed from src/MoonPlus.h) | 21 | ||||
| -rw-r--r-- | src/StackTracePlus.h | 4 | ||||
| -rw-r--r-- | src/moonp.cpp | 2 |
5 files changed, 106 insertions, 8 deletions
| @@ -1,18 +1,42 @@ | |||
| 1 | # MoonPlus | 1 | # MoonPlus |
| 2 | 2 | ||
| 3 |  | 3 |  |
| 4 | MoonPlus is a compiler with features from [Moonscript language](https://github.com/leafo/moonscript) 0.5.0 and could be faster than the original Moonscript compiler. | 4 | MoonPlus is a compiler with features from [Moonscript language](https://github.com/leafo/moonscript) 0.5.0 and implementing new features to make Moonscript more up to date. |
| 5 | |||
| 6 | Since original Moonscript has been used to write web framework [lapis](https://github.com/leafo/lapis) and run a few business web sites like [itch.io](https://itch.io) and [streak.club](https://streak.club) with some large code bases. The original language is getting too hard to adopt new language features for those may break the stablility for existing applications. | ||
| 7 | |||
| 8 | So MoonPlus is a new code base for pushing the language to go forward and may be a playground to try introducing new language syntax or programing paradigms to make Moonscript language more expressive and productive. | ||
| 5 | 9 | ||
| 6 | ## Features | 10 | ## Features |
| 7 | 11 | ||
| 8 | * No other dependencies needed except modified **parserlib** library from Achilleas Margaritis with some performance enhancement. **lpeg** library is no longer needed. | 12 | * No other dependencies needed except modified **parserlib** library from Achilleas Margaritis with some performance enhancement. **lpeg** library is no longer needed. |
| 9 | * Written in C++17. | 13 | * Written in C++17. |
| 10 | * Support full Moonscript language features, generate the same Lua codes with original compiler. | 14 | * Support full Moonscript language features, generate the same Lua codes with original compiler. |
| 11 | * Reserve line numbers from source Moonscript codes in compiled Lua codes to help with debugging. | 15 | * Reserve line numbers from Moonscript sources in compiled Lua codes to help with debugging. |
| 16 | |||
| 17 | ## Installation | ||
| 18 | |||
| 19 | Install [luarocks](https://luarocks.org), a package manager for Lua modules. Then install Lua module with | ||
| 20 | ```sh | ||
| 21 | > luarocks install moonplus | ||
| 22 | ``` | ||
| 23 | |||
| 24 | ## Usage | ||
| 25 | |||
| 26 | ```Lua | ||
| 27 | require("moonp")("main") -- require `main.moon` | ||
| 28 | |||
| 29 | local moonp = require("moonp") | ||
| 30 | print(moonp.to_lua[[ | ||
| 31 | f = -> | ||
| 32 | print "hello world" | ||
| 33 | f! | ||
| 34 | ]]) | ||
| 35 | ``` | ||
| 12 | 36 | ||
| 13 | ## Changes | 37 | ## Changes |
| 14 | 38 | ||
| 15 | The original Moonscript language 0.5.0 support can be found in the `0.5.0` branch. Moonscript with new features is in the master branch. Here are the new features introduced in MoonPlus | 39 | The original Moonscript language 0.5.0 support can be found in the `0.5.0` branch. Moonscript with new features is in the master branch. Here are the new features introduced in MoonPlus. |
| 16 | 40 | ||
| 17 | * Multi-line comment. | 41 | * Multi-line comment. |
| 18 | * Usage for symbol `\` to escape new line. Will compile codes: | 42 | * Usage for symbol `\` to escape new line. Will compile codes: |
| @@ -179,6 +203,59 @@ for _index_0 = 1, #_list_0 do | |||
| 179 | end | 203 | end |
| 180 | ``` | 204 | ``` |
| 181 | 205 | ||
| 206 | * Expression list appears at the middle of code block is not allowed. For codes like: | ||
| 207 | ```Moonscript | ||
| 208 | -- Moonscript 0.5.0 | ||
| 209 | f = (x)-> | ||
| 210 | "abc",123 -- valid meaningless codes | ||
| 211 | x + 1 | ||
| 212 | ``` | ||
| 213 | in original Moonscript compiles to: | ||
| 214 | ```Lua | ||
| 215 | local f | ||
| 216 | f = function(x) | ||
| 217 | local _ = "abc", 123 -- report error in MoonPlus | ||
| 218 | return x + 1 | ||
| 219 | end | ||
| 220 | ``` | ||
| 221 | |||
| 222 | This feature may lead to some silenced errors. For example: | ||
| 223 | ```Moonscript | ||
| 224 | -- expected codes | ||
| 225 | tree\addChild with Node! | ||
| 226 | \addChild subNode | ||
| 227 | |||
| 228 | -- in original Moonscript, codes will still run after adding a break | ||
| 229 | tree\addChild | ||
| 230 | with Node! | ||
| 231 | \addChild subNode | ||
| 232 | ``` | ||
| 233 | the original Moonscript will compile these codes to: | ||
| 234 | ```Lua | ||
| 235 | -- expected codes | ||
| 236 | tree:addChild((function() | ||
| 237 | do | ||
| 238 | local _with_0 = Node() | ||
| 239 | _with_0:addChild(subNode) | ||
| 240 | return _with_0 | ||
| 241 | end | ||
| 242 | end)()) | ||
| 243 | |||
| 244 | -- codes added with a break will still run | ||
| 245 | local _ -- report error in MoonPlus instead of creating | ||
| 246 | do -- an anonymous function to bind the object method | ||
| 247 | local _base_0 = tree | ||
| 248 | local _fn_0 = _base_0.addChild | ||
| 249 | _ = function(...) | ||
| 250 | return _fn_0(_base_0, ...) | ||
| 251 | end | ||
| 252 | end | ||
| 253 | do | ||
| 254 | local _with_0 = Node() | ||
| 255 | _with_0:addChild(subNode) | ||
| 256 | end | ||
| 257 | ``` | ||
| 258 | |||
| 182 | ## Standalone Compiler Usage | 259 | ## Standalone Compiler Usage |
| 183 | 260 | ||
| 184 | Test compiler with `make test`. | 261 | Test compiler with `make test`. |
diff --git a/moonplus-0.1-1.rockspec b/moonplus-0.1-1.rockspec index aeebe69..e1dd086 100644 --- a/moonplus-0.1-1.rockspec +++ b/moonplus-0.1-1.rockspec | |||
| @@ -6,8 +6,10 @@ source = { | |||
| 6 | description = { | 6 | description = { |
| 7 | summary = "MoonPlus is a compiler for Moonscript written in C++.", | 7 | summary = "MoonPlus is a compiler for Moonscript written in C++.", |
| 8 | detailed = [[ | 8 | detailed = [[ |
| 9 | MoonPlus is a compiler with features from Moonscript language 0.5.0 and more advanced features. could be faster than the original Moonscript compiler. ]], | 9 | MoonPlus is a compiler with features from Moonscript language 0.5.0 and implementing new features to make Moonscript more up to date. ]], |
| 10 | homepage = "https://github.com/pigpigyyy/MoonPlus", | 10 | homepage = "https://github.com/pigpigyyy/MoonPlus", |
| 11 | maintainer = "Li Jin <dragon-fly@qq.com>", | ||
| 12 | labels = {"moonscript","cpp","transpiler"}, | ||
| 11 | license = "MIT" | 13 | license = "MIT" |
| 12 | } | 14 | } |
| 13 | dependencies = { | 15 | dependencies = { |
diff --git a/src/MoonPlus.h b/src/Moonscript.h index da5f3ac..6e84552 100644 --- a/src/MoonPlus.h +++ b/src/Moonscript.h | |||
| @@ -1,4 +1,25 @@ | |||
| 1 | R"moonscript_codes( | 1 | R"moonscript_codes( |
| 2 | --[[ | ||
| 3 | Copyright (C) 2020 by Leaf Corcoran, modified by Li Jin | ||
| 4 | |||
| 5 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 6 | of this software and associated documentation files (the "Software"), to deal | ||
| 7 | in the Software without restriction, including without limitation the rights | ||
| 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 9 | copies of the Software, and to permit persons to whom the Software is | ||
| 10 | furnished to do so, subject to the following conditions: | ||
| 11 | |||
| 12 | The above copyright notice and this permission notice shall be included in | ||
| 13 | all copies or substantial portions of the Software. | ||
| 14 | |||
| 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| 21 | THE SOFTWARE.]] | ||
| 22 | |||
| 2 | import "moonp" | 23 | import "moonp" |
| 3 | import concat, insert, remove from table | 24 | import concat, insert, remove from table |
| 4 | unpack = unpack or table.unpack | 25 | unpack = unpack or table.unpack |
diff --git a/src/StackTracePlus.h b/src/StackTracePlus.h index 1a909fd..202ae22 100644 --- a/src/StackTracePlus.h +++ b/src/StackTracePlus.h | |||
| @@ -1,8 +1,6 @@ | |||
| 1 | R"lua_codes( | 1 | R"lua_codes( |
| 2 | --[[ | 2 | --[[ |
| 3 | The MIT License | 3 | Copyright (c) 2010 Ignacio Burgueño, modified by Li Jin |
| 4 | |||
| 5 | Copyright (c) 2010 Ignacio Burgueño | ||
| 6 | 4 | ||
| 7 | Permission is hereby granted, free of charge, to any person obtaining a copy | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy |
| 8 | of this software and associated documentation files (the "Software"), to deal | 6 | of this software and associated documentation files (the "Software"), to deal |
diff --git a/src/moonp.cpp b/src/moonp.cpp index a6c99df..cb53b55 100644 --- a/src/moonp.cpp +++ b/src/moonp.cpp | |||
| @@ -182,7 +182,7 @@ extern "C" { | |||
| 182 | #include "lauxlib.h" | 182 | #include "lauxlib.h" |
| 183 | 183 | ||
| 184 | static const char moonplusCodes[] = | 184 | static const char moonplusCodes[] = |
| 185 | #include "MoonPlus.h" | 185 | #include "Moonscript.h" |
| 186 | 186 | ||
| 187 | static int init_moonplus(lua_State* L) { | 187 | static int init_moonplus(lua_State* L) { |
| 188 | MoonP::MoonConfig config; | 188 | MoonP::MoonConfig config; |
