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