Martin Morgan <[EMAIL PROTECTED]> writes: > bindingIsLocked applied to a locked binding returns a 'logical' that > is niether true nor false.
Is this a philosophical question? :-) Here's what I think is going on: BINDING_IS_LOCKED does not return 0/1, but the result of a bit op that will be either 0 or some int where bit 14 is set. The behavior you describe is consistent with a logical value escaping to R where the underlying int is some x > 1. I wonder if ScalarLogical should force 0/1: Index: include/Rinlinedfuns.h =================================================================== --- include/Rinlinedfuns.h (revision 38060) +++ include/Rinlinedfuns.h (working copy) @@ -494,7 +494,7 @@ INLINE_FUN SEXP ScalarLogical(int x) { SEXP ans = allocVector(LGLSXP, 1); - INTEGER(ans)[0] = x; + INTEGER(ans)[0] = (x == 0) ? 0 : 1; return ans; } Otherwise, I think do_bndIsLocked needs to make a similar operation before calling ScalarLogical. But preventing these all purpose logicals from escaping would seem to be a good argument for changing ScalarLogical. + seth ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel