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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
help-smalltalk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-smalltalk

Reply via email to