| SYNOPSIS |
| void dangling_lfun_closure() |
| |
| DESCRIPTION |
| Handle a dangling lfun-closure. |
| |
| This is called when the gamedriver executes a closure using a |
| vanished lfun. A proper handling is to raise a runtime error. |
| |
| Technical: |
| Upon replacing programs (see efun replace_program()), any |
| existing lambda closures of the object are adjusted to the |
| new environment. If a closure uses a lfun which vanished in |
| the replacement process, the reference to this lfun is |
| replaced by a reference to this function. The error will |
| then occur when the execution of the adjusted lambda reaches |
| the point of the lfun reference. There are two reasons for |
| the delayed handling. First is that the program replacement |
| and with it the closure adjustment happens at the end of a |
| backend cycle, outside of any execution thread: noone would |
| see the error at this time. Second, smart closures might |
| know/recognize the program replacement and skip the call to |
| the vanished lfun. |
| |
| SEE ALSO |
| closures(LPC) |