diff options
| author | Li Jin <dragon-fly@qq.com> | 2022-12-28 15:55:15 +0800 |
|---|---|---|
| committer | Li Jin <dragon-fly@qq.com> | 2022-12-28 15:55:15 +0800 |
| commit | dba662758192b41648e6c1201083d83926f07783 (patch) | |
| tree | 4eca06097fce6ac52bbf5276a6ac2da4affb90d0 /spec | |
| parent | 5e453de810f8a5e54351609857d742481f057498 (diff) | |
| download | yuescript-dba662758192b41648e6c1201083d83926f07783.tar.gz yuescript-dba662758192b41648e6c1201083d83926f07783.tar.bz2 yuescript-dba662758192b41648e6c1201083d83926f07783.zip | |
add metamethods checking.
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/inputs/import.yue | 7 | ||||
| -rw-r--r-- | spec/outputs/destructure.lua | 72 | ||||
| -rw-r--r-- | spec/outputs/import.lua | 16 | ||||
| -rw-r--r-- | spec/outputs/metatable.lua | 29 |
4 files changed, 67 insertions, 57 deletions
diff --git a/spec/inputs/import.yue b/spec/inputs/import.yue index af5545d..fe5caf5 100644 --- a/spec/inputs/import.yue +++ b/spec/inputs/import.yue | |||
| @@ -64,8 +64,9 @@ do | |||
| 64 | import "org.package.module" as function:func, if:ifVar | 64 | import "org.package.module" as function:func, if:ifVar |
| 65 | 65 | ||
| 66 | do | 66 | do |
| 67 | import "m" as {<a>: b} | 67 | import "m" as {<gc>: b} |
| 68 | import "m" as {e: f, <a>: c} | 68 | import "m" as {:<index>} |
| 69 | import "m" as {e: f, <pairs>: c} | ||
| 69 | import "m" as {c: d} | 70 | import "m" as {c: d} |
| 70 | import "m" as {g, {<h>: i}} | 71 | import "m" as {g, {<close>: i}} |
| 71 | 72 | ||
diff --git a/spec/outputs/destructure.lua b/spec/outputs/destructure.lua index 8953a2a..cb0eb3f 100644 --- a/spec/outputs/destructure.lua +++ b/spec/outputs/destructure.lua | |||
| @@ -288,28 +288,31 @@ do | |||
| 288 | end) | 288 | end) |
| 289 | end | 289 | end |
| 290 | end | 290 | end |
| 291 | local _obj_0 = tb | 291 | local mtx, y, zItem, index |
| 292 | local mtx, y, zItem = getmetatable(_obj_0.x), _obj_0.y, _obj_0.z | 292 | do |
| 293 | if mtx == nil then | 293 | local _obj_0 = tb |
| 294 | mtx = { } | 294 | mtx, y, zItem = getmetatable(_obj_0.x), _obj_0.y, _obj_0.z |
| 295 | end | 295 | if mtx == nil then |
| 296 | local index = getmetatable(_obj_0).__index | 296 | mtx = { } |
| 297 | if index == nil then | 297 | end |
| 298 | index = function() | 298 | index = getmetatable(_obj_0).__index |
| 299 | return nil | 299 | if index == nil then |
| 300 | index = function() | ||
| 301 | return nil | ||
| 302 | end | ||
| 300 | end | 303 | end |
| 301 | end | 304 | end |
| 302 | do | 305 | do |
| 303 | local _tmp_0 | 306 | local _tmp_0 |
| 304 | do | 307 | do |
| 305 | local _obj_1 = getmetatable(tb) | 308 | local _obj_0 = getmetatable(tb) |
| 306 | _tmp_0 = _obj_1.func | 309 | _tmp_0 = _obj_0.func |
| 307 | end | 310 | end |
| 308 | if _tmp_0 == nil then | 311 | if _tmp_0 == nil then |
| 309 | do | 312 | do |
| 310 | local _obj_1 = item | 313 | local _obj_0 = item |
| 311 | if _obj_1 ~= nil then | 314 | if _obj_0 ~= nil then |
| 312 | _tmp_0 = _obj_1.defVal | 315 | _tmp_0 = _obj_0.defVal |
| 313 | end | 316 | end |
| 314 | end | 317 | end |
| 315 | end | 318 | end |
| @@ -455,9 +458,12 @@ do | |||
| 455 | end | 458 | end |
| 456 | end | 459 | end |
| 457 | do | 460 | do |
| 458 | local _obj_0 = tb | 461 | local value, value_meta |
| 459 | local value = _obj_0[name] | 462 | do |
| 460 | local value_meta = getmetatable(_obj_0)[name] | 463 | local _obj_0 = tb |
| 464 | value = _obj_0[name] | ||
| 465 | value_meta = getmetatable(_obj_0)[name] | ||
| 466 | end | ||
| 461 | end | 467 | end |
| 462 | do | 468 | do |
| 463 | local tostring, add | 469 | local tostring, add |
| @@ -492,16 +498,15 @@ do | |||
| 492 | end | 498 | end |
| 493 | do | 499 | do |
| 494 | local tb = { } | 500 | local tb = { } |
| 495 | local _obj_0 = tb | ||
| 496 | do | 501 | do |
| 497 | local _tmp_0 = c() | 502 | local _tmp_0 = c() |
| 498 | local v2 = _obj_0[_tmp_0] | 503 | local v2 = tb[_tmp_0] |
| 499 | end | 504 | end |
| 500 | local v1 | 505 | local v1 |
| 501 | do | 506 | do |
| 502 | local _obj_1 = getmetatable(_obj_0) | 507 | local _obj_0 = getmetatable(tb) |
| 503 | local _tmp_1 = a + b | 508 | local _tmp_1 = a + b |
| 504 | v1 = _obj_1[_tmp_1] | 509 | v1 = _obj_0[_tmp_1] |
| 505 | end | 510 | end |
| 506 | end | 511 | end |
| 507 | do | 512 | do |
| @@ -575,16 +580,15 @@ do | |||
| 575 | local _tab_0 = type(_exp_0) | 580 | local _tab_0 = type(_exp_0) |
| 576 | _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 | 581 | _tab_0 = "table" == _tab_0 or "userdata" == _tab_0 |
| 577 | if _tab_0 then | 582 | if _tab_0 then |
| 578 | local _obj_0 = _exp_0 | ||
| 579 | do | 583 | do |
| 580 | local _obj_1 = _obj_0.c | 584 | local _obj_0 = _exp_0.c |
| 581 | local _type_0 = type(_obj_1) | 585 | local _type_0 = type(_obj_0) |
| 582 | if "table" == _type_0 or "userdata" == _type_0 then | 586 | if "table" == _type_0 or "userdata" == _type_0 then |
| 583 | do | 587 | do |
| 584 | local _obj_2 = getmetatable(_obj_1) | 588 | local _obj_1 = getmetatable(_obj_0) |
| 585 | local _type_1 = type(_obj_2) | 589 | local _type_1 = type(_obj_1) |
| 586 | if "table" == _type_1 or "userdata" == _type_1 then | 590 | if "table" == _type_1 or "userdata" == _type_1 then |
| 587 | meta_field = _obj_2["abc"] | 591 | meta_field = _obj_1["abc"] |
| 588 | end | 592 | end |
| 589 | end | 593 | end |
| 590 | end | 594 | end |
| @@ -593,19 +597,19 @@ do | |||
| 593 | meta_field = "def" | 597 | meta_field = "def" |
| 594 | end | 598 | end |
| 595 | do | 599 | do |
| 596 | local _obj_1 = getmetatable(_obj_0) | 600 | local _obj_0 = getmetatable(_exp_0) |
| 597 | do | 601 | do |
| 598 | local _obj_2 = _obj_1[ [[any string]]] | 602 | local _obj_1 = _obj_0[ [[any string]]] |
| 599 | local _type_0 = type(_obj_2) | 603 | local _type_0 = type(_obj_1) |
| 600 | if "table" == _type_0 or "userdata" == _type_0 then | 604 | if "table" == _type_0 or "userdata" == _type_0 then |
| 601 | abc = _obj_2.d | 605 | abc = _obj_1.d |
| 602 | end | 606 | end |
| 603 | end | 607 | end |
| 604 | do | 608 | do |
| 605 | local _obj_2 = _obj_1['str'] | 609 | local _obj_1 = _obj_0['str'] |
| 606 | local _type_0 = type(_obj_2) | 610 | local _type_0 = type(_obj_1) |
| 607 | if "table" == _type_0 or "userdata" == _type_0 then | 611 | if "table" == _type_0 or "userdata" == _type_0 then |
| 608 | def = _obj_2.e | 612 | def = _obj_1.e |
| 609 | end | 613 | end |
| 610 | end | 614 | end |
| 611 | if abc == nil then | 615 | if abc == nil then |
diff --git a/spec/outputs/import.lua b/spec/outputs/import.lua index edb7c44..f8d6ef0 100644 --- a/spec/outputs/import.lua +++ b/spec/outputs/import.lua | |||
| @@ -89,14 +89,18 @@ do | |||
| 89 | end | 89 | end |
| 90 | end | 90 | end |
| 91 | do | 91 | do |
| 92 | local b = getmetatable(require("m")).__a | 92 | local b = getmetatable(require("m")).__gc |
| 93 | local _obj_0 = require("m") | 93 | local index = getmetatable(require("m")).__index |
| 94 | local f = _obj_0.e | 94 | local f, c |
| 95 | local c = getmetatable(_obj_0).__a | 95 | do |
| 96 | local _obj_0 = require("m") | ||
| 97 | f = _obj_0.e | ||
| 98 | c = getmetatable(_obj_0).__pairs | ||
| 99 | end | ||
| 96 | local d = require("m").c | 100 | local d = require("m").c |
| 97 | local g, i | 101 | local g, i |
| 98 | do | 102 | do |
| 99 | local _obj_1 = require("m") | 103 | local _obj_0 = require("m") |
| 100 | g, i = _obj_1[1], getmetatable(_obj_1[2]).__h | 104 | g, i = _obj_0[1], getmetatable(_obj_0[2]).__close |
| 101 | end | 105 | end |
| 102 | end | 106 | end |
diff --git a/spec/outputs/metatable.lua b/spec/outputs/metatable.lua index 937136f..907a584 100644 --- a/spec/outputs/metatable.lua +++ b/spec/outputs/metatable.lua | |||
| @@ -38,28 +38,29 @@ getmetatable(a).__add = function(x, y) | |||
| 38 | return x + y | 38 | return x + y |
| 39 | end | 39 | end |
| 40 | do | 40 | do |
| 41 | local _obj_0 = a | 41 | local new = a.new |
| 42 | local new = _obj_0.new | ||
| 43 | local close, closeA | 42 | local close, closeA |
| 44 | do | 43 | do |
| 45 | local _obj_1 = getmetatable(_obj_0) | 44 | local _obj_0 = getmetatable(a) |
| 46 | close, closeA = _obj_1.__close, _obj_1.__close | 45 | close, closeA = _obj_0.__close, _obj_0.__close |
| 47 | end | 46 | end |
| 48 | print(new, close, closeA) | 47 | print(new, close, closeA) |
| 49 | end | 48 | end |
| 50 | do | 49 | do |
| 51 | local x, new, var, close, closeA, num, add, sub | 50 | local x, new, var, close, closeA, num, add, sub |
| 52 | local _obj_0, _obj_1 | ||
| 53 | x, _obj_0, _obj_1 = 123, a.b.c, func() | ||
| 54 | new, var = _obj_0.new, _obj_0.var | ||
| 55 | do | ||
| 56 | local _obj_2 = getmetatable(_obj_0) | ||
| 57 | close, closeA = _obj_2.__close, _obj_2.__close | ||
| 58 | end | ||
| 59 | num = _obj_1.num | ||
| 60 | do | 51 | do |
| 61 | local _obj_2 = getmetatable(_obj_1) | 52 | local _obj_0, _obj_1 |
| 62 | add, sub = _obj_2.__add, _obj_2.__sub | 53 | x, _obj_0, _obj_1 = 123, a.b.c, func() |
| 54 | new, var = _obj_0.new, _obj_0.var | ||
| 55 | do | ||
| 56 | local _obj_2 = getmetatable(_obj_0) | ||
| 57 | close, closeA = _obj_2.__close, _obj_2.__close | ||
| 58 | end | ||
| 59 | num = _obj_1.num | ||
| 60 | do | ||
| 61 | local _obj_2 = getmetatable(_obj_1) | ||
| 62 | add, sub = _obj_2.__add, _obj_2.__sub | ||
| 63 | end | ||
| 63 | end | 64 | end |
| 64 | end | 65 | end |
| 65 | setmetatable(a.b, { }) | 66 | setmetatable(a.b, { }) |
