KevinScript icon indicating copy to clipboard operation
KevinScript copied to clipboard

Deeply nested programs crash with a stack overflow while evaluating

Open kms70847 opened this issue 6 years ago • 0 comments

Consider the following program:

if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){if (True){
    print("OK.");
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

This should print "OK", but instead it crashes with a RecursionError.

This occurs because evaluate is naively recursive - in the worst case, it uses as much stack space as the maximum height of the abstract syntax tree.

kms70847 avatar Sep 18 '18 15:09 kms70847