On Fri, Jul 12, 2024 at 8:49 AM Rony G. Flatscher <[email protected]> wrote:
> Unfortunately, when doing a global trace (e.g. "::options trace i") there > are crashes with the refactored version, hence I uncommitted the changes. > > The problem is in RexxActivation.cpp where in global trace "this" is NULL. > > Even if checking for NULL and supplying defaults for that situation there > is problem in trying to invoke Activity::traceOutput(...) as there is no > activity available if in RexxActivation "this" is NULL. > > What would be the proper solution for this situation? > Figure out why the RexxActivation is NULL, it's called debugging. The first step would be to figure out how you got to that point by examining the stack trace. > Ignoring any invocation of processing the trace in such a situation? > > ---rony > > > On 12.07.2024 13:54, Rony G. Flatscher wrote: > > Commit [r12849] implements the refactoring (changes got successfully > tested using the ooRexx testing framework's TRACE related testgroups). > > ---rony > > > On 12.07.2024 11:55, Rick McGuire wrote: > > > > On Fri, Jul 12, 2024 at 5:52 AM Rony G. Flatscher <[email protected]> > wrote: > >> On 12.07.2024 01:16, Rick McGuire wrote: >> >> I still think the code refactoring I suggested is a good idea, which will >> make things a bit cleaner. >> >> +1 >> >> 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. >> >> As the first error occurs with compiling the ArrayClass.cpp Activity.hpp >> also got that definition added and it makes it compile. >> >> However, later when RexxActivation.cpp gets compiled the following error >> gets raised: >> >> [ 17%] Building CXX object >> CMakeFiles/rexx.dir/interpreter/execution/RexxActivation.cpp.obj >> RexxActivation.cpp >> D:\orx.work202312\main_trunk_20240312\trunk\interpreter\execution\RexxActivation.cpp(3674): >> error C2664: 'void Activity::traceOutput(RexxActivation *,RexxString >> *,TracePrefix,RexxObject *,RexxObject *)': cannot convert argument 3 from >> 'RexxActivation::TracePrefix' to 'TracePrefix' >> >> Ah, that's because they are different types because of the > RexxActivation qualification. > > Rick > > >> ---rony >> >> >> >> On Thu, Jul 11, 2024 at 12:29 PM Rony G. Flatscher < >> [email protected]> wrote: >> >>> On 11.07.2024 18:26, Rick McGuire wrote: >>> >>> >>> >>> On Thu, Jul 11, 2024 at 12:20 PM Rony G. Flatscher < >>> [email protected]> 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 > [email protected] > https://lists.sourceforge.net/lists/listinfo/oorexx-devel >
_______________________________________________ Oorexx-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/oorexx-devel
