This is the mail archive of the guile@sourceware.cygnus.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Bugreport + patch: backtrace.c


Hi!

The implementation of scm_display_error_message is buggy:  It stumbles
across the often discussed problem, that SCM values might erroneously be
tested for being true or false (in the C sense).

Here's the patch, which also attempts to rewrite the code to be better
understandable and removes calls to SCM_IMP and SCM_NIMP.


Index: backtrace.c
===================================================================
RCS file: /cvs/guile/guile/guile-core/libguile/backtrace.c,v
retrieving revision 1.44
diff -u -p -r1.44 backtrace.c
--- backtrace.c	2000/01/11 18:48:56	1.44
+++ backtrace.c	2000/01/18 17:50:52
@@ -109,16 +109,16 @@ display_header (SCM source, SCM port)
 void
 scm_display_error_message (SCM message, SCM args, SCM port)
 {
-  if (SCM_IMP (message) || !SCM_ROSTRINGP (message) || SCM_IMP (args)
-      || !scm_list_p (args))
+  if (SCM_ROSTRINGP (message) && SCM_NFALSEP(scm_list_p (args)))
     {
+      scm_simple_format(port,message,args);
+      scm_newline(port);
+    }
+  else
+    {
       scm_prin1 (message, port, 0);
       scm_putc ('\n', port);
-      return;
     }
-
-  scm_simple_format(port,message,args);
-  scm_newline(port);
 }
 
 static void
@@ -263,11 +263,13 @@ SCM_DEFINE (scm_set_print_params_x, "set
 "")
 #define FUNC_NAME s_scm_set_print_params_x
 {
-  int i, n = scm_ilength (params);
+  int i;
+  int n;
   SCM ls;
   print_params_t *new_params;
-  SCM_ASSERT (n >= 1, params, SCM_ARG2, FUNC_NAME);
-  for (ls = params; SCM_NIMP (ls); ls = SCM_CDR (ls))
+
+  SCM_VALIDATE_NONEMPTYLIST_COPYLEN(2, params, n);
+  for (ls = params; SCM_NNULLP (ls); ls = SCM_CDR (ls))
     SCM_ASSERT (scm_ilength (SCM_CAR (params)) == 2
 		&& SCM_INUMP (SCM_CAAR (ls))
 		&& SCM_INUM (SCM_CAAR (ls)) >= 0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]