diff options
| author | Li Jin <dragon-fly@qq.com> | 2023-10-23 11:07:40 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2023-10-23 11:07:40 +0800 |
| commit | 147eb556316c673859fd7da7b479c3f3f8f4bdaa (patch) | |
| tree | 1dfc25d530daee35db75b48cc8c67ec5cf7818f3 | |
| parent | 08fef1c7698cff09689e9965d993931ca6081257 (diff) | |
| download | yuescript-147eb556316c673859fd7da7b479c3f3f8f4bdaa.tar.gz yuescript-147eb556316c673859fd7da7b479c3f3f8f4bdaa.tar.bz2 yuescript-147eb556316c673859fd7da7b479c3f3f8f4bdaa.zip | |
remove unnecessary multiline declaration for list table assignment.
Diffstat (limited to '')
| -rw-r--r-- | spec/inputs/tables.yue | 10 | ||||
| -rw-r--r-- | spec/outputs/tables.lua | 244 | ||||
| -rw-r--r-- | src/yuescript/yue_compiler.cpp | 13 |
3 files changed, 141 insertions, 126 deletions
diff --git a/spec/inputs/tables.yue b/spec/inputs/tables.yue index 53a53ae..0de8a8c 100644 --- a/spec/inputs/tables.yue +++ b/spec/inputs/tables.yue | |||
| @@ -40,7 +40,7 @@ ya = { 1,2,3, key: 100, 343, "hello", umm: 232 } | |||
| 40 | x = { 1,2, | 40 | x = { 1,2, |
| 41 | 4343, 343 ,343 } | 41 | 4343, 343 ,343 } |
| 42 | 42 | ||
| 43 | x = [ 1,2, | 43 | x1 = [ 1,2, |
| 44 | 4343, 343 ,343 ] | 44 | 4343, 343 ,343 ] |
| 45 | 45 | ||
| 46 | g, p = { | 46 | g, p = { |
| @@ -258,24 +258,24 @@ tbMix = { | |||
| 258 | ... -- perform the Lua table behavior here | 258 | ... -- perform the Lua table behavior here |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | tbMixA = { | 261 | do tbMixA = { |
| 262 | ...[i for i = 1, 10] | 262 | ...[i for i = 1, 10] |
| 263 | 11 | 263 | 11 |
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | tbMixA = [ | 266 | do tbMixA = [ |
| 267 | ...[i for i = 1, 10] | 267 | ...[i for i = 1, 10] |
| 268 | 11 | 268 | 11 |
| 269 | ] | 269 | ] |
| 270 | 270 | ||
| 271 | tbMixB = { | 271 | do tbMixB = { |
| 272 | ... ... -- only the first item in vararg been accessed here | 272 | ... ... -- only the first item in vararg been accessed here |
| 273 | ... {...} | 273 | ... {...} |
| 274 | ... {......} | 274 | ... {......} |
| 275 | 1, 2, 3 | 275 | 1, 2, 3 |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | tbMixB = [ | 278 | do tbMixB = [ |
| 279 | ... ... -- only the first item in vararg been accessed here | 279 | ... ... -- only the first item in vararg been accessed here |
| 280 | ... {...} | 280 | ... {...} |
| 281 | ... {......} | 281 | ... {......} |
diff --git a/spec/outputs/tables.lua b/spec/outputs/tables.lua index f836d58..911f677 100644 --- a/spec/outputs/tables.lua +++ b/spec/outputs/tables.lua | |||
| @@ -52,7 +52,7 @@ local x = { | |||
| 52 | 343, | 52 | 343, |
| 53 | 343 | 53 | 343 |
| 54 | } | 54 | } |
| 55 | x = { | 55 | local x1 = { |
| 56 | 1, | 56 | 1, |
| 57 | 2, | 57 | 2, |
| 58 | 4343, | 58 | 4343, |
| @@ -428,149 +428,159 @@ do | |||
| 428 | end | 428 | end |
| 429 | tbMix = _tab_0 | 429 | tbMix = _tab_0 |
| 430 | end | 430 | end |
| 431 | local tbMixA | ||
| 432 | do | 431 | do |
| 433 | local _tab_0 = { } | 432 | local tbMixA |
| 434 | local _obj_0 | ||
| 435 | do | 433 | do |
| 436 | local _accum_0 = { } | 434 | local _tab_0 = { } |
| 437 | local _len_0 = 1 | 435 | local _obj_0 |
| 438 | for i = 1, 10 do | 436 | do |
| 439 | _accum_0[_len_0] = i | 437 | local _accum_0 = { } |
| 440 | _len_0 = _len_0 + 1 | 438 | local _len_0 = 1 |
| 439 | for i = 1, 10 do | ||
| 440 | _accum_0[_len_0] = i | ||
| 441 | _len_0 = _len_0 + 1 | ||
| 442 | end | ||
| 443 | _obj_0 = _accum_0 | ||
| 441 | end | 444 | end |
| 442 | _obj_0 = _accum_0 | 445 | local _idx_0 = 1 |
| 443 | end | 446 | for _key_0, _value_0 in pairs(_obj_0) do |
| 444 | local _idx_0 = 1 | 447 | if _idx_0 == _key_0 then |
| 445 | for _key_0, _value_0 in pairs(_obj_0) do | 448 | _tab_0[#_tab_0 + 1] = _value_0 |
| 446 | if _idx_0 == _key_0 then | 449 | _idx_0 = _idx_0 + 1 |
| 447 | _tab_0[#_tab_0 + 1] = _value_0 | 450 | else |
| 448 | _idx_0 = _idx_0 + 1 | 451 | _tab_0[_key_0] = _value_0 |
| 449 | else | 452 | end |
| 450 | _tab_0[_key_0] = _value_0 | ||
| 451 | end | 453 | end |
| 454 | _tab_0[#_tab_0 + 1] = 11 | ||
| 455 | tbMixA = _tab_0 | ||
| 452 | end | 456 | end |
| 453 | _tab_0[#_tab_0 + 1] = 11 | ||
| 454 | tbMixA = _tab_0 | ||
| 455 | end | 457 | end |
| 456 | do | 458 | do |
| 457 | local _tab_0 = { } | 459 | local tbMixA |
| 458 | local _obj_0 | ||
| 459 | do | 460 | do |
| 460 | local _accum_0 = { } | 461 | local _tab_0 = { } |
| 461 | local _len_0 = 1 | 462 | local _obj_0 |
| 462 | for i = 1, 10 do | 463 | do |
| 463 | _accum_0[_len_0] = i | 464 | local _accum_0 = { } |
| 464 | _len_0 = _len_0 + 1 | 465 | local _len_0 = 1 |
| 466 | for i = 1, 10 do | ||
| 467 | _accum_0[_len_0] = i | ||
| 468 | _len_0 = _len_0 + 1 | ||
| 469 | end | ||
| 470 | _obj_0 = _accum_0 | ||
| 465 | end | 471 | end |
| 466 | _obj_0 = _accum_0 | 472 | local _idx_0 = #_tab_0 + 1 |
| 467 | end | 473 | for _index_0 = 1, #_obj_0 do |
| 468 | local _idx_0 = #_tab_0 + 1 | 474 | local _value_0 = _obj_0[_index_0] |
| 469 | for _index_0 = 1, #_obj_0 do | 475 | _tab_0[_idx_0] = _value_0 |
| 470 | local _value_0 = _obj_0[_index_0] | 476 | _idx_0 = _idx_0 + 1 |
| 471 | _tab_0[_idx_0] = _value_0 | 477 | end |
| 472 | _idx_0 = _idx_0 + 1 | 478 | _tab_0[#_tab_0 + 1] = 11 |
| 479 | tbMixA = _tab_0 | ||
| 473 | end | 480 | end |
| 474 | _tab_0[#_tab_0 + 1] = 11 | ||
| 475 | tbMixA = _tab_0 | ||
| 476 | end | 481 | end |
| 477 | local tbMixB | ||
| 478 | do | 482 | do |
| 479 | local _tab_0 = { } | 483 | local tbMixB |
| 480 | local _obj_0 = ... | 484 | do |
| 481 | local _idx_0 = 1 | 485 | local _tab_0 = { } |
| 482 | for _key_0, _value_0 in pairs(_obj_0) do | 486 | local _obj_0 = ... |
| 483 | if _idx_0 == _key_0 then | 487 | local _idx_0 = 1 |
| 484 | _tab_0[#_tab_0 + 1] = _value_0 | 488 | for _key_0, _value_0 in pairs(_obj_0) do |
| 485 | _idx_0 = _idx_0 + 1 | 489 | if _idx_0 == _key_0 then |
| 486 | else | 490 | _tab_0[#_tab_0 + 1] = _value_0 |
| 487 | _tab_0[_key_0] = _value_0 | 491 | _idx_0 = _idx_0 + 1 |
| 492 | else | ||
| 493 | _tab_0[_key_0] = _value_0 | ||
| 494 | end | ||
| 488 | end | 495 | end |
| 489 | end | 496 | local _obj_1 = { |
| 490 | local _obj_1 = { | 497 | ... |
| 491 | ... | 498 | } |
| 492 | } | 499 | local _idx_1 = 1 |
| 493 | local _idx_1 = 1 | 500 | for _key_0, _value_0 in pairs(_obj_1) do |
| 494 | for _key_0, _value_0 in pairs(_obj_1) do | 501 | if _idx_1 == _key_0 then |
| 495 | if _idx_1 == _key_0 then | 502 | _tab_0[#_tab_0 + 1] = _value_0 |
| 496 | _tab_0[#_tab_0 + 1] = _value_0 | 503 | _idx_1 = _idx_1 + 1 |
| 497 | _idx_1 = _idx_1 + 1 | 504 | else |
| 498 | else | 505 | _tab_0[_key_0] = _value_0 |
| 499 | _tab_0[_key_0] = _value_0 | 506 | end |
| 507 | end | ||
| 508 | local _obj_2 | ||
| 509 | do | ||
| 510 | local _tab_1 = { } | ||
| 511 | local _obj_3 = ... | ||
| 512 | local _idx_2 = 1 | ||
| 513 | for _key_0, _value_0 in pairs(_obj_3) do | ||
| 514 | if _idx_2 == _key_0 then | ||
| 515 | _tab_1[#_tab_1 + 1] = _value_0 | ||
| 516 | _idx_2 = _idx_2 + 1 | ||
| 517 | else | ||
| 518 | _tab_1[_key_0] = _value_0 | ||
| 519 | end | ||
| 520 | end | ||
| 521 | _obj_2 = _tab_1 | ||
| 500 | end | 522 | end |
| 501 | end | ||
| 502 | local _obj_2 | ||
| 503 | do | ||
| 504 | local _tab_1 = { } | ||
| 505 | local _obj_3 = ... | ||
| 506 | local _idx_2 = 1 | 523 | local _idx_2 = 1 |
| 507 | for _key_0, _value_0 in pairs(_obj_3) do | 524 | for _key_0, _value_0 in pairs(_obj_2) do |
| 508 | if _idx_2 == _key_0 then | 525 | if _idx_2 == _key_0 then |
| 509 | _tab_1[#_tab_1 + 1] = _value_0 | 526 | _tab_0[#_tab_0 + 1] = _value_0 |
| 510 | _idx_2 = _idx_2 + 1 | 527 | _idx_2 = _idx_2 + 1 |
| 511 | else | 528 | else |
| 512 | _tab_1[_key_0] = _value_0 | 529 | _tab_0[_key_0] = _value_0 |
| 513 | end | 530 | end |
| 514 | end | 531 | end |
| 515 | _obj_2 = _tab_1 | 532 | _tab_0[#_tab_0 + 1] = 1 |
| 516 | end | 533 | _tab_0[#_tab_0 + 1] = 2 |
| 517 | local _idx_2 = 1 | 534 | _tab_0[#_tab_0 + 1] = 3 |
| 518 | for _key_0, _value_0 in pairs(_obj_2) do | 535 | tbMixB = _tab_0 |
| 519 | if _idx_2 == _key_0 then | ||
| 520 | _tab_0[#_tab_0 + 1] = _value_0 | ||
| 521 | _idx_2 = _idx_2 + 1 | ||
| 522 | else | ||
| 523 | _tab_0[_key_0] = _value_0 | ||
| 524 | end | ||
| 525 | end | 536 | end |
| 526 | _tab_0[#_tab_0 + 1] = 1 | ||
| 527 | _tab_0[#_tab_0 + 1] = 2 | ||
| 528 | _tab_0[#_tab_0 + 1] = 3 | ||
| 529 | tbMixB = _tab_0 | ||
| 530 | end | 537 | end |
| 531 | do | 538 | do |
| 532 | local _tab_0 = { } | 539 | local tbMixB |
| 533 | local _obj_0 = ... | ||
| 534 | local _idx_0 = #_tab_0 + 1 | ||
| 535 | for _index_0 = 1, #_obj_0 do | ||
| 536 | local _value_0 = _obj_0[_index_0] | ||
| 537 | _tab_0[_idx_0] = _value_0 | ||
| 538 | _idx_0 = _idx_0 + 1 | ||
| 539 | end | ||
| 540 | local _obj_1 = { | ||
| 541 | ... | ||
| 542 | } | ||
| 543 | local _idx_1 = #_tab_0 + 1 | ||
| 544 | for _index_0 = 1, #_obj_1 do | ||
| 545 | local _value_0 = _obj_1[_index_0] | ||
| 546 | _tab_0[_idx_1] = _value_0 | ||
| 547 | _idx_1 = _idx_1 + 1 | ||
| 548 | end | ||
| 549 | local _obj_2 | ||
| 550 | do | 540 | do |
| 551 | local _tab_1 = { } | 541 | local _tab_0 = { } |
| 552 | local _obj_3 = ... | 542 | local _obj_0 = ... |
| 553 | local _idx_2 = 1 | 543 | local _idx_0 = #_tab_0 + 1 |
| 554 | for _key_0, _value_0 in pairs(_obj_3) do | 544 | for _index_0 = 1, #_obj_0 do |
| 555 | if _idx_2 == _key_0 then | 545 | local _value_0 = _obj_0[_index_0] |
| 556 | _tab_1[#_tab_1 + 1] = _value_0 | 546 | _tab_0[_idx_0] = _value_0 |
| 557 | _idx_2 = _idx_2 + 1 | 547 | _idx_0 = _idx_0 + 1 |
| 558 | else | 548 | end |
| 559 | _tab_1[_key_0] = _value_0 | 549 | local _obj_1 = { |
| 550 | ... | ||
| 551 | } | ||
| 552 | local _idx_1 = #_tab_0 + 1 | ||
| 553 | for _index_0 = 1, #_obj_1 do | ||
| 554 | local _value_0 = _obj_1[_index_0] | ||
| 555 | _tab_0[_idx_1] = _value_0 | ||
| 556 | _idx_1 = _idx_1 + 1 | ||
| 557 | end | ||
| 558 | local _obj_2 | ||
| 559 | do | ||
| 560 | local _tab_1 = { } | ||
| 561 | local _obj_3 = ... | ||
| 562 | local _idx_2 = 1 | ||
| 563 | for _key_0, _value_0 in pairs(_obj_3) do | ||
| 564 | if _idx_2 == _key_0 then | ||
| 565 | _tab_1[#_tab_1 + 1] = _value_0 | ||
| 566 | _idx_2 = _idx_2 + 1 | ||
| 567 | else | ||
| 568 | _tab_1[_key_0] = _value_0 | ||
| 569 | end | ||
| 560 | end | 570 | end |
| 571 | _obj_2 = _tab_1 | ||
| 561 | end | 572 | end |
| 562 | _obj_2 = _tab_1 | 573 | local _idx_2 = #_tab_0 + 1 |
| 563 | end | 574 | for _index_0 = 1, #_obj_2 do |
| 564 | local _idx_2 = #_tab_0 + 1 | 575 | local _value_0 = _obj_2[_index_0] |
| 565 | for _index_0 = 1, #_obj_2 do | 576 | _tab_0[_idx_2] = _value_0 |
| 566 | local _value_0 = _obj_2[_index_0] | 577 | _idx_2 = _idx_2 + 1 |
| 567 | _tab_0[_idx_2] = _value_0 | 578 | end |
| 568 | _idx_2 = _idx_2 + 1 | 579 | _tab_0[#_tab_0 + 1] = 1 |
| 580 | _tab_0[#_tab_0 + 1] = 2 | ||
| 581 | _tab_0[#_tab_0 + 1] = 3 | ||
| 582 | tbMixB = _tab_0 | ||
| 569 | end | 583 | end |
| 570 | _tab_0[#_tab_0 + 1] = 1 | ||
| 571 | _tab_0[#_tab_0 + 1] = 2 | ||
| 572 | _tab_0[#_tab_0 + 1] = 3 | ||
| 573 | tbMixB = _tab_0 | ||
| 574 | end | 584 | end |
| 575 | local template <const> = { | 585 | local template <const> = { |
| 576 | foo = "Hello", | 586 | foo = "Hello", |
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp index 7ec3b3a..0265e07 100644 --- a/src/yuescript/yue_compiler.cpp +++ b/src/yuescript/yue_compiler.cpp | |||
| @@ -75,7 +75,7 @@ static std::unordered_set<std::string> Metamethods = { | |||
| 75 | "close"s // Lua 5.4 | 75 | "close"s // Lua 5.4 |
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | const std::string_view version = "0.20.1"sv; | 78 | const std::string_view version = "0.20.2"sv; |
| 79 | const std::string_view extension = "yue"sv; | 79 | const std::string_view extension = "yue"sv; |
| 80 | 80 | ||
| 81 | class CompileError : public std::logic_error { | 81 | class CompileError : public std::logic_error { |
| @@ -1976,10 +1976,15 @@ private: | |||
| 1976 | return; | 1976 | return; |
| 1977 | } | 1977 | } |
| 1978 | case id<Comprehension_t>(): { | 1978 | case id<Comprehension_t>(): { |
| 1979 | auto comp = static_cast<Comprehension_t*>(value); | ||
| 1979 | auto expList = assignment->expList.get(); | 1980 | auto expList = assignment->expList.get(); |
| 1980 | std::string preDefine = getPreDefineLine(assignment); | 1981 | if (comp->items.size() == 2 && ast_is<CompInner_t>(comp->items.back())) { |
| 1981 | transformComprehension(static_cast<Comprehension_t*>(value), out, ExpUsage::Assignment, expList); | 1982 | std::string preDefine = getPreDefineLine(assignment); |
| 1982 | out.back().insert(0, preDefine); | 1983 | transformComprehension(comp, out, ExpUsage::Assignment, expList); |
| 1984 | out.back().insert(0, preDefine); | ||
| 1985 | } else { | ||
| 1986 | transformComprehension(comp, out, ExpUsage::Assignment, expList); | ||
| 1987 | } | ||
| 1983 | return; | 1988 | return; |
| 1984 | } | 1989 | } |
| 1985 | case id<TblComprehension_t>(): { | 1990 | case id<TblComprehension_t>(): { |
