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() */
/*-------------------------------------------------------------------------*/