/** * Evaluates a script. * * @param script string representation of the script to evaluate. * @param sourceName the name of the evaluated script. * @return evaluated object. * @throws IOException if the script couldn't be retrieved. */ public Object evaluate(final String script, final String sourceName) { if (script == null) { throw new IllegalArgumentException("script cannot be null"); } try { return context.evaluateString(scope, script, sourceName, 1, null); } catch (final JavaScriptException e) { LOG.error("JavaScriptException occured: " + e.getMessage()); throw e; } }
/** * Evaluates a script from a reader. * * @param reader {@link Reader} of the script to evaluate. * @param sourceName the name of the evaluated script. * @return evaluated object. * @throws IOException if the script couldn't be retrieved. */ public Object evaluate(final Reader reader, final String sourceName) throws IOException { if (reader == null) { throw new IllegalArgumentException("reader cannot be null"); } try { return context.evaluateReader(scope, reader, sourceName, 1, null); } catch (final JavaScriptException e) { LOG.error("JavaScriptException occured: " + e.getMessage()); throw e; } finally { reader.close(); } }
/** * Evaluate JavaScript source. * * @param cx the current context * @param filename the name of the file to compile, or null for interactive mode. */ private void processSource(Context cx, String filename) { if (filename == null) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String sourceName = "<stdin>"; int lineno = 1; boolean hitEOF = false; do { int startline = lineno; System.err.print("js> "); System.err.flush(); try { String source = ""; // Collect lines of source to compile. while (true) { String newline; newline = in.readLine(); if (newline == null) { hitEOF = true; break; } source = source + newline + "\n"; lineno++; // Continue collecting as long as more lines // are needed to complete the current // statement. stringIsCompilableUnit is also // true if the source statement will result in // any error other than one that might be // resolved by appending more source. if (cx.stringIsCompilableUnit(source)) { break; } } Object result = cx.evaluateString(this, source, sourceName, startline, null); if (result != Context.getUndefinedValue()) { System.err.println(Context.toString(result)); } } catch (WrappedException we) { // Some form of exception was caught by JavaScript and // propagated up. System.err.println(we.getWrappedException().toString()); we.printStackTrace(); } catch (EvaluatorException ee) { // Some form of JavaScript error. System.err.println("js: " + ee.getMessage()); } catch (JavaScriptException jse) { // Some form of JavaScript error. System.err.println("js: " + jse.getMessage()); } catch (IOException ioe) { System.err.println(ioe.toString()); } if (quitting) { // The user executed the quit() function. break; } } while (!hitEOF); System.err.println(); } else { FileReader in = null; try { in = new FileReader(filename); } catch (FileNotFoundException ex) { Context.reportError("Couldn't open file \"" + filename + "\"."); return; } try { // Here we evalute the entire contents of the file as // a script. Text is printed only if the print() function // is called. cx.evaluateReader(this, in, filename, 1, null); } catch (WrappedException we) { System.err.println(we.getWrappedException().toString()); we.printStackTrace(); } catch (EvaluatorException ee) { System.err.println("js: " + ee.getMessage()); } catch (JavaScriptException jse) { System.err.println("js: " + jse.getMessage()); } catch (IOException ioe) { System.err.println(ioe.toString()); } finally { try { in.close(); } catch (IOException ioe) { System.err.println(ioe.toString()); } } } }