@@ -224,7 +224,11 @@ function META:__tostring()
224224 local contract = self :GetContract ()
225225
226226 if contract and contract .Type == " table" and contract ~= self then
227- for i , keyval in ipairs (contract :GetData ()) do
227+ local contract_data = contract :GetData ()
228+ local contract_len = # contract_data
229+
230+ for i = 1 , contract_len do
231+ local keyval = contract_data [i ]
228232 local table_kv = self :FindKeyValExact (keyval .key )
229233 local key = tostring (table_kv and table_kv .key or " nil" )
230234 local val = tostring (table_kv and table_kv .val or " nil" )
@@ -244,7 +248,11 @@ function META:__tostring()
244248 end
245249 end
246250 else
247- for i , keyval in ipairs (self .Data ) do
251+ local data = self .Data
252+ local len = # data
253+
254+ for i = 1 , len do
255+ local keyval = data [i ]
248256 local key , val = tostring (keyval .key ), tostring (keyval .val )
249257 s [i ] = indent .. " [" .. key .. " ]" .. " = " .. val
250258 end
@@ -264,8 +272,11 @@ function META:GetArrayLength()
264272 if contract and contract ~= self then return contract :GetArrayLength () end
265273
266274 local len = 0
275+ local data = self .Data
276+ local data_len = # data
267277
268- for _ , kv in ipairs (self .Data ) do
278+ for i = 1 , data_len do
279+ local kv = data [i ]
269280 if kv .key :IsNumeric () then
270281 if kv .key :IsLiteral () then
271282 -- TODO: not very accurate
@@ -335,7 +346,11 @@ function META:FollowsContract(contract--[[#: TTable]])
335346 end
336347 end
337348
338- for _ , keyval in ipairs (self .Data ) do
349+ local data = self .Data
350+ local len = # data
351+
352+ for i = 1 , len do
353+ local keyval = data [i ]
339354 if not keyval .val :IsNil () then
340355 local res , err = contract :FindKeyValExact (keyval .key )
341356
@@ -356,8 +371,11 @@ function META:FollowsContract(contract--[[#: TTable]])
356371end
357372
358373function META :CanBeEmpty ()
359- for _ , keyval in ipairs (self .Data ) do
360- if not keyval .val :CanBeNil () then return false end
374+ local data = self .Data
375+ local len = # data
376+
377+ for i = 1 , len do
378+ if not data [i ].val :CanBeNil () then return false end
361379 end
362380
363381 return true
0 commit comments