On 10/15/2019 10:04 AM, Taco Hoekwater wrote:
Hi Rudolf,

On 15 Oct 2019, at 00:50, Rudolf Bahr <qu...@quasi.de> wrote:

Now to your suggestion not to use "assert ()". Indeed it's a solution! My 
program
works! I append again its output (again just for fun!). Did you really try it or
has it been just an idea?

First, let me say that embedded lua versions are typically a little bit 
different
from standalone. Just how much different depends on the embedding program. 
Luatex
is actually pretty close to standalone lua. Luatex adds a bunch of extension 
libraries,
but it changes very little of the core language. And all those changes are 
documented
in the luatex manual. None of those changes affect your minimal example, except
that lua errors are handled a little differently.

Note that standalone lua *also* produces an error, as that is what assert() is
supposed to do. And when lua runs into an error, it ignores the rest of the 
current
chunk:

   “... whenever an error occurs, Lua ends the current chunk and returns
   to the application.” (from lua.org)

Standalone lua typically sees only one chunk (the file you pass on the command
line) but embedded lua implementation often see (sometimes many) more chunks.
In luatex’s case, each \directlua is a separate chunk (in ConTeXt, that means 
every
\startluacode block and every \ctxlua call is a separate chunk).

The only unusual thing here is that standalone lua silently quits and returns a
non-zero exit code to the shell, whereas luatex gives you the typical TeX-style
error prompt. The rationale for that is: lua errors can happen in many places in
your input file, and if they were silently ignored, your typeset pages could be
wrong without you realising it.


And to answer your question above: I did not have to try or guess. I know about
how assert() works because it is documented in the lua manual (and as it closely
mimics the assert() C function, that is easy for me to remember).
as you say, it's all normal lua behaviour:

if you do:

  print(io.open("crap.crap"))

one gets

  nil   crap.crap: No such file or directory    2

and i think that assert then returns the second returned argument

but if one does

  context(io.open("crap.crap") and "yes" or "no")

then the first argument is checked against

Hans

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to