home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / netscape / javascript / Context.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-09  |  18.8 KB  |  755 lines

  1. package com.netscape.javascript;
  2.  
  3. import java.io.CharArrayWriter;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6. import java.io.Reader;
  7. import java.io.StringReader;
  8. import java.lang.reflect.InvocationTargetException;
  9. import java.text.Format;
  10. import java.text.MessageFormat;
  11. import java.util.Hashtable;
  12. import java.util.Locale;
  13. import java.util.MissingResourceException;
  14. import java.util.ResourceBundle;
  15.  
  16. public final class Context {
  17.    public static final int VERSION_UNKNOWN = -1;
  18.    public static final int VERSION_DEFAULT = 0;
  19.    public static final int VERSION_1_0 = 100;
  20.    public static final int VERSION_1_1 = 110;
  21.    public static final int VERSION_1_2 = 120;
  22.    public static final int VERSION_1_3 = 130;
  23.    public static final int VERSION_1_4 = 140;
  24.    static final String defaultResource = "com.netscape.javascript.resources.Messages";
  25.    static final boolean printTrees = false;
  26.    private static Class codegenClass;
  27.    private static boolean requireSecurityDomain;
  28.    static final boolean useJSObject = false;
  29.    NativeCall currentActivation;
  30.    Hashtable iterating;
  31.    Object interpreterSecurityDomain;
  32.    int version;
  33.    int errorCount;
  34.    private SecuritySupport securitySupport;
  35.    private ErrorReporter errorReporter;
  36.    private Thread currentThread;
  37.    private static Hashtable threadContexts;
  38.    private static ClassNameHelper nameHelper;
  39.    private RegExpStatics regExpStatics;
  40.    private Locale locale;
  41.    private boolean generatingDebug;
  42.    private boolean generatingSource;
  43.    private int optimizationLevel;
  44.    private SourceTextManager debug_stm;
  45.    private DeepScriptHook debug_scriptHook;
  46.    private DeepCallHook debug_callHook;
  47.    private DeepExecuteHook debug_executeHook;
  48.    private DeepNewObjectHook debug_newObjectHook;
  49.    private DeepBytecodeHook debug_bytecodeHook;
  50.    private DeepErrorReporterHook debug_errorReporterHook;
  51.    private byte debugLevel;
  52.    // $FF: synthetic field
  53.    private static Class class$com$netscape$javascript$NativeFunction;
  54.    // $FF: synthetic field
  55.    private static Class class$com$netscape$javascript$NativeObject;
  56.    // $FF: synthetic field
  57.    private static Class class$com$netscape$javascript$NativeGlobal;
  58.    // $FF: synthetic field
  59.    private static Class class$com$netscape$javascript$Interpreter;
  60.  
  61.    public synchronized void enter() throws ThreadLinkException, InterruptedException {
  62.       Thread var1 = Thread.currentThread();
  63.  
  64.       while(this.currentThread != null) {
  65.          if (var1 == this.currentThread) {
  66.             throw new ThreadLinkException("Context already associated with a Thread");
  67.          }
  68.  
  69.          this.wait();
  70.       }
  71.  
  72.       this.currentThread = var1;
  73.       synchronized(threadContexts){}
  74.  
  75.       try {
  76.          Context var2 = (Context)threadContexts.get(var1);
  77.          if (var2 != null) {
  78.             this.currentThread = null;
  79.             throw new ThreadLinkException("Thread already associated with a Context");
  80.          }
  81.  
  82.          threadContexts.put(var1, this);
  83.       } catch (Throwable var6) {
  84.          throw var6;
  85.       }
  86.  
  87.    }
  88.  
  89.    public String getTargetPackage() {
  90.       return nameHelper == null ? null : nameHelper.getTargetPackage();
  91.    }
  92.  
  93.    public void setTargetPackage(String var1) {
  94.       if (nameHelper != null) {
  95.          nameHelper.setTargetPackage(var1);
  96.       }
  97.  
  98.    }
  99.  
  100.    public static boolean toBoolean(Object var0) {
  101.       return ScriptRuntime.toBoolean(var0);
  102.    }
  103.  
  104.    public String getTargetClassFileName() {
  105.       return nameHelper == null ? null : nameHelper.getTargetClassFileName();
  106.    }
  107.  
  108.    public void setTargetClassFileName(String var1) {
  109.       if (nameHelper != null) {
  110.          nameHelper.setTargetClassFileName(var1);
  111.       }
  112.  
  113.    }
  114.  
  115.    public Function compileFunction(Scriptable var1, String var2, String var3, int var4, Object var5) {
  116.       StringReader var6 = new StringReader(var2);
  117.  
  118.       try {
  119.          return (Function)this.compile(var1, var6, var3, var4, var5, true);
  120.       } catch (IOException var7) {
  121.          throw new RuntimeException();
  122.       }
  123.    }
  124.  
  125.    public String decompileScript(Script var1, Scriptable var2, int var3) {
  126.       NativeScript var4 = (NativeScript)var1;
  127.       var4.initScript(var2);
  128.       return ((NativeFunction)var4).decompile(var3, true, false);
  129.    }
  130.  
  131.    public Scriptable newObject(Scriptable var1) throws PropertyException, NotAFunctionException, JavaScriptException {
  132.       return this.newObject(var1, "Object", (Object[])null);
  133.    }
  134.  
  135.    public Scriptable newObject(Scriptable var1, String var2) throws PropertyException, NotAFunctionException, JavaScriptException {
  136.       return this.newObject(var1, var2, (Object[])null);
  137.    }
  138.  
  139.    public Scriptable newObject(Scriptable var1, String var2, Object[] var3) throws PropertyException, NotAFunctionException, JavaScriptException {
  140.       Object var4 = var1.get(var2, var1);
  141.       if (var4 == Scriptable.NOT_FOUND) {
  142.          Object[] var8 = new Object[]{var2};
  143.          String var9 = getMessage("msg.ctor.not.found", var8);
  144.          throw new PropertyException(var9);
  145.       } else if (!(var4 instanceof Function)) {
  146.          Object[] var7 = new Object[]{var2};
  147.          String var6 = getMessage("msg.not.ctor", var7);
  148.          throw new NotAFunctionException(var6);
  149.       } else {
  150.          Function var5 = (Function)var4;
  151.          return var5.construct(this, var5.getParentScope(), var3 == null ? ScriptRuntime.emptyArgs : var3);
  152.       }
  153.    }
  154.  
  155.    public void setGeneratingSource(boolean var1) {
  156.       this.generatingSource = var1;
  157.    }
  158.  
  159.    public Object getInterpreterSecurityDomain() {
  160.       return this.interpreterSecurityDomain;
  161.    }
  162.  
  163.    public DeepScriptHook getScriptHook() {
  164.       return this.debug_scriptHook;
  165.    }
  166.  
  167.    public static void reportError(String var0, String var1, int var2, String var3, int var4) {
  168.       Context var5 = getCurrentContext();
  169.       if (var5 != null) {
  170.          ++var5.errorCount;
  171.          var5.getErrorReporter().error(var0, var1, var2, var3, var4);
  172.       } else {
  173.          throw new EvaluatorException(var0);
  174.       }
  175.    }
  176.  
  177.    public static void reportError(String var0) {
  178.       int[] var1 = new int[1];
  179.       String var2 = getSourcePositionFromStack(var1);
  180.       reportError(var0, var2, var1[0], (String)null, 0);
  181.    }
  182.  
  183.    public boolean isGeneratingDebug() {
  184.       return this.generatingDebug;
  185.    }
  186.  
  187.    public DeepScriptHook setScriptHook(DeepScriptHook var1) {
  188.       DeepScriptHook var2 = this.debug_scriptHook;
  189.       this.debug_scriptHook = var1;
  190.       return var2;
  191.    }
  192.  
  193.    static String getMessage(String var0, Object[] var1) {
  194.       Context var2 = getCurrentContext();
  195.       Locale var3 = var2 != null ? var2.getLocale() : Locale.getDefault();
  196.       ResourceBundle var4 = ResourceBundle.getBundle("com.netscape.javascript.resources.Messages", var3);
  197.  
  198.       String var5;
  199.       try {
  200.          var5 = var4.getString(var0);
  201.       } catch (MissingResourceException var7) {
  202.          throw new RuntimeException("no message resource found for message property " + var0);
  203.       }
  204.  
  205.       MessageFormat var6 = new MessageFormat(var5);
  206.       return ((Format)var6).format(var1);
  207.    }
  208.  
  209.    Object getSecurityDomainForStackDepth(int var1) {
  210.       Object var2 = null;
  211.       if (this.securitySupport != null) {
  212.          Class[] var3 = this.securitySupport.getClassContext();
  213.          int var4 = var1 + 1;
  214.          if (var4 >= 0 && var4 < var3.length) {
  215.             var2 = this.getSecurityDomainFromClass(var3[var4]);
  216.          }
  217.       }
  218.  
  219.       if (var2 != null) {
  220.          return var2;
  221.       } else if (requireSecurityDomain) {
  222.          throw new SecurityException("Required security context not found");
  223.       } else {
  224.          return null;
  225.       }
  226.    }
  227.  
  228.    public Scriptable initStandardObjects(ScriptableObject var1) {
  229.       try {
  230.          if (var1 == null) {
  231.             var1 = new NativeObject();
  232.          }
  233.  
  234.          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")));
  235.          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")));
  236.          Scriptable var2 = ScriptableObject.getObjectPrototype((Scriptable)var1);
  237.          Scriptable var3 = ScriptableObject.getFunctionPrototype((Scriptable)var1);
  238.          var3.setPrototype(var2);
  239.          if (((ScriptableObject)var1).getPrototype() == null) {
  240.             ((ScriptableObject)var1).setPrototype(var2);
  241.          }
  242.  
  243.          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")));
  244.          String[] var4 = new String[]{"Array", "String", "Boolean", "Number", "Date", "Math", "Call", "Closure", "With", "RegExp", "Script"};
  245.  
  246.          for(int var5 = 0; var5 < var4.length; ++var5) {
  247.             String var6 = "com.netscape.javascript.Native" + var4[var5];
  248.             new LazilyLoadedConstructor((ScriptableObject)var1, var4[var5], var6, 2);
  249.          }
  250.  
  251.          NativeJavaPackage.init((Scriptable)var1);
  252.          return (Scriptable)var1;
  253.       } catch (IllegalAccessException var7) {
  254.          throw WrappedException.wrapException(var7);
  255.       } catch (InstantiationException var8) {
  256.          throw WrappedException.wrapException(var8);
  257.       } catch (InvocationTargetException var9) {
  258.          throw WrappedException.wrapException(var9);
  259.       } catch (ClassDefinitionException var10) {
  260.          throw WrappedException.wrapException(var10);
  261.       } catch (PropertyException var11) {
  262.          throw WrappedException.wrapException(var11);
  263.       }
  264.    }
  265.  
  266.    public Scriptable newArray(Scriptable var1, int var2) {
  267.       NativeArray var3 = new NativeArray((long)var2);
  268.       this.newArrayHelper(var1, var3);
  269.       return var3;
  270.    }
  271.  
  272.    public Scriptable newArray(Scriptable var1, Object[] var2) {
  273.       NativeArray var3 = new NativeArray(var2);
  274.       this.newArrayHelper(var1, var3);
  275.       return var3;
  276.    }
  277.  
  278.    public static void reportWarning(String var0, String var1, int var2, String var3, int var4) {
  279.       Context var5 = getContext();
  280.       var5.getErrorReporter().warning(var0, var1, var2, var3, var4);
  281.    }
  282.  
  283.    public static void reportWarning(String var0) {
  284.       int[] var1 = new int[1];
  285.       String var2 = getSourcePositionFromStack(var1);
  286.       reportWarning(var0, var2, var1[0], (String)null, 0);
  287.    }
  288.  
  289.    public Object evaluateString(Scriptable var1, String var2, String var3, int var4, Object var5) throws JavaScriptException {
  290.       try {
  291.          StringReader var6 = new StringReader(var2);
  292.          return this.evaluateReader(var1, var6, var3, var4, var5);
  293.       } catch (IOException var7) {
  294.          throw new RuntimeException();
  295.       }
  296.    }
  297.  
  298.    SecuritySupport getSecuritySupport() {
  299.       return this.securitySupport;
  300.    }
  301.  
  302.    public synchronized void exit() throws ThreadLinkException {
  303.       Thread var1 = Thread.currentThread();
  304.       if (var1 != this.currentThread) {
  305.          throw new ThreadLinkException("Context is not associated with the current Thread");
  306.       } else {
  307.          threadContexts.remove(var1);
  308.          this.currentThread = null;
  309.          this.notify();
  310.       }
  311.    }
  312.  
  313.    public static Object getUndefinedValue() {
  314.       return Undefined.instance;
  315.    }
  316.  
  317.    public static String toString(Object var0) {
  318.       return ScriptRuntime.toString(var0);
  319.    }
  320.  
  321.    RegExpStatics getRegExpStatics() {
  322.       if (this.regExpStatics == null) {
  323.          this.regExpStatics = new RegExpStatics();
  324.       }
  325.  
  326.       return this.regExpStatics;
  327.    }
  328.  
  329.    public Locale getLocale() {
  330.       if (this.locale == null) {
  331.          this.locale = Locale.getDefault();
  332.       }
  333.  
  334.       return this.locale;
  335.    }
  336.  
  337.    public Locale setLocale(Locale var1) {
  338.       Locale var2 = this.locale;
  339.       this.locale = var1;
  340.       return var2;
  341.    }
  342.  
  343.    private Object compile(Scriptable var1, Reader var2, String var3, int var4, Object var5, boolean var6) throws IOException {
  344.       TokenStream var7 = new TokenStream(var2, var3, var4);
  345.       return this.compile(var1, var7, var5, var6);
  346.    }
  347.  
  348.    private Object compile(Scriptable var1, TokenStream var2, Object var3, boolean var4) throws IOException {
  349.       Interpreter var5 = null;
  350.       if (this.optimizationLevel != -1 && codegenClass != null) {
  351.          try {
  352.             var5 = (Interpreter)codegenClass.newInstance();
  353.          } catch (SecurityException var10) {
  354.          } catch (IllegalArgumentException var11) {
  355.          } catch (InstantiationException var12) {
  356.          } catch (IllegalAccessException var13) {
  357.          }
  358.  
  359.          if (var5 == null) {
  360.             throw new RuntimeException("Malformed optimizer package");
  361.          }
  362.       } else {
  363.          var5 = new Interpreter();
  364.       }
  365.  
  366.       this.errorCount = 0;
  367.       IRFactory var6 = var5.createIRFactory(var2, nameHelper);
  368.       Parser var7 = new Parser(var6);
  369.       Node var8 = (Node)var7.parse(var2);
  370.       if (var8 == null) {
  371.          return null;
  372.       } else {
  373.          var8 = var5.transform(var8, var2);
  374.          if (var4) {
  375.             Node var9 = var8.getFirstChild();
  376.             if (var9 == null) {
  377.                return null;
  378.             }
  379.  
  380.             var8 = (Node)var9.getProp(5);
  381.             if (var8 == null) {
  382.                return null;
  383.             }
  384.          }
  385.  
  386.          return var5.compile(this, var1, var8, var3, this.securitySupport, nameHelper);
  387.       }
  388.    }
  389.  
  390.    public Object[] getElements(Scriptable var1) {
  391.       double var2 = NativeArray.getLengthProperty(var1);
  392.       if (var2 != var2) {
  393.          return null;
  394.       } else {
  395.          int var4 = (int)var2;
  396.          Object[] var5 = new Object[var4];
  397.  
  398.          for(int var6 = 0; var6 < var4; ++var6) {
  399.             Object var7 = var1.get(var6, var1);
  400.             var5[var6] = var7 == Scriptable.NOT_FOUND ? Undefined.instance : var7;
  401.          }
  402.  
  403.          return var5;
  404.       }
  405.    }
  406.  
  407.    public static EvaluatorException reportRuntimeError(String var0, String var1, int var2, String var3, int var4) {
  408.       Context var5 = getCurrentContext();
  409.       if (var5 != null) {
  410.          ++var5.errorCount;
  411.          return var5.getErrorReporter().runtimeError(var0, var1, var2, var3, var4);
  412.       } else {
  413.          throw new EvaluatorException(var0);
  414.       }
  415.    }
  416.  
  417.    public static EvaluatorException reportRuntimeError(String var0) {
  418.       int[] var1 = new int[1];
  419.       String var2 = getSourcePositionFromStack(var1);
  420.       return reportRuntimeError(var0, var2, var1[0], (String)null, 0);
  421.    }
  422.  
  423.    // $FF: synthetic method
  424.    private static Class class$(String var0) {
  425.       try {
  426.          return Class.forName(var0);
  427.       } catch (ClassNotFoundException var2) {
  428.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  429.       }
  430.    }
  431.  
  432.    public int getLanguageVersion() {
  433.       return this.version;
  434.    }
  435.  
  436.    public void setLanguageVersion(int var1) {
  437.       this.version = var1;
  438.    }
  439.  
  440.    public Object evaluateReader(Scriptable var1, Reader var2, String var3, int var4, Object var5) throws IOException, JavaScriptException {
  441.       Script var6 = this.compileReader(var1, var2, var3, var4, var5);
  442.       return var6 != null ? var6.exec(this, var1) : null;
  443.    }
  444.  
  445.    public static double toNumber(Object var0) {
  446.       return ScriptRuntime.toNumber(var0);
  447.    }
  448.  
  449.    public static Scriptable toObject(Object var0, Scriptable var1) {
  450.       return ScriptRuntime.toObject(var1, var0);
  451.    }
  452.  
  453.    public boolean isGeneratingSource() {
  454.       return this.generatingSource;
  455.    }
  456.  
  457.    public synchronized boolean stringIsCompilableUnit(String var1) {
  458.       StringReader var2 = new StringReader(var1);
  459.       TokenStream var3 = new TokenStream(var2, (String)null, 1);
  460.       DeepErrorReporterHook var4 = this.setErrorReporterHook((DeepErrorReporterHook)null);
  461.       ErrorReporter var5 = this.setErrorReporter(new DefaultErrorReporter());
  462.       boolean var6 = false;
  463.  
  464.       try {
  465.          IRFactory var7 = new IRFactory(var3);
  466.          Parser var8 = new Parser(var7);
  467.          var8.parse(var3);
  468.       } catch (IOException var14) {
  469.          var6 = true;
  470.       } catch (EvaluatorException var15) {
  471.          var6 = true;
  472.       } finally {
  473.          this.setErrorReporter(var5);
  474.          this.setErrorReporterHook(var4);
  475.       }
  476.  
  477.       return !var6 || !var3.eof();
  478.    }
  479.  
  480.    public DeepCallHook getCallHook() {
  481.       return this.debug_callHook;
  482.    }
  483.  
  484.    public DeepCallHook setCallHook(DeepCallHook var1) {
  485.       DeepCallHook var2 = this.debug_callHook;
  486.       this.debug_callHook = var1;
  487.       return var2;
  488.    }
  489.  
  490.    public DeepNewObjectHook getNewObjectHook() {
  491.       return this.debug_newObjectHook;
  492.    }
  493.  
  494.    public DeepNewObjectHook setNewObjectHook(DeepNewObjectHook var1) {
  495.       DeepNewObjectHook var2 = this.debug_newObjectHook;
  496.       this.debug_newObjectHook = var1;
  497.       return var2;
  498.    }
  499.  
  500.    public DeepBytecodeHook getBytecodeHook() {
  501.       return this.debug_bytecodeHook;
  502.    }
  503.  
  504.    public DeepBytecodeHook setBytecodeHook(DeepBytecodeHook var1) {
  505.       DeepBytecodeHook var2 = this.debug_bytecodeHook;
  506.       this.debug_bytecodeHook = var1;
  507.       return var2;
  508.    }
  509.  
  510.    public DeepErrorReporterHook getErrorReporterHook() {
  511.       return this.debug_errorReporterHook;
  512.    }
  513.  
  514.    public DeepErrorReporterHook setErrorReporterHook(DeepErrorReporterHook var1) {
  515.       DeepErrorReporterHook var2 = this.debug_errorReporterHook;
  516.       this.debug_errorReporterHook = var1;
  517.       return var2;
  518.    }
  519.  
  520.    public String getImplementationVersion() {
  521.       return "JavaScript-Java 1.4 release 2 1998 12 18";
  522.    }
  523.  
  524.    static String getSourcePositionFromStack(int[] var0) {
  525.       CharArrayWriter var1 = new CharArrayWriter();
  526.       RuntimeException var2 = new RuntimeException();
  527.       ((Throwable)var2).printStackTrace(new PrintWriter(var1));
  528.       String var3 = var1.toString();
  529.       int var4 = -1;
  530.       int var5 = -1;
  531.       int var6 = -1;
  532.  
  533.       for(int var7 = 0; var7 < var3.length(); ++var7) {
  534.          char var8 = var3.charAt(var7);
  535.          if (var8 == ':') {
  536.             var6 = var7;
  537.          } else if (var8 == '(') {
  538.             var4 = var7;
  539.          } else if (var8 == ')') {
  540.             var5 = var7;
  541.          } else if (var8 == '\n' && var4 != -1 && var5 != -1 && var6 != -1) {
  542.             String var9 = var3.substring(var4 + 1, var6);
  543.             if (var9.endsWith(".js")) {
  544.                String var10 = var3.substring(var6 + 1, var5);
  545.  
  546.                try {
  547.                   var0[0] = Integer.parseInt(var10);
  548.                   return var9;
  549.                } catch (NumberFormatException var11) {
  550.                }
  551.             }
  552.  
  553.             var6 = -1;
  554.             var5 = -1;
  555.             var4 = -1;
  556.          }
  557.       }
  558.  
  559.       return null;
  560.    }
  561.  
  562.    public int getOptimizationLevel() {
  563.       return this.optimizationLevel;
  564.    }
  565.  
  566.    public void setOptimizationLevel(int var1) {
  567.       if (var1 < 0) {
  568.          var1 = -1;
  569.       } else if (var1 > 9) {
  570.          var1 = 9;
  571.       }
  572.  
  573.       if (codegenClass == null) {
  574.          var1 = -1;
  575.       }
  576.  
  577.       this.optimizationLevel = var1;
  578.    }
  579.  
  580.    public SourceTextManager getSourceTextManager() {
  581.       return this.debug_stm;
  582.    }
  583.  
  584.    public SourceTextManager setSourceTextManager(SourceTextManager var1) {
  585.       SourceTextManager var2 = this.debug_stm;
  586.       this.debug_stm = var1;
  587.       return var2;
  588.    }
  589.  
  590.    public static boolean isSecurityDomainRequired() {
  591.       return requireSecurityDomain;
  592.    }
  593.  
  594.    public ErrorReporter getErrorReporter() {
  595.       if (this.debug_errorReporterHook != null) {
  596.          return this.debug_errorReporterHook;
  597.       } else {
  598.          if (this.errorReporter == null) {
  599.             this.errorReporter = new DefaultErrorReporter();
  600.          }
  601.  
  602.          return this.errorReporter;
  603.       }
  604.    }
  605.  
  606.    public ErrorReporter setErrorReporter(ErrorReporter var1) {
  607.       if (this.debug_errorReporterHook != null) {
  608.          return this.debug_errorReporterHook.setErrorReporter(var1);
  609.       } else {
  610.          ErrorReporter var2 = this.errorReporter;
  611.          this.errorReporter = var1;
  612.          return var2;
  613.       }
  614.    }
  615.  
  616.    public DeepExecuteHook getExecuteHook() {
  617.       return this.debug_executeHook;
  618.    }
  619.  
  620.    public DeepExecuteHook setExecuteHook(DeepExecuteHook var1) {
  621.       DeepExecuteHook var2 = this.debug_executeHook;
  622.       this.debug_executeHook = var1;
  623.       return var2;
  624.    }
  625.  
  626.    public String decompileFunctionBody(Function var1, int var2) {
  627.       return var1 instanceof NativeFunction ? ((NativeFunction)var1).decompile(var2, true, true) : "[native code]\n";
  628.    }
  629.  
  630.    public Script compileReader(Scriptable var1, Reader var2, String var3, int var4, Object var5) throws IOException {
  631.       return (Script)this.compile(var1, var2, var3, var4, var5, false);
  632.    }
  633.  
  634.    public String decompileFunction(Function var1, int var2) {
  635.       return var1 instanceof NativeFunction ? ((NativeFunction)var1).decompile(var2, true, false) : "function " + var1.getClassName() + "() {\n\t[native code]\n}\n";
  636.    }
  637.  
  638.    public Context() {
  639.       this.generatingSource = true;
  640.       this.setLanguageVersion(0);
  641.       this.generatingDebug = true;
  642.       if (codegenClass != null) {
  643.          this.optimizationLevel = 0;
  644.          Object var1 = null;
  645.  
  646.          try {
  647.             Class var2 = Class.forName("com.netscape.javascript.optimizer.OptClassNameHelper");
  648.             nameHelper = (ClassNameHelper)var2.newInstance();
  649.          } catch (ClassNotFoundException var3) {
  650.             var1 = var3;
  651.          } catch (IllegalAccessException var4) {
  652.             var1 = var4;
  653.          } catch (InstantiationException var5) {
  654.             var1 = var5;
  655.          }
  656.  
  657.          if (var1 != null) {
  658.             throw new RuntimeException("Malformed optimizer package " + var1);
  659.          }
  660.       } else {
  661.          this.optimizationLevel = -1;
  662.       }
  663.  
  664.    }
  665.  
  666.    public Context(SecuritySupport var1) {
  667.       this();
  668.       this.securitySupport = var1;
  669.    }
  670.  
  671.    public int getDebugLevel() {
  672.       return this.debugLevel;
  673.    }
  674.  
  675.    public void setGeneratingDebug(boolean var1) {
  676.       if (var1) {
  677.          this.setOptimizationLevel(0);
  678.       }
  679.  
  680.       this.generatingDebug = var1;
  681.    }
  682.  
  683.    public int setDebugLevel(int var1) {
  684.       byte var2 = this.debugLevel;
  685.       if (var1 < 0) {
  686.          var1 = 0;
  687.       } else if (var1 > 9) {
  688.          var1 = 9;
  689.       }
  690.  
  691.       if (var1 > 0) {
  692.          this.setOptimizationLevel(0);
  693.       }
  694.  
  695.       this.debugLevel = (byte)var1;
  696.       return var2;
  697.    }
  698.  
  699.    static {
  700.       try {
  701.          codegenClass = Class.forName("com.netscape.javascript.optimizer.Codegen");
  702.       } catch (ClassNotFoundException var3) {
  703.          codegenClass = null;
  704.       }
  705.  
  706.       ResourceBundle var0 = ResourceBundle.getBundle("com.netscape.javascript.resources.Security");
  707.  
  708.       try {
  709.          String var1 = var0.getString("security.requireSecurityDomain");
  710.          requireSecurityDomain = var1.equals("true");
  711.       } catch (MissingResourceException var2) {
  712.          requireSecurityDomain = true;
  713.       }
  714.  
  715.       threadContexts = new Hashtable(11);
  716.    }
  717.  
  718.    public static Context getCurrentContext() {
  719.       Thread var0 = Thread.currentThread();
  720.       return (Context)threadContexts.get(var0);
  721.    }
  722.  
  723.    private void newArrayHelper(Scriptable var1, Scriptable var2) {
  724.       var2.setParentScope(var1);
  725.       Object var3 = var1.get("Array", var1);
  726.       if (var3 != null && var3 instanceof Scriptable) {
  727.          Scriptable var4 = (Scriptable)var3;
  728.          var2.setPrototype((Scriptable)var4.get("prototype", var4));
  729.       }
  730.  
  731.    }
  732.  
  733.    final boolean isVersionECMA1() {
  734.       return this.version == 0 || this.version >= 130;
  735.    }
  736.  
  737.    public boolean isInterpreterClass(Class var1) {
  738.       return var1 == (class$com$netscape$javascript$Interpreter != null ? class$com$netscape$javascript$Interpreter : (class$com$netscape$javascript$Interpreter = class$("com.netscape.javascript.Interpreter")));
  739.    }
  740.  
  741.    static Context getContext() {
  742.       Thread var0 = Thread.currentThread();
  743.       Context var1 = (Context)threadContexts.get(var0);
  744.       if (var1 == null) {
  745.          throw new WrappedException(new ThreadLinkException("No Context associated with current Thread"));
  746.       } else {
  747.          return var1;
  748.       }
  749.    }
  750.  
  751.    Object getSecurityDomainFromClass(Class var1) {
  752.       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);
  753.    }
  754. }
  755.