harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xiao-Feng Li" <xiaofeng...@gmail.com>
Subject [DRLVM] field_is_gc_enumerable ??
Date Tue, 06 Mar 2007 12:08:25 GMT
Hi, I found field_is_reference in original vm.h was changed to be
field_is_gc_enumerable. The declaration is:

/**
 * @return <code>TRUE</code> if the field must be enumerated by GC
 *
 * This function doesn't cause resolution of the class of the field.
 */
 VMEXPORT Boolean field_is_gc_enumerable(Field_Handle fh);


I wonder what is the rationality to make this interface change.

>From reading the code, I guess this change was made due to the
implementation Magics. With Magics, a reference field may not always
be enumerated by the VM during garbage collection, such as Address
field in a Java helper. To change the function name to be
"field_is_gc_enumerable" might help the reader to know this fact.

But I think this doesn't actually help, since the user of this
function will be confused about the type of the field, and need to
guess what kind of field is "gc enumerable". More importantly, the
semantics of this function are unclear: it hard-encodes the
Magics-related semantics into the low-level field accessors.

I would suggest to keep the original field_is_reference interface
function in this vm.h file. It clearly tells if a field is reference
type. If we really want the field_is_gc_enumerable interface, we can
add it as a new one. We can use a new name like
"field_is_enumerable_reference", which is probably clearer.

How about it?

Thanks,
xiaofeng

Mime
View raw message