Skip to content

Commit d24f35d

Browse files
Alexey Bakhtingnu-andrew
authored andcommitted
8351422: Improve scripting supports
Reviewed-by: mbalao, andrew
1 parent 517df6c commit d24f35d

File tree

1 file changed

+42
-7
lines changed
  • nashorn/src/jdk/nashorn/internal/runtime/options

1 file changed

+42
-7
lines changed

nashorn/src/jdk/nashorn/internal/runtime/options/Options.java

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -416,16 +416,34 @@ public void displayHelp(final boolean extended) {
416416
* @param args arguments from command line
417417
*/
418418
public void process(final String[] args) {
419+
final LinkedList<String> prepArgList = new LinkedList<>();
420+
addSystemProperties(NASHORN_ARGS_PREPEND_PROPERTY, prepArgList);
421+
final LinkedList<String> postArgList = new LinkedList<>();
422+
addSystemProperties(NASHORN_ARGS_PROPERTY, postArgList);
419423
final LinkedList<String> argList = new LinkedList<>();
420-
addSystemProperties(NASHORN_ARGS_PREPEND_PROPERTY, argList);
421-
processArgList(argList);
422-
assert argList.isEmpty();
423-
Collections.addAll(argList, args);
424-
processArgList(argList);
425-
assert argList.isEmpty();
426-
addSystemProperties(NASHORN_ARGS_PROPERTY, argList);
424+
for (final String arg : args) {
425+
if (arg.startsWith(definePropPrefix)) {
426+
final String value = arg.substring(definePropPrefix.length());
427+
final int eq = value.indexOf('=');
428+
if (eq != -1) {
429+
String name = value.substring(0, eq);
430+
if (name.equals(NASHORN_ARGS_PREPEND_PROPERTY)) {
431+
addNashornProperties(value.substring(eq + 1), prepArgList, false);
432+
continue;
433+
} else if (name.equals(NASHORN_ARGS_PROPERTY)) {
434+
addNashornProperties(value.substring(eq + 1), postArgList, true);
435+
continue;
436+
}
437+
}
438+
}
439+
argList.add(arg);
440+
}
441+
processArgList(prepArgList);
442+
assert prepArgList.isEmpty();
427443
processArgList(argList);
428444
assert argList.isEmpty();
445+
processArgList(postArgList);
446+
assert postArgList.isEmpty();
429447
}
430448

431449
private void processArgList(final LinkedList<String> argList) {
@@ -519,6 +537,23 @@ private static void addSystemProperties(final String sysPropName, final List<Str
519537
}
520538
}
521539

540+
private static void addNashornProperties(final String args, final LinkedList<String> argList, boolean prepend) {
541+
if (args != null) {
542+
final StringTokenizer st = new StringTokenizer(args);
543+
final LinkedList<String> prepArgList = new LinkedList<>();
544+
while (st.hasMoreTokens()) {
545+
if (prepend) {
546+
prepArgList.add(st.nextToken());
547+
} else {
548+
argList.add(st.nextToken());
549+
}
550+
}
551+
if (prepend) {
552+
argList.addAll(0,prepArgList);
553+
}
554+
}
555+
}
556+
522557
/**
523558
* Retrieves an option template identified by key.
524559
* @param shortKey the short (that is without the e.g. "nashorn.option." part) key

0 commit comments

Comments
 (0)