From: <bi...@us...> - 2007-11-20 14:16:33
|
Revision: 1282 http://oorexx.svn.sourceforge.net/oorexx/?rev=1282&view=rev Author: bigrixx Date: 2007-11-20 06:16:37 -0800 (Tue, 20 Nov 2007) Log Message: ----------- [ 1835170 ] Problem with interpret NOVALUE Modified Paths: -------------- interpreter-3.x/trunk/kernel/runtime/RexxActivation.hpp Modified: interpreter-3.x/trunk/kernel/runtime/RexxActivation.hpp =================================================================== --- interpreter-3.x/trunk/kernel/runtime/RexxActivation.hpp 2007-11-20 13:46:58 UTC (rev 1281) +++ interpreter-3.x/trunk/kernel/runtime/RexxActivation.hpp 2007-11-20 14:16:37 UTC (rev 1282) @@ -36,7 +36,7 @@ /* */ /*----------------------------------------------------------------------------*/ /******************************************************************************/ -/* REXX Kernel RexxActivation.hpp */ +/* REXX Kernel RexxActivation.hpp */ /* */ /* Primitive Activation Class Definitions */ /* */ @@ -44,9 +44,9 @@ #ifndef Included_RexxActivation #define Included_RexxActivation -#include "ExpressionStack.hpp" /* needs expression stack */ -#include "DoBlock.hpp" /* need do block definition */ - /* various activation settings */ +#include "ExpressionStack.hpp" /* needs expression stack */ +#include "DoBlock.hpp" /* need do block definition */ + /* various activation settings */ #include "RexxLocalVariables.hpp" /* local variable cache definitions */ #include "RexxDateTime.hpp" #include "RexxCode.hpp" @@ -201,6 +201,14 @@ this->object_scope = SCOPE_RELEASED; } } + + + inline bool isInterpret() { return activation_context == INTERPRET; } + inline bool isInternalCall() { return activation_context == INTERNALCALL; } + inline bool isMethod() { return activation_context == METHODCALL; } + inline bool isTopLevelCall() { return activation_context == METHODCALL; } + inline bool isNestedCall() { return (activation_context & INTERNAL_LEVEL_CALL) != 0; } + RexxObject * run(RexxObject **, size_t, RexxInstruction *); void reply(RexxObject *); RexxObject * forward(RexxObject *, RexxString *, RexxObject *, RexxObject **, size_t, BOOL); @@ -650,7 +658,17 @@ inline void cleanupLocalVariables() { - if (!settings.local_variables.isNested()) { + /* if we're nested, we need to make sure that any variable */ + /* dictionary created at this level is propagated back to */ + /* the caller. */ + if (isNestedCall() && settings.local_variables.isNested()) + { + sender->setLocalVariableDictionary(settings.local_variables.getNestedDictionary()); + } + else + { + // we need to cleanup the local variables and return them to the + // cache. size_t i; for (i = 0; i < settings.local_variables.size; i++) { RexxVariable *var = settings.local_variables.get(i); @@ -659,12 +677,6 @@ } } } - /* if we're nested, we need to make sure that any variable */ - /* dictionary created at this level is propagated back to */ - /* the caller. */ - else { - sender->setLocalVariableDictionary(settings.local_variables.getNestedDictionary()); - } } inline void setLocalVariableDictionary(RexxVariableDictionary *dict) {settings.local_variables.setDictionary(dict); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |