From 784899b9d1d857c382213d63423f3b36909cac87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Tue, 24 Sep 2019 12:21:17 +0200
Subject: [PATCH] Error handling: Added LOW_SET_ONERROR().

---
 src/pike_error.h | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/pike_error.h b/src/pike_error.h
index e9e5cd83d8..05698c194e 100644
--- a/src/pike_error.h
+++ b/src/pike_error.h
@@ -163,25 +163,27 @@ PMOD_EXPORT extern const char msg_unsetjmp_nosync_2[];
 
 
 #ifdef PIKE_DEBUG
-#define SET_ONERROR(X,Y,Z)					\
-  do{								\
-    check_recovery_context();					\
-    OED_FPRINTF((stderr, "SET_ONERROR(%p, %p, %p) %s:%d\n",	\
-		 &(X), (Y), (void *)(Z), __FILE__, __LINE__));	\
-    X.frame_pointer = Pike_interpreter.frame_pointer;		\
-    X.func=(error_call)(Y);					\
-    DO_IF_DMALLOC( if( X.func == free ) X.func=dmalloc_free);	\
-    X.arg=(void *)(Z);						\
-    if(!Pike_interpreter.recoveries) {				\
-      X.previous = NULL;					\
-      break;							\
-    }								\
-    X.previous=Pike_interpreter.recoveries->onerror;		\
-    X.file = __FILE__;						\
-    X.line = __LINE__;						\
-    Pike_interpreter.recoveries->onerror=&X;			\
+#define LOW_SET_ONERROR(X,Y,Z)						\
+  do{									\
+    check_recovery_context();						\
+    OED_FPRINTF((stderr, "SET_ONERROR(%p, %p, %p) %s:%d\n",		\
+		 (X), (Y), (void *)(Z), __FILE__, __LINE__));		\
+    (X)->frame_pointer = Pike_interpreter.frame_pointer;		\
+    (X)->func = (error_call)(Y);					\
+    DO_IF_DMALLOC( if( (X)->func == free ) (X)->func = dmalloc_free);	\
+    (X)->arg = (void *)(Z);						\
+    if (!Pike_interpreter.recoveries) {					\
+      (X)->previous = NULL;						\
+      break;								\
+    }									\
+    (X)->previous = Pike_interpreter.recoveries->onerror;		\
+    (X)->file = __FILE__;						\
+    (X)->line = __LINE__;						\
+    Pike_interpreter.recoveries->onerror = (X);				\
   }while(0)
 
+#define SET_ONERROR(X,Y,Z) LOW_SET_ONERROR(&X, Y, Z)
+
 PMOD_EXPORT extern const char msg_last_setjmp[];
 PMOD_EXPORT extern const char msg_unset_onerr_nosync_1[];
 PMOD_EXPORT extern const char msg_unset_onerr_nosync_2[];
-- 
GitLab