Hi David,
sorry, my fault. I hadn't read the small sentence for result=0 that
it should be ⎕EM-like. Fixed in SVN 307.
Please note that GNU APL may open execution contexts (= SI-entries)
differently from
IBM APL so that sometimes error messages could differ. The error code is
normally
correct, but if an error is user-defined then the error message from the
user (⎕ES)
could be lost because the context generating it was closed already. In
that case
the context retuns an error token (containing the error code) but the
token does not
contain the entire error message.
/// Jürgen
On 06/02/2014 02:26 AM, David B. Lamkins wrote:
Hi Jüergen,
Sorry for the miscommunication.
SVN 306 does fix 2⊃⎕ec. However, 3⊃⎕ec is still incorrect.
3⊃⎕ec should be the same as what ⎕em would have been without ⎕ec in the
case where ⎕ec traps an error.
Specifically: 3⊃⎕ec should be a three-row text array in which line 1 is
the error message (which may be the text provided to a ⎕es), line 2 is
the offending line of code and line 3 is the error caret(s). This is the
same three error-message lines that would have been printed to the APL
session without the ⎕ec.
This behavior is covered elsewhere on page 280 of the IBM Reference. I
apologize for having left the `paragraph 3' reference in my first email.
On Sun, 2014-06-01 at 18:53 +0200, Juergen Sauermann wrote:
Hi David,
thanks, fixed in SVN 306.
/// Jürgen
On 05/31/2014 07:51 PM, David B. Lamkins wrote:
See the IBM Reference, page 280, paragraph 3.
When ⎕EC executes an expression that signals a user-defined error, the
second and third items of the result should be the same as the
expression's ⎕ET (which would be 0 1 in this case) and ⎕EM. GNU APL
returns 0 0 and 'User defined error'.
Note also that ⎕ET must not be changed by ⎕EC. GNU APL already does this
correctly.
It's not clear from the IBM Reference whether ⎕EM should also not be
changed by ⎕EC. It seems reasonable to assume that *not* changing ⎕EM is
the correct behavior; the whole point of ⎕EC is to execute an expression
in a controlled manner. If so, GNU APL is already correct in this
regard.
⎕es 'foo'
foo
⎕ES 'foo'
^
⎕em
foo
⎕ES 'foo'
^
⎕et
0 1
⎕ec '⎕es ''foo'''
0 0 0 User defined error
⎕em