Skip to content

Commit 105216e

Browse files
committed
Move markers to DataHolder
1 parent 1467ba6 commit 105216e

File tree

4 files changed

+38
-9
lines changed

4 files changed

+38
-9
lines changed

lib/truffle/truffle/cext.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ module Truffle::CExt
1818
DATA_TYPE = Primitive.object_hidden_var_create :data_type
1919
DATA_HOLDER = Primitive.object_hidden_var_create :data_holder
2020
DATA_MEMSIZER = Primitive.object_hidden_var_create :data_memsizer
21-
DATA_MARKER = Primitive.object_hidden_var_create :data_marker
2221
RB_TYPE = Primitive.object_hidden_var_create :rb_type
2322
ALLOCATOR_FUNC = Primitive.object_hidden_var_create :allocator_func
2423
RB_IO_STRUCT = Primitive.object_hidden_var_create :rb_io_struct
@@ -1462,7 +1461,8 @@ def rb_set_end_proc(func, data)
14621461
end
14631462

14641463
def define_marker(object, marker)
1465-
Primitive.object_hidden_var_set object, DATA_MARKER, marker
1464+
data_holder = Primitive.object_hidden_var_get object, DATA_HOLDER
1465+
Primitive.data_holder_set_marker(data_holder, marker)
14661466
Primitive.cext_mark_object_on_call_exit(object) unless Truffle::Interop.null?(marker)
14671467
end
14681468

@@ -1497,10 +1497,10 @@ def rb_data_typed_object_wrap(ruby_class, data, data_type, mark, free, size)
14971497
def run_marker(obj)
14981498
Primitive.array_mark_store(obj) if Primitive.array_store_native?(obj)
14991499

1500-
mark = Primitive.object_hidden_var_get obj, DATA_MARKER
1500+
data_holder = Primitive.object_hidden_var_get obj, DATA_HOLDER
1501+
mark = Primitive.data_holder_get_marker(data_holder)
15011502
unless Truffle::Interop.null?(mark)
15021503
create_mark_list(obj)
1503-
data_holder = Primitive.object_hidden_var_get obj, DATA_HOLDER
15041504
data = Primitive.data_holder_get_data(data_holder)
15051505
# This call is done without pushing a new frame as the marking service manages frames itself.
15061506
mark.call(data) unless Truffle::Interop.null?(data)

lib/truffle/truffle/cext_structs.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def RDATA_PTR(object)
2929
raise TypeError, "wrong argument type #{object.class} (expected T_DATA)"
3030
end
3131

32-
Primitive.cext_mark_object_on_call_exit(object) unless Truffle::Interop.null?(Primitive.object_hidden_var_get(object, Truffle::CExt::DATA_MARKER))
32+
Primitive.cext_mark_object_on_call_exit(object) unless Truffle::Interop.null?(Primitive.data_holder_get_marker(data_holder))
3333
Primitive.data_holder_get_data(data_holder)
3434
end
3535

@@ -69,7 +69,7 @@ def polyglot_members(internal)
6969
def polyglot_read_member(name)
7070
case name
7171
when 'data'
72-
Primitive.cext_mark_object_on_call_exit(@object) unless Truffle::Interop.null?(Primitive.object_hidden_var_get(@object, Truffle::CExt::DATA_MARKER))
72+
Primitive.cext_mark_object_on_call_exit(@object) unless Truffle::Interop.null?(Primitive.data_holder_get_marker(@data_holder))
7373
Primitive.data_holder_get_data(@data_holder)
7474
when 'type'
7575
type
@@ -296,7 +296,7 @@ def polyglot_pointer?
296296
end
297297

298298
def polyglot_as_pointer
299-
Primitive.cext_mark_object_on_call_exit(@array) unless Truffle::Interop.null?(Primitive.object_hidden_var_get(@object, Truffle::CExt::DATA_MARKER))
299+
Primitive.cext_mark_object_on_call_exit(@array)
300300
Primitive.array_store_address(@array)
301301
end
302302

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2030,7 +2030,7 @@ public abstract static class DataHolderCreate extends PrimitiveArrayArgumentsNod
20302030

20312031
@Specialization
20322032
protected DataHolder create(Object address) {
2033-
return new DataHolder(address);
2033+
return new DataHolder(address, Pointer.NULL);
20342034
}
20352035
}
20362036

@@ -2053,6 +2053,25 @@ protected Object setData(DataHolder data, Object address) {
20532053
}
20542054
}
20552055

2056+
@Primitive(name = "data_holder_get_marker")
2057+
public abstract static class DataHolderGetMarker extends PrimitiveArrayArgumentsNode {
2058+
2059+
@Specialization
2060+
protected Object getMarker(DataHolder data) {
2061+
return data.getMarker();
2062+
}
2063+
}
2064+
2065+
@Primitive(name = "data_holder_set_marker")
2066+
public abstract static class DataHolderSetMarker extends PrimitiveArrayArgumentsNode {
2067+
2068+
@Specialization
2069+
protected Object setMarker(DataHolder data, Object marker) {
2070+
data.setMarker(marker);
2071+
return nil;
2072+
}
2073+
}
2074+
20562075
@Primitive(name = "data_holder_is_holder?")
20572076
public abstract static class DataHolderIsHolder extends PrimitiveArrayArgumentsNode {
20582077

src/main/java/org/truffleruby/cext/DataHolder.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
public final class DataHolder implements TruffleObject {
2525

2626
private Object pointer;
27+
private Object marker;
2728

28-
public DataHolder(Object address) {
29+
public DataHolder(Object address, Object marker) {
2930
this.pointer = address;
31+
this.marker = marker;
3032
}
3133

3234
public Object getPointer() {
@@ -37,6 +39,14 @@ public void setPointer(Object address) {
3739
this.pointer = address;
3840
}
3941

42+
public Object getMarker() {
43+
return marker;
44+
}
45+
46+
public void setMarker(Object marker) {
47+
this.marker = marker;
48+
}
49+
4050
@ExportMessage
4151
protected boolean hasLanguage() {
4252
return true;

0 commit comments

Comments
 (0)