I still think the code refactoring I suggested is a good idea, which will
make things a bit cleaner. However, I just realized that the original
problem could have been fixed by just adding

enum TracePrefix;

where the class definitions at the top of Activity.cpp are located.

Rick

On Thu, Jul 11, 2024 at 12:29 PM Rony G. Flatscher <rony.flatsc...@wu.ac.at>
wrote:

> 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
>
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to