[M3devel] RuntimeError doesn't work quite as advertised

Mika Nystrom mika at async.caltech.edu
Mon Apr 27 10:31:21 CEST 2009


Ok so I tried the "obvious thing", namely, I changed RTSignal.SegV to
do

    RAISE RuntimeError.E(RuntimeError.T.BadMemoryReference);

Somewhat to my surprise, this does the right thing for a null method.
But somewhat less surprisingly, it loops for NilJump and NilDeref.
Is the machine jumping back and re-executing the same instructions
after the signal handler returns?

Would all hell break loose if one were to special-case EXCEPT
RuntimeError.E to store a thread-local jmp_buf that one does a
C-style longjmp to?  (With a chain back to any higher RuntimeError.E
handlers, I suppose...)  Or is there a way to get the exception to
work out of the signal handler with the normal exception mechanism?

    Mika

Mika Nystrom writes:
>
>Maybe someone else knows more about this than me...
>
>The following program:
>
>MODULE Main;
>IMPORT RuntimeError, IO;
>
>PROCEDURE Range() = BEGIN EVAL VAL(-1,CARDINAL) END Range;
>
>PROCEDURE Assert() = BEGIN <*ASSERT FALSE*> END Assert;
>
>PROCEDURE NilJump() = VAR x : PROCEDURE() := NIL; BEGIN x() END NilJump;
>
>PROCEDURE NilDeref() =
>  VAR x : REF INTEGER := NIL; b : INTEGER;
>  BEGIN b := x^ END NilDeref;
>
>PROCEDURE NilMethod() =
>  TYPE T = OBJECT METHODS m() END;
>  VAR t : T; BEGIN t.m() END NilMethod;
>
>BEGIN 
>  WITH ps = ARRAY OF PROCEDURE() { Range, Assert, NilMethod, NilJump, NilDeref } DO
>    FOR i := FIRST(ps) TO LAST(ps) DO
>      TRY
>        ps[i]()
>      EXCEPT
>        RuntimeError.E(e) => IO.Put("RuntimeError: " & RuntimeError.Tag(e) & " \n")
>      END
>    END
>  END
>END Main.
>
>yields the following result:
>
>(1053)trs80:~/test/src>../FreeBSD4/prog
>RuntimeError: An enumeration or subrange value was out of range. 
>RuntimeError: <*ASSERT*> failed. 
>
>
>***
>*** runtime error:
>***    Segmentation violation - possible attempt to dereference NIL
>***    pc = 0x8048a71 = NilMethod + 0x10 in ../src/Main.m3
>***
>
>Abort
>
>Seems to me I ought to see a few more exceptions and not a crash.
>
>I'm happy to investigate a bit more, but does anyone have a clue where
>to begin?
>
>     Mika



More information about the M3devel mailing list