Date: Thu, 13 Jan 2000 12:05:53 +0100
From: Michael Fedrowitz <rhodry@magellan.tat.physik.uni-tuebingen.de>
Short: callbacks: patch for ldmud-dev.164
Type: Bug
State: Done - fixed in 3.2.8-dev.176



 Hi,

ich hätte mal wieder 'nen kleinen Patch. :) Der fixed 'n kleines Prob in
execute_callback(), wenn die gegebene Funktion im Callback Object nicht
existiert, was z.B. zur Folge hat, daß filter(arr, "fun", obj) Unsinn macht,
wenn es obj->fun() nicht gibt. Das Problem ist, dass in diesem Fall die 0,
die apply() zurückgibt, ignoriert wird und ganz einfach &apply_return_value
zurückgegeben wird und damit das Ergebnis von irgendeinem vorangegangenem
apply().

-Michael (Rhodry@ForgottenDreams)

--- src/simulate.c.orig	Wed Dec 22 15:39:34 1999
+++ src/simulate.c	Wed Jan 12 22:33:37 2000
@@ -2956,6 +2956,7 @@
 {
     object_t *ob;
     int num_arg;
+    svalue_t *ret_val;
 
     ob = callback_object(cb);
     if (!ob
@@ -3028,9 +3029,10 @@
         call_lambda(&(cb->function.lambda), num_arg + nargs);
         transfer_svalue(&apply_return_value, inter_sp);
         inter_sp--;
+        ret_val = &apply_return_value;
     }
     else
-        apply(cb->function.named.name, ob, num_arg + nargs);
+        ret_val = apply(cb->function.named.name, ob, num_arg + nargs);
 
     if (!keep)
     {
@@ -3039,7 +3041,7 @@
     }
 
     /* Return the result */
-    return &apply_return_value;
+    return ret_val;
 } /* execute_callback() */
 
 /*-------------------------------------------------------------------------*/
