Skip to content

Commit 65cfdad

Browse files
committed
Revert js launcher default languages to js only, but include wasm if --webassembly flag is set.
Fixes running `js` with --engine.SpawnIsolates=true. (cherry picked from commit 3b2c114)
1 parent 250f1ff commit 65cfdad

File tree

1 file changed

+25
-3
lines changed
  • graal-js/src/com.oracle.truffle.js.shell/src/com/oracle/truffle/js/shell

1 file changed

+25
-3
lines changed

graal-js/src/com.oracle.truffle.js.shell/src/com/oracle/truffle/js/shell/JSLauncher.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
import java.io.File;
4848
import java.io.IOException;
49+
import java.io.OutputStream;
4950
import java.io.PrintStream;
5051
import java.nio.charset.StandardCharsets;
5152
import java.nio.file.Files;
@@ -69,6 +70,7 @@
6970

7071
public class JSLauncher extends AbstractLanguageLauncher {
7172
static final String MODULE_MIME_TYPE = "application/javascript+module";
73+
private static final String WASM_LANGUAGE_ID = "wasm";
7274
private static final String PROMPT = "> ";
7375

7476
public static void main(String[] args) {
@@ -79,6 +81,7 @@ public static void main(String[] args) {
7981
private boolean fuzzilliREPRL = false;
8082
private boolean allowExperimentalOptions = false;
8183
private boolean useSharedEngine = false;
84+
private boolean wasmEnabled = false;
8285
private String[] programArgs;
8386
private final List<UnparsedSource> unparsedSources = new LinkedList<>();
8487
private VersionAction versionAction = VersionAction.None;
@@ -104,7 +107,11 @@ protected String getLanguageId() {
104107

105108
@Override
106109
protected String[] getDefaultLanguages() {
107-
return new String[0];
110+
if (wasmEnabled && isLanguageAvailable(WASM_LANGUAGE_ID)) {
111+
return new String[]{getLanguageId(), WASM_LANGUAGE_ID};
112+
} else {
113+
return super.getDefaultLanguages();
114+
}
108115
}
109116

110117
protected void preEval(@SuppressWarnings("unused") Context context) {
@@ -146,7 +153,8 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
146153

147154
String value;
148155
int equalsIndex = flag.indexOf('=');
149-
if (equalsIndex > 0) {
156+
boolean hasEquals = equalsIndex > 0;
157+
if (hasEquals) {
150158
value = flag.substring(equalsIndex + 1);
151159
flag = flag.substring(0, equalsIndex);
152160
} else if (iterator.hasNext()) {
@@ -162,8 +170,12 @@ protected List<String> preprocessArguments(List<String> arguments, Map<String, S
162170
throw abort("Missing argument for " + arg);
163171
}
164172

173+
if (flag.equals("js.webassembly") || flag.equals("webassembly")) {
174+
wasmEnabled = !hasEquals || "true".equals(value);
175+
}
176+
165177
unrecognizedOptions.add(arg);
166-
if (equalsIndex < 0 && value != null) {
178+
if (!hasEquals && value != null) {
167179
iterator.previous();
168180
}
169181
} else {
@@ -536,6 +548,16 @@ private static void printStackTraceSkipTrailingHost(PolyglotException e, StringB
536548
}
537549
}
538550

551+
private static boolean isLanguageAvailable(String languageId) {
552+
try (Engine tempEngine = Engine.newBuilder().useSystemProperties(false).//
553+
out(OutputStream.nullOutputStream()).//
554+
err(OutputStream.nullOutputStream()).//
555+
option("engine.WarnInterpreterOnly", "false").//
556+
build()) {
557+
return tempEngine.getLanguages().containsKey(languageId);
558+
}
559+
}
560+
539561
private enum SourceType {
540562
FILE,
541563
EVAL,

0 commit comments

Comments
 (0)