Skip to content

Commit 42363b2

Browse files
committed
[GR-14735] Do not suppress the stacktrace of internal exceptions
* Handle the -S case more simply. TopLevelRaiseHandler takes care of all RaiseException raised during `Truffle::Boot.main`. * PolyglotException#printStackTrace() also shows a nicely-formatted stacktrace, including guest-languages frames.
1 parent 916ca15 commit 42363b2

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/launcher/java/org/truffleruby/launcher/RubyLauncher.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.graalvm.polyglot.Engine;
1717
import org.graalvm.polyglot.PolyglotException;
1818
import org.graalvm.polyglot.Source;
19+
import org.graalvm.polyglot.Value;
1920
import org.truffleruby.shared.options.OptionsCatalog;
2021
import org.truffleruby.shared.TruffleRuby;
2122
import org.truffleruby.shared.Metrics;
@@ -209,7 +210,13 @@ private int runRubyMain(Context.Builder contextBuilder, CommandLineOptions confi
209210
TruffleRuby.BOOT_SOURCE_NAME).internal(true).buildLiteral();
210211

211212
config.executionAction = ExecutionAction.FILE;
212-
config.toExecute = context.eval(source).execute(config.toExecute).asString();
213+
final Value file = context.eval(source).execute(config.toExecute);
214+
if (file.isString()) {
215+
config.toExecute = file.asString();
216+
} else {
217+
System.err.println("truffleruby: No such file or directory -- " + config.toExecute + " (LoadError)");
218+
return 1;
219+
}
213220
}
214221

215222
final Source source = Source.newBuilder(TruffleRuby.LANGUAGE_ID,
@@ -222,7 +229,7 @@ private int runRubyMain(Context.Builder contextBuilder, CommandLineOptions confi
222229
Metrics.printTime("after-run");
223230
return exitCode;
224231
} catch (PolyglotException e) {
225-
System.err.println(TruffleRuby.SIMPLE_NAME + ": " + e.getMessage());
232+
e.printStackTrace();
226233
return 1;
227234
}
228235
}

src/main/ruby/truffleruby/core/truffle/boot.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ def self.find_s_file(name)
4444
path = find_in_environment_paths(name, ENV['PATH']) and return path
4545
return name if File.exist?(name)
4646

47-
# Fail otherwise
48-
raise LoadError, "No such file or directory -- #{name}"
47+
# Not found, let the RubyLauncher print the error
48+
nil
4949
end
5050

5151
def self.find_in_environment_paths(name, env_value)

0 commit comments

Comments
 (0)