Skip to content
Snippets Groups Projects
Commit 5a95d188 authored by Lukas Stadler's avatar Lukas Stadler
Browse files

[GR-5808] Properly handle known and unknown arguments in Rscript.

PullRequest: fastr/1128
parents 84c205be 67fd3478
No related branches found
No related tags found
No related merge requests found
...@@ -27,6 +27,7 @@ import java.io.OutputStream; ...@@ -27,6 +27,7 @@ import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import org.graalvm.options.OptionCategory; import org.graalvm.options.OptionCategory;
...@@ -45,7 +46,7 @@ public class RscriptCommand { ...@@ -45,7 +46,7 @@ public class RscriptCommand {
// CheckStyle: stop system..print check // CheckStyle: stop system..print check
private static void preprocessRScriptOptions(RLauncher launcher, RCmdOptions options) { private static String[] preprocessRScriptOptions(RLauncher launcher, RCmdOptions options) {
String[] arguments = options.getArguments(); String[] arguments = options.getArguments();
int resultArgsLength = arguments.length; int resultArgsLength = arguments.length;
int firstNonOptionArgIndex = options.getFirstNonOptionArgIndex(); int firstNonOptionArgIndex = options.getFirstNonOptionArgIndex();
...@@ -65,9 +66,6 @@ public class RscriptCommand { ...@@ -65,9 +66,6 @@ public class RscriptCommand {
System.exit(1); System.exit(1);
} }
} else { } else {
if (arguments[firstNonOptionArgIndex].startsWith("-")) {
throw RCommand.fatal("file name is missing");
}
options.setValue(RCmdOption.FILE, arguments[firstNonOptionArgIndex]); options.setValue(RCmdOption.FILE, arguments[firstNonOptionArgIndex]);
} }
} }
...@@ -97,7 +95,7 @@ public class RscriptCommand { ...@@ -97,7 +95,7 @@ public class RscriptCommand {
adjArgs.add(arguments[rx++]); adjArgs.add(arguments[rx++]);
} }
} }
options.setArguments(adjArgs.toArray(new String[adjArgs.size()])); return adjArgs.toArray(new String[adjArgs.size()]);
} }
public static void main(String[] args) { public static void main(String[] args) {
...@@ -117,20 +115,21 @@ public class RscriptCommand { ...@@ -117,20 +115,21 @@ public class RscriptCommand {
} }
}; };
Map<String, String> polyglotOptions = new HashMap<>(); Map<String, String> polyglotOptions = new HashMap<>();
for (int i = 1; i < argsList.size(); i++) { Iterator<String> iter = argsList.iterator();
String arg = argsList.get(i); while (iter.hasNext()) {
String arg = iter.next();
if (launcher.parsePolyglotOption("R", polyglotOptions, arg)) { if (launcher.parsePolyglotOption("R", polyglotOptions, arg)) {
argsList.remove(i); iter.remove();
} }
} }
if (launcher.runPolyglotAction()) { if (launcher.runPolyglotAction()) {
return 0; return 0;
} }
RCmdOptions options = RCmdOptions.parseArguments(Client.RSCRIPT, argsList.toArray(new String[argsList.size()]), false); RCmdOptions options = RCmdOptions.parseArguments(Client.RSCRIPT, argsList.toArray(new String[argsList.size()]), false);
preprocessRScriptOptions(launcher, options); String[] arguments = preprocessRScriptOptions(launcher, options);
ConsoleHandler consoleHandler = RCommand.createConsoleHandler(options, false, inStream, outStream); ConsoleHandler consoleHandler = RCommand.createConsoleHandler(options, false, inStream, outStream);
try (Context context = Context.newBuilder().options(polyglotOptions).arguments("R", options.getArguments()).in(consoleHandler.createInputStream()).out(outStream).err(errStream).build()) { try (Context context = Context.newBuilder().options(polyglotOptions).arguments("R", arguments).in(consoleHandler.createInputStream()).out(outStream).err(errStream).build()) {
consoleHandler.setContext(context); consoleHandler.setContext(context);
return RCommand.readEvalPrint(context, consoleHandler); return RCommand.readEvalPrint(context, consoleHandler);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment