On 11.07.2024 18:26, Rick McGuire wrote:
On Thu, Jul 11, 2024 at 12:20 PM Rony G. Flatscher <rony.flatsc...@wu.ac.at>
wrote:
On 11.07.2024 17:52, Rick McGuire wrote:
I'm going to answer this out of line because I want to answer the last
question first.
Thank you!
The problem with the compile error results in how RexxActivation is defined
in Activity.hpp.
It's declaration is just "class RexxActivation", which tells the compiler
that
RexxActivation is a class...and nothing else. This allows RexxActivation *
to be used in
prototypes since there is enough information available for that purpose. To
get the full
definition of RexxActivation, you would need to replace "class RexxActivation"
with "#include
"RexxActivation.hpp". However, I suspect doing that will result in some
circular dependencies
between the two header files.
Indeed.
Any you would probably need to define Activity as friend to the
RexxActivation class to make
that enum visible.
Given the relationship between RexxActivation and Activity, and that both
classes need the
information, having the enum defined in RexxActivation feels like the wrong
place to for that
to be located. It feels like it should belong in Activity. However, those
values are really
only used for things created for RexxActivation.
A better solution would be to refactor the code a bit.
Activity::traceOutput() . The first
two lines of TraceOutput deal with the creation of the TraceObject, which
really should be
something that the RexxActivation is responsible for. Move the stuff
involved with that to
RexxActivation and then only pass the constructed TraceObject to the
traceOutput() method
which is now just responsible for handling the output. Now there's no need
for TracePrefix to
be visible outside of RexxActivation.
There are the following places in Activity that cause the use of
traceOutput() directly and
indirectly:
*
wholenumber_t Activity::error()
/** Force error termination on an activity, returning the resulting
REXX error code.
* @return The resulting Rexx error code. */
*
wholenumber_t Activity::error(ActivationBase *activation,
DirectoryClass *errorInfo)
/** Force error termination on an activity, returning the resulting
REXX error code.
* @param activation The activation raising the error.
* @param errorInfo The directory containing the error condition
information.
* @return The Rexx error code. */
*
wholenumber_t Activity::displayCondition(DirectoryClass *errorInfo)
/** Display error information and traceback lines for a Syntax
condition.
* @param errorInfo The condition object with the error information
* @return The major error code for the syntax error, if this is
indeed a syntax conditon. */
*
void Activity::display(DirectoryClass *exobj) ...
/** Display information from an exception object. *@param exobj The
exception object. */
*
void Activity::displayDebug(DirectoryClass *exobj)
/** Display information about an error in interactive debug. @param
exobj The exception */+
Only the last two of these are relevant, since the others just call those. If the creation of the
trace object is a method of RexxActivation(), that method is just called to get the information
needed by traceOutput().
ah, ok, thank you!
---rony
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel