Mark, You've made a persuasive argument that this needs to be fixed. I just checked in a fix that makes the rc 0 except for syntax conditions.
Rick On Thu, Mar 26, 2009 at 12:36 AM, Mark Miesfeld <miesf...@gmail.com> wrote: > On Wed, Mar 25, 2009 at 12:19 PM, Rick McGuire <object.r...@gmail.com> wrote: >> Yes, I believe the docs are wrong there....I suspect as a result of >> the reworking of things in the API, but the current behavior is >> definitely cleaner. > > Rick, > > I've been thinking about this and ran the same test under 3.2.0. The > RexxStart() return code itself was always 0, except for when a a > condition is raised. In which case it is the negated condition code. > > If someone has a compiled binary that takes some action if the return > is not 0, then that is now broke. Something like: > > return_code = RexxStart(,,,); > if ( return_code > 0 ) > { > // Some serious problem, abort. > return errorHandler(...); > } > > // All okay proceed ... > > So, I think we need to return 0 here where ever 3.2.0 returned 0, don't we? > > Under 3.2.0: > > E:\work.ooRexx>rxStart echoArg.rex > C++, round # [1] ... > ... RexxStart() return code=[0] | returned result value=[1] | > converted return code=[1] > --- > C++, round # [2] ... > ... RexxStart() return code=[0] | returned result value=[2] | > converted return code=[2] > --- > C++, round # [3] ... > ... RexxStart() return code=[0] | returned result value=[3] | > converted return code=[3] > --- > C++, round # [4] ... > ... RexxStart() return code=[0] | returned result value=[4] | > converted return code=[4] > --- > C++, round # [5] ... > ... RexxStart() return code=[0] | returned result value=[5] | > converted return code=[5] > --- > > E:\work.ooRexx>rxStart echoArg.rex > C++, round # [1] ... > ... RexxStart() return code=[0] | returned result value=[-9] | > converted return code=[-9] > --- > C++, round # [2] ... > ... RexxStart() return code=[0] | returned result value=[-8] | > converted return code=[-8] > --- > C++, round # [3] ... > ... RexxStart() return code=[0] | returned result value=[-7] | > converted return code=[-7] > --- > C++, round # [4] ... > ... RexxStart() return code=[0] | returned result value=[-6] | > converted return code=[-6] > --- > C++, round # [5] ... > ... RexxStart() return code=[0] | returned result value=[-5] | > converted return code=[-5] > --- > > E:\work.ooRexx>rxStart echoArg.rex > C++, round # [1] ... > 3 *-* x = 3 / 0 > Error 42 running E:\work.ooRexx\echoArg.rex > line 3: Arithmetic overflow/underflow > Error 42.3: Arithmetic overflow; divisor must not be zero > ... RexxStart() return code=[-42] | returned result value=[null > string] | converted return code=[28932] > --- > C++, round # [2] ... > 3 *-* x = 3 / 0 > Error 42 running E:\work.ooRexx\echoArg.rex > line 3: Arithmetic overflow/underflow > Error 42.3: Arithmetic overflow; divisor must not be zero > ... RexxStart() return code=[-42] | returned result value=[null > string] | converted return code=[28932] > --- > C++, round # [3] ... > 3 *-* x = 3 / 0 > Error 42 running E:\work.ooRexx\echoArg.rex > line 3: Arithmetic overflow/underflow > Error 42.3: Arithmetic overflow; divisor must not be zero > ... RexxStart() return code=[-42] | returned result value=[null > string] | converted return code=[28932] > --- > C++, round # [4] ... > 3 *-* x = 3 / 0 > Error 42 running E:\work.ooRexx\echoArg.rex > line 3: Arithmetic overflow/underflow > Error 42.3: Arithmetic overflow; divisor must not be zero > ... RexxStart() return code=[-42] | returned result value=[null > string] | converted return code=[28932] > --- > C++, round # [5] ... > 3 *-* x = 3 / 0 > Error 42 running E:\work.ooRexx\no.prologue\echoArg.rex > line 3: Arithmetic overflow/underflow > Error 42.3: Arithmetic overflow; divisor must not be zero > ... RexxStart() return code=[-42] | returned result value=[null > string] | converted return code=[28932] > --- > > In RexxStart(), it ends like this: > > > // go run this program > arguments.invoke(exits, envname); > *retcode = arguments.retcode; > > // terminate and clean up the interpreter runtime. This only works > // if there are no active instances > Interpreter::terminateInterpreter(); > > return (int)arguments.rc; /* return the error code (negated) */ > > But, I can't figure out where arguments.rc is getting set. A hack would be: > > /* Maintain backward compatibility */ > return (arguments.rc > 0 ? 0 : (int)arguments.rc); > > It probably makes more sense to change it where arguments.rc gets set. > > -- > Mark Miesfeld > > ------------------------------------------------------------------------------ > _______________________________________________ > 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