diff --git a/src/svalue.c b/src/svalue.c
index c7d386586fdfb6abb9c12147c5a021dd6cb7ca90..660806f8a94a5f35308957f6f7c10ee7c8217723 100644
--- a/src/svalue.c
+++ b/src/svalue.c
@@ -23,7 +23,7 @@
 #include "queue.h"
 #include "bignum.h"
 
-RCSID("$Id: svalue.c,v 1.78 2000/06/29 16:44:24 grubba Exp $");
+RCSID("$Id: svalue.c,v 1.79 2000/07/02 14:54:07 grubba Exp $");
 
 struct svalue dest_ob_zero = { T_INT, 0 };
 
@@ -1110,24 +1110,26 @@ void print_svalue (FILE *out, struct svalue *s)
   free (str.str);
 }
 
-void clear_svalues(struct svalue *s, size_t num)
+/* NOTE: Must handle num being negative. */
+void clear_svalues(struct svalue *s, ptrdiff_t num)
 {
   struct svalue dum;
   dum.type=T_INT;
   dum.subtype=NUMBER_NUMBER;
   dum.u.refs=0;
   dum.u.integer=0;
-  while(num--) *(s++)=dum;
+  while(num-- > 0) *(s++)=dum;
 }
 
-void clear_svalues_undefined(struct svalue *s, size_t num)
+/* NOTE: Must handle num being negative. */
+void clear_svalues_undefined(struct svalue *s, ptrdiff_t num)
 {
   struct svalue dum;
   dum.type=T_INT;
   dum.subtype=NUMBER_UNDEFINED;
   dum.u.refs=0;
   dum.u.integer=0;
-  while(num--) *(s++)=dum;
+  while(num-- > 0) *(s++)=dum;
 }
 
 void copy_svalues_recursively_no_free(struct svalue *to,
diff --git a/src/svalue.h b/src/svalue.h
index 2afcdceaf6edaeea3b6e4e38f5cc6501fb43d2c1..e1034e3d92a7cdbdc94e3fc87e2805738cf78ba4 100644
--- a/src/svalue.h
+++ b/src/svalue.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: svalue.h,v 1.57 2000/06/29 16:44:24 grubba Exp $
+ * $Id: svalue.h,v 1.58 2000/07/02 14:54:08 grubba Exp $
  */
 #ifndef SVALUE_H
 #define SVALUE_H
@@ -366,8 +366,8 @@ int is_equal(struct svalue *a,struct svalue *b);
 int is_lt(struct svalue *a,struct svalue *b);
 void describe_svalue(struct svalue *s,int indent,struct processing *p);
 void print_svalue (FILE *out, struct svalue *s);
-void clear_svalues(struct svalue *s, size_t num);
-void clear_svalues_undefined(struct svalue *s, size_t num);
+void clear_svalues(struct svalue *s, ptrdiff_t num);
+void clear_svalues_undefined(struct svalue *s, ptrdiff_t num);
 void copy_svalues_recursively_no_free(struct svalue *to,
 				      struct svalue *from,
 				      size_t num,