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