[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