[Rd] bindingIsLocked returns illogical logical
Seth Falcon
sfalcon at fhcrc.org
Mon May 15 08:40:01 CEST 2006
Martin Morgan <mtmorgan at fhcrc.org> 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
More information about the R-devel
mailing list