diff options
| author | Li Jin <dragon-fly@qq.com> | 2021-02-08 14:06:31 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2021-02-08 14:06:31 +0800 |
| commit | 4b5b9181d484607b6eeeda2608ff6483647222a9 (patch) | |
| tree | a0316585f92d7956455fab78b9c388fe0d73b580 /src/MoonP/moon_compiler.cpp | |
| parent | 24dab43a753538dcf3b85bd09bf76c0a3c3c8b73 (diff) | |
| download | yuescript-4b5b9181d484607b6eeeda2608ff6483647222a9.tar.gz yuescript-4b5b9181d484607b6eeeda2608ff6483647222a9.tar.bz2 yuescript-4b5b9181d484607b6eeeda2608ff6483647222a9.zip | |
limit the use of text macro.
Diffstat (limited to '')
| -rw-r--r-- | src/MoonP/moon_compiler.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/MoonP/moon_compiler.cpp b/src/MoonP/moon_compiler.cpp index d63b1c7..09185ce 100644 --- a/src/MoonP/moon_compiler.cpp +++ b/src/MoonP/moon_compiler.cpp | |||
| @@ -53,7 +53,7 @@ inline std::string s(std::string_view sv) { | |||
| 53 | return std::string(sv); | 53 | return std::string(sv); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | const std::string_view version = "0.5.0"sv; | 56 | const std::string_view version = "0.5.1"sv; |
| 57 | const std::string_view extension = "mp"sv; | 57 | const std::string_view extension = "mp"sv; |
| 58 | 58 | ||
| 59 | class MoonCompilerImpl { | 59 | class MoonCompilerImpl { |
| @@ -3249,7 +3249,7 @@ private: | |||
| 3249 | bool isBlock = (usage == ExpUsage::Common) && (chainList.size() <= 2); | 3249 | bool isBlock = (usage == ExpUsage::Common) && (chainList.size() <= 2); |
| 3250 | ParseInfo info; | 3250 | ParseInfo info; |
| 3251 | if (type == "lua"sv) { | 3251 | if (type == "lua"sv) { |
| 3252 | if (!allowBlockMacroReturn && !isBlock) { | 3252 | if (!isBlock) { |
| 3253 | throw std::logic_error(_info.errorMessage("lua macro can only be placed where block macro is allowed"sv, x)); | 3253 | throw std::logic_error(_info.errorMessage("lua macro can only be placed where block macro is allowed"sv, x)); |
| 3254 | } | 3254 | } |
| 3255 | auto macroChunk = s("=(macro "sv) + _parser.toString(x->name) + ')'; | 3255 | auto macroChunk = s("=(macro "sv) + _parser.toString(x->name) + ')'; |
| @@ -3261,6 +3261,9 @@ private: | |||
| 3261 | } | 3261 | } |
| 3262 | return {nullptr, nullptr, std::move(codes), std::move(localVars)}; | 3262 | return {nullptr, nullptr, std::move(codes), std::move(localVars)}; |
| 3263 | } else if (type == "text"sv) { | 3263 | } else if (type == "text"sv) { |
| 3264 | if (!isBlock) { | ||
| 3265 | throw std::logic_error(_info.errorMessage("text macro can only be placed where block macro is allowed"sv, x)); | ||
| 3266 | } | ||
| 3264 | return {nullptr, nullptr, std::move(codes), std::move(localVars)}; | 3267 | return {nullptr, nullptr, std::move(codes), std::move(localVars)}; |
| 3265 | } else { | 3268 | } else { |
| 3266 | if (!codes.empty()) { | 3269 | if (!codes.empty()) { |
| @@ -3347,9 +3350,6 @@ private: | |||
| 3347 | Utils::trim(luaCodes); | 3350 | Utils::trim(luaCodes); |
| 3348 | if (!node) { | 3351 | if (!node) { |
| 3349 | if (!luaCodes.empty()) { | 3352 | if (!luaCodes.empty()) { |
| 3350 | if (usage == ExpUsage::Return) { | ||
| 3351 | luaCodes.insert(0, "return "sv); | ||
| 3352 | } | ||
| 3353 | if (_config.reserveLineNumber) { | 3353 | if (_config.reserveLineNumber) { |
| 3354 | luaCodes.insert(0, nll(chainValue).substr(1)); | 3354 | luaCodes.insert(0, nll(chainValue).substr(1)); |
| 3355 | } | 3355 | } |
