++ed by:

8 PAUSE users

Vincent Pit

Changes for version 0.17

  • Fix : uplevel() will now use the correct pad when executing its callback. This fixes at least two issues :
    • closures defined inside the uplevel callback can now correctly access lexicals from inside and outside the callback.
    • state variables in the uplevel callback now work properly.
  • Fix : It is now generally possible to call goto() in the uplevel'd code to replace the uplevel stack frame. There are two cases for which it is still not possible :
    • if -D flags were set when running perl (as in "perl -Dt ...").
    • if the perl runloop has been replaced with a custom one by another module. If uplevel() detects that the replacement code contains a goto statement, and is in one of those two cases, then it will refuse to execute the callback and throw an exception. Note that this fix implies a run-time overhead of uplevel() proportional to the size of the the callback in every case (with a small ratio), and proportional to the size of ALL the code executed as the result of the uplevel call (including subroutine calls inside the callback) when a goto statement is found in the uplevel callback.
  • Fix : uplevel() has been taught how to handle XS callbacks properly.
  • Fix : The cause of "Attempt to free unreferenced scalar" warnings when using uplevel() has been addressed.
  • Fix : [RT #71212] : build failure on Windows. The module does no longer rely on calling Perl_cv_clone, which isn't exported. Thanks C.H. Kang for reporting.
Show More