diff options
| author | Li Jin <dragon-fly@qq.com> | 2022-09-08 09:26:49 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2022-09-08 09:26:49 +0800 |
| commit | d4af1fa275b1d27229fc995f4a45137380040933 (patch) | |
| tree | 955c76511d7021e6d1a0f06b46de3852eeac4176 /spec/outputs | |
| parent | df85ad2e7f975026ca1e6bd84b26fff81c8d99c8 (diff) | |
| download | yuescript-d4af1fa275b1d27229fc995f4a45137380040933.tar.gz yuescript-d4af1fa275b1d27229fc995f4a45137380040933.tar.bz2 yuescript-d4af1fa275b1d27229fc995f4a45137380040933.zip | |
redesigned metatable syntax. add support for destructuring a field with string and expression
Diffstat (limited to 'spec/outputs')
| -rw-r--r-- | spec/outputs/destructure.lua | 61 | ||||
| -rw-r--r-- | spec/outputs/metatable.lua | 33 |
2 files changed, 94 insertions, 0 deletions
diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index dfac42c..0da920e 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua | |||
| @@ -428,3 +428,64 @@ do | |||
| 428 | y2, y3 = _obj_0.y2, _obj_0.y3 | 428 | y2, y3 = _obj_0.y2, _obj_0.y3 |
| 429 | end | 429 | end |
| 430 | end | 430 | end |
| 431 | do | ||
| 432 | local v1, v2, v3, v4 | ||
| 433 | do | ||
| 434 | local _obj_0 = tb | ||
| 435 | local _tmp_0, _tmp_1 = 1 + 1, self.x | ||
| 436 | v1, v2, v3, v4 = _obj_0[ [["abc"]]], _obj_0[_tmp_0][1], _obj_0[_tmp_0][2], _obj_0[_tmp_1] | ||
| 437 | if v1 == nil then | ||
| 438 | v1 = 111 | ||
| 439 | end | ||
| 440 | if v2 == nil then | ||
| 441 | v2 = 222 | ||
| 442 | end | ||
| 443 | if v3 == nil then | ||
| 444 | v3 = 333 | ||
| 445 | end | ||
| 446 | if v4 == nil then | ||
| 447 | v4 = 444 | ||
| 448 | end | ||
| 449 | end | ||
| 450 | local v5, v6, v7 | ||
| 451 | do | ||
| 452 | local _obj_0 = tb2 | ||
| 453 | local _tmp_2, _tmp_3 = func(), func2() | ||
| 454 | v5, v6, v7 = _obj_0['x-y-z'], _obj_0[_tmp_2][_tmp_3], _obj_0[_tmp_2][1] | ||
| 455 | end | ||
| 456 | end | ||
| 457 | do | ||
| 458 | local _obj_0 = tb | ||
| 459 | local value = _obj_0[name] | ||
| 460 | local value_meta = getmetatable(_obj_0)[name] | ||
| 461 | end | ||
| 462 | do | ||
| 463 | local tostring, add | ||
| 464 | do | ||
| 465 | local _obj_0 = getmetatable(tb) | ||
| 466 | tostring, add = _obj_0.__tostring, _obj_0.__add | ||
| 467 | if tostring == nil then | ||
| 468 | tostring = (function() | ||
| 469 | return "name" | ||
| 470 | end) | ||
| 471 | end | ||
| 472 | end | ||
| 473 | local _exp_0 = tb | ||
| 474 | do | ||
| 475 | local _tab_0 = "table" == type(_exp_0) | ||
| 476 | if _tab_0 then | ||
| 477 | local name, meta_field | ||
| 478 | do | ||
| 479 | local _obj_0 = getmetatable(_exp_0) | ||
| 480 | name = _obj_0.__name | ||
| 481 | meta_field = _obj_0["123"] | ||
| 482 | if name == nil then | ||
| 483 | name = "item" | ||
| 484 | end | ||
| 485 | end | ||
| 486 | if meta_field ~= nil then | ||
| 487 | return print(name, meta_field) | ||
| 488 | end | ||
| 489 | end | ||
| 490 | end | ||
| 491 | end | ||
diff --git a/spec/outputs/metatable.lua b/spec/outputs/metatable.lua index 6f5ceed..937136f 100644 --- a/spec/outputs/metatable.lua +++ b/spec/outputs/metatable.lua | |||
| @@ -111,4 +111,37 @@ do | |||
| 111 | ctor, update = _obj_0.new, _obj_0.update | 111 | ctor, update = _obj_0.new, _obj_0.update |
| 112 | end | 112 | end |
| 113 | end | 113 | end |
| 114 | local tb = { } | ||
| 115 | do | ||
| 116 | do | ||
| 117 | local _obj_0 = getmetatable(tb) | ||
| 118 | f = _obj_0["value" .. tostring(x < y)](_obj_0, 123, ...) | ||
| 119 | end | ||
| 120 | f((function(...) | ||
| 121 | local _obj_0 = getmetatable(tb) | ||
| 122 | return _obj_0['value'](_obj_0, 123, ...) | ||
| 123 | end)(...)) | ||
| 124 | do | ||
| 125 | local _obj_0 = getmetatable(tb) | ||
| 126 | _obj_0[ [[ value | ||
| 127 | 1 | ||
| 128 | ]]](_obj_0, 123, ...) | ||
| 129 | end | ||
| 130 | local _obj_0 = getmetatable(tb) | ||
| 131 | return _obj_0["value" .. tostring(x > y)](_obj_0, 123, ...) | ||
| 132 | end | ||
| 133 | do | ||
| 134 | f = getmetatable(tb):__value(123, ...) | ||
| 135 | f(getmetatable(tb):__value(123, ...)) | ||
| 136 | getmetatable(tb):__value(123, ...) | ||
| 137 | return getmetatable(tb):__value(123, ...) | ||
| 138 | end | ||
| 139 | do | ||
| 140 | f = getmetatable(tb).__value(123, ...) | ||
| 141 | f = getmetatable(tb)["value" .. tostring(x < y)](123, ...) | ||
| 142 | f(getmetatable(tb)['value'](123, ...)) | ||
| 143 | getmetatable(tb)[ [[ value | ||
| 144 | 1]]](123, ...) | ||
| 145 | return getmetatable(tb)["value" .. tostring(x > y)](123, ...) | ||
| 146 | end | ||
| 114 | return nil | 147 | return nil |
