From: Rick M. <obj...@gm...> - 2012-02-21 20:37:23
|
I don't see anthing obviously wrong here. Provide a sample program so I can recreate this, and I'll take a look at it. Rick On Tue, Feb 21, 2012 at 2:42 PM, Rony G. Flatscher <Ron...@wu...> wrote: > The RXOFNC and RXEXF exits are the "oo" exits for which the PARM-block > defines RexxObjectPtr et.al. types. > > As I am getting a very strange behaviour in both exits when processing the > argument array it may be the case that I am not iterating correctly over the > array, so here is first the definition of the parameter block according to > rexxpg.pdf followed by the code, followed by the output and the Rexx > condition raised in it: > > typedef struct _RXOFNC_FLAGS { /* fl */ > unsigned rxfferr : 1; /* Invalid call to routine. */ > unsigned rxffnfnd : 1; /* Function not found. */ > unsigned rxffsub : 1; /* Called as a subroutine */ > } RXOFNC_FLAGS ; > > typedef struct _RXOFNCCAL_PARM { /* fnc */ > RXOFNC_FLAGS rxfnc_flags ; /* function flags */ > CONSTRXSTRING rxfnc_name; // the called function name > size_t rxfnc_argc; /* Number of args in list. */ > RexxObjectPtr *rxfnc_argv; /* Pointer to argument list. */ > RexxObjectPtr rxfnc_retc; /* Return value. */ > } RXOFNCCAL_PARM; > > > ---- the program iterating over the rxfnc_argv pointer via a local pointer > of the same type: > > case RXOFNC: // system exit # 15, "processes calls to external > functions, before search starts", OO version > { > RXOFNCCAL_PARM *pb=(RXOFNCCAL_PARM *) parmBlock; > > if (subfunction==RXOFNCCAL) // 1 > { > CONSTRXSTRING function_name; > size_t argc=0; > RexxObjectPtr *argv=NULL; > > RXOFNCCAL_PARM *pb=(RXOFNCCAL_PARM *) parmBlock; > function_name=pb->rxfnc_name; > argc =pb->rxfnc_argc; > argv =pb->rxfnc_argv; > > ... cut ... > > // create RexxArrayObject from RexxObjectPtr list > and store it as a Java array object > RexxArrayObject rao=context->NewArray(argc); > for (size_t i=0; i<argc; i++) > { > fprintf(stderr, "C++ RXOFNC -> argv[%lu]=[%p]=[%.128s], before: > CheckCondition()=[%d]",i,argv[i],context->ObjectToStringValue(argv[i]),context->CheckCondition());fflush(stderr); > > context->ArrayPut(rao, argv[i], i); > > fprintf(stderr, ", after: CheckCondition()=[%d] > ...\n",context->CheckCondition());fflush(stderr); > } > ... cut ... > > } > } > break; > > Running the program causes an "incorrect call to method", namely: "Error > 93.907: Method argument 2 must be a positive whole number; found "&2"". > Here is the output, which shows that the Rexx condition is raised in the > ArrayPut() function: > > C++ RXOFNC/RXEXF -> argp[0]=[7F01AF60]=[ONE], before: CheckCondition()=[0], > after: CheckCondition()=[1] ... > C++ RXOFNC/RXEXF -> argp[1]=[7F01AF88]=[TWO], before: CheckCondition()=[1], > after: CheckCondition()=[1] ... > Exception in thread "main" org.rexxla.bsf.engines.rexx.RexxException: > BSF4ooRexx/routine/jniRexxRunProgram(), error 9: > 47 *-* call does_not_exist one, two > Error 93 running > F:\work\svn\bsf4oorexx\trunk\samples\Java\handlers\testExitHandlers\12_RXEXF\testRexxWith_RXEXF_Exit.rxj > line 47: Incorrect call to method > Error 93.907: Method argument 2 must be a positive whole number; found "&2" > > And indeed it is this call which triggers the RXOFNC exit in the Rexx > statement "call does_not_exist one, two". > > The same observation is with the RXEXF exit while processing the arguments. > > Is there something I am doing wrong processing the argv pointer to > RexxObjectPtr the way I am doing it? > > BTW, if doing a ClearCondition() immediately after the ArrayPut() everything > works, but I am not aware that ArrayPut() would raise such a condition in > other parts of my program. (This is now all running under 4.1.1 beta.) > > ---rony > > > > > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > Oorexx-devel mailing list > Oor...@li... > https://lists.sourceforge.net/lists/listinfo/oorexx-devel > |