ID:1303313
 
Resolved
Calling many procs could result in references to "args" becoming broken.
BYOND Version:499
Operating System:Windows 8 Pro 64-bit
Web Browser:Chrome 28.0.1500.52
Applies to:DM Language
Status: Resolved (499.1197)

This issue has been resolved.
Descriptive Problem Summary:
The args list is not passing correctly at 65534 loops.

When you have a for loop that loops more than 65534 times the calling a proc and parsing the args from that proc fails. This 65534 number can be between multiple nested loops (eg a loop of 200 inside of loop of 500)

More info here: http://www.byond.com/forum/?post=1301315

Numbered Steps to Reproduce Problem:
Enter the code below and run.


Code Snippet (if applicable) to Reproduce Problem:
client
verb
test()
var/current = 0
for(var/x = 1, x<= 65536, x++)
current = get(x,x)
if(!current) CRASH("[x],[x]")

proc
get(x, y)
if(length(args)!=2) CRASH("wrong number of indices [length(args)]!=2")
return 2//length(args)


Expected Results:
It should not crash, it should correctly recognize the number of args passed.

Actual Results:
The proc is called with the correct args but inside the proc the args list isn't created.

Does the problem occur:
Every time? Or how often?
Only once per each instance of the program and only if that instance hits the magic number of loops.
In other games? NA
In other user accounts? NA
On other computers? Yes

When does the problem NOT occur?
After the first time it throws an error, it doesn't happen again.

Did the problem NOT occur in any earlier versions? If so, what was the last version that worked? (Visit http://www.byond.com/download/build to download old versions for testing.)
Tested in 3.54 there was still an error

Workarounds:
1) Pass individual arguments instead of an args list. This defeats the purpose of having the ability to use a variable number of args though.
2) Expect it to fail once and then work fine the rest of the time
Lummox JR resolved issue with message:
Calling many procs could result in references to "args" becoming broken.