Skip to content

Commit 463db3d

Browse files
committed
[Truffle] Delegate Kernel#trap to Signal#trap.
* Add a few specilizations (importing Rubinius code is not trivial).
1 parent 5df6bce commit 463db3d

File tree

4 files changed

+38
-8
lines changed

4 files changed

+38
-8
lines changed

spec/truffle/tags/core/kernel/trap_tags.txt

Lines changed: 0 additions & 2 deletions
This file was deleted.

truffle/src/main/java/org/jruby/truffle/nodes/core/SignalNodes.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,15 @@
1212
import com.oracle.truffle.api.Truffle;
1313
import com.oracle.truffle.api.dsl.Specialization;
1414
import com.oracle.truffle.api.source.SourceSection;
15+
1516
import org.jruby.common.IRubyWarnings;
1617
import org.jruby.truffle.runtime.RubyContext;
1718
import org.jruby.truffle.runtime.UndefinedPlaceholder;
1819
import org.jruby.truffle.runtime.core.RubyProc;
1920
import org.jruby.truffle.runtime.core.RubyString;
21+
import org.jruby.truffle.runtime.core.RubySymbol;
2022
import org.jruby.truffle.runtime.signal.ProcSignalHandler;
23+
2124
import sun.misc.Signal;
2225
import sun.misc.SignalHandler;
2326

@@ -36,10 +39,30 @@ public SignalNode(SignalNode prev) {
3639
}
3740

3841
@Specialization
39-
public Object trap(RubyString signalName, UndefinedPlaceholder command, final RubyProc block) {
42+
public Object trap(RubySymbol signalName, UndefinedPlaceholder command, RubyProc block) {
43+
return trap(signalName.toString(), block);
44+
}
45+
46+
@Specialization
47+
public Object trap(RubyString signalName, UndefinedPlaceholder command, RubyProc block) {
48+
return trap(signalName.toString(), block);
49+
}
50+
51+
@Specialization
52+
public Object trap(RubySymbol signalName, RubyProc proc, UndefinedPlaceholder block) {
53+
return trap(signalName.toString(), proc);
54+
}
55+
56+
@Specialization
57+
public Object trap(RubyString signalName, RubyProc proc, UndefinedPlaceholder block) {
58+
return trap(signalName.toString(), proc);
59+
}
60+
61+
@SuppressWarnings("restriction")
62+
private Object trap(String signalName, RubyProc block) {
4063
notDesignedForCompilation();
4164

42-
final Signal signal = new Signal(signalName.toString());
65+
final Signal signal = new Signal(signalName);
4366

4467
final SignalHandler newHandler = new ProcSignalHandler(getContext(), block);
4568
final SignalHandler oldHandler = Signal.handle(signal, newHandler);
@@ -51,8 +74,17 @@ public Object trap(RubyString signalName, UndefinedPlaceholder command, final Ru
5174
return getContext().getCoreLibrary().getNilObject();
5275
}
5376

77+
@Specialization
78+
public Object trap(RubySymbol signalName, RubyString command, UndefinedPlaceholder block) {
79+
return trap(signalName.toString(), command, block);
80+
}
81+
5482
@Specialization
5583
public Object trap(RubyString signalName, RubyString command, UndefinedPlaceholder block) {
84+
return trap(signalName.toString(), command, block);
85+
}
86+
87+
private Object trap(String signalName, RubyString command, UndefinedPlaceholder block) {
5688
notDesignedForCompilation();
5789
getContext().getRuntime().getWarnings().warn(IRubyWarnings.ID.TRUFFLE, Truffle.getRuntime().getCallerFrame().getCallNode().getEncapsulatingSourceSection().getSource().getName(), Truffle.getRuntime().getCallerFrame().getCallNode().getEncapsulatingSourceSection().getStartLine(), "Signal#trap with a string command not implemented yet");
5890
return getContext().getCoreLibrary().getNilObject();

truffle/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/kernel.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ def object_id
105105
raise PrimitiveFailure, "Kernel#object_id primitive failed"
106106
end
107107

108-
108+
def trap(sig, prc=nil, &block)
109+
Signal.trap(sig, prc, &block)
110+
end
111+
module_function :trap
109112

110113
end

truffle/src/main/ruby/jruby/truffle/core/shims.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,6 @@ def extended_modules(object)
154154
[]
155155
end
156156

157-
def trap(signal)
158-
end
159-
160157
end
161158

162159
class File

0 commit comments

Comments
 (0)