If it helps I noticed the test suite exit  on this test case
.. Executing RexxStart.testGroup test case TESTCOMMANDEXIT

jenkins@PO-XPC-FH97 C:\Users\jenkins\workspace\ooRexx-windows64-test>exit 
-1073741819 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

Hälsningar/Regards/Grüsse,
P.O. Jonsson
oor...@jonases.se




> Am 12.07.2024 um 14:48 schrieb Rony G. Flatscher <rony.flatsc...@wu.ac.at>:
> 
> 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? 
> 
> 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 <rony.flatsc...@wu.ac.at 
>>> <mailto:rony.flatsc...@wu.ac.at>> 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 
>>>>> <rony.flatsc...@wu.ac.at <mailto: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 <mailto: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