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(). Rick > > - > > What should be done with these? > > Oh, and in the process, could you please make CreateTraceObject() into a > method of RexxActivation? Doing things via functions really doesn't belong > in this code base. > > +1 > > ---rony > > > > > On Thu, Jul 11, 2024 at 11:24 AM Rony G. Flatscher < > rony.flatsc...@wu.ac.at> wrote: > >> The enum TracePrefix type gets defined RexxActivation.hpp and is public >> (needs to be used from RexxActivation.cpp and Activit.cpp). >> >> What is the proper way to become able to refer to the enum TracePrefix in >> Activity.hpp and Activity.cpp? >> >> Currently "Activity.hpp" defines the prototype for traceOutput(...) as >> >> void traceOutput(RexxActivation *, RexxString *, RexxString *, RexxObject *, >> RexxObject *); >> >> and should be changed to allow for a TracePrefix argument as the third >> argument, hence trying to: >> >> void traceOutput(RexxActivation *, RexxString *, TracePrefix, RexxString *, >> RexxObject *, RexxObject *); >> >> If doing so the compiler yields an error "error C2664: ... cannot convert >> argument 3 from 'RexxActivation::TracePrefix' to 'TracePrefix'". >> >> Therefore changing the prototype to >> >> void traceOutput(RexxActivation *, RexxString *, >> RexxActivation::TracePrefix, RexxObject *, RexxObject *, RexxObject *); >> >> yields the compiler error messages: >> >> ...\Activity.hpp(210): error C2027: use of undefined type 'RexxActivation' >> ...\Activity.hpp(73): note: see declaration of 'RexxActivation' >> >> The type "RexxActivation" can be used in Activity.hpp (defines at the top >> "class RexxActivation;") do define prototypes. >> >> --- >> >> The question: what needs to be defined where in order to become able to >> reference the enum TracePrefix from Activity.hpp and Activity.cpp without >> an error? >> >> ---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