[Ecls-list] Overriding SI::SIGNAL-SIMPLE-ERROR (si_signal_simple_error) I cannot create handlers for FEprogram_error/FEcontrol_error/FEreader_error

Douglas R. Miles logicmoo at comcast.net
Mon Mar 13 10:23:01 UTC 2006

I am able to catch the many errors by fseting UNIVERSAL-ERROR-HANDLER with 

  make_constant_string("UNIVERSAL-ERROR-HANDLER "), 
  cl_core.system_package, &intern_flag), swi_prolog_error_handler);

I cannot seem to override SI::SIGNAL-SIMPLE-ERROR when triggered from

The call trace is such

cl_eval->eval-with-env-> compile_form ->c_call-> asm_function
->FEprogram_error- si_signal_simple_error (conditions.d)

compile_form basically gets an error cannot be intercepted. an example of
such an eval might be "(1 2 3") will error during asm_function which it
cannot compile. But it isn't using UNIVERSAL-ERROR-HANDLER instead it is
using si_signal_simple_error

Which was emitted as such: conditions.c

/*	function definition for SIGNAL-SIMPLE-ERROR                   */
cl_object si_signal_simple_error(cl_narg narg, cl_object V1, cl_object V2,
cl_object V3, cl_object V4, ...)
{ VT40 VLEX40 CLSR40
	cl_object value0;
	if(narg<4) FEwrong_num_arguments_anonym();
	cl_object V5;
	cl_va_list args; cl_va_start(args,V4,narg,4);
	{cl_object V6;                            /*  SIMPLE-ERROR-NAME
	T0= cl_string(V1)                         /*  STRING
	T1= cl_concatenate(3,ECL_SYM("STRING",803),VV[49],T0) /*
	T2= cl_find_package(VV[50])               /*  FIND-PACKAGE
	V6= cl_intern(2,T1,T2)                    /*  INTERN
	if((cl_find_class(2,V6,Cnil)              /*  FIND-CLASS
	goto L641;}
	T0= cl_list(2,ECL_SYM("SIMPLE-ERROR",768),V1) /*  LIST
	T1= cl_list(4,ECL_SYM("DEFCLASS",935),V6,T0,Cnil) /*  LIST
	(void)cl_eval(T1)                         /*  EVAL
	goto L647;}
	T0= (ECL_SYM("CERROR",200)->symbol.gfdef);
-ARGUMENTS",1235),V4,V5) /*  APPLY */;
	return value0;
	T0= (ECL_SYM("ERROR",335)->symbol.gfdef);
GUMENTS",1235),V4,V5) /*  APPLY */;
	return value0;

One other issue is an access violation because that at VV == NULL at:
T1= cl_concatenate(3,ECL_SYM("STRING",803),VV[49],T0) /*  CONCATENATE  */

VV allocation never happened since I am guessing   init_ECL_CONDITIONS
(cl_object flag) never was called from cl_boot(.,.) so it might be how I am

How/when should I call init_ECL_CONDITIONS?

Thank you, Douglas

More information about the ecl-devel mailing list