diff options
Diffstat (limited to '')
| -rw-r--r-- | spec/inputs/cond.yue | 16 | ||||
| -rw-r--r-- | spec/outputs/cond.lua | 30 | ||||
| -rwxr-xr-x | src/yuescript/yue_compiler.cpp | 2 | ||||
| -rwxr-xr-x | src/yuescript/yue_parser.cpp | 2 |
4 files changed, 48 insertions, 2 deletions
diff --git a/spec/inputs/cond.yue b/spec/inputs/cond.yue index 3dee99b..d33eec4 100644 --- a/spec/inputs/cond.yue +++ b/spec/inputs/cond.yue | |||
| @@ -182,7 +182,23 @@ m = if 1 | |||
| 182 | 182 | ||
| 183 | else 6 | 183 | else 6 |
| 184 | 184 | ||
| 185 | do | ||
| 186 | a | ||
| 187 | :b | ||
| 188 | return if a | ||
| 189 | :b | ||
| 190 | else if c | ||
| 191 | d: e | ||
| 192 | else | ||
| 193 | f: 123 | ||
| 185 | 194 | ||
| 195 | do | ||
| 196 | c | ||
| 197 | d: e | ||
| 198 | if a | ||
| 199 | :b = tb | ||
| 200 | elseif c | ||
| 201 | d: e = tb | ||
| 186 | 202 | ||
| 187 | nil | 203 | nil |
| 188 | 204 | ||
diff --git a/spec/outputs/cond.lua b/spec/outputs/cond.lua index 5efa237..8f69e97 100644 --- a/spec/outputs/cond.lua +++ b/spec/outputs/cond.lua | |||
| @@ -269,4 +269,34 @@ if 1 then | |||
| 269 | else | 269 | else |
| 270 | m = 6 | 270 | m = 6 |
| 271 | end | 271 | end |
| 272 | do | ||
| 273 | a({ | ||
| 274 | b = b | ||
| 275 | }) | ||
| 276 | if a then | ||
| 277 | return { | ||
| 278 | b = b | ||
| 279 | } | ||
| 280 | else | ||
| 281 | if c then | ||
| 282 | return { | ||
| 283 | d = e | ||
| 284 | } | ||
| 285 | else | ||
| 286 | return { | ||
| 287 | f = 123 | ||
| 288 | } | ||
| 289 | end | ||
| 290 | end | ||
| 291 | end | ||
| 292 | do | ||
| 293 | c({ | ||
| 294 | d = e | ||
| 295 | }) | ||
| 296 | if a then | ||
| 297 | b = tb.b | ||
| 298 | elseif c then | ||
| 299 | local e = tb.d | ||
| 300 | end | ||
| 301 | end | ||
| 272 | return nil | 302 | return nil |
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 15a785a..6295eb7 100755 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp | |||
| @@ -60,7 +60,7 @@ using namespace parserlib; | |||
| 60 | 60 | ||
| 61 | typedef std::list<std::string> str_list; | 61 | typedef std::list<std::string> str_list; |
| 62 | 62 | ||
| 63 | const std::string_view version = "0.9.4"sv; | 63 | const std::string_view version = "0.9.5"sv; |
| 64 | const std::string_view extension = "yue"sv; | 64 | const std::string_view extension = "yue"sv; |
| 65 | 65 | ||
| 66 | class YueCompilerImpl { | 66 | class YueCompilerImpl { |
diff --git a/src/yuescript/yue_parser.cpp b/src/yuescript/yue_parser.cpp index 9257fab..03639c3 100755 --- a/src/yuescript/yue_parser.cpp +++ b/src/yuescript/yue_parser.cpp | |||
| @@ -236,7 +236,7 @@ YueParser::YueParser() { | |||
| 236 | Switch = Space >> key("switch") >> disable_do(Exp) >> -(Space >> key("do")) | 236 | Switch = Space >> key("switch") >> disable_do(Exp) >> -(Space >> key("do")) |
| 237 | >> -Space >> Break >> SwitchBlock; | 237 | >> -Space >> Break >> SwitchBlock; |
| 238 | 238 | ||
| 239 | IfCond = disable_chain(Exp >> -Assign); | 239 | IfCond = disable_do_chain(disable_arg_table_block(Exp >> -Assign)); |
| 240 | IfElseIf = -(Break >> *EmptyLine >> CheckIndent) >> Space >> key("elseif") >> IfCond >> plain_body_with("then"); | 240 | IfElseIf = -(Break >> *EmptyLine >> CheckIndent) >> Space >> key("elseif") >> IfCond >> plain_body_with("then"); |
| 241 | IfElse = -(Break >> *EmptyLine >> CheckIndent) >> Space >> key("else") >> plain_body; | 241 | IfElse = -(Break >> *EmptyLine >> CheckIndent) >> Space >> key("else") >> plain_body; |
| 242 | IfType = (expr("if") | expr("unless")) >> not_(AlphaNum); | 242 | IfType = (expr("if") | expr("unless")) >> not_(AlphaNum); |
