From dad12d7655b68fafc97ff1645f42b1cc50406916 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 25 Nov 1999 17:39:31 +0100
Subject: [PATCH] Now generates code to support run-time checks of soft casts.

Rev: src/docode.c:1.58
---
 src/docode.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/docode.c b/src/docode.c
index 11d4fa0b2d..6c1e0c86da 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)
-- 
GitLab