@@ -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 ) {
@@ -529,6 +547,23 @@ private static void addSystemProperties(final String sysPropName, final List<Str
529547 }
530548 }
531549
550+ private static void addNashornProperties (final String args , final LinkedList <String > argList , boolean prepend ) {
551+ if (args != null ) {
552+ final StringTokenizer st = new StringTokenizer (args );
553+ final LinkedList <String > prepArgList = new LinkedList <>();
554+ while (st .hasMoreTokens ()) {
555+ if (prepend ) {
556+ prepArgList .add (st .nextToken ());
557+ } else {
558+ argList .add (st .nextToken ());
559+ }
560+ }
561+ if (prepend ) {
562+ argList .addAll (0 ,prepArgList );
563+ }
564+ }
565+ }
566+
532567 /**
533568 * Retrieves an option template identified by key.
534569 * @param shortKey the short (that is without the e.g. "nashorn.option." part) key
0 commit comments