Re: Correct way to throw exceptions/errors from C to ST
Roland Plüss <[email protected]>
| Newsgroups | gmane.comp.lang.smalltalk.gnu.general |
|---|---|
| Message-ID | <[email protected]> |
On 04/05/2015 08:06 AM, Paolo Bonzini wrote: > > On 04/04/2015 02:50, Roland Plüss wrote: >> Another something that I could not really figure out using the >> documentations. Let's say you have a CCallOut from ST to C. Inside >> this C function something goes wrong, for example an invalid >> argument passed. How do you properly raise an exception back to >> Smalltalk? I tried doing something like this: >> >> gst_eval_code( "SystemExceptions.InvalidArgument new signal" ); >> >> But this causes the VM to call abort since an exception happened >> outside the bytecode. I assume you need to be more clever in this >> case. So what is the correct way to throw these kinds of exceptions >> from inside a C function? > You return a C-style error and have a Smalltalk wrapper convert it to > a Smalltalk exception. Or you do argument checking in Smalltalk and > the rest in C. > > Paolo What you mean with "C-style error"? A C++ exception (that doesn't work it looks like)? The cCall is of void return type so I can't return anything. And smalltalk side can't check the arguments as the information required to perform the checks is sometimes located deep inside the engine code base. -- Yours sincerely Plüss Roland Leader and Head Programmer - Game: Epsylon ( http://www.indiedb.com/games/epsylon ) - Game Engine: Drag[en]gine ( http://www.indiedb.com/engines/dragengine , http://dragengine.rptd.ch/wiki ) - Normal Map Generator: DENormGen ( http://epsylon.rptd.ch/denormgen.php ) - As well as various Blender export scripts und game tools _______________________________________________ help-smalltalk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-smalltalk
signature.asc
(application/pgp-signature, 181 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEARECAAYFAlUhWRUACgkQjKGu9ysRWfrYZgCePMjzSeiaDT/A70PWTNHl93ew zi0AoKYbUQHoDUsu8RStZnYnmHUBRj6d =Z59l -----END PGP SIGNATURE-----