Could get the invocation id into the stackframe and callerstackframe.

As your .context idea is quite intriguing :) I then attempted to add it to the StackFrameClass using RexxActivation::getContextObject() which at first sight seemed to work as well. However when fetching it from a stackframe and trying to interact with it the runtime error "Execution error. Target RexxContext is no longer active." occurs.

The RexxContext methods will issue a checkValid() before proceeding, which is 
defined as:

   void RexxContext::checkValid()
   {
        if (activation == OREF_NULL)
        {
            reportException(Error_Execution_context_not_active);
        }
   }

It seems that the backing RexxActivation gets nullified such that placing it into a StackFrame is of no use ATM.

---rony


On 12.02.2025 16:04, Rick McGuire wrote:
First of all, RexxActivaion is an RexxInternalObject. Those must NEVER be returned as an instance by Rexx code. They are not fully functional objects that can be seen by Rexx code. There are also issues with NativeActivation which is part of the same hierarchy with RexxActivation and also must never be returned to Rexx code. If you really feed the need to do this, a better choice would be to return the .Context object associated with the activation. Buy you need to make this adjustment in every place an StackFrame object is created, because only RexxActivation ones will have a backing context.

Rick

On Wed, Feb 12, 2025 at 9:51 AM Rony G. Flatscher <rony.flatsc...@wu.ac.at> 
wrote:

    Currently, the stackframes do not contain the information to which 
RexxActivation
    (“invocation”) they relate to. As a result, a caller stack frame cannot be 
consulted to learn
    which invocation created the called invocation. This is vital information 
in case one creates
    a tracelog and wishes to analyze exactly the flow of control post-mortem 
using a tracelog.
    Therefore, I would like to add that information to stackframes using the 
name “invocation”
    storing the value of RexxActivation::getIdntfr() and adjust 
RexxActivation::createStackFrame()
    and the StackFrameClass accordingly. Would there be something else that one 
needs to pay
    attention to?

    ---rony

_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to