0N/A/*
2362N/A * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
2362N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
2362N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Apackage com.sun.script.javascript;
0N/Aimport javax.script.*;
0N/Aimport sun.org.mozilla.javascript.internal.*;
0N/A
0N/A/**
0N/A * Represents compiled JavaScript code.
0N/A *
0N/A * @author Mike Grogan
0N/A * @since 1.6
0N/A */
0N/Afinal class RhinoCompiledScript extends CompiledScript {
0N/A
0N/A private RhinoScriptEngine engine;
0N/A private Script script;
0N/A
0N/A
0N/A RhinoCompiledScript(RhinoScriptEngine engine, Script script) {
0N/A this.engine = engine;
0N/A this.script = script;
0N/A }
0N/A
0N/A public Object eval(ScriptContext context) throws ScriptException {
0N/A
0N/A Object result = null;
0N/A Context cx = RhinoScriptEngine.enterContext();
0N/A try {
0N/A
0N/A Scriptable scope = engine.getRuntimeScope(context);
0N/A Object ret = script.exec(cx, scope);
0N/A result = engine.unwrapReturnValue(ret);
0N/A } catch (RhinoException re) {
0N/A int line = (line = re.lineNumber()) == 0 ? -1 : line;
0N/A String msg;
0N/A if (re instanceof JavaScriptException) {
0N/A msg = String.valueOf(((JavaScriptException)re).getValue());
0N/A } else {
0N/A msg = re.toString();
0N/A }
0N/A ScriptException se = new ScriptException(msg, re.sourceName(), line);
0N/A se.initCause(re);
0N/A throw se;
0N/A } finally {
0N/A Context.exit();
0N/A }
0N/A
0N/A return result;
0N/A }
0N/A
0N/A public ScriptEngine getEngine() {
0N/A return engine;
0N/A }
0N/A
0N/A}