Skip to content

Commit 49f40fa

Browse files
committed
Small tidy up.
1 parent 105216e commit 49f40fa

File tree

9 files changed

+25
-30
lines changed

9 files changed

+25
-30
lines changed

doc/contributor/cext-values.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ to the stack, and when the call exits that entry is popped off again.
5151

5252
We don't have a way to run markers when doing garbage collection, but
5353
we know we're keeping objects alive during the lifetime or a C call,
54-
and we can record when the structure is accessed (which should be
55-
required for the internal state of that structure to be mutated). To
56-
do this we keep a list of objects to be marked in a similar manner to
57-
the objects that should be kept alive, and when we exit the C call
58-
we'll call those markers.
54+
and we can record when the structure is accessed via DATA_PTR (which
55+
should be required for the internal state of that structure to be
56+
mutated). To do this we keep a list of objects to be marked in a
57+
similar manner to the objects that should be kept alive, and when we
58+
exit the C call we'll call those markers.
5959

6060
### Running mark functions
6161

lib/truffle/truffle/cext.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1502,7 +1502,6 @@ def run_marker(obj)
15021502
unless Truffle::Interop.null?(mark)
15031503
create_mark_list(obj)
15041504
data = Primitive.data_holder_get_data(data_holder)
1505-
# This call is done without pushing a new frame as the marking service manages frames itself.
15061505
mark.call(data) unless Truffle::Interop.null?(data)
15071506
set_mark_list_on_object(obj)
15081507
end

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

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.truffleruby.cext.UnwrapNode.UnwrapCArrayNode;
3535
import org.truffleruby.core.MarkingService.ExtensionCallStack;
3636
import org.truffleruby.core.MarkingServiceNodes;
37+
import org.truffleruby.core.MarkingServiceNodes.RunMarkOnExitNode;;
3738
import org.truffleruby.core.array.ArrayToObjectArrayNode;
3839
import org.truffleruby.core.array.ArrayUtils;
3940
import org.truffleruby.core.array.RubyArray;
@@ -164,17 +165,14 @@ private static long getNativeStringCapacity(Pointer pointer) {
164165
@Primitive(name = "call_with_c_mutex_and_frame")
165166
public abstract static class CallWithCExtLockAndFrameNode extends PrimitiveArrayArgumentsNode {
166167

167-
@Child protected MarkingServiceNodes.RunMarkOnExitNode runMarksNode = MarkingServiceNodes.RunMarkOnExitNode
168-
.create();
169-
170168
@Specialization(limit = "getCacheLimit()")
171169
protected Object callWithCExtLockAndFrame(
172170
VirtualFrame frame, Object receiver, RubyArray argsArray, Object specialVariables, Object block,
173171
@CachedLibrary("receiver") InteropLibrary receivers,
174172
@Cached ArrayToObjectArrayNode arrayToObjectArrayNode,
175173
@Cached TranslateInteropExceptionNode translateInteropExceptionNode,
176174
@Cached ConditionProfile ownedProfile,
177-
@Cached MarkingServiceNodes.RunMarkOnExitNode runMarksNode) {
175+
@Cached RunMarkOnExitNode runMarksNode) {
178176
final ExtensionCallStack extensionStack = getLanguage()
179177
.getCurrentThread()
180178
.getCurrentFiber().extensionCallStack;
@@ -219,17 +217,14 @@ protected int getCacheLimit() {
219217
@Primitive(name = "call_with_c_mutex_and_frame_and_unwrap")
220218
public abstract static class CallWithCExtLockAndFrameAndUnwrapNode extends PrimitiveArrayArgumentsNode {
221219

222-
@Child protected MarkingServiceNodes.RunMarkOnExitNode runMarksNode = MarkingServiceNodes.RunMarkOnExitNode
223-
.create();
224-
225220
@Specialization(limit = "getCacheLimit()")
226221
protected Object callWithCExtLockAndFrame(
227222
VirtualFrame frame, Object receiver, RubyArray argsArray, Object specialVariables, Object block,
228223
@CachedLibrary("receiver") InteropLibrary receivers,
229224
@Cached ArrayToObjectArrayNode arrayToObjectArrayNode,
230225
@Cached TranslateInteropExceptionNode translateInteropExceptionNode,
231226
@Cached ConditionProfile ownedProfile,
232-
@Cached MarkingServiceNodes.RunMarkOnExitNode runMarksNode,
227+
@Cached RunMarkOnExitNode runMarksNode,
233228
@Cached UnwrapNode unwrapNode) {
234229
final ExtensionCallStack extensionStack = getLanguage().getCurrentFiber().extensionCallStack;
235230
final boolean keywordsGiven = RubyArguments.getDescriptor(frame) instanceof KeywordArgumentsDescriptor;

src/main/java/org/truffleruby/core/MarkingServiceNodes.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,24 @@
1616

1717
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
1818
import com.oracle.truffle.api.dsl.Cached;
19+
import com.oracle.truffle.api.dsl.GenerateUncached;
1920
import com.oracle.truffle.api.dsl.Specialization;
2021

2122
public class MarkingServiceNodes {
2223

23-
public static class KeepAliveNode extends RubyBaseNode {
24+
@GenerateUncached
25+
public abstract static class KeepAliveNode extends RubyBaseNode {
2426

25-
public void execute(ValueWrapper object) {
27+
public abstract void execute(ValueWrapper object);
28+
29+
@Specialization
30+
protected void executeAddToList(ValueWrapper object) {
2631
addToList(getLanguage().getCurrentThread().getCurrentFiber().extensionCallStack, object);
2732
}
2833

2934
protected void addToList(ExtensionCallStack stack, ValueWrapper object) {
3035
stack.keepObject(object);
3136
}
32-
33-
public static KeepAliveNode create() {
34-
return new KeepAliveNode();
35-
}
36-
37-
public static KeepAliveNode getUncached() {
38-
return new KeepAliveNode();
39-
}
4037
}
4138

4239
public static class QueueForMarkOnExitNode extends RubyBaseNode {

src/main/java/org/truffleruby/core/array/ArrayToObjectArrayNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Object[] unsplat(Object[] arguments) {
3636
@Specialization(limit = "storageStrategyLimit()")
3737
protected Object[] toObjectArrayOther(RubyArray array,
3838
@Bind("array.getStore()") Object store,
39-
@Cached("createIdentityProfile()") IntValueProfile sizeProfile,
39+
@Cached IntValueProfile sizeProfile,
4040
@CachedLibrary("store") ArrayStoreLibrary stores) {
4141
final int size = sizeProfile.profile(array.size);
4242
return stores.boxedCopyOfRange(store, 0, size);

src/main/java/org/truffleruby/core/array/library/NativeArrayStorage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import com.oracle.truffle.api.CompilerDirectives;
1717
import com.oracle.truffle.api.TruffleSafepoint;
18+
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
1819
import com.oracle.truffle.api.profiles.ConditionProfile;
1920
import com.oracle.truffle.api.profiles.LoopConditionProfile;
2021
import org.truffleruby.cext.UnwrapNode;
@@ -296,6 +297,7 @@ public void getAdjacentObjects(Set<Object> reachable) {
296297
}
297298
}
298299

300+
@TruffleBoundary
299301
public void preserveMembers() {
300302
for (int i = 0; i < length; i++) {
301303
final Object value = UnwrapNativeNodeGen.getUncached().execute(readElement(i));

src/main/java/org/truffleruby/core/string/StringNodes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2572,7 +2572,8 @@ public abstract static class ToSymNode extends CoreMethodArrayArgumentsNode {
25722572
@Specialization(
25732573
guards = {
25742574
"!isBrokenCodeRange(tstring, encoding, codeRangeNode)",
2575-
"equalNode.execute(tstring, encoding, cachedTString, cachedEncoding)" },
2575+
"equalNode.execute(tstring, encoding, cachedTString, cachedEncoding)",
2576+
"preserveSymbol == cachedPreserveSymbol" },
25762577
limit = "getDefaultCacheLimit()")
25772578
protected RubySymbol toSymCached(Object string, boolean preserveSymbol,
25782579
@Cached RubyStringLibrary strings,

src/main/java/org/truffleruby/core/symbol/SymbolTable.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ public RubySymbol getSymbol(AbstractTruffleString tstring, RubyEncoding original
111111
// do not keep the other TString alive unnecessarily.
112112
var savedSymbol = symbolMap.addInCacheIfAbsent(new TStringWithEncoding(cachedTString, symbolEncoding),
113113
newSymbol);
114-
preservedSymbolMap.put(key, savedSymbol);
114+
if (preserveSymbol) {
115+
preservedSymbolMap.put(key, savedSymbol);
116+
}
115117
return savedSymbol;
116118
}
117119

src/main/ruby/truffleruby/core/string.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,10 @@ def include?(needle)
151151
Primitive.as_boolean(Primitive.find_string(self, StringValue(needle), 0))
152152
end
153153

154-
def intern
154+
def to_sym
155155
Primitive.string_to_symbol(self, false)
156156
end
157-
158-
alias_method :to_sym, :intern
157+
alias_method :intern, :to_sym
159158

160159
def lstrip
161160
str = Primitive.dup_as_string_instance(self)

0 commit comments

Comments
 (0)