home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.io.CharArrayWriter;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.io.Reader;
- import java.io.StringReader;
- import java.lang.reflect.InvocationTargetException;
- import java.text.Format;
- import java.text.MessageFormat;
- import java.util.Hashtable;
- import java.util.Locale;
- import java.util.MissingResourceException;
- import java.util.ResourceBundle;
-
- public final class Context {
- public static final int VERSION_UNKNOWN = -1;
- public static final int VERSION_DEFAULT = 0;
- public static final int VERSION_1_0 = 100;
- public static final int VERSION_1_1 = 110;
- public static final int VERSION_1_2 = 120;
- public static final int VERSION_1_3 = 130;
- public static final int VERSION_1_4 = 140;
- static final String defaultResource = "com.netscape.javascript.resources.Messages";
- static final boolean printTrees = false;
- private static Class codegenClass;
- private static boolean requireSecurityDomain;
- static final boolean useJSObject = false;
- NativeCall currentActivation;
- Hashtable iterating;
- Object interpreterSecurityDomain;
- int version;
- int errorCount;
- private SecuritySupport securitySupport;
- private ErrorReporter errorReporter;
- private Thread currentThread;
- private static Hashtable threadContexts;
- private static ClassNameHelper nameHelper;
- private RegExpStatics regExpStatics;
- private Locale locale;
- private boolean generatingDebug;
- private boolean generatingSource;
- private int optimizationLevel;
- private SourceTextManager debug_stm;
- private DeepScriptHook debug_scriptHook;
- private DeepCallHook debug_callHook;
- private DeepExecuteHook debug_executeHook;
- private DeepNewObjectHook debug_newObjectHook;
- private DeepBytecodeHook debug_bytecodeHook;
- private DeepErrorReporterHook debug_errorReporterHook;
- private byte debugLevel;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$NativeFunction;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$NativeObject;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$NativeGlobal;
- // $FF: synthetic field
- private static Class class$com$netscape$javascript$Interpreter;
-
- public synchronized void enter() throws ThreadLinkException, InterruptedException {
- Thread var1 = Thread.currentThread();
-
- while(this.currentThread != null) {
- if (var1 == this.currentThread) {
- throw new ThreadLinkException("Context already associated with a Thread");
- }
-
- this.wait();
- }
-
- this.currentThread = var1;
- synchronized(threadContexts){}
-
- try {
- Context var2 = (Context)threadContexts.get(var1);
- if (var2 != null) {
- this.currentThread = null;
- throw new ThreadLinkException("Thread already associated with a Context");
- }
-
- threadContexts.put(var1, this);
- } catch (Throwable var6) {
- throw var6;
- }
-
- }
-
- public String getTargetPackage() {
- return nameHelper == null ? null : nameHelper.getTargetPackage();
- }
-
- public void setTargetPackage(String var1) {
- if (nameHelper != null) {
- nameHelper.setTargetPackage(var1);
- }
-
- }
-
- public static boolean toBoolean(Object var0) {
- return ScriptRuntime.toBoolean(var0);
- }
-
- public String getTargetClassFileName() {
- return nameHelper == null ? null : nameHelper.getTargetClassFileName();
- }
-
- public void setTargetClassFileName(String var1) {
- if (nameHelper != null) {
- nameHelper.setTargetClassFileName(var1);
- }
-
- }
-
- public Function compileFunction(Scriptable var1, String var2, String var3, int var4, Object var5) {
- StringReader var6 = new StringReader(var2);
-
- try {
- return (Function)this.compile(var1, var6, var3, var4, var5, true);
- } catch (IOException var7) {
- throw new RuntimeException();
- }
- }
-
- public String decompileScript(Script var1, Scriptable var2, int var3) {
- NativeScript var4 = (NativeScript)var1;
- var4.initScript(var2);
- return ((NativeFunction)var4).decompile(var3, true, false);
- }
-
- public Scriptable newObject(Scriptable var1) throws PropertyException, NotAFunctionException, JavaScriptException {
- return this.newObject(var1, "Object", (Object[])null);
- }
-
- public Scriptable newObject(Scriptable var1, String var2) throws PropertyException, NotAFunctionException, JavaScriptException {
- return this.newObject(var1, var2, (Object[])null);
- }
-
- public Scriptable newObject(Scriptable var1, String var2, Object[] var3) throws PropertyException, NotAFunctionException, JavaScriptException {
- Object var4 = var1.get(var2, var1);
- if (var4 == Scriptable.NOT_FOUND) {
- Object[] var8 = new Object[]{var2};
- String var9 = getMessage("msg.ctor.not.found", var8);
- throw new PropertyException(var9);
- } else if (!(var4 instanceof Function)) {
- Object[] var7 = new Object[]{var2};
- String var6 = getMessage("msg.not.ctor", var7);
- throw new NotAFunctionException(var6);
- } else {
- Function var5 = (Function)var4;
- return var5.construct(this, var5.getParentScope(), var3 == null ? ScriptRuntime.emptyArgs : var3);
- }
- }
-
- public void setGeneratingSource(boolean var1) {
- this.generatingSource = var1;
- }
-
- public Object getInterpreterSecurityDomain() {
- return this.interpreterSecurityDomain;
- }
-
- public DeepScriptHook getScriptHook() {
- return this.debug_scriptHook;
- }
-
- public static void reportError(String var0, String var1, int var2, String var3, int var4) {
- Context var5 = getCurrentContext();
- if (var5 != null) {
- ++var5.errorCount;
- var5.getErrorReporter().error(var0, var1, var2, var3, var4);
- } else {
- throw new EvaluatorException(var0);
- }
- }
-
- public static void reportError(String var0) {
- int[] var1 = new int[1];
- String var2 = getSourcePositionFromStack(var1);
- reportError(var0, var2, var1[0], (String)null, 0);
- }
-
- public boolean isGeneratingDebug() {
- return this.generatingDebug;
- }
-
- public DeepScriptHook setScriptHook(DeepScriptHook var1) {
- DeepScriptHook var2 = this.debug_scriptHook;
- this.debug_scriptHook = var1;
- return var2;
- }
-
- static String getMessage(String var0, Object[] var1) {
- Context var2 = getCurrentContext();
- Locale var3 = var2 != null ? var2.getLocale() : Locale.getDefault();
- ResourceBundle var4 = ResourceBundle.getBundle("com.netscape.javascript.resources.Messages", var3);
-
- String var5;
- try {
- var5 = var4.getString(var0);
- } catch (MissingResourceException var7) {
- throw new RuntimeException("no message resource found for message property " + var0);
- }
-
- MessageFormat var6 = new MessageFormat(var5);
- return ((Format)var6).format(var1);
- }
-
- Object getSecurityDomainForStackDepth(int var1) {
- Object var2 = null;
- if (this.securitySupport != null) {
- Class[] var3 = this.securitySupport.getClassContext();
- int var4 = var1 + 1;
- if (var4 >= 0 && var4 < var3.length) {
- var2 = this.getSecurityDomainFromClass(var3[var4]);
- }
- }
-
- if (var2 != null) {
- return var2;
- } else if (requireSecurityDomain) {
- throw new SecurityException("Required security context not found");
- } else {
- return null;
- }
- }
-
- public Scriptable initStandardObjects(ScriptableObject var1) {
- try {
- if (var1 == null) {
- var1 = new NativeObject();
- }
-
- ScriptableObject.defineClass((Scriptable)var1, class$com$netscape$javascript$NativeFunction != null ? class$com$netscape$javascript$NativeFunction : (class$com$netscape$javascript$NativeFunction = class$("com.netscape.javascript.NativeFunction")));
- ScriptableObject.defineClass((Scriptable)var1, class$com$netscape$javascript$NativeObject != null ? class$com$netscape$javascript$NativeObject : (class$com$netscape$javascript$NativeObject = class$("com.netscape.javascript.NativeObject")));
- Scriptable var2 = ScriptableObject.getObjectPrototype((Scriptable)var1);
- Scriptable var3 = ScriptableObject.getFunctionPrototype((Scriptable)var1);
- var3.setPrototype(var2);
- if (((ScriptableObject)var1).getPrototype() == null) {
- ((ScriptableObject)var1).setPrototype(var2);
- }
-
- ScriptableObject.defineClass((Scriptable)var1, class$com$netscape$javascript$NativeGlobal != null ? class$com$netscape$javascript$NativeGlobal : (class$com$netscape$javascript$NativeGlobal = class$("com.netscape.javascript.NativeGlobal")));
- String[] var4 = new String[]{"Array", "String", "Boolean", "Number", "Date", "Math", "Call", "Closure", "With", "RegExp", "Script"};
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- String var6 = "com.netscape.javascript.Native" + var4[var5];
- new LazilyLoadedConstructor((ScriptableObject)var1, var4[var5], var6, 2);
- }
-
- NativeJavaPackage.init((Scriptable)var1);
- return (Scriptable)var1;
- } catch (IllegalAccessException var7) {
- throw WrappedException.wrapException(var7);
- } catch (InstantiationException var8) {
- throw WrappedException.wrapException(var8);
- } catch (InvocationTargetException var9) {
- throw WrappedException.wrapException(var9);
- } catch (ClassDefinitionException var10) {
- throw WrappedException.wrapException(var10);
- } catch (PropertyException var11) {
- throw WrappedException.wrapException(var11);
- }
- }
-
- public Scriptable newArray(Scriptable var1, int var2) {
- NativeArray var3 = new NativeArray((long)var2);
- this.newArrayHelper(var1, var3);
- return var3;
- }
-
- public Scriptable newArray(Scriptable var1, Object[] var2) {
- NativeArray var3 = new NativeArray(var2);
- this.newArrayHelper(var1, var3);
- return var3;
- }
-
- public static void reportWarning(String var0, String var1, int var2, String var3, int var4) {
- Context var5 = getContext();
- var5.getErrorReporter().warning(var0, var1, var2, var3, var4);
- }
-
- public static void reportWarning(String var0) {
- int[] var1 = new int[1];
- String var2 = getSourcePositionFromStack(var1);
- reportWarning(var0, var2, var1[0], (String)null, 0);
- }
-
- public Object evaluateString(Scriptable var1, String var2, String var3, int var4, Object var5) throws JavaScriptException {
- try {
- StringReader var6 = new StringReader(var2);
- return this.evaluateReader(var1, var6, var3, var4, var5);
- } catch (IOException var7) {
- throw new RuntimeException();
- }
- }
-
- SecuritySupport getSecuritySupport() {
- return this.securitySupport;
- }
-
- public synchronized void exit() throws ThreadLinkException {
- Thread var1 = Thread.currentThread();
- if (var1 != this.currentThread) {
- throw new ThreadLinkException("Context is not associated with the current Thread");
- } else {
- threadContexts.remove(var1);
- this.currentThread = null;
- this.notify();
- }
- }
-
- public static Object getUndefinedValue() {
- return Undefined.instance;
- }
-
- public static String toString(Object var0) {
- return ScriptRuntime.toString(var0);
- }
-
- RegExpStatics getRegExpStatics() {
- if (this.regExpStatics == null) {
- this.regExpStatics = new RegExpStatics();
- }
-
- return this.regExpStatics;
- }
-
- public Locale getLocale() {
- if (this.locale == null) {
- this.locale = Locale.getDefault();
- }
-
- return this.locale;
- }
-
- public Locale setLocale(Locale var1) {
- Locale var2 = this.locale;
- this.locale = var1;
- return var2;
- }
-
- private Object compile(Scriptable var1, Reader var2, String var3, int var4, Object var5, boolean var6) throws IOException {
- TokenStream var7 = new TokenStream(var2, var3, var4);
- return this.compile(var1, var7, var5, var6);
- }
-
- private Object compile(Scriptable var1, TokenStream var2, Object var3, boolean var4) throws IOException {
- Interpreter var5 = null;
- if (this.optimizationLevel != -1 && codegenClass != null) {
- try {
- var5 = (Interpreter)codegenClass.newInstance();
- } catch (SecurityException var10) {
- } catch (IllegalArgumentException var11) {
- } catch (InstantiationException var12) {
- } catch (IllegalAccessException var13) {
- }
-
- if (var5 == null) {
- throw new RuntimeException("Malformed optimizer package");
- }
- } else {
- var5 = new Interpreter();
- }
-
- this.errorCount = 0;
- IRFactory var6 = var5.createIRFactory(var2, nameHelper);
- Parser var7 = new Parser(var6);
- Node var8 = (Node)var7.parse(var2);
- if (var8 == null) {
- return null;
- } else {
- var8 = var5.transform(var8, var2);
- if (var4) {
- Node var9 = var8.getFirstChild();
- if (var9 == null) {
- return null;
- }
-
- var8 = (Node)var9.getProp(5);
- if (var8 == null) {
- return null;
- }
- }
-
- return var5.compile(this, var1, var8, var3, this.securitySupport, nameHelper);
- }
- }
-
- public Object[] getElements(Scriptable var1) {
- double var2 = NativeArray.getLengthProperty(var1);
- if (var2 != var2) {
- return null;
- } else {
- int var4 = (int)var2;
- Object[] var5 = new Object[var4];
-
- for(int var6 = 0; var6 < var4; ++var6) {
- Object var7 = var1.get(var6, var1);
- var5[var6] = var7 == Scriptable.NOT_FOUND ? Undefined.instance : var7;
- }
-
- return var5;
- }
- }
-
- public static EvaluatorException reportRuntimeError(String var0, String var1, int var2, String var3, int var4) {
- Context var5 = getCurrentContext();
- if (var5 != null) {
- ++var5.errorCount;
- return var5.getErrorReporter().runtimeError(var0, var1, var2, var3, var4);
- } else {
- throw new EvaluatorException(var0);
- }
- }
-
- public static EvaluatorException reportRuntimeError(String var0) {
- int[] var1 = new int[1];
- String var2 = getSourcePositionFromStack(var1);
- return reportRuntimeError(var0, var2, var1[0], (String)null, 0);
- }
-
- // $FF: synthetic method
- private static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
-
- public int getLanguageVersion() {
- return this.version;
- }
-
- public void setLanguageVersion(int var1) {
- this.version = var1;
- }
-
- public Object evaluateReader(Scriptable var1, Reader var2, String var3, int var4, Object var5) throws IOException, JavaScriptException {
- Script var6 = this.compileReader(var1, var2, var3, var4, var5);
- return var6 != null ? var6.exec(this, var1) : null;
- }
-
- public static double toNumber(Object var0) {
- return ScriptRuntime.toNumber(var0);
- }
-
- public static Scriptable toObject(Object var0, Scriptable var1) {
- return ScriptRuntime.toObject(var1, var0);
- }
-
- public boolean isGeneratingSource() {
- return this.generatingSource;
- }
-
- public synchronized boolean stringIsCompilableUnit(String var1) {
- StringReader var2 = new StringReader(var1);
- TokenStream var3 = new TokenStream(var2, (String)null, 1);
- DeepErrorReporterHook var4 = this.setErrorReporterHook((DeepErrorReporterHook)null);
- ErrorReporter var5 = this.setErrorReporter(new DefaultErrorReporter());
- boolean var6 = false;
-
- try {
- IRFactory var7 = new IRFactory(var3);
- Parser var8 = new Parser(var7);
- var8.parse(var3);
- } catch (IOException var14) {
- var6 = true;
- } catch (EvaluatorException var15) {
- var6 = true;
- } finally {
- this.setErrorReporter(var5);
- this.setErrorReporterHook(var4);
- }
-
- return !var6 || !var3.eof();
- }
-
- public DeepCallHook getCallHook() {
- return this.debug_callHook;
- }
-
- public DeepCallHook setCallHook(DeepCallHook var1) {
- DeepCallHook var2 = this.debug_callHook;
- this.debug_callHook = var1;
- return var2;
- }
-
- public DeepNewObjectHook getNewObjectHook() {
- return this.debug_newObjectHook;
- }
-
- public DeepNewObjectHook setNewObjectHook(DeepNewObjectHook var1) {
- DeepNewObjectHook var2 = this.debug_newObjectHook;
- this.debug_newObjectHook = var1;
- return var2;
- }
-
- public DeepBytecodeHook getBytecodeHook() {
- return this.debug_bytecodeHook;
- }
-
- public DeepBytecodeHook setBytecodeHook(DeepBytecodeHook var1) {
- DeepBytecodeHook var2 = this.debug_bytecodeHook;
- this.debug_bytecodeHook = var1;
- return var2;
- }
-
- public DeepErrorReporterHook getErrorReporterHook() {
- return this.debug_errorReporterHook;
- }
-
- public DeepErrorReporterHook setErrorReporterHook(DeepErrorReporterHook var1) {
- DeepErrorReporterHook var2 = this.debug_errorReporterHook;
- this.debug_errorReporterHook = var1;
- return var2;
- }
-
- public String getImplementationVersion() {
- return "JavaScript-Java 1.4 release 2 1998 12 18";
- }
-
- static String getSourcePositionFromStack(int[] var0) {
- CharArrayWriter var1 = new CharArrayWriter();
- RuntimeException var2 = new RuntimeException();
- ((Throwable)var2).printStackTrace(new PrintWriter(var1));
- String var3 = var1.toString();
- int var4 = -1;
- int var5 = -1;
- int var6 = -1;
-
- for(int var7 = 0; var7 < var3.length(); ++var7) {
- char var8 = var3.charAt(var7);
- if (var8 == ':') {
- var6 = var7;
- } else if (var8 == '(') {
- var4 = var7;
- } else if (var8 == ')') {
- var5 = var7;
- } else if (var8 == '\n' && var4 != -1 && var5 != -1 && var6 != -1) {
- String var9 = var3.substring(var4 + 1, var6);
- if (var9.endsWith(".js")) {
- String var10 = var3.substring(var6 + 1, var5);
-
- try {
- var0[0] = Integer.parseInt(var10);
- return var9;
- } catch (NumberFormatException var11) {
- }
- }
-
- var6 = -1;
- var5 = -1;
- var4 = -1;
- }
- }
-
- return null;
- }
-
- public int getOptimizationLevel() {
- return this.optimizationLevel;
- }
-
- public void setOptimizationLevel(int var1) {
- if (var1 < 0) {
- var1 = -1;
- } else if (var1 > 9) {
- var1 = 9;
- }
-
- if (codegenClass == null) {
- var1 = -1;
- }
-
- this.optimizationLevel = var1;
- }
-
- public SourceTextManager getSourceTextManager() {
- return this.debug_stm;
- }
-
- public SourceTextManager setSourceTextManager(SourceTextManager var1) {
- SourceTextManager var2 = this.debug_stm;
- this.debug_stm = var1;
- return var2;
- }
-
- public static boolean isSecurityDomainRequired() {
- return requireSecurityDomain;
- }
-
- public ErrorReporter getErrorReporter() {
- if (this.debug_errorReporterHook != null) {
- return this.debug_errorReporterHook;
- } else {
- if (this.errorReporter == null) {
- this.errorReporter = new DefaultErrorReporter();
- }
-
- return this.errorReporter;
- }
- }
-
- public ErrorReporter setErrorReporter(ErrorReporter var1) {
- if (this.debug_errorReporterHook != null) {
- return this.debug_errorReporterHook.setErrorReporter(var1);
- } else {
- ErrorReporter var2 = this.errorReporter;
- this.errorReporter = var1;
- return var2;
- }
- }
-
- public DeepExecuteHook getExecuteHook() {
- return this.debug_executeHook;
- }
-
- public DeepExecuteHook setExecuteHook(DeepExecuteHook var1) {
- DeepExecuteHook var2 = this.debug_executeHook;
- this.debug_executeHook = var1;
- return var2;
- }
-
- public String decompileFunctionBody(Function var1, int var2) {
- return var1 instanceof NativeFunction ? ((NativeFunction)var1).decompile(var2, true, true) : "[native code]\n";
- }
-
- public Script compileReader(Scriptable var1, Reader var2, String var3, int var4, Object var5) throws IOException {
- return (Script)this.compile(var1, var2, var3, var4, var5, false);
- }
-
- public String decompileFunction(Function var1, int var2) {
- return var1 instanceof NativeFunction ? ((NativeFunction)var1).decompile(var2, true, false) : "function " + var1.getClassName() + "() {\n\t[native code]\n}\n";
- }
-
- public Context() {
- this.generatingSource = true;
- this.setLanguageVersion(0);
- this.generatingDebug = true;
- if (codegenClass != null) {
- this.optimizationLevel = 0;
- Object var1 = null;
-
- try {
- Class var2 = Class.forName("com.netscape.javascript.optimizer.OptClassNameHelper");
- nameHelper = (ClassNameHelper)var2.newInstance();
- } catch (ClassNotFoundException var3) {
- var1 = var3;
- } catch (IllegalAccessException var4) {
- var1 = var4;
- } catch (InstantiationException var5) {
- var1 = var5;
- }
-
- if (var1 != null) {
- throw new RuntimeException("Malformed optimizer package " + var1);
- }
- } else {
- this.optimizationLevel = -1;
- }
-
- }
-
- public Context(SecuritySupport var1) {
- this();
- this.securitySupport = var1;
- }
-
- public int getDebugLevel() {
- return this.debugLevel;
- }
-
- public void setGeneratingDebug(boolean var1) {
- if (var1) {
- this.setOptimizationLevel(0);
- }
-
- this.generatingDebug = var1;
- }
-
- public int setDebugLevel(int var1) {
- byte var2 = this.debugLevel;
- if (var1 < 0) {
- var1 = 0;
- } else if (var1 > 9) {
- var1 = 9;
- }
-
- if (var1 > 0) {
- this.setOptimizationLevel(0);
- }
-
- this.debugLevel = (byte)var1;
- return var2;
- }
-
- static {
- try {
- codegenClass = Class.forName("com.netscape.javascript.optimizer.Codegen");
- } catch (ClassNotFoundException var3) {
- codegenClass = null;
- }
-
- ResourceBundle var0 = ResourceBundle.getBundle("com.netscape.javascript.resources.Security");
-
- try {
- String var1 = var0.getString("security.requireSecurityDomain");
- requireSecurityDomain = var1.equals("true");
- } catch (MissingResourceException var2) {
- requireSecurityDomain = true;
- }
-
- threadContexts = new Hashtable(11);
- }
-
- public static Context getCurrentContext() {
- Thread var0 = Thread.currentThread();
- return (Context)threadContexts.get(var0);
- }
-
- private void newArrayHelper(Scriptable var1, Scriptable var2) {
- var2.setParentScope(var1);
- Object var3 = var1.get("Array", var1);
- if (var3 != null && var3 instanceof Scriptable) {
- Scriptable var4 = (Scriptable)var3;
- var2.setPrototype((Scriptable)var4.get("prototype", var4));
- }
-
- }
-
- final boolean isVersionECMA1() {
- return this.version == 0 || this.version >= 130;
- }
-
- public boolean isInterpreterClass(Class var1) {
- return var1 == (class$com$netscape$javascript$Interpreter != null ? class$com$netscape$javascript$Interpreter : (class$com$netscape$javascript$Interpreter = class$("com.netscape.javascript.Interpreter")));
- }
-
- static Context getContext() {
- Thread var0 = Thread.currentThread();
- Context var1 = (Context)threadContexts.get(var0);
- if (var1 == null) {
- throw new WrappedException(new ThreadLinkException("No Context associated with current Thread"));
- } else {
- return var1;
- }
- }
-
- Object getSecurityDomainFromClass(Class var1) {
- return var1 == (class$com$netscape$javascript$Interpreter != null ? class$com$netscape$javascript$Interpreter : (class$com$netscape$javascript$Interpreter = class$("com.netscape.javascript.Interpreter"))) ? this.interpreterSecurityDomain : this.securitySupport.getSecurityDomain(var1);
- }
- }
-