1212import com .oracle .truffle .api .Truffle ;
1313import com .oracle .truffle .api .dsl .Specialization ;
1414import com .oracle .truffle .api .source .SourceSection ;
15+
1516import org .jruby .common .IRubyWarnings ;
1617import org .jruby .truffle .runtime .RubyContext ;
1718import org .jruby .truffle .runtime .UndefinedPlaceholder ;
1819import org .jruby .truffle .runtime .core .RubyProc ;
1920import org .jruby .truffle .runtime .core .RubyString ;
21+ import org .jruby .truffle .runtime .core .RubySymbol ;
2022import org .jruby .truffle .runtime .signal .ProcSignalHandler ;
23+
2124import sun .misc .Signal ;
2225import 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 ();
0 commit comments