/** * Main entry point. * * <p>Process arguments as would a normal Java program. Also create a new Context and associate it * with the current thread. Then set up the execution environment and begin to execute scripts. */ public static void exec(String args[], ErrorReporter reporter) { // Associate a new Context with this thread Context cx = Context.enter(); cx.setErrorReporter(reporter); try { // Initialize the standard objects (Object, Function, etc.) // This must be done before scripts can be executed. BasicRhinoShell BasicRhinoShell = new BasicRhinoShell(); cx.initStandardObjects(BasicRhinoShell); // Define some global functions particular to the BasicRhinoShell. // Note // that these functions are not part of ECMA. String[] names = {"print", "quit", "version", "load", "help", "readFile"}; BasicRhinoShell.defineFunctionProperties( names, BasicRhinoShell.class, ScriptableObject.DONTENUM); args = processOptions(cx, args); // Set up "arguments" in the global scope to contain the command // line arguments after the name of the script to execute Object[] array; if (args.length == 0) { array = new Object[0]; } else { int length = args.length - 1; array = new Object[length]; System.arraycopy(args, 1, array, 0, length); } Scriptable argsObj = cx.newArray(BasicRhinoShell, array); BasicRhinoShell.defineProperty("arguments", argsObj, ScriptableObject.DONTENUM); BasicRhinoShell.processSource(cx, args.length == 0 ? null : args[0]); } finally { Context.exit(); } }
/** * Load and execute a set of JavaScript source files. * * <p>This method is defined as a JavaScript function. */ public static void load(Context cx, Scriptable thisObj, Object[] args, Function funObj) { BasicRhinoShell BasicRhinoShell = (BasicRhinoShell) getTopLevelScope(thisObj); for (Object element : args) { BasicRhinoShell.processSource(cx, Context.toString(element)); } }