diff --git a/src/docode.c b/src/docode.c
index 11d4fa0b2d4bbd24b74d82c9394f8d561a0faf32..6c1e0c86da9a220d00e7ba4b88318e79b5c2c1eb 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: docode.c,v 1.57 1999/11/23 22:37:14 grubba Exp $");
+RCSID("$Id: docode.c,v 1.58 1999/11/25 16:39:31 grubba Exp $");
 #include "las.h"
 #include "program.h"
 #include "language.h"
@@ -706,7 +706,20 @@ static int do_docode2(node *n,int flags)
     return 1;
 
   case F_SOFT_CAST:
-    return do_docode(CAR(n), flags);
+#ifdef PIKE_DEBUG
+    if (d_flag) {
+      tmp1 = store_prog_string(n->type);
+      emit(F_STRING, tmp1);
+      tmp1 = do_docode(CAR(n), 0);
+      if (!tmp1) { emit2(F_CONST0); tmp1 = 1; }
+      if (tmp1 > 1) do_pop(tmp1 - 1);
+      emit2(F_SOFT_CAST);
+      return 1;
+    }
+#endif /* PIKE_DEBUG */
+    tmp1 = do_docode(CAR(n), flags);
+    if (tmp1 > 1) do_pop(tmp1 - 1);
+    return !!tmp1;
 
   case F_APPLY:
     if(CAR(n)->token == F_CONSTANT)