From: <bi...@us...> - 2008-10-08 20:51:59
|
Revision: 3488 http://oorexx.svn.sourceforge.net/oorexx/?rev=3488&view=rev Author: bigrixx Date: 2008-10-08 20:51:50 +0000 (Wed, 08 Oct 2008) Log Message: ----------- Allow new-style exits to raise errors and conditions Modified Paths: -------------- main/trunk/interpreter/concurrency/CallbackDispatcher.cpp main/trunk/interpreter/concurrency/RexxActivity.cpp main/trunk/interpreter/execution/RexxNativeActivation.cpp Modified: main/trunk/interpreter/concurrency/CallbackDispatcher.cpp =================================================================== --- main/trunk/interpreter/concurrency/CallbackDispatcher.cpp 2008-10-08 20:11:35 UTC (rev 3487) +++ main/trunk/interpreter/concurrency/CallbackDispatcher.cpp 2008-10-08 20:51:50 UTC (rev 3488) @@ -41,6 +41,7 @@ #include "Interpreter.hpp" #include "InterpreterInstance.hpp" #include "RexxActivity.hpp" +#include "RexxNativeActivation.hpp" /** @@ -78,7 +79,8 @@ // this only gets added if there is a condition if (c != OREF_NULL) { - handleError(activity->errorNumber(c), c); + // raise this as a normal error by default + activation->checkConditions(); } } Modified: main/trunk/interpreter/concurrency/RexxActivity.cpp =================================================================== --- main/trunk/interpreter/concurrency/RexxActivity.cpp 2008-10-08 20:11:35 UTC (rev 3487) +++ main/trunk/interpreter/concurrency/RexxActivity.cpp 2008-10-08 20:51:50 UTC (rev 3488) @@ -2100,15 +2100,6 @@ /* the function system exit. */ /******************************************************************************/ { - // give the security manager the first pass - SecurityManager *manager = activation->getEffectiveSecurityManager(); - if (manager != OREF_NULL) - { - if (manager->checkFunctionCall(rname, argcount, arguments, funcresult)) - { - return false; - } - } if (isExitEnabled(RXFNC)) // is the exit enabled? { @@ -2225,6 +2216,16 @@ /* the function system exit. */ /******************************************************************************/ { + // give the security manager the first pass + SecurityManager *manager = activation->getEffectiveSecurityManager(); + if (manager != OREF_NULL) + { + if (manager->checkFunctionCall(rname, argcount, arguments, funcresult)) + { + return false; + } + } + if (isExitEnabled(RXOFNC)) // is the exit enabled? { RXOFNCCAL_PARM exit_parm; /* exit parameters */ @@ -2990,8 +2991,6 @@ // go run this new_activation->run(target); - - requestAccess(); /* get the kernel lock back */ this->popStackFrame(new_activation); /* pop the top activation */ } Modified: main/trunk/interpreter/execution/RexxNativeActivation.cpp =================================================================== --- main/trunk/interpreter/execution/RexxNativeActivation.cpp 2008-10-08 20:11:35 UTC (rev 3487) +++ main/trunk/interpreter/execution/RexxNativeActivation.cpp 2008-10-08 20:51:50 UTC (rev 3488) @@ -1575,7 +1575,6 @@ try { // make the activation hookup - // make the activation hookup dispatcher.setContext(activity, this); activity->releaseAccess(); /* force this to "safe" mode */ dispatcher.run(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |