The symptoms suggest a garbage collection problem during the copying of the
behaviour object during the setmethod calls. That probably requires a few
protected objects to be added. However, this is seriously using a sledge
hammer to implement something that can be done much more simply. Because
all of the things that need to be done during a setmethod call, this is a
very expensive operation and should not typically be used for something
that might be done repeatedly, particularly on a object that is part of the
saved image, which adds yet another layer of complication to the garbage
collection. Here is a much simpler and lower cost way to do the same thing
using the RUN() method to invoke the alternate formatter.

Rick



On Fri, Apr 5, 2024 at 8:26 AM Rony G. Flatscher <rony.flatsc...@wu.ac.at>
wrote:

> Thankfully Jean Louis was able to reproduce the crash and was able to
> trace and to analyze the problem further:
>
> I can reproduce the crash under Windows ARM, same call stack as you.
>
> The data breakpoint triggers 2 times, but it's a normal situation.
> It's because of
>   .TraceObject~setMakeString(.resources~myMakeString)
>   .TraceObject~unsetMakeString   -- reset (uses default implementation)
> In both cases, a copy of the behaviour is assigned for this = RexxClass
> "TraceObject"
>
>
> > rexx.dll!RexxObject::defineInstanceMethod(RexxString * msgname,
> MethodClass * methobj, RexxClass * scope) Line 2310 C++
>         {
>             ...
>             // copy primitive behaviour object and define the method, a
> copy is made to
>             // ensure that we don't update the behaviour of any other
> object, since they
>             // may have been sharing the mvd.
>             setField(behaviour, (RexxBehaviour *)behaviour->copy());
>             ...
>         }
>
>
> > rexx.dll!RexxObject::deleteInstanceMethod(RexxString * msgname) Line
> 2335 C++
>         {
>             ...
>             // copy primitive behaviour object and define the method, a
> copy is made to
>             // ensure that we don't update the behaviour of any other
> object, since they
>             // may have been sharing the mvd.
>             setField(behaviour, (RexxBehaviour *)behaviour->copy());
>             ...
>         }
>
>
> I still don't know the root cause of the crash.
> I protected buffer in RexxActivation::traceSourceString but the crash
> still occurs.
>
> After the crash, I noticed that the attribute owningClass of the behaviour
> is NULL, which is not normal.
> I put a data breakpoint on owningClass but it doesnt trigger.
>
> But good news:
> If I put in comment the setMakeString & unsetMakeString, no more crash
> (well… I tested only once, maybe I was lucky)
>
> *[rgf: indeed, commenting out the setMakeString and unsetMakeString tests
> in TRACE_TraceObject.testGroup makes the test suite pass without a crash
> repeatedly]*
>
> So there is maybe something to investigate around the impacts of this
> assignement of behaviour->copy()
> ... cut ...
>
> Any idea what the problem might be and how to fix it?
>
> ---rony
>
> P.S.: Thinking of notable things in this context:
>
>    - setMethod/unsetMethod in this case gets applied to a class object
>    - TraceObject subclasses StringTable which in native code subclasses
>    StringHashCollection
>
>
> On 04.04.2024 19:04, Rony G. Flatscher wrote:
>
> Am using an almost ten year old version of MVS (Microsfot Visual Studio),
> which was bought (but due to lack of money has not been updated by buying
> an update, newer version).
>
> It seems that I am not able to define a data break point with it for the
> TraceObject RexxClass object successfully. MVS in the breakpoint window
> seems to not be able to allow for setting a data breakpoint at
> "RexxClass->RexxObject->RexxInternalObject->behaviour->methodDictionary" to
> learn from where in the ooRexx runtime this area gets overwritten.
>
> Therefore, if anyone has newer debugging means and is able to recreate the
> crash, then requesting help to debug this strange situation (please see the
> call stack below, the top record is not always shown, the crash indicates
> that behaviour->methodDictionary is NULL, yet the class object got
> successfully used many times before in the test suite)!
>
> Again, if the crash occurs then only after running the test suite with
> "rexx testOORexx.rex -s -U" from "test/trunk" in
> "test\trunk\ooRexx\base\runtime.objects\environmentEntries.testGroup".
> Running that test group standalone does not crash here.
>
> Any help highly appreciated!
>
> ---rony
>
>
>
> On 03.04.2024 17:29, Rony G. Flatscher wrote:
>
> On 03.04.2024 16:25, ooRexx wrote:
>
> It seems we currently have ALL platforms failing this test, can the person
> (Rony?) who committed lately check if there was a side-effect of the
> changes and/or amend the test to the new behaviour.
>
> Executing .../ooRexx/base/runtime.objects/environmentEntries.testGroup
> /tmp/jenkins3639803152023253797.sh: line 15: 26971 Segmentation fault
>  (core dumped) rexx testOORexx.rex -s -U
> Build step 'Execute shell' marked build as failure
> Finished: FAILURE
>
> Could get that crash on my debug version on Windows 10, here the call
> stack:
>
>       0000000000000000()      Unknown
> >     rexx.dll!MethodDictionary::getMethod(RexxString * 
> > methodName=0x000001bcdda2bdd0) Line 69        C++
>       rexx.dll!RexxBehaviour::methodLookup(RexxString * 
> messageName=0x000001bcdda2bdd0) Line 443      C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcdda2bdd0, RexxObject * * arguments=0x0000000000000000, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 871       C++
>       rexx.dll!CreateTraceObject(Activity * activity=0x000001bcddc64eb0, 
> RexxActivation * activation=0x000001bcf6a669a0, RexxString * 
> traceline=0x000001bcf6a3d2d0) Line 3097 C++
>       rexx.dll!Activity::traceOutput(RexxActivation * 
> activation=0x000001bcf6a669a0, RexxString * line=0x000001bcf6a3d2d0) Line 
> 3141  C++
>       rexx.dll!RexxActivation::traceSourceString() Line 3912  C++
>       rexx.dll!RexxActivation::traceClause(RexxInstruction * 
> clause=0x000001bce65e36e0, RexxActivation::TracePrefix 
> prefix=TRACE_PREFIX_CLAUSE) Line 4200     C++
>       rexx.dll!RexxActivation::traceInstruction(RexxInstruction * 
> v=0x000001bce65e36e0) Line 370      C++
>       rexx.dll!RexxInstructionAssignment::execute(RexxActivation * 
> context=0x000001bcf6a669a0, ExpressionStack * stack=0x000001bcf6a66b08) Line 
> 118   C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x000001bcf0100e50, 
> RexxString * name=0x000001bce65e2600, RexxObject * * 
> _arglist=0x000001bcf6a668a0, unsigned __int64 _argcount=0, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bce65e4db0, RexxObject * 
> receiver=0x000001bcf0100e50, RexxString * msgname=0x000001bce65e2600, 
> RexxObject * * argPtr=0x000001bcf6a668a0, unsigned __int64 argcount=0, 
> ProtectedObject & result={...}) Line 211      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bcf0100e50, RexxString * 
> msgname=0x000001bce65e2600, RexxObject * * argPtr=0x000001bcf6a668a0, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bce65e2600, RexxObject * * arguments=0x000001bcf6a668a0, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!MessageClass::dispatch() Line 445      C++
>       rexx.dll!MessageClass::send() Line 413  C++
>       rexx.dll!MessageClass::sendRexx(RexxObject * * 
> arguments=0x000001bcde86a5b0, unsigned __int64 argCount=0) Line 329      C++
>       rexx.dll!CPPCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bcddb55b60, RexxObject * 
> receiver=0x000001bcf6a66920, RexxString * messageName=0x000001bcddf09290, 
> RexxObject * * argPtr=0x000001bcde86a5b0, unsigned __int64 count=0, 
> ProtectedObject & result={...}) Line 147      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bcf6a66920, RexxString * 
> msgname=0x000001bcddf09290, RexxObject * * argPtr=0x000001bcde86a5b0, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcddf09290, RexxObject * * arguments=0x000001bcde86a5b0, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!ExpressionStack::send(RexxString * message=0x000001bcddf09290, 
> unsigned __int64 count=0, ProtectedObject & result={...}) Line 80       C++
>       rexx.dll!RexxInstructionMessage::execute(RexxActivation * 
> context=0x000001bcf6a65b30, ExpressionStack * stack=0x000001bcf6a65c98) Line 
> 189      C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x000001bcf0100e50, 
> RexxString * name=0x000001bcddf071c0, RexxObject * * 
> _arglist=0x000001bcde86a4e8, unsigned __int64 _argcount=2, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bcddf0d6e0, RexxObject * 
> receiver=0x000001bcf0100e50, RexxString * msgname=0x000001bcddf071c0, 
> RexxObject * * argPtr=0x000001bcde86a4e8, unsigned __int64 argcount=2, 
> ProtectedObject & result={...}) Line 211      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bcf0100e50, RexxString * 
> msgname=0x000001bcddf071c0, RexxObject * * argPtr=0x000001bcde86a4e8, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcddf071c0, RexxObject * * arguments=0x000001bcde86a4e8, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!ExpressionStack::send(RexxString * message=0x000001bcddf071c0, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 80       C++
>       rexx.dll!RexxInstructionMessage::execute(RexxActivation * 
> context=0x000001bcf6a64640, ExpressionStack * stack=0x000001bcf6a647a8) Line 
> 189      C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x000001bcf0100e50, 
> RexxString * name=0x000001bcddd5fc00, RexxObject * * 
> _arglist=0x000001bcde86a418, unsigned __int64 _argcount=2, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bcddf07fe0, RexxObject * 
> receiver=0x000001bcf0100e50, RexxString * msgname=0x000001bcddd5fc00, 
> RexxObject * * argPtr=0x000001bcde86a418, unsigned __int64 argcount=2, 
> ProtectedObject & result={...}) Line 211      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bcf0100e50, RexxString * 
> msgname=0x000001bcddd5fc00, RexxObject * * argPtr=0x000001bcde86a418, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcddd5fc00, RexxObject * * arguments=0x000001bcde86a418, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!ExpressionStack::send(RexxString * message=0x000001bcddd5fc00, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 80       C++
>       rexx.dll!RexxInstructionMessage::execute(RexxActivation * 
> context=0x000001bcf6a635a0, ExpressionStack * stack=0x000001bcf6a63708) Line 
> 189      C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x000001bcf00f8a20, 
> RexxString * name=0x000001bcddd5fc00, RexxObject * * 
> _arglist=0x000001bcde86a348, unsigned __int64 _argcount=2, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bcddd640c0, RexxObject * 
> receiver=0x000001bcf00f8a20, RexxString * msgname=0x000001bcddd5fc00, 
> RexxObject * * argPtr=0x000001bcde86a348, unsigned __int64 argcount=2, 
> ProtectedObject & result={...}) Line 211      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bcf00f8a20, RexxString * 
> msgname=0x000001bcddd5fc00, RexxObject * * argPtr=0x000001bcde86a348, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcddd5fc00, RexxObject * * arguments=0x000001bcde86a348, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!ExpressionStack::send(RexxString * message=0x000001bcddd5fc00, 
> unsigned __int64 count=2, ProtectedObject & result={...}) Line 80       C++
>       rexx.dll!RexxInstructionMessage::execute(RexxActivation * 
> context=0x000001bcea737d00, ExpressionStack * stack=0x000001bcea737e68) Line 
> 189      C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x000001bce72e4360, 
> RexxString * name=0x000001bcddc8c310, RexxObject * * 
> _arglist=0x000001bcde86a230, unsigned __int64 _argcount=1, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::run(Activity * activity=0x000001bcddc64eb0, 
> MethodClass * method=0x000001bcddd640c0, RexxObject * 
> receiver=0x000001bce72e4360, RexxString * msgname=0x000001bcddc8c310, 
> RexxObject * * argPtr=0x000001bcde86a230, unsigned __int64 argcount=1, 
> ProtectedObject & result={...}) Line 211      C++
>       rexx.dll!MethodClass::run(Activity * activity=0x000001bcddc64eb0, 
> RexxObject * receiver=0x000001bce72e4360, RexxString * 
> msgname=0x000001bcddc8c310, RexxObject * * argPtr=0x000001bcde86a230, 
> unsigned __int64 count=1, ProtectedObject & result={...}) Line 172       C++
>       rexx.dll!RexxObject::messageSend(RexxString * 
> msgname=0x000001bcddc8c310, RexxObject * * arguments=0x000001bcde86a230, 
> unsigned __int64 count=1, ProtectedObject & result={...}) Line 901       C++
>       rexx.dll!ExpressionStack::send(RexxString * message=0x000001bcddc8c310, 
> unsigned __int64 count=1, ProtectedObject & result={...}) Line 80       C++
>       rexx.dll!RexxInstructionMessage::execute(RexxActivation * 
> context=0x000001bcddd25530, ExpressionStack * stack=0x000001bcddd25698) Line 
> 189      C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x0000000000000000, 
> RexxString * name=0x000001bcddc76190, RexxObject * * 
> _arglist=0x000001bcde86a120, unsigned __int64 _argcount=1, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::call(Activity * activity=0x000001bcddc64eb0, 
> RoutineClass * routine=0x000001bcddd254f0, RexxString * 
> routineName=0x000001bcddc76190, RexxObject * * argPtr=0x000001bcde86a120, 
> unsigned __int64 argcount=1, RexxString * calltype=0x000001bcddc3d6f0, 
> RexxString * environment=0x000001bcddc3d7e0, ActivationContext 
> context=EXTERNALCALL, ProtectedObject & result={...}) Line 188  C++
>       rexx.dll!RoutineClass::call(Activity * activity=0x000001bcddc64eb0, 
> RexxString * routineName=0x000001bcddc76190, RexxObject * * 
> argPtr=0x000001bcde86a120, unsigned __int64 argcount=1, RexxString * 
> calltype=0x000001bcddc3d6f0, RexxString * environment=0x000001bcddc3d7e0, 
> ActivationContext context=EXTERNALCALL, ProtectedObject & result={...}) Line 
> 194 C++
>       rexx.dll!RexxActivation::callExternalRexx(RexxString * 
> target=0x000001bcddc76190, RexxObject * * arguments=0x000001bcde86a120, 
> unsigned __int64 argcount=1, RexxString * calltype=0x000001bcddc3d6f0, 
> ProtectedObject & resultObj={...}) Line 3092      C++
>       rexx.dll!SystemInterpreter::invokeExternalFunction(RexxActivation * 
> activation=0x000001bcddc7b280, Activity * activity=0x000001bcddc64eb0, 
> RexxString * target=0x000001bcddc76190, RexxObject * * 
> arguments=0x000001bcde86a120, unsigned __int64 argcount=1, RexxString * 
> calltype=0x000001bcddc3d6f0, ProtectedObject & result={...}) Line 107 C++
>       rexx.dll!RexxActivation::externalCall(RoutineClass * & 
> routine=0x0000000000000000, RexxString * target=0x000001bcddc76190, 
> RexxObject * * arguments=0x000001bcde86a120, unsigned __int64 argcount=1, 
> RexxString * calltype=0x000001bcddc3d6f0, ProtectedObject & resultObj={...}) 
> Line 3033     C++
>       rexx.dll!RexxExpressionFunction::evaluate(RexxActivation * 
> context=0x000001bcddc7b280, ExpressionStack * stack=0x000001bcddc7b3e8) Line 
> 214     C++
>       rexx.dll!RexxInstructionAssignment::execute(RexxActivation * 
> context=0x000001bcddc7b280, ExpressionStack * stack=0x000001bcddc7b3e8) Line 
> 129   C++
>       rexx.dll!RexxActivation::run(RexxObject * _receiver=0x0000000000000000, 
> RexxString * name=0x000001bcddc6b850, RexxObject * * 
> _arglist=0x000001bcddc6afb0, unsigned __int64 _argcount=1, RexxInstruction * 
> start=0x0000000000000000, ProtectedObject & resultObj={...}) Line 626 C++
>       rexx.dll!RexxCode::call(Activity * activity=0x000001bcddc64eb0, 
> RoutineClass * routine=0x000001bcddc7b240, RexxString * 
> routineName=0x000001bcddc6b850, RexxObject * * argPtr=0x000001bcddc6afb0, 
> unsigned __int64 argcount=1, RexxString * calltype=0x000001bcddaa57e0, 
> RexxString * environment=0x000001bcddc3d7e0, ActivationContext 
> context=PROGRAMCALL, ProtectedObject & result={...}) Line 188   C++
>       rexx.dll!RoutineClass::runProgram(Activity * 
> activity=0x000001bcddc64eb0, RexxObject * * arguments=0x000001bcddc6afb0, 
> unsigned __int64 argCount=1, ProtectedObject & result={...}) Line 265    C++
>       rexx.dll!CallProgramDispatcher::run() Line 244  C++
>       rexx.dll!NativeActivation::run(ActivityDispatcher & dispatcher={...}) 
> Line 1641 C++
>       rexx.dll!Activity::run(ActivityDispatcher & target={...}) Line 3390     
> C++
>       rexx.dll!CallProgram(RexxThreadContext_ * c=0x000001bcddc64ed8, const 
> char * p=0x000001bcdba01f9d, _RexxArrayObject * a=0x000001bcddc6af50) Line 
> 512    C++
>       rexx.exe!RexxThreadContext_::CallProgram(const char * 
> n=0x000001bcdba01f9d, _RexxArrayObject * a=0x000001bcddc6af50) Line 1001  C++
>       rexx.exe!main(int argc=4, char * * argv=0x000001bcdba01f70) Line 226    
> C++
>       rexx.exe!invoke_main() Line 65  C++
>       rexx.exe!__scrt_common_main_seh() Line 253      C++
>       rexx.exe!__scrt_common_main() Line 296  C++
>       rexx.exe!mainCRTStartup() Line 17       C++
>       kernel32.dll!BaseThreadInitThunk ()     Unknown
>       ntdll.dll!RtlUserThreadStart () Unknown
>
>
> The method name to look up is NEW, the call stack points to
> MethodDictionary.hpp, line # 69 with the following definition:
>
>     MethodClass *getMethod(RexxString *methodName) { return (MethodClass 
> *)get(methodName); }
>
> This is what "Locals" shows:
>
> -             this    0x000001bcefe354f0 {objectVariables=0x000001bcf6263640 
> {reservingActivity=0x0000000000000000 <NULL> ...} }      MethodDictionary * 
> {RexxObject}
> +             [RexxObject]    {objectVariables=0x000001bcf6263640 
> {reservingActivity=0x0000000000000000 <NULL> contents=0x000001bcf62636a0 
> {...} ...} }       RexxObject
> +             StringHashCollection    {...}   StringHashCollection
> +             instanceMethods 0x00007ffb44414544 {...}        StringTable *
> +             scopeList       0x0000000000000240 {IndexFlags=??? 
> arraySize=??? maximumSize=??? ...}   ArrayClass *
> +             scopeOrders     0x0000000000000202 {...}        IdentityTable *
> -             methodName      0x000001bcdda2bdd0 {hashValue=77184 length=3 
> numberStringValue=0x0000000000000000 <NULL> ...}   RexxString *
> +             RexxObject      {objectVariables=0x0000000000000000 <NULL> }    
> RexxObject
>               hashValue       77184   unsigned __int64
>               length  3       unsigned __int64
> +             numberStringValue       0x0000000000000000 <NULL>       
> NumberString *
> +             attributes      {flags={bits=18 } }     FlagSet<enum 
> RexxString::StringFlag,32>
> +             stringData      0x000001bcdda2be14 "NEW"        char[4]
>
>
> Pressing + on some entries:
>
> -             this    0x000001bcefe354f0 {objectVariables=0x000001bcf6263640 
> {reservingActivity=0x0000000000000000 <NULL> ...} }      MethodDictionary * 
> {RexxObject}
> -             [RexxObject]    {objectVariables=0x000001bcf6263640 
> {reservingActivity=0x0000000000000000 <NULL> contents=0x000001bcf62636a0 
> {...} ...} }       RexxObject
> -             RexxInternalObject      {header={objectSize=48 flags=1 
> sizePadding=1 } behaviour=0x000001bce61a7aa0 
> {classType=T_First_Primitive_Class (0) ...} }       RexxInternalObject
> -             RexxVirtualBase {...}   RexxVirtualBase
> -             __vfptr 0x00007ffbbb55a490 {rexx.dll!const 
> RexxObject::`vftable'} {0x00007ffbbb26eb92 {rexx.dll!RexxObject::`vector 
> deleting destructor'(unsigned int)}, ...}   void * *
>               [0]     0x00007ffbbb26eb92 {rexx.dll!RexxObject::`vector 
> deleting destructor'(unsigned int)}    void *
>               [1]     0x00007ffbbb26f1c8 
> {rexx.dll!RexxVirtualBase::baseVirtual(void)}        void *
>               [2]     0x00007ffbbb262fe0 {rexx.dll!RexxObject::live(unsigned 
> __int64)}        void *
>               [3]     0x00007ffbbb2694df 
> {rexx.dll!RexxObject::liveGeneral(enum MarkReason)}  void *
>               [4]     0x00007ffbbb264340 {rexx.dll!RexxObject::flatten(class 
> Envelope *)}     void *
>               [5]     0x00007ffbbb2685bc 
> {rexx.dll!RexxVirtualBase::unflatten(class Envelope *)}      void *
> +             header  {objectSize=48 flags=1 sizePadding=1 }  ObjectHeader
> +             behaviour       0x000001bce61a7aa0 
> {classType=T_First_Primitive_Class (0) behaviourFlags={flags={bits=1 } } 
> methodDictionary=...}       RexxBehaviour *
> -             objectVariables 0x000001bcf6263640 
> {reservingActivity=0x0000000000000000 <NULL> contents=0x000001bcf62636a0 
> {...} waitingActivities=...}        VariableDictionary *
> -             RexxInternalObject      {header={objectSize=96 flags=1 
> sizePadding=1911095164929 } behaviour=rexx.dll!0x00007ffbbb65a570 
> {classType=...} }      RexxInternalObject
> +             RexxVirtualBase {...}   RexxVirtualBase
> +             header  {objectSize=96 flags=1 sizePadding=1911095164929 }      
> ObjectHeader
> +             behaviour       rexx.dll!0x00007ffbbb65a570 
> {classType=T_VariableDictionary (83) behaviourFlags={flags={bits=4 } } 
> methodDictionary=...}        RexxBehaviour *
> +             reservingActivity       0x0000000000000000 <NULL>       
> Activity *
> +             contents        0x000001bcf62636a0 {...}        
> StringHashContents *
> +             waitingActivities       0x0000000000000000 <NULL>       
> ArrayClass *
>               flags   0       unsigned short
>               reserveCount    0       unsigned short
> +             nextDictionary  0x000001bcefe36140 
> {reservingActivity=0x0000000000000000 <NULL> contents=0x000001bcefe361a0 
> {...} waitingActivities=...}        VariableDictionary *
> +             scope   0x000001bce61a5e50 {id=0x000001bce6192100 
> {hashValue=5558862411515956297 length=18 numberStringValue=...} ...}  
> RexxClass *
>               idntfr  0       unsigned int
> -             StringHashCollection    {...}   StringHashCollection
> +             HashCollection  {contents=0x0000000000000000 <NULL> }   
> HashCollection
> +             instanceMethods 0x00007ffb44414544 {...}        StringTable *
> +             scopeList       0x0000000000000240 {IndexFlags=??? 
> arraySize=??? maximumSize=??? ...}   ArrayClass *
> +             scopeOrders     0x0000000000000202 {...}        IdentityTable *
> -             methodName      0x000001bcdda2bdd0 {hashValue=77184 length=3 
> numberStringValue=0x0000000000000000 <NULL> ...}   RexxString *
> +             RexxObject      {objectVariables=0x0000000000000000 <NULL> }    
> RexxObject
>               hashValue       77184   unsigned __int64
>               length  3       unsigned __int64
> +             numberStringValue       0x0000000000000000 <NULL>       
> NumberString *
> +             attributes      {flags={bits=18 } }     FlagSet<enum 
> RexxString::StringFlag,32>
> +             stringData      0x000001bcdda2be14 "NEW"        char[4]
>
>
> Not sure what and where the problem is.
>
> ---rony
>
>
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel
>

Attachment: setmethod.patch
Description: Binary data

_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to