<div dir="ltr">(Re-sending to mailing list)<br><br>Hello, thanks for your answer.<br><br>After a while I figured out how to successfully use si_safe_eval - but I still have problems:<br><ul><li>Sometimes this happens:<br><span style="font-family: courier new,monospace;">The variable NO-FUNC is unbound.</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">Broken at SI:TOP-LEVEL.No restarts available.</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">0 is an illegal frs index.</span><br>


Which results in program freeze when I try to Ctrl+C it.<br>Why this pops up I have no idea, please see attached lisp code<br><br></li><li>I'm unable to detect if the execution was successful, OBJNULL<br>is never returned - even in the case of a very corrupted lisp file</li>
</ul><br>Also, how can I preserve the functions defined in the first si_safe_eval to the next one?<br>I'm guessing using the environment var to something another than Cnil, but to what?<br><br><b>test.lisp:</b><br><font face="courier new,monospace">(defun no-func( x y )<br>


  (+ x y))<br><br>(defun my-test-function( x )<br>  (print (list (+ 1 x) (* 2 x))))</font><br><br><b>test-bind.c:</b><br><span style="font-family: courier new,monospace;">#include <stdio.h></span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">#include <stdlib.h></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">#include <ecl/ecl.h></span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">int main( int argc, char *argv[] )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  const char *expr;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  const char *intr;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_object result;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  cl_object file;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_object bytecode;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  intr = "ECL";</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  cl_boot( 1, &intr );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  si_uncatch_bad_signals();</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  printf( "- Booted\n" );</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  file = cl_open( 1, c_string_to_object( "\"test.lisp\"" ) );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  bytecode = cl_read( 1, file );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_close( 1, file );</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  result = si_safe_eval( 3, bytecode, Cnil, OBJNULL );</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  if( result == OBJNULL )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">    fprintf( stderr, "Loading of test.lisp failed\n" );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return 1;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  if( type_of( result ) == t_symbol )</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    printf( "- Loading result: %s\n", cl_symbol_value( result ) );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  result = si_safe_eval( 3, c_string_to_object( "(my-test-function 1)" ), Cnil, OBJNULL );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  if( result == OBJNULL )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">    printf( "Calling of function failed\n" );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return 1;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  printf( "Result X: %d, Y: %d\n", ecl_to_unsigned_integer( cl_car( result ) ),</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">            ecl_to_unsigned_integer( cl_cadr( result ) ));</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  return 0;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><br>Thanks in advance<br><br><div class="gmail_quote">On Thu, Sep 11, 2008 at 9:27 PM, Christian Svensson <span dir="ltr"><<a href="mailto:blue@cmd.nu">blue@cmd.nu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">(Re-sending to mailing list)<div><div></div><div class="Wj3C7c"><br><br>Hello, thanks for your answer.<br>
<br>After a while I figured out how to successfully use si_safe_eval - but I still have problems:<br><ul><li>Sometimes this happens:<br><span style="font-family: courier new,monospace;">The variable NO-FUNC is unbound.</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">Broken at SI:TOP-LEVEL.No restarts available.</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">0 is an illegal frs index.</span><br>


Which results in program freeze when I try to Ctrl+C it.<br>Why this pops up I have no idea, please see attached lisp code<br><br></li><li>I'm unable to detect if the execution was successful, OBJNULL<br>is never returned - even in the case of a very corrupted lisp file</li>

</ul><br>Also, how can I preserve the functions defined in the first si_safe_eval to the next one?<br>I'm guessing using the environment var to something another than Cnil, but to what?<br><br><b>test.lisp:</b><br><font face="courier new,monospace">(defun no-func( x y )<br>


  (+ x y))<br><br>(defun my-test-function( x )<br>  (print (list (+ 1 x) (* 2 x))))</font><br><br><b>test-bind.c:</b><br><span style="font-family: courier new,monospace;">#include <stdio.h></span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">#include <stdlib.h></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">#include <ecl/ecl.h></span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">int main( int argc, char *argv[] )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  const char *expr;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  const char *intr;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_object result;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  cl_object file;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_object bytecode;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  intr = "ECL";</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  cl_boot( 1, &intr );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  si_uncatch_bad_signals();</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  printf( "- Booted\n" );</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  file = cl_open( 1, c_string_to_object( "\"test.lisp\"" ) );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  bytecode = cl_read( 1, file );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  cl_close( 1, file );</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  result = si_safe_eval( 3, bytecode, Cnil, OBJNULL );</span><br style="font-family: courier new,monospace;">


<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  if( result == OBJNULL )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">    fprintf( stderr, "Loading of test.lisp failed\n" );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return 1;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  if( type_of( result ) == t_symbol )</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    printf( "- Loading result: %s\n", cl_symbol_value( result ) );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  result = si_safe_eval( 3, c_string_to_object( "(my-test-function 1)" ), Cnil, OBJNULL );</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  if( result == OBJNULL )</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  {</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">    printf( "Calling of function failed\n" );</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    return 1;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">  }</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  printf( "Result X: %d, Y: %d\n", ecl_to_unsigned_integer( cl_car( result ) ),</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">            ecl_to_unsigned_integer( cl_cadr( result ) ));</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  return 0;</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><br>Thanks in advance<br><br></div></div><div class="gmail_quote"><div><div></div><div class="Wj3C7c">2008/9/11 Claus Brod <span dir="ltr"><<a href="mailto:claus.brod@googlemail.com" target="_blank">claus.brod@googlemail.com</a>></span><br>

</div></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">Some starting points:<div><div></div><div class="Wj3C7c"><br><ul>
<li><a href="http://ecls.wiki.sourceforge.net/FAQ" target="_blank">http://ecls.wiki.sourceforge.net/FAQ</a> (particularly question 2.4)</li>
<li><a href="http://sourceforge.net/mailarchive/message.php?msg_id=D16F05D0CAAA234BA2B753B80DE6100D8F25D8%40DEEXC1U02.de.lucent.com" target="_blank">http://sourceforge.net/mailarchive/message.php?msg_id=D16F05D0CAAA234BA2B753B80DE6100D8F25D8%40DEEXC1U02.de.lucent.com</a></li>


<li><a href="http://ecls.sourceforge.net/new-manual/" target="_blank">http://ecls.sourceforge.net/new-manual/</a></li></ul><br></div></div></div>
<br><div class="Ih2E3d">-------------------------------------------------------------------------<br>
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge<br>
Build the coolest Linux based applications with Moblin SDK & win great prizes<br>
Grand prize is a trip for two to an Open Source event anywhere in the world<br>
<a href="http://moblin-contest.org/redirect.php?banner_id=100&url=/" target="_blank">http://moblin-contest.org/redirect.php?banner_id=100&url=/</a><br>_______________________________________________<br>
Ecls-list mailing list<br>
<a href="mailto:Ecls-list@lists.sourceforge.net" target="_blank">Ecls-list@lists.sourceforge.net</a><br>
<a href="https://lists.sourceforge.net/lists/listinfo/ecls-list" target="_blank">https://lists.sourceforge.net/lists/listinfo/ecls-list</a><br>
<br></div></blockquote></div><br><br clear="all"><br>-- <br>Christian Svensson<br>Command Systems<br>
</div>
</blockquote></div><br><br clear="all"><br>-- <br>Christian Svensson<br>Command Systems<br>
</div>