@@ -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