On Fri, Oct 25, 2024 at 4:24 PM Chip Davis <c...@aresti.com> wrote:

> And yet, Rick said, "So the question comes down to 1) disallow them if
> they appear in a location where they can't be branched to, or 2) allow
> them, but catch all attempts to branch to one in a bad location. From my
> standpoint, catching them at translation time and raising an error is much
> better than the disruption that would be caused to rework the internals to
> raise an error at run time. And the nice thing about raising an error up
> front is that it is always easier to lift a restriction later than try to
> impose one after the fact."
>
> "... the attempt to branch to them" is at execution time, and Rick has
> already deemed it a "disruption that would be caused to rework the
> internals to raise an error at run time", so that seems like a heavy lift
> to me.
>

I took a quick look at the code, the disruption is much less severe that I
first thought and can even be done without causing problems with programs
saved using rexxc.

Rick

>
> I still agree with JMB's "take".  "Belling the cat" at run-time sounds
> like a non-trivial effort.
>
> -Chip-
>
> On 10/25/2024 9:35 AM, Gilbert Barmwater wrote:
>
> I've read all the comments (so far) on this and the ones that had the most
> impact on my opinion were Mike's -
> "...it's the attempt to branch to them that should be flagged, not the
> label itself, which is just a label." - and Jeremy's - "Some users might be
> running code that they don't have source for - ie they've been supplied
> with the output from rexxc.  Why should they not be able to continue to run
> their programs?".  So I vote for allowing "trace only" labels but raising
> an error if an attempt is made to SIGNAL or CALL them.
> On 10/23/2024 9:31 AM, Josep Maria Blasco wrote:
>
> Hi all,
>
> There are some ongoing changes to the ooRexx interpreter that will
> strongly affect the language definition, in such a way that the 5.1.0
> release may end up implementing a version of the language that does no
> longer allow us to hold true what is asserted in the landing page for the
> project:
>
> "Home of the Open Object Rexx Project. ooRexx is the open source version
> of IBM's Object REXX Interpreter. *It is upwardly compatible with classic
> REXX and will execute classic REXX programs unchanged*. The project is
> managed by the Rexx Language Association".
>
>
> In the preceding paragraph, I have highlighted the part that will become
> problematic if the ongoing changes consolidate. Namely,
>
>    - Any program containing labels inside block instructions will
>    immediately stop working (with syntax error 47.002 for DO/LOOP, 47.003 for
>    IF, and 47.004 for SELECT).
>    - Any program containing labels before the initial EXPOSE or USE LOCAL
>    method instructions will fail (with 99.910 for USE LOCAL and 99.907 for
>    EXPOSE).
>
> Please note that *these programs will stop working even if they never
> branch* (i.e., SIGNAL or CALL) *to any of these labels*. Normal ("classic
> Rexx") semantics for such labels is to treat them as null clauses, except
> for tracing purposes: when TRACE Labels is in effect, the language processor
>
> Traces [...] labels passed during program execution. This is especially
> useful with debug mode, when the language processor pauses after each
> invocation or call (rexxref 2.29.1).
>
>
> If the ongoing changes consolidate into the 5.1.0 release, our claim of
> compatibility with classic Rexx will no longer be valid.
>
> My impression is that these changes should be reverted, but I understand
> that there has been a considerable amount of effort put by the developers
> in implementing these modifications, and therefore such a reversal should
> not be undertaken slightly.
>
> Please allow me to elaborate on the background behind these changes, to
> widen our perspective about the subject.
>
> *Statement of the problem*
>
> A label is a clause. Following TRL2 (and TRL1, in that respect), "more
> than one label may precede *any instruction*" (emphasis mine). Some
> interpreters seem to allow labels preceding *any clause*. To appreciate
> the difference between the two concepts, please consider the following
> small program:
>
> Trace L
> A: If 1 = 1
> B: Then
> C: Say "Hi"
>
>
> Object Rexx (6.00, ArcaOS) chokes on B:, but allows A: and C: (THEN is not
> an instruction by itself); Regina Rexx happily processes A:, B: and C: (and
> traces them, when asked); the current version of ooRexx refuses to run the
> above program, even if we eliminate the B: label (it produces a 47.3,
> 'Labels are not allowed within an IF block; found "C"').
>
> The ANSI standard defines labels inside a block instruction as
> "trace-only", and reserves errors 16.2 and 16.3 for the cases when a CALL
> or SIGNAL instruction tries to target one of these labels.
>
> The Errata for the Rexx standard explicitly corrects 6.3.2.14 and
> 6.3.2.19, stating "This disallows labels before the THEN keyword".
>
> Now the question is the following:
>
> *¿What variant of the language should ooRexx implement?*
>
> There was some discussion in the developers list (starting at
> https://sourceforge.net/p/oorexx/mailman/message/58813104/) about whether
> labels inside block instructions should be allowed to be called/branched
> to. The consensus was that this should not be allowed, putting ooRexx in
> line with the ANSI standard in this respect. I agree with that.
>
> There was also a discussion about whether labels should be allowed when* they
> cannot be branched to*. The example used was relatively ambiguous, since
> it used a label before a THEN keyword:
>
> label: THEN
>
>
> ¿Why do I say that this is an ambiguous example? Because one might object
> to disallowing such a label, a) because THEN is not an instruction, or b)
> because THEN is part of an IF. Depending on how we understand the example,
> we will have two different versions of the language.
>
> *The main point is this*
>
> One may have good reasons to want to disallow labels before THEN and, at
> the same time, think that *instructions* inside other instructions (i.e.,
> *not* clauses which are not instructions by themselves) deserve to have
> labels, even if they are, as the ANSI standard says, trace-only.
>
> *My take is the following*
>
> Labels before THEN, ELSE, WHEN, OTHERWISE or END should not be allowed.
> All other labels should be allowed, including before EXPOSE and USE LOCAL.
> SIGNALing or CALLing a label before EXPOSE or USE LOCAL, or a label inside
> an IF/DO/LOOP/SELECT should produce an error.
>
> *What do you all think?*
>
> This is important. We are about to change the definition of the language,
> making it potentially incompatible with many existing programs.
>
> _______________________________________________
> 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