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

Reply via email to