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]

more cvs guile stuff :)



The recent changes in numbers.c to have logand and logior use
SCM_VALIDATE_ULONG_COPY break scwm.

Actually, they break anything that uses (logand (lognot 2)) since
lognot uses scm_difference to return a negative number....

So here's a patch, and also changes the ints SCM_VALIDATE_LONG_COPY
copies into into longs.

(I'm not sure that the semantics are quite right with lognot and
logand and friends, but at least scwm doesn't throw errors constantly, 
so has to be closer to correct :)

  -Eric

Index: numbers.c
===================================================================
RCS file: /cvs/guile/guile/guile-core/libguile/numbers.c,v
retrieving revision 1.60
diff -u -r1.60 numbers.c
--- numbers.c	2000/03/03 00:09:53	1.60
+++ numbers.c	2000/03/08 08:21:20
@@ -525,15 +525,15 @@
 	     "   @result{} \"1000\"")
 #define FUNC_NAME s_scm_logand
 {
-  int i1, i2;
+  long i1, i2;
   if (SCM_UNBNDP (n2))
     {
       if (SCM_UNBNDP (n1))
 	return SCM_MAKINUM (-1);
       return n1;
     }
-  SCM_VALIDATE_ULONG_COPY (1,n1,i1);
-  SCM_VALIDATE_ULONG_COPY (2,n2,i2);
+  SCM_VALIDATE_LONG_COPY (1,n1,i1);
+  SCM_VALIDATE_LONG_COPY (2,n2,i2);
   return SCM_LOGOP_RETURN (i1 & i2);
 }
 #undef FUNC_NAME
@@ -549,15 +549,15 @@
 	     "@end lisp")
 #define FUNC_NAME s_scm_logior
 {
-  int i1, i2;
+  long i1, i2;
   if (SCM_UNBNDP (n2))
     {
       if (SCM_UNBNDP (n1))
 	return SCM_INUM0;
       return n1;
     }
-  SCM_VALIDATE_ULONG_COPY (1,n1,i1);
-  SCM_VALIDATE_ULONG_COPY (2,n2,i2);
+  SCM_VALIDATE_LONG_COPY (1,n1,i1);
+  SCM_VALIDATE_LONG_COPY (2,n2,i2);
   return SCM_LOGOP_RETURN (i1 | i2);
 }
 #undef FUNC_NAME
@@ -573,15 +573,15 @@
 	     "@end lisp")
 #define FUNC_NAME s_scm_logxor
 {
-  int i1, i2;
+  long i1, i2;
   if (SCM_UNBNDP (n2))
     {
       if (SCM_UNBNDP (n1))
 	return SCM_INUM0;
       return n1;
     }
-  SCM_VALIDATE_ULONG_COPY (1,n1,i1);
-  SCM_VALIDATE_ULONG_COPY (2,n2,i2);
+  SCM_VALIDATE_LONG_COPY (1,n1,i1);
+  SCM_VALIDATE_LONG_COPY (2,n2,i2);
   return SCM_LOGOP_RETURN (i1 ^ i2);
 }
 #undef FUNC_NAME
@@ -595,9 +595,9 @@
 	    "@end example")
 #define FUNC_NAME s_scm_logtest
 {
-  int i1, i2;
-  SCM_VALIDATE_ULONG_COPY (1,n1,i1);
-  SCM_VALIDATE_ULONG_COPY (2,n2,i2);
+  long i1, i2;
+  SCM_VALIDATE_LONG_COPY (1,n1,i1);
+  SCM_VALIDATE_LONG_COPY (2,n2,i2);
   return SCM_BOOL(i1 & i2);
 }
 #undef FUNC_NAME
@@ -615,9 +615,9 @@
 	    "@end example")
 #define FUNC_NAME s_scm_logbit_p
 {
-  int i1, i2;
+  long i1, i2;
   SCM_VALIDATE_INUM_MIN_COPY (1,index,0,i1);
-  SCM_VALIDATE_ULONG_COPY (2,j,i2);
+  SCM_VALIDATE_LONG_COPY (2,j,i2);
   return SCM_BOOL((1 << i1) & i2);
 }
 #undef FUNC_NAME

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