From: Sam S. <sd...@gn...> - 2005-01-18 17:04:29
|
> * Bruno Haible <oe...@py...t> [2005-01-13 19:25:52 +0100]: > > Which means, the bug is in make_variable_frame, and the code which > does it right is in funcall_iclosure. nope. funcall_iclosure() is called when the values of the bindings are already known (arguments are evaluated before the function is called) while make_variable_frame() is called _before_ the values are known and must create _inactive_ bindings, which it does not: control.d:make_variable_frame(): 460: pushSTACK_symbolwithflags(declsym,wbit(active_bit_o)); /* Symbol active */ why doesn't deactivation of the bindings: --- control.d 17 Jan 2005 22:24:12 -0500 1.117 +++ control.d 18 Jan 2005 11:55:42 -0500 @@ -560,9 +560,9 @@ if (specdecled || special_var_p(TheSymbol(symbol))) { /* bind dynamically */ #if (varframe_binding_mark == varframe_binding_sym) - STACK_(varframe_binding_mark) = as_object(as_oint(symbol) | wbit(dynam_bit_o)); + STACK_(varframe_binding_mark) = as_object((as_oint(symbol) | wbit(dynam_bit_o)) & ~wbit(active_bit_o)); #else - STACK_(varframe_binding_mark) = as_object(as_oint(Fixnum_0) | wbit(dynam_bit_o)); + STACK_(varframe_binding_mark) = as_object((as_oint(Fixnum_0) | wbit(dynam_bit_o)) & ~wbit(active_bit_o)); #endif } else { /* bind statically */ fix the problem? -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> The only intuitive interface is the nipple. The rest has to be learned. |