diff --git a/src/block_alloc.h b/src/block_alloc.h
index fe54e4394494d6b39ca3236e84c0d25a45986aa6..9d7eae0b2fc387739bd4888ccf4479c340a947cb 100644
--- a/src/block_alloc.h
+++ b/src/block_alloc.h
@@ -1,4 +1,4 @@
-/* $Id: block_alloc.h,v 1.5 1999/01/31 09:01:39 hubbe Exp $ */
+/* $Id: block_alloc.h,v 1.6 1999/03/23 16:22:05 hubbe Exp $ */
 #undef PRE_INIT_BLOCK
 #undef INIT_BLOCK
 #undef EXIT_BLOCK
@@ -49,7 +49,7 @@ struct DATA *PIKE_CONCAT(alloc_,DATA)(void)							\
   return tmp;											\
 }												\
 												\
-inline void PIKE_CONCAT(really_free_,DATA)(struct DATA *d)						\
+void PIKE_CONCAT(really_free_,DATA)(struct DATA *d)						\
 {												\
   EXIT_BLOCK(d);										\
   d->next=PIKE_CONCAT3(free_,DATA,s);								\
diff --git a/src/error.c b/src/error.c
index 90e870b8712b8dc2cd5a7cd9b7193405756cf6b2..189d97da46c7e53e9b2451ab4d98a82b09825e53 100644
--- a/src/error.c
+++ b/src/error.c
@@ -18,7 +18,7 @@
 #include "operators.h"
 #include "module_support.h"
 
-RCSID("$Id: error.c,v 1.28 1999/03/23 02:51:07 marcus Exp $");
+RCSID("$Id: error.c,v 1.29 1999/03/23 16:22:06 hubbe Exp $");
 
 #undef ATTRIBUTE
 #define ATTRIBUTE(X)
@@ -441,9 +441,18 @@ void bad_arg_error(
 void math_error(
   char *func,
   struct svalue *base_sp,  int args,
+  struct svalue *number,
   char *desc, ...) ATTRIBUTE((noreturn,format (printf, 4, 5)))
 {
   INIT_ERROR(math);
+  if(number)
+  {
+    ERROR_COPY_SVALUE(bad_arg, number);
+  }else{
+    ERROR_STRUCT(bad_arg,o)->number.type=T_INT;
+    ERROR_STRUCT(bad_arg,o)->number.subtype=NUMBER_UNDEFINED;
+    ERROR_STRUCT(bad_arg,o)->number.u.integer=0;
+  }
   ERROR_DONE(generic);
 }
 
diff --git a/src/errors.h b/src/errors.h
index c4abce4453062856f4da11872be5066393dd88f6..daeb904cf07fa8977135954c330e1f40891957a8 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -83,6 +83,7 @@ DECLARE_ERROR(bad_arg,
 
 DECLARE_ERROR(math,
 	      ERR_INHERIT(generic),
+  ERR_VAR(struct svalue, mixed, T_MIXED, number)
 )
 
 DECLARE_ERROR(resource,