--- a/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Mon Mar 06 08:36:05 2017 -0800
+++ b/langtools/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java Mon Mar 06 08:57:41 2017 -0800
@@ -195,6 +195,7 @@
private boolean debug = false;
public boolean testPrompt = false;
private Startup startup = null;
+ private boolean isCurrentlyRunningStartup = false;
private String executionControlSpec = null;
private EditorSetting editor = BUILT_IN_EDITOR;
@@ -1019,7 +1020,19 @@
analysis = state.sourceCodeAnalysis();
live = true;
- startUpRun(startup.toString());
+ // Run the start-up script.
+ // Avoid an infinite loop running start-up while running start-up.
+ // This could, otherwise, occur when /env /reset or /reload commands are
+ // in the start-up script.
+ if (!isCurrentlyRunningStartup) {
+ try {
+ isCurrentlyRunningStartup = true;
+ startUpRun(startup.toString());
+ } finally {
+ isCurrentlyRunningStartup = false;
+ }
+ }
+ // Record subsequent snippets in the main namespace.
currentNameSpace = mainNamespace;
}