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; |