home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.bsf.engines.javascript;
-
- import com.ibm.bsf.BSFDeclaredBean;
- import com.ibm.bsf.BSFException;
- import com.ibm.bsf.BSFManager;
- import com.ibm.bsf.util.BSFEngineImpl;
- import com.ibm.bsf.util.BSFFunctions;
- import java.util.Vector;
- import org.mozilla.javascript.Context;
- import org.mozilla.javascript.EvaluatorException;
- import org.mozilla.javascript.JavaScriptException;
- import org.mozilla.javascript.ScriptRuntime;
- import org.mozilla.javascript.Scriptable;
- import org.mozilla.javascript.ScriptableObject;
- import org.mozilla.javascript.WrappedException;
- import org.mozilla.javascript.Wrapper;
-
- public class JavaScriptEngine extends BSFEngineImpl {
- private Scriptable global;
- // $FF: renamed from: cx org.mozilla.javascript.Context
- private Context field_0;
-
- public void initialize(BSFManager var1, String var2, Vector var3) throws BSFException {
- super.initialize(var1, var2, var3);
-
- try {
- this.field_0 = new Context();
- Context.enter();
- this.global = this.field_0.initStandardObjects((ScriptableObject)null);
- this.global.put("bsf", this.global, new BSFFunctions(var1, this));
- } finally {
- if (this.field_0 != null) {
- this.field_0.exit();
- }
-
- }
-
- int var4 = var3.size();
-
- for(int var5 = 0; var5 < var4; ++var5) {
- this.declareBean((BSFDeclaredBean)var3.elementAt(var5));
- }
-
- }
-
- public Object eval(String var1, int var2, int var3, Object var4) throws BSFException {
- String var5 = var4.toString();
- Object var6 = null;
-
- try {
- Context.enter();
- var6 = this.field_0.evaluateString(this.global, var5, var1, var2, (Object)null);
- } catch (Throwable var12) {
- this.handleError(var12);
- } finally {
- this.field_0.exit();
- }
-
- return var6;
- }
-
- public Object call(Object var1, String var2, Object[] var3) throws BSFException {
- Object var4 = null;
-
- try {
- Context.enter();
- Object var7 = this.global.get(var2, this.global);
- if (var7 == Scriptable.NOT_FOUND) {
- throw new JavaScriptException("function " + var2 + " not found.");
- }
-
- var4 = ScriptRuntime.call(this.field_0, var7, this.global, var3);
- if (var4 instanceof Wrapper) {
- var4 = ((Wrapper)var4).unwrap();
- }
- } catch (Throwable var10) {
- this.handleError(var10);
- } finally {
- this.field_0.exit();
- }
-
- return var4;
- }
-
- public void declareBean(BSFDeclaredBean var1) throws BSFException {
- this.global.put(var1.name, this.global, var1.bean);
- }
-
- public void undeclareBean(BSFDeclaredBean var1) throws BSFException {
- this.global.put(var1.name, this.global, (Object)null);
- }
-
- private void handleError(Throwable var1) throws BSFException {
- if (var1 instanceof WrappedException) {
- var1 = (Throwable)((WrappedException)var1).unwrap();
- }
-
- String var2 = null;
- Throwable var3 = null;
- if (var1 instanceof JavaScriptException) {
- var2 = var1.getLocalizedMessage();
- Object var4 = ((JavaScriptException)var1).getValue();
- if (var4 instanceof Throwable) {
- var3 = (Throwable)var4;
- }
- } else if (!(var1 instanceof EvaluatorException) && !(var1 instanceof SecurityException)) {
- if (var1 instanceof RuntimeException) {
- var2 = "Internal Error: " + var1.toString();
- var3 = var1;
- } else if (var1 instanceof StackOverflowError) {
- var2 = "Stack Overflow";
- } else {
- var3 = var1;
- }
- } else {
- var2 = var1.getLocalizedMessage();
- }
-
- if (var2 == null) {
- var2 = var1.toString();
- }
-
- if (var1 instanceof Error && !(var1 instanceof StackOverflowError)) {
- throw (Error)var1;
- } else {
- throw new BSFException(BSFException.REASON_OTHER_ERROR, "JavaScript Error: " + var2, var3);
- }
- }
- }
-