Hi,
Again, sorry for the length of this post. Once I get my new office I
will get a website set up on my work machine and will simply post a
link to the log since I doubt many people are truly interested in
these logs.
To further analyze what is happening, I added my own routine in
main.c called DEBUG_SET_NAMED and then redefined the SET_NAMED macro
to use it and then rebuilt R.
I then fired up R under a fresh environment and running under GDB
and set a breakpoint at my DEBUG_SET_NAMED and at compute_identical
> call1 <- Quote(f(arg[[1]], arg[[1]], arg[[1]]))
So running this statement shows that SET_NAMED was run on 5 objects
of type 13,16,10,3 and with the last one being a type 6.
In all cases, but the type 6 object, named was set to 2. For the
type 6 object, named was set to 1
Breakpoint 1, DEBUG_SET_NAMED (x=0x85cfd8, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$1 = 0x85cfd8
$2 = {sxpinfo = {type = 13, obj = 0, named = 2, gp = 0, mark = 1,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0x6db278, gengc_prev_node = 0x8442b8, u =
{primsxp = {
offset = 2}, symsxp = {pname = 0x2, value = 0x230002acc2,
internal = 0x21000090}, listsxp = {carval = 0x2, cdrval =
0x230002acc2,
tagval = 0x21000090}, envsxp = {frame = 0x2, enclos =
0x230002acc2,
hashtab = 0x21000090}, closxp = {formals = 0x2, body =
0x230002acc2,
env = 0x21000090}, promsxp = {value = 0x2, expr = 0x230002acc2,
env = 0x21000090}}}
#0 DEBUG_SET_NAMED (x=0x85cfd8, v=2) at ../../../r-devel/r-devel/
R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x570348, rho=0x9eb5f0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Breakpoint 1, DEBUG_SET_NAMED (x=0x87da18, v=2) at ../../../r-devel/
r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$3 = 0x87da18
$4 = {sxpinfo = {type = 16, obj = 0, named = 2, gp = 0, mark = 1,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0x8403f8, gengc_prev_node = 0x87d868, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x1185c48,
internal = 0x2000000a}, listsxp = {carval = 0x1, cdrval =
0x1185c48,
tagval = 0x2000000a}, envsxp = {frame = 0x1, enclos = 0x1185c48,
hashtab = 0x2000000a}, closxp = {formals = 0x1, body = 0x1185c48,
env = 0x2000000a}, promsxp = {value = 0x1, expr = 0x1185c48,
env = 0x2000000a}}}
#0 DEBUG_SET_NAMED (x=0x87da18, v=2) at ../../../r-devel/r-devel/
R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x545ed0, rho=0x9eb5f0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Breakpoint 1, DEBUG_SET_NAMED (x=0x822bf8, v=2) at ../../../r-
devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$5 = 0x822bf8
$6 = {sxpinfo = {type = 10, obj = 0, named = 2, gp = 0, mark = 1,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0x661208, gengc_prev_node = 0x840428, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x1, internal =
0x20000090},
listsxp = {carval = 0x1, cdrval = 0x1, tagval = 0x20000090},
envsxp = {
frame = 0x1, enclos = 0x1, hashtab = 0x20000090}, closxp = {
formals = 0x1, body = 0x1, env = 0x20000090}, promsxp = {value
= 0x1,
expr = 0x1, env = 0x20000090}}}
#0 DEBUG_SET_NAMED (x=0x822bf8, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x570230, rho=0x9eb5f0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Breakpoint 1, DEBUG_SET_NAMED (x=0x5d02d0, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$7 = 0x5d02d0
$8 = {sxpinfo = {type = 3, obj = 0, named = 2, gp = 0, mark = 1,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x5d0378, gengc_prev_node = 0xb843c0, u =
{primsxp = {
offset = 5711720}, symsxp = {pname = 0x572768, value = 0x5745c0,
internal = 0x648910}, listsxp = {carval = 0x572768, cdrval =
0x5745c0,
tagval = 0x648910}, envsxp = {frame = 0x572768, enclos =
0x5745c0,
hashtab = 0x648910}, closxp = {formals = 0x572768, body =
0x5745c0,
env = 0x648910}, promsxp = {value = 0x572768, expr = 0x5745c0,
env = 0x648910}}}
#0 DEBUG_SET_NAMED (x=0x5d02d0, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x570188, rho=0x9eb5f0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Breakpoint 1, DEBUG_SET_NAMED (x=0x9ebe58, v=1) at ../../../r-
devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$9 = 0x9ebe58
$10 = {sxpinfo = {type = 6, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9ebe90, gengc_prev_node = 0x9ebe20, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9ecd90,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9ecd90,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9ecd90,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9ecd90,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9ecd90,
env = 0x508818}}}
#0 DEBUG_SET_NAMED (x=0x9ebe58, v=1)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab6b5d3 in do_set (call=0x9ec1d8, op=Variable "op" is
not available.)
at ../../../r-devel/r-devel/R/src/main/eval.c:1353
Then I assigned call2
>
> call2 <- Quote(f(arg[[1]]))[c(1,2,2,2)]
Again a variety of objects (types 14, 14, 14, 14, 19) has named set
to 2, all except for the final object (again type = 6) that had named
set to 1
Breakpoint 1, DEBUG_SET_NAMED (x=0xf9b808, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$11 = 0xf9b808
$12 = {sxpinfo = {type = 14, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0xf9b868, gengc_prev_node = 0xf9b7d8, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x3ff0000000000000,
internal = 0x21000109}, listsxp = {carval = 0x1,
cdrval = 0x3ff0000000000000, tagval = 0x21000109}, envsxp = {
frame = 0x1, enclos = 0x3ff0000000000000, hashtab = 0x21000109},
closxp = {formals = 0x1, body = 0x3ff0000000000000, env =
0x21000109},
promsxp = {value = 0x1, expr = 0x3ff0000000000000, env =
0x21000109}}}
#0 DEBUG_SET_NAMED (x=0xf9b808, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab676ff in Rf_eval (e=0xf9b808, rho=0x547858)
at ../../../r-devel/r-devel/R/src/main/eval.c:362
Breakpoint 1, DEBUG_SET_NAMED (x=0xf9b868, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$13 = 0xf9b868
$14 = {sxpinfo = {type = 14, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0xf9b898, gengc_prev_node = 0xf9b808, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x4000000000000000,
internal = 0x2000000e}, listsxp = {carval = 0x1,
cdrval = 0x4000000000000000, tagval = 0x2000000e}, envsxp = {
frame = 0x1, enclos = 0x4000000000000000, hashtab = 0x2000000e},
closxp = {formals = 0x1, body = 0x4000000000000000, env =
0x2000000e},
promsxp = {value = 0x1, expr = 0x4000000000000000, env =
0x2000000e}}}
#0 DEBUG_SET_NAMED (x=0xf9b868, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab676ff in Rf_eval (e=0xf9b868, rho=0x547858)
at ../../../r-devel/r-devel/R/src/main/eval.c:362
Breakpoint 1, DEBUG_SET_NAMED (x=0xf9b898, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$15 = 0xf9b898
$16 = {sxpinfo = {type = 14, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0xf98b48, gengc_prev_node = 0xf9b868, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x4000000000000000,
internal = 0x0}, listsxp = {carval = 0x1, cdrval =
0x4000000000000000,
tagval = 0x0}, envsxp = {frame = 0x1, enclos =
0x4000000000000000,
hashtab = 0x0}, closxp = {formals = 0x1, body =
0x4000000000000000,
env = 0x0}, promsxp = {value = 0x1, expr = 0x4000000000000000,
env = 0x0}}}
#0 DEBUG_SET_NAMED (x=0xf9b898, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab676ff in Rf_eval (e=0xf9b898, rho=0x547858)
at ../../../r-devel/r-devel/R/src/main/eval.c:362
Breakpoint 1, DEBUG_SET_NAMED (x=0xf98b48, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$17 = 0xf98b48
$18 = {sxpinfo = {type = 14, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 1}, attrib = 0x508818,
gengc_next_node = 0xf98c08, gengc_prev_node = 0xf9b898, u =
{primsxp = {
offset = 1}, symsxp = {pname = 0x1, value = 0x4000000000000000,
internal = 0x21000010}, listsxp = {carval = 0x1,
cdrval = 0x4000000000000000, tagval = 0x21000010}, envsxp = {
frame = 0x1, enclos = 0x4000000000000000, hashtab = 0x21000010},
closxp = {formals = 0x1, body = 0x4000000000000000, env =
0x21000010},
promsxp = {value = 0x1, expr = 0x4000000000000000, env =
0x21000010}}}
#0 DEBUG_SET_NAMED (x=0xf98b48, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab676ff in Rf_eval (e=0xf98b48, rho=0x547858)
at ../../../r-devel/r-devel/R/src/main/eval.c:362
Breakpoint 1, DEBUG_SET_NAMED (x=0x143a918, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$19 = 0x143a918
$20 = {sxpinfo = {type = 19, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 3}, attrib = 0x508818,
gengc_next_node = 0x143a960, gengc_prev_node = 0x143a8d0, u =
{primsxp = {
offset = 4}, symsxp = {pname = 0x4, value = 0x508818,
internal = 0x508818}, listsxp = {carval = 0x4, cdrval = 0x508818,
tagval = 0x508818}, envsxp = {frame = 0x4, enclos = 0x508818,
hashtab = 0x508818}, closxp = {formals = 0x4, body = 0x508818,
env = 0x508818}, promsxp = {value = 0x4, expr = 0x508818,
env = 0x508818}}}
#0 DEBUG_SET_NAMED (x=0x143a918, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaac25dcd in do_subset_dflt (call=0x9e98f0, op=Variable
"op" is not available.)
at ../../../r-devel/r-devel/R/src/main/subset.c:160
Breakpoint 1, DEBUG_SET_NAMED (x=0x9e8db0, v=1)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$21 = 0x9e8db0
$22 = {sxpinfo = {type = 6, obj = 0, named = 0, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9e8de8, gengc_prev_node = 0x9e8d78, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9e8d78,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9e8d78,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9e8d78,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9e8d78,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9e8d78,
env = 0x508818}}}
#0 DEBUG_SET_NAMED (x=0x9e8db0, v=1)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab6b5d3 in do_set (call=0x9e9998, op=Variable "op" is
not available.)
at ../../../r-devel/r-devel/R/src/main/eval.c:1353
Now when I run the call to identical, you can see that both of the
type 6 objects created by the assignments to call1 and call2 have
named set to 2 by Rf_eval in the way to compute_identical
> identical(call1, call2)
Breakpoint 1, DEBUG_SET_NAMED (x=0x9ebe58, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$23 = 0x9ebe58
$24 = {sxpinfo = {type = 6, obj = 0, named = 1, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9ebe90, gengc_prev_node = 0x9ebe20, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9ecd90,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9ecd90,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9ecd90,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9ecd90,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9ecd90,
env = 0x508818}}}
#0 DEBUG_SET_NAMED (x=0x9ebe58, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x56ca30, rho=0x9e91a0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Breakpoint 1, DEBUG_SET_NAMED (x=0x9e8db0, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
1444 (x->sxpinfo.named) = v;
$25 = 0x9e8db0
$26 = {sxpinfo = {type = 6, obj = 0, named = 1, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9e8de8, gengc_prev_node = 0x9e8d78, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9e8d78,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9e8d78,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9e8d78,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9e8d78,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9e8d78,
env = 0x508818}}}
#0 DEBUG_SET_NAMED (x=0x9e8db0, v=2)
at ../../../r-devel/r-devel/R/src/main/main.c:1444
#1 0x00002aaaaab67b04 in Rf_eval (e=0x92d5d0, rho=0x9e91a0)
at ../../../r-devel/r-devel/R/src/main/eval.c:389
Now finally the breakpoint at compute_identical was reached and you
can see that the type 6 objects that had their named value changed
from 1 to 2 are in fact the top level objects being sent to identical
but now they have named set to 2
Breakpoint 2, compute_identical (x=0x9ebe58, y=0x9e8db0)
at ../../../r-devel/r-devel/R/src/main/identical.c:53
53 {
(gdb) print *x
$27 = {sxpinfo = {type = 6, obj = 0, named = 2, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9ebe90, gengc_prev_node = 0x9ebe20, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9ecd90,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9ecd90,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9ecd90,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9ecd90,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9ecd90,
env = 0x508818}}}
(gdb) print *y
$29 = {sxpinfo = {type = 6, obj = 0, named = 2, gp = 0, mark = 0,
debug = 0,
trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib = 0x508818,
gengc_next_node = 0x9e8de8, gengc_prev_node = 0x9e8d78, u =
{primsxp = {
offset = 10663048}, symsxp = {pname = 0xa2b488, value = 0x9e8d78,
internal = 0x508818}, listsxp = {carval = 0xa2b488, cdrval =
0x9e8d78,
tagval = 0x508818}, envsxp = {frame = 0xa2b488, enclos =
0x9e8d78,
hashtab = 0x508818}, closxp = {formals = 0xa2b488, body =
0x9e8d78,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9e8d78,
env = 0x508818}}}
So I think this does confirm that the call to identical does indeed
change the top level objects named from 1 to 2.
I still need to learn more about how objects are made and what an
object of LANGSXP type really is and what the proper setting is for
named for an object that is a list of other objects whose named
values are set to 0, 1, or 2 respectively.
My guess is just before a final objects is assigned, we might have to
walk the tree of subobjects in some way to make sure all of the named
values are sane. The code seems to be setting this to 2 in lots of
places and some seem like quick patches to other problems. I still
don't understand why call1 and call2 when used as arguments to
identical() and not in assignment statements can have their named
values changed. I would expect nothing to be changed in call1 or
call2 py passing them to a function like identical.
So I will keep looking.
FWIW, it might be a good idea to set up DEBUG_SET_NAMED and other
accessor functions so that when built under -DDEBUG_ACCESSORS that
they are used to replace the macros spreadout all over the place in
the code. A change like that would be easy to do if anyone feels it
would be worthwhile.
Hope this helps.
Kevin
Hi,
Okay I threw together a quick dump_object routine and found something
that I don't think is correct when call2 is created.
> call2 <- Quote(f(arg[[1]]))[c(1,2,2,2)]
> get("call2")
I use the do_get break to find the SEXP value I want
Breakpoint 1, do_get (call=0xc2d530, op=0x52bd30, args=0x9e83a8,
rho=Variable "rho" is not available.
) at ../../../r-devel/r-devel/R/src/main/envir.c:1668
1668 if (PRIMVAL(op)) { /* have get(.) */
(gdb) print *rval
$2 = {sxpinfo = {type = 6, obj = 0, named = 1, gp = 0, mark = 0,
debug = 0, trace = 0, fin = 0, gcgen = 0, gccls = 0}, attrib =
0x508818, gengc_next_node = 0x9e7d50,
gengc_prev_node = 0x9e7ce0, u = {primsxp = {offset = 10663048},
symsxp = {pname = 0xa2b488, value = 0x9e7ce0, internal = 0x508818},
listsxp = {carval = 0xa2b488,
cdrval = 0x9e7ce0, tagval = 0x508818}, envsxp = {frame =
0xa2b488, enclos = 0x9e7ce0, hashtab = 0x508818}, closxp = {formals =
0xa2b488, body = 0x9e7ce0,
env = 0x508818}, promsxp = {value = 0xa2b488, expr = 0x9e7ce0,
env = 0x508818}}}
Now I invoke my own dump routine which keeps track of recursion level
and will dump the named and other things inside the newly created
object, the format of the output is
recursion level: SEXP X TYPEOF(X) and then some object specific values
(gdb) call dump_object(rval, 0)
0: 0x9e7d18 LANGSXP Object with length 1, named 1
f(arg[[1]], arg[[1]], arg[[1]])
1: 0xa2b488 SYMSXP name at 0xa29408, value at 0x5087e0, named 0
f
1: 0x9e9880 LANGSXP Object with length 1, named 0
arg[[1]]
2: 0x508738 SYMSXP name at 0x51c788, value at 0x527690, named 0
`[[`
2: 0xc37cc8 SYMSXP name at 0xc376e8, value at 0x5087e0, named 0
arg
2: 0xf94cb8 REALSXP Object, length 1, starting at 0xf94ce0, named 0
1
1: 0x9e9880 LANGSXP Object with length 1, named 0
arg[[1]]
2: 0x508738 SYMSXP name at 0x51c788, value at 0x527690, named 0
`[[`
2: 0xc37cc8 SYMSXP name at 0xc376e8, value at 0x5087e0, named 0
arg
2: 0xf94cb8 REALSXP Object, length 1, starting at 0xf94ce0, named 0
1
1: 0x9e9880 LANGSXP Object with length 1, named 0
arg[[1]]
2: 0x508738 SYMSXP name at 0x51c788, value at 0x527690, named 0
`[[`
2: 0xc37cc8 SYMSXP name at 0xc376e8, value at 0x5087e0, named 0
arg
2: 0xf94cb8 REALSXP Object, length 1, starting at 0xf94ce0, named 0
1
Notice how each LANGSXP subobject reuses the exact same objects/
addresses (notice the address are the same) 3 times (one for each
entry) but the named value is always 0 for all of them (even though
that address is being re-used (effectively "named") each time.
1: 0x9e9880 LANGSXP Object with length 1, named 0
arg[[1]]
2: 0x508738 SYMSXP name at 0x51c788, value at 0x527690, named 0
`[[`
2: 0xc37cc8 SYMSXP name at 0xc376e8, value at 0x5087e0, named 0
arg
2: 0xf94cb8 REALSXP Object, length 1, starting at 0xf94ce0, named 0
1
Shouldn't all 3 copies have named set to 1 and not zero since they
are all pointing to the same pieces of memory? And shouldn't that
force the top level LANGSXP object to have named of 2 in this case
and not its current value of 1.
How should any assignment to any of those 3 places in the LANGSXP
list ever know they must be duplicated first when all of the named
values are 0 even though they all point to the same block of memory?
I truly do not understand how named is being used in this case. Why
don't we simply refcount all allocated objects so we know what the
true value of named must be? How else can we get that information?
Hints welcome especially to reading material that explains more on
this stuff.
Thanks,
Kevin
Kevin B. Hendricks
2006-Jun-07 16:09 UTC
[Rd] do developers need to assign rights to someone
Hi, Just in case this is an issue. I freely give all of my patches and changes to the R source code to whomever holds or keeps the copyright/ rights for this project. If it matters I have not signed any FSF agreements but I have done so with Sun for OpenOffice.org and would be willing to do so for this project. Thanks, Kevin
On Wed, 7 Jun 2006, Kevin B. Hendricks wrote:> > Inline is the patch to fix bug 7924. >Yes, that seems to fix it. Committed. -thomas Thomas Lumley Assoc. Professor, Biostatistics tlumley at u.washington.edu University of Washington, Seattle
Apparently Analagous Threads
- R data inspection under gdb?
- Helping out - simple bugs to help familiarize with R design, source, etc
- reproducible segmentation fault caused by textConnection()
- what are labels in struct sxpinfo_struct from Rinternals.h mean?
- another fix for R crashes under enable-strict-barrier, lto, trunk@72156