aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-06-25 17:45:50 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2019-06-25 17:45:50 -0300
commitc1a63c45f8ec5932993c8cec40d3c5ec0743349c (patch)
treea61e8edb10b498c25e961cd7b2c7cb857e9db4c7 /testes
parent4487c28ced3dcf47c3ee19b6f6eeb0089ec64ba5 (diff)
downloadlua-c1a63c45f8ec5932993c8cec40d3c5ec0743349c.tar.gz
lua-c1a63c45f8ec5932993c8cec40d3c5ec0743349c.tar.bz2
lua-c1a63c45f8ec5932993c8cec40d3c5ec0743349c.zip
'__call' metamethod can be any callable object
Removed the restriction that a '__call' metamethod must be an actual function.
Diffstat (limited to 'testes')
-rw-r--r--testes/calls.lua17
1 files changed, 17 insertions, 0 deletions
diff --git a/testes/calls.lua b/testes/calls.lua
index 56a12ae6..739a624f 100644
--- a/testes/calls.lua
+++ b/testes/calls.lua
@@ -151,6 +151,23 @@ end
151print('+') 151print('+')
152 152
153 153
154do -- testing chains of '__call'
155 local N = 20
156 local u = table.pack
157 for i = 1, N do
158 u = setmetatable({i}, {__call = u})
159 end
160
161 local Res = u("a", "b", "c")
162
163 assert(Res.n == N + 3)
164 for i = 1, N do
165 assert(Res[i][1] == i)
166 end
167 assert(Res[N + 1] == "a" and Res[N + 2] == "b" and Res[N + 3] == "c")
168end
169
170
154a = nil 171a = nil
155(function (x) a=x end)(23) 172(function (x) a=x end)(23)
156assert(a == 23 and (function (x) return x*2 end)(20) == 40) 173assert(a == 23 and (function (x) return x*2 end)(20) == 40)