Skip to content

Commit cf21dc0

Browse files
committed
Make the sizer for function for TypedData a hidden ivar instead of HiddenKey
* This enables sharing to work normally, HiddenKey should only be used for fixed Layouts and primitives. * Fix the return value of ObjectSpace.memsize_of for non-C-ext objects.
1 parent b0f806e commit cf21dc0

File tree

4 files changed

+9
-26
lines changed

4 files changed

+9
-26
lines changed

lib/truffle/objspace.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,12 @@ def dump_all(output: :file)
154154
def memsize_of(object)
155155
size = Truffle::ObjSpace.memsize_of(object)
156156

157-
size + Truffle::ObjSpace.sizer(object).call unless Truffle::ObjSpace.sizer(object).nil?
157+
memsizer = Truffle::CExt.hidden_variable_get object, :data_memsizer
158+
if memsizer
159+
size + memsizer.call
160+
else
161+
size
162+
end
158163
end
159164
module_function :memsize_of
160165

lib/truffle/truffle/cext.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1449,8 +1449,10 @@ def rb_data_typed_object_wrap(ruby_class, data, data_type, mark, free, size)
14491449
data_holder = DataHolder.new(data)
14501450
hidden_variable_set object, :data_type, data_type
14511451
hidden_variable_set object, :data_holder, data_holder
1452+
hidden_variable_set object, :data_memsizer, data_sizer(size, data_holder) unless size.nil?
1453+
14521454
ObjectSpace.define_finalizer object, data_finalizer(free, data_holder) unless free.nil?
1453-
Truffle::ObjSpace.define_sizer object, data_sizer(size, data_holder) unless size.nil?
1455+
14541456
define_marker object, data_marker(mark, data_holder) unless mark.nil?
14551457
object
14561458
end

src/main/java/org/truffleruby/Layouts.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ public abstract class Layouts {
104104
public static final HiddenKey ASSOCIATED_IDENTIFIER = new HiddenKey("associated");
105105
public static final HiddenKey FINALIZER_REF_IDENTIFIER = new HiddenKey("finalizerRef");
106106
public static final HiddenKey MARKED_OBJECTS_IDENTIFIER = new HiddenKey("marked_objects");
107-
public static final HiddenKey MEMSIZER_IDENTIFIER = new HiddenKey("memsizer");
108107
public static final HiddenKey VALUE_WRAPPER_IDENTIFIER = new HiddenKey("value_wrapper");
109108

110109
// Generated layouts

src/main/java/org/truffleruby/stdlib/ObjSpaceNodes.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -71,29 +71,6 @@ public int memsize(Object object) {
7171
}
7272
}
7373

74-
@CoreMethod(names = "sizer", isModuleFunction = true, required = 1)
75-
public abstract static class GetMemSizer extends CoreMethodArrayArgumentsNode {
76-
77-
@Child private ReadObjectFieldNode readSizerNode = ReadObjectFieldNodeGen.create(Layouts.MEMSIZER_IDENTIFIER, nil());
78-
79-
@Specialization
80-
public Object hasSizer(DynamicObject object) {
81-
return readSizerNode.execute(object);
82-
}
83-
}
84-
85-
@CoreMethod(names = "define_sizer", isModuleFunction = true, required = 2)
86-
public abstract static class DefineMemSizer extends CoreMethodArrayArgumentsNode {
87-
88-
@Child private WriteObjectFieldNode setSizerNode = WriteObjectFieldNodeGen.create(Layouts.MEMSIZER_IDENTIFIER);
89-
90-
@Specialization
91-
public DynamicObject defineSizer(DynamicObject object, DynamicObject sizer) {
92-
setSizerNode.write(object, sizer);
93-
return nil();
94-
}
95-
}
96-
9774
@CoreMethod(names = "adjacent_objects", isModuleFunction = true, required = 1)
9875
public abstract static class AdjacentObjectsNode extends CoreMethodArrayArgumentsNode {
9976

0 commit comments

Comments
 (0)