throw new IllegalArgumentException ("\n" + e + "\nUnable to open " + currentFileName) ;
throw new IllegalArgumentException( e + "\nUnable to open " + currentFileName) ;
    private void loadConfig(URL userConfig) {	InputStream inputStream = null ;	StreamTokenizer streamTokenizer = null ;	String lastFileName = currentFileName ;		currentFileName = userConfig.toString() ;	try {	    inputStream = userConfig.openStream() ;	    Reader r = new BufferedReader(new InputStreamReader(inputStream)) ;	    streamTokenizer = new StreamTokenizer(r) ;	}	catch (IOException e) {	    throw new IllegalArgumentException		("\n" + e + "\nUnable to open " + currentFileName) ;	}	//	// Set up syntax tables for the tokenizer.	// 	// It would be nice to allow '/' as a word constituent for URL strings	// and Unix paths, but then the scanner won't ignore "//" and "/* */"	// comment style syntax.  Treating '/' as an ordinary character will	// allow comments to work, but then '/' becomes a single token which	// has to be concatenated with subsequent tokens to reconstruct the	// original word string.	//	// It is cleaner to just require quoting for forward slashes.  '/'	// should still be treated as an ordinary character however, so that a	// non-quoted URL string or Unix path will be treated as a syntax	// error instead of a comment.	// 	streamTokenizer.ordinaryChar('/') ;	streamTokenizer.wordChars('_', '_') ;	streamTokenizer.wordChars('$', '$') ; // for ${...} Java property	streamTokenizer.wordChars('{', '}') ; // substitution in word tokens	streamTokenizer.slashSlashComments(true) ;	streamTokenizer.slashStarComments(true) ;	// Create an s-expression parser to use for all top-level (0) commands.	ConfigSexpression sexp = new ConfigSexpression() ;	// Loop through all top-level commands.  Boolean.FALSE is returned	// after the last one is evaluated.	while (sexp.parseAndEval(this, streamTokenizer, 0) != Boolean.FALSE) ;	// Close the input stream.	try {	    inputStream.close() ;	}	catch (IOException e) {	    throw new IllegalArgumentException		("\n" + e + "\nUnable to close " + currentFileName) ;	}	// Restore current file name.	currentFileName = lastFileName ;    }