lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Thanks to the help of Roberto and others I am posting what should now be the
definitive patch for correcting and detecting loop overflow edge cases when
using very large integers and/or floating point values.

This will correctly allow the use of math.mininteger and math.maxinteger as
either the starting or ending values for loops as well as correctly stepping
to those values without causing an integer overflow.

The only difference between this patch and the one previously posted was the
quick addition of a simple magnitude check for floating-point loops. If the
provided step value is unable to modify either the loop starting value or
the loop limit value an error will be thrown indicting the step value
magnitude is too small. This will prevent infinite loops from occurring.

Hopefully this patch will be useful to some, I will be incorporating it into
my custom version of Lua... hopefully these changes can make it into the
official Lua release as well to make loops in Lua a bit more robust! :)

I am also attaching an updated version of the test file (loopfix-test.lua)
to adjust for the new step magnitude checks!

I created another benchmark, this time iterating through both decimal and
floating-point loops... in a release build. The difference is even more
negligible than the previous tests!

Vanilla Lua ran the benchmark in 19.4039 seconds.
Patched Lua ran the benchmark in 19.4354 seconds.

The difference between Vanilla and Patched Lua is 0.0315 seconds... which
is considerably faster than the 0.66 seconds from the previous benchmark!


Attachment: loopfix.patch
Description: Binary data


Attachment: loopfix-test.lua
Description: Binary data