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

  1. package com.netscape.javascript;
  2.  
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.InvocationTargetException;
  5. import java.lang.reflect.Method;
  6. import java.util.Enumeration;
  7.  
  8. public class ScriptRuntime {
  9.    public static final Class UndefinedClass;
  10.    public static final Class ScriptableClass;
  11.    public static final Class StringClass;
  12.    public static final Class NumberClass;
  13.    public static final Class BooleanClass;
  14.    public static final Class ByteClass;
  15.    public static final Class ShortClass;
  16.    public static final Class IntegerClass;
  17.    public static final Class LongClass;
  18.    public static final Class FloatClass;
  19.    public static final Class DoubleClass;
  20.    public static final Class CharacterClass;
  21.    public static final Class ObjectClass;
  22.    public static final Class FunctionClass;
  23.    public static double NaN;
  24.    public static Double NaNobj;
  25.    public static double negativeZero;
  26.    private static final boolean MSJVM_BUG_WORKAROUNDS = true;
  27.    private static final int NO_INDEX = 5;
  28.    private static final char NO_INDEX_CHAR = '5';
  29.    private static final int MAX_VALUE_LENGTH;
  30.    public static Object[] emptyArgs;
  31.    // $FF: synthetic field
  32.    private static Class class$com$netscape$javascript$Undefined;
  33.    // $FF: synthetic field
  34.    private static Class class$com$netscape$javascript$Scriptable;
  35.    // $FF: synthetic field
  36.    private static Class class$java$lang$String;
  37.    // $FF: synthetic field
  38.    private static Class class$java$lang$Number;
  39.    // $FF: synthetic field
  40.    private static Class class$java$lang$Boolean;
  41.    // $FF: synthetic field
  42.    private static Class class$java$lang$Byte;
  43.    // $FF: synthetic field
  44.    private static Class class$java$lang$Short;
  45.    // $FF: synthetic field
  46.    private static Class class$java$lang$Integer;
  47.    // $FF: synthetic field
  48.    private static Class class$java$lang$Long;
  49.    // $FF: synthetic field
  50.    private static Class class$java$lang$Float;
  51.    // $FF: synthetic field
  52.    private static Class class$java$lang$Double;
  53.    // $FF: synthetic field
  54.    private static Class class$java$lang$Character;
  55.    // $FF: synthetic field
  56.    private static Class class$java$lang$Object;
  57.    // $FF: synthetic field
  58.    private static Class class$com$netscape$javascript$Function;
  59.    // $FF: synthetic field
  60.    private static Class class$com$netscape$javascript$NativeGlobal;
  61.    // $FF: synthetic field
  62.    private static Class class$com$netscape$javascript$NativeClosure;
  63.    // $FF: synthetic field
  64.    private static Class class$com$netscape$javascript$NativeWith;
  65.  
  66.    public static Object getProp(Object var0, String var1, Scriptable var2) {
  67.       Scriptable var3;
  68.       try {
  69.          var3 = (Scriptable)var0;
  70.       } catch (ClassCastException var6) {
  71.          var3 = toObject(var2, var0);
  72.       }
  73.  
  74.       if (var3 == null) {
  75.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  76.       } else {
  77.          Scriptable var4 = var3;
  78.  
  79.          do {
  80.             Object var5 = var4.get(var1, var3);
  81.             if (var5 != Scriptable.NOT_FOUND) {
  82.                return var5;
  83.             }
  84.  
  85.             var4 = var4.getPrototype();
  86.          } while(var4 != null);
  87.  
  88.          Undefined.obj = var3;
  89.          Undefined.id = var1;
  90.          return Undefined.instance;
  91.       }
  92.    }
  93.  
  94.    public static Object setProp(Object var0, String var1, Object var2, Scriptable var3) {
  95.       Scriptable var4;
  96.       try {
  97.          var4 = (Scriptable)var0;
  98.       } catch (ClassCastException var6) {
  99.          var4 = toObject(var3, var0);
  100.       }
  101.  
  102.       if (var4 == null) {
  103.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  104.       } else {
  105.          Scriptable var5 = var4;
  106.  
  107.          while(!var5.has(var1, var4)) {
  108.             var5 = var5.getPrototype();
  109.             if (var5 == null) {
  110.                var4.put(var1, var4, var2);
  111.                return var2;
  112.             }
  113.          }
  114.  
  115.          var5.put(var1, var4, var2);
  116.          return var2;
  117.       }
  118.    }
  119.  
  120.    public static Boolean eqB(Object var0, Object var1) {
  121.       return method_1(var0, var1) ? Boolean.TRUE : Boolean.FALSE;
  122.    }
  123.  
  124.    public static Scriptable getProto(Object var0, Scriptable var1) {
  125.       Scriptable var2;
  126.       try {
  127.          var2 = (Scriptable)var0;
  128.       } catch (ClassCastException var3) {
  129.          var2 = toObject(var1, var0);
  130.       }
  131.  
  132.       if (var2 == null) {
  133.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  134.       } else {
  135.          return var2.getPrototype();
  136.       }
  137.    }
  138.  
  139.    public static Object setProto(Object var0, Object var1, Scriptable var2) {
  140.       Scriptable var3;
  141.       try {
  142.          var3 = (Scriptable)var0;
  143.       } catch (ClassCastException var7) {
  144.          var3 = toObject(var2, var0);
  145.       }
  146.  
  147.       Scriptable var4 = var1 == null ? null : toObject(var2, var1);
  148.  
  149.       for(Scriptable var5 = var4; var5 != null; var5 = var5.getPrototype()) {
  150.          if (var5 == var3) {
  151.             Object[] var6 = new Object[]{"__proto__"};
  152.             throw Context.reportRuntimeError(getMessage("msg.cyclic.value", var6));
  153.          }
  154.       }
  155.  
  156.       if (var3 == null) {
  157.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  158.       } else {
  159.          var3.setPrototype(var4);
  160.          return var4;
  161.       }
  162.    }
  163.  
  164.    public static Object getElem(Object var0, Object var1, Scriptable var2) {
  165.       int var3;
  166.       String var4;
  167.       if (var1 instanceof Number) {
  168.          double var5 = ((Number)var1).doubleValue();
  169.          var3 = (int)var5;
  170.          var4 = (double)var3 == var5 ? null : toString(var1);
  171.       } else {
  172.          var4 = toString(var1);
  173.          var3 = indexFromString(var4);
  174.          if (var3 != 5) {
  175.             var4 = null;
  176.          } else if (var4.length() == 1 && var4.charAt(0) == '5') {
  177.             var4 = null;
  178.          }
  179.       }
  180.  
  181.       Scriptable var8 = var0 instanceof Scriptable ? (Scriptable)var0 : toObject(var2, var0);
  182.       Scriptable var6 = var8;
  183.       if (var4 != null) {
  184.          if (var4.equals("__proto__")) {
  185.             return var8.getPrototype();
  186.          } else if (var4.equals("__parent__")) {
  187.             return var8.getParentScope();
  188.          } else {
  189.             while(var6 != null) {
  190.                Object var9 = var6.get(var4, var8);
  191.                if (var9 != Scriptable.NOT_FOUND) {
  192.                   return var9;
  193.                }
  194.  
  195.                var6 = var6.getPrototype();
  196.             }
  197.  
  198.             Undefined.obj = var8;
  199.             Undefined.id = var1;
  200.             return Undefined.instance;
  201.          }
  202.       } else {
  203.          while(var6 != null) {
  204.             Object var7 = var6.get(var3, var8);
  205.             if (var7 != Scriptable.NOT_FOUND) {
  206.                return var7;
  207.             }
  208.  
  209.             var6 = var6.getPrototype();
  210.          }
  211.  
  212.          return Undefined.instance;
  213.       }
  214.    }
  215.  
  216.    public static Object getElem(Scriptable var0, int var1) {
  217.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getPrototype()) {
  218.          Object var3 = var2.get(var1, var0);
  219.          if (var3 != Scriptable.NOT_FOUND) {
  220.             return var3;
  221.          }
  222.       }
  223.  
  224.       Undefined.obj = var0;
  225.       Undefined.id = null;
  226.       return Undefined.instance;
  227.    }
  228.  
  229.    public static boolean toBoolean(Object var0) {
  230.       if (var0 == null) {
  231.          return false;
  232.       } else {
  233.          if (var0 instanceof Scriptable) {
  234.             if (Context.getContext().isVersionECMA1()) {
  235.                if (var0 == Undefined.instance) {
  236.                   return false;
  237.                }
  238.  
  239.                return true;
  240.             }
  241.  
  242.             var0 = ((Scriptable)var0).getDefaultValue(BooleanClass);
  243.             if (var0 instanceof Scriptable) {
  244.                throw errorWithClassName("msg.primitive.expected", var0);
  245.             }
  246.          }
  247.  
  248.          if (var0 instanceof String) {
  249.             return ((String)var0).length() != 0;
  250.          } else if (var0 instanceof Number) {
  251.             double var1 = ((Number)var0).doubleValue();
  252.             return var1 == var1 && var1 != (double)0.0F;
  253.          } else if (var0 instanceof Boolean) {
  254.             return (Boolean)var0;
  255.          } else {
  256.             throw errorWithClassName("msg.invalid.type", var0);
  257.          }
  258.       }
  259.    }
  260.  
  261.    public static Object setElem(Object var0, Object var1, Object var2, Scriptable var3) {
  262.       int var4;
  263.       String var5;
  264.       if (var1 instanceof Number) {
  265.          double var6 = ((Number)var1).doubleValue();
  266.          var4 = (int)var6;
  267.          var5 = (double)var4 == var6 ? null : toString(var1);
  268.       } else {
  269.          var5 = toString(var1);
  270.          var4 = indexFromString(var5);
  271.          if (var4 != 5) {
  272.             var5 = null;
  273.          } else if (var5.length() == 1 && var5.charAt(0) == '5') {
  274.             var5 = null;
  275.          }
  276.       }
  277.  
  278.       Scriptable var8 = var0 instanceof Scriptable ? (Scriptable)var0 : toObject(var3, var0);
  279.       Scriptable var7 = var8;
  280.       if (var5 != null) {
  281.          if (var5.equals("__proto__")) {
  282.             return setProto(var0, var2, var3);
  283.          } else if (var5.equals("__parent__")) {
  284.             return setParent(var0, var2, var3);
  285.          } else {
  286.             while(!var7.has(var5, var8)) {
  287.                var7 = var7.getPrototype();
  288.                if (var7 == null) {
  289.                   var8.put(var5, var8, var2);
  290.                   return var2;
  291.                }
  292.             }
  293.  
  294.             var7.put(var5, var8, var2);
  295.             return var2;
  296.          }
  297.       } else {
  298.          while(!var7.has(var4, var8)) {
  299.             var7 = var7.getPrototype();
  300.             if (var7 == null) {
  301.                var8.put(var4, var8, var2);
  302.                return var2;
  303.             }
  304.          }
  305.  
  306.          var7.put(var4, var8, var2);
  307.          return var2;
  308.       }
  309.    }
  310.  
  311.    public static Object setElem(Scriptable var0, int var1, Object var2) {
  312.       Scriptable var3 = var0;
  313.  
  314.       while(!var3.has(var1, var0)) {
  315.          var3 = var3.getPrototype();
  316.          if (var3 == null) {
  317.             var0.put(var1, var0, var2);
  318.             return var2;
  319.          }
  320.       }
  321.  
  322.       var3.put(var1, var0, var2);
  323.       return var2;
  324.    }
  325.  
  326.    public static Object nextEnum(Enumeration var0) {
  327.       return !var0.hasMoreElements() ? null : var0.nextElement();
  328.    }
  329.  
  330.    private static RuntimeException errorWithClassName(String var0, Object var1) {
  331.       Object[] var2 = new Object[]{var1.getClass().getName()};
  332.       return Context.reportRuntimeError(getMessage(var0, var2));
  333.    }
  334.  
  335.    static Scriptable newObject(Context var0, Scriptable var1, String var2, Object[] var3) {
  336.       Object var4 = null;
  337.  
  338.       try {
  339.          return var0.newObject(var1, var2, var3);
  340.       } catch (NotAFunctionException var6) {
  341.          var4 = var6;
  342.       } catch (PropertyException var7) {
  343.          var4 = var7;
  344.       } catch (JavaScriptException var8) {
  345.          var4 = var8;
  346.       }
  347.  
  348.       throw Context.reportRuntimeError(((Throwable)var4).getMessage());
  349.    }
  350.  
  351.    public static Scriptable newObject(Context var0, Object var1, Object[] var2) throws JavaScriptException {
  352.       if (!(var1 instanceof Function)) {
  353.          Object[] var4 = new Object[]{toString(var1)};
  354.          throw Context.reportRuntimeError(Context.getMessage("msg.isnt.function", var4));
  355.       } else {
  356.          Function var3 = (Function)var1;
  357.          return var3.construct(var0, var3.getParentScope(), var2);
  358.       }
  359.    }
  360.  
  361.    public static NativeFunction createFunctionObject(Scriptable var0, Class var1) {
  362.       Constructor[] var2 = var1.getConstructors();
  363.       Object var3 = null;
  364.       Object[] var4 = new Object[]{var0};
  365.  
  366.       try {
  367.          var10 = (NativeFunction)var2[0].newInstance(var4);
  368.       } catch (InstantiationException var6) {
  369.          throw WrappedException.wrapException(var6);
  370.       } catch (IllegalAccessException var7) {
  371.          throw WrappedException.wrapException(var7);
  372.       } catch (IllegalArgumentException var8) {
  373.          throw WrappedException.wrapException(var8);
  374.       } catch (InvocationTargetException var9) {
  375.          throw WrappedException.wrapException(var9);
  376.       }
  377.  
  378.       ((ScriptableObject)var10).setPrototype(ScriptableObject.getClassPrototype(var0, "Function"));
  379.       ((ScriptableObject)var10).setParentScope(var0);
  380.       return var10;
  381.    }
  382.  
  383.    public static String getMessage(String var0, Object[] var1) {
  384.       return Context.getMessage(var0, var1);
  385.    }
  386.  
  387.    public static Object postIncrement(Object var0) {
  388.       Double var1;
  389.       if (var0 instanceof Number) {
  390.          var1 = new Double(((Number)var0).doubleValue() + (double)1.0F);
  391.       } else {
  392.          var1 = new Double(toNumber(var0) + (double)1.0F);
  393.       }
  394.  
  395.       return var1;
  396.    }
  397.  
  398.    public static Object postIncrement(Scriptable var0, String var1) {
  399.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getParentScope()) {
  400.          Scriptable var3 = var2;
  401.  
  402.          while(true) {
  403.             Object var4 = var3.get(var1, var2);
  404.             if (var4 != Scriptable.NOT_FOUND) {
  405.                if (var4 instanceof Number) {
  406.                   Double var6 = new Double(((Number)var4).doubleValue() + (double)1.0F);
  407.                   var3.put(var1, var2, var6);
  408.                   return var4;
  409.                }
  410.  
  411.                Double var5 = new Double(toNumber(var4) + (double)1.0F);
  412.                var3.put(var1, var2, var5);
  413.                return new Double(toNumber(var4));
  414.             }
  415.  
  416.             var3 = var3.getPrototype();
  417.             if (var3 == null) {
  418.                break;
  419.             }
  420.          }
  421.       }
  422.  
  423.       throw Context.reportRuntimeError(var1.toString() + " is not defined");
  424.    }
  425.  
  426.    public static Object postIncrement(Object var0, String var1, Scriptable var2) {
  427.       Scriptable var3;
  428.       try {
  429.          var3 = (Scriptable)var0;
  430.       } catch (ClassCastException var7) {
  431.          var3 = toObject(var2, var0);
  432.       }
  433.  
  434.       if (var3 == null) {
  435.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  436.       } else {
  437.          Scriptable var4 = var3;
  438.  
  439.          do {
  440.             Object var5 = var4.get(var1, var3);
  441.             if (var5 != Scriptable.NOT_FOUND) {
  442.                if (var5 instanceof Number) {
  443.                   Double var8 = new Double(((Number)var5).doubleValue() + (double)1.0F);
  444.                   var4.put(var1, var3, var8);
  445.                   return var5;
  446.                } else {
  447.                   Double var6 = new Double(toNumber(var5) + (double)1.0F);
  448.                   var4.put(var1, var3, var6);
  449.                   return new Double(toNumber(var5));
  450.                }
  451.             }
  452.  
  453.             var4 = var4.getPrototype();
  454.          } while(var4 != null);
  455.  
  456.          Undefined.obj = var3;
  457.          Undefined.id = var1;
  458.          return Undefined.instance;
  459.       }
  460.    }
  461.  
  462.    public static void main(String var0, String[] var1) throws JavaScriptException {
  463.       Context var2 = new Context();
  464.  
  465.       try {
  466.          var2.enter();
  467.       } catch (InterruptedException var13) {
  468.          throw WrappedException.wrapException(var13);
  469.       } catch (ThreadLinkException var14) {
  470.          throw WrappedException.wrapException(var14);
  471.       }
  472.  
  473.       Scriptable var3 = var2.initStandardObjects((ScriptableObject)null);
  474.  
  475.       Scriptable var4;
  476.       try {
  477.          var4 = var2.newObject(var3, "Array");
  478.       } catch (PropertyException var10) {
  479.          throw WrappedException.wrapException(var10);
  480.       } catch (NotAFunctionException var11) {
  481.          throw WrappedException.wrapException(var11);
  482.       } catch (JavaScriptException var12) {
  483.          throw WrappedException.wrapException(var12);
  484.       }
  485.  
  486.       for(int var5 = 1; var5 < var1.length; ++var5) {
  487.          var4.put(var5 - 1, var4, var1[var5]);
  488.       }
  489.  
  490.       var3.put("arguments", var3, var4);
  491.  
  492.       try {
  493.          Class var15 = Class.forName(var0);
  494.          Script var6 = (Script)var15.newInstance();
  495.          var6.exec(var2, var3);
  496.          return;
  497.       } catch (ClassNotFoundException var7) {
  498.       } catch (InstantiationException var8) {
  499.       } catch (IllegalAccessException var9) {
  500.       }
  501.  
  502.       throw new RuntimeException("Error creating script object");
  503.    }
  504.  
  505.    public static Scriptable newScope() {
  506.       return new NativeObject();
  507.    }
  508.  
  509.    protected static boolean jsDelegatesTo(Scriptable var0, Scriptable var1) {
  510.       for(Scriptable var2 = var0.getPrototype(); var2 != null; var2 = var2.getPrototype()) {
  511.          if (var2.equals(var1)) {
  512.             return true;
  513.          }
  514.       }
  515.  
  516.       return false;
  517.    }
  518.  
  519.    public static String escapeString(String var0) {
  520.       String var1 = "\bb\ff\nn\rr\tt\u000bv\"\"''";
  521.       StringBuffer var2 = new StringBuffer(var0.length());
  522.  
  523.       for(int var3 = 0; var3 < var0.length(); ++var3) {
  524.          char var4 = var0.charAt(var3);
  525.          if (var4 >= ' ' && var4 <= '~' && var4 != '"') {
  526.             var2.append(var4);
  527.          } else {
  528.             int var5;
  529.             if ((var5 = var1.indexOf(var4)) >= 0) {
  530.                var2.append("\\");
  531.                var2.append(var1.charAt(var5 + 1));
  532.             } else if (var4 < 256) {
  533.                String var8 = Integer.toHexString(var4);
  534.                if (var8.length() == 1) {
  535.                   var2.append("\\x0");
  536.                   var2.append(var8);
  537.                } else {
  538.                   var2.append("\\x");
  539.                   var2.append(var8);
  540.                }
  541.             } else {
  542.                String var6 = Integer.toHexString(var4);
  543.                var2.append("\\u");
  544.  
  545.                for(int var7 = var6.length(); var7 < 4; ++var7) {
  546.                   var2.append("0");
  547.                }
  548.  
  549.                var2.append(var6);
  550.             }
  551.          }
  552.       }
  553.  
  554.       return var2.toString();
  555.    }
  556.  
  557.    public static Boolean cmp_LEB(Object var0, Object var1) {
  558.       return cmp_LE(var0, var1) == 1 ? Boolean.TRUE : Boolean.FALSE;
  559.    }
  560.  
  561.    private static Class getTypeOfValue(Object var0) {
  562.       if (var0 == null) {
  563.          return ScriptableClass;
  564.       } else if (var0 == Undefined.instance) {
  565.          return UndefinedClass;
  566.       } else if (var0 instanceof Scriptable) {
  567.          return ScriptableClass;
  568.       } else {
  569.          return var0 instanceof Number ? NumberClass : var0.getClass();
  570.       }
  571.    }
  572.  
  573.    public static int toInt32(Object var0) {
  574.       double var1 = (double)4.2949673E9F;
  575.       double var3 = (double)(float)Integer.MAX_VALUE;
  576.       if (var0 instanceof Byte) {
  577.          return ((Number)var0).intValue();
  578.       } else {
  579.          double var5 = toNumber(var0);
  580.          if (var5 == var5 && var5 != (double)0.0F && var5 != Double.POSITIVE_INFINITY && var5 != Double.NEGATIVE_INFINITY) {
  581.             var5 = Math.IEEEremainder(var5, var1);
  582.             var5 = var5 >= (double)0.0F ? var5 : var5 + var1;
  583.             return var5 >= var3 ? (int)(var5 - var1) : (int)var5;
  584.          } else {
  585.             return 0;
  586.          }
  587.       }
  588.    }
  589.  
  590.    public static int toInt32(double var0) {
  591.       double var2 = (double)4.2949673E9F;
  592.       double var4 = (double)(float)Integer.MAX_VALUE;
  593.       if (var0 == var0 && var0 != (double)0.0F && var0 != Double.POSITIVE_INFINITY && var0 != Double.NEGATIVE_INFINITY) {
  594.          var0 = Math.IEEEremainder(var0, var2);
  595.          var0 = var0 >= (double)0.0F ? var0 : var0 + var2;
  596.          return var0 >= var4 ? (int)(var0 - var2) : (int)var0;
  597.       } else {
  598.          return 0;
  599.       }
  600.    }
  601.  
  602.    public static Object callSpecial(Context var0, Object var1, Object var2, Object[] var3, Scriptable var4, Scriptable var5, String var6, int var7) throws JavaScriptException {
  603.       return callOrNewSpecial(var0, var5, var1, var4, var3, true, var6, var7);
  604.    }
  605.  
  606.    public static String toString(Object var0) {
  607.       while(var0 != null) {
  608.          if (var0 instanceof Scriptable) {
  609.             var0 = ((Scriptable)var0).getDefaultValue(StringClass);
  610.             if (var0 == Undefined.instance || !(var0 instanceof Scriptable)) {
  611.                continue;
  612.             }
  613.  
  614.             throw errorWithClassName("msg.primitive.expected", var0);
  615.          }
  616.  
  617.          if (var0 instanceof Number) {
  618.             return numberToString(((Number)var0).doubleValue());
  619.          }
  620.  
  621.          return var0.toString();
  622.       }
  623.  
  624.       return "null";
  625.    }
  626.  
  627.    private static int indexFromString(String var0) {
  628.       int var1 = var0.length();
  629.       char var2;
  630.       if (var1 > 0 && '0' <= (var2 = var0.charAt(0)) && var2 <= '9' && var1 <= MAX_VALUE_LENGTH) {
  631.          int var3 = var2 - 48;
  632.          int var4 = 0;
  633.          int var5 = 1;
  634.          if (var3 != 0) {
  635.             while(var5 < var1 && '0' <= (var2 = var0.charAt(var5)) && var2 <= '9') {
  636.                var4 = var3;
  637.                var3 = 10 * var3 + (var2 - 48);
  638.                ++var5;
  639.             }
  640.          }
  641.  
  642.          if (var5 == var1 && (var4 < 214748364 || var4 == 214748364 && var2 < 7)) {
  643.             return var3;
  644.          }
  645.       }
  646.  
  647.       return 5;
  648.    }
  649.  
  650.    public static int cmp_LT(Object var0, Object var1) {
  651.       if (var0 instanceof Scriptable) {
  652.          var0 = ((Scriptable)var0).getDefaultValue(NumberClass);
  653.       }
  654.  
  655.       if (var1 instanceof Scriptable) {
  656.          var1 = ((Scriptable)var1).getDefaultValue(NumberClass);
  657.       }
  658.  
  659.       if (var0 instanceof String && var1 instanceof String) {
  660.          return toString(var0).compareTo(toString(var1)) < 0 ? 1 : 0;
  661.       } else {
  662.          double var2 = toNumber(var0);
  663.          if (var2 != var2) {
  664.             return 0;
  665.          } else {
  666.             double var4 = toNumber(var1);
  667.             if (var4 != var4) {
  668.                return 0;
  669.             } else {
  670.                return var2 < var4 ? 1 : 0;
  671.             }
  672.          }
  673.       }
  674.    }
  675.  
  676.    public static char toUint16(Object var0) {
  677.       long var1 = 65536L;
  678.       double var3 = toNumber(var0);
  679.       if (var3 == var3 && var3 != (double)0.0F && var3 != Double.POSITIVE_INFINITY && var3 != Double.NEGATIVE_INFINITY) {
  680.          var3 = Math.IEEEremainder(var3, (double)var1);
  681.          var3 = var3 >= (double)0.0F ? var3 : var3 + (double)var1;
  682.          return (char)((int)Math.floor(var3));
  683.       } else {
  684.          return '\u0000';
  685.       }
  686.    }
  687.  
  688.    static int getIntId(Object var0) {
  689.       if (var0 instanceof Number) {
  690.          double var4 = ((Number)var0).doubleValue();
  691.          int var3 = (int)var4;
  692.          return (double)var3 == var4 ? var3 : 0;
  693.       } else {
  694.          String var1 = toString(var0);
  695.          int var2 = indexFromString(var1);
  696.          return var2 == 5 && (var1.length() != 1 || var1.charAt(0) != '5') ? 0 : var2;
  697.       }
  698.    }
  699.  
  700.    public static Object postIncrementElem(Object var0, Object var1, Scriptable var2) {
  701.       Object var3 = getElem(var0, var1, var2);
  702.       if (var3 == Undefined.instance) {
  703.          return Undefined.instance;
  704.       } else {
  705.          double var4 = toNumber(var3);
  706.          Double var6 = new Double(var4 + (double)1.0F);
  707.          setElem(var0, var1, var6, var2);
  708.          return new Double(var4);
  709.       }
  710.    }
  711.  
  712.    // $FF: synthetic method
  713.    private static Class class$(String var0) {
  714.       try {
  715.          return Class.forName(var0);
  716.       } catch (ClassNotFoundException var2) {
  717.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  718.       }
  719.    }
  720.  
  721.    public static Object call(Context var0, Object var1, Object var2, Object[] var3) throws JavaScriptException {
  722.       Function var4;
  723.       try {
  724.          var4 = (Function)var1;
  725.       } catch (ClassCastException var7) {
  726.          Object[] var5 = new Object[]{toString(var1)};
  727.          throw Context.reportRuntimeError(Context.getMessage("msg.isnt.function", var5));
  728.       }
  729.  
  730.       Scriptable var8;
  731.       try {
  732.          var8 = (Scriptable)var2;
  733.       } catch (ClassCastException var6) {
  734.          var8 = toObject(ScriptableObject.getTopLevelScope(var4), var2);
  735.       }
  736.  
  737.       return var4.call(var0, var4.getParentScope(), var8, var3);
  738.    }
  739.  
  740.    public static Scriptable toObject(Scriptable var0, Object var1) {
  741.       if (var1 == null) {
  742.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  743.       } else if (var1 instanceof Scriptable) {
  744.          if (var1 == Undefined.instance) {
  745.             throw Context.reportRuntimeError(getMessage("msg.undef.to.object", (Object[])null));
  746.          } else {
  747.             return (Scriptable)var1;
  748.          }
  749.       } else {
  750.          String var2 = var1 instanceof String ? "String" : (var1 instanceof Number ? "Number" : (var1 instanceof Boolean ? "Boolean" : null));
  751.          if (var2 == null) {
  752.             Object var6 = NativeJavaObject.wrap(var0, var1, (Class)null);
  753.             if (var6 instanceof Scriptable) {
  754.                return (Scriptable)var6;
  755.             } else {
  756.                throw errorWithClassName("msg.invalid.type", var1);
  757.             }
  758.          } else {
  759.             Object[] var3 = new Object[]{var1};
  760.             var0 = ScriptableObject.getTopLevelScope(var0);
  761.             Scriptable var4 = newObject(Context.getContext(), var0, var2, var3);
  762.             var4.setPrototype(ScriptableObject.getClassPrototype(var0, var2));
  763.             var4.setParentScope(var0);
  764.             return var4;
  765.          }
  766.       }
  767.    }
  768.  
  769.    public static Scriptable initScript(Context var0, Scriptable var1, NativeFunction var2, Scriptable var3) {
  770.       String[] var4 = var2.names;
  771.       if (var4 != null) {
  772.          ScriptableObject var5;
  773.          try {
  774.             var5 = (ScriptableObject)var1;
  775.          } catch (ClassCastException var8) {
  776.             var5 = null;
  777.          }
  778.  
  779.          for(int var6 = var2.names.length - 1; var6 > 0; --var6) {
  780.             String var7 = var2.names[var6];
  781.             if (var1.get(var7, var1) == Scriptable.NOT_FOUND) {
  782.                if (var5 != null) {
  783.                   var5.defineProperty(var7, Undefined.instance, 4);
  784.                } else {
  785.                   var1.put(var7, var1, Undefined.instance);
  786.                }
  787.             }
  788.          }
  789.       }
  790.  
  791.       if (var0.getDebugLevel() > 0) {
  792.          new NativeCall(var0, var1, var2, var3);
  793.       }
  794.  
  795.       return var1;
  796.    }
  797.  
  798.    public static double toNumber(Object var0) {
  799.       if (var0 != null && var0 instanceof Scriptable) {
  800.          var0 = ((Scriptable)var0).getDefaultValue(NumberClass);
  801.          if (var0 != null && var0 instanceof Scriptable) {
  802.             throw errorWithClassName("msg.primitive.expected", var0);
  803.          }
  804.       }
  805.  
  806.       if (var0 == null) {
  807.          return (double)0.0F;
  808.       } else if (var0 instanceof String) {
  809.          return toNumber((String)var0);
  810.       } else if (var0 instanceof Number) {
  811.          return ((Number)var0).doubleValue();
  812.       } else if (var0 instanceof Boolean) {
  813.          return (Boolean)var0 ? (double)1.0F : (double)0.0F;
  814.       } else {
  815.          throw errorWithClassName("msg.invalid.type", var0);
  816.       }
  817.    }
  818.  
  819.    static double stringToNumber(String var0, int var1, int var2) {
  820.       char var3 = '9';
  821.       char var4 = 'a';
  822.       char var5 = 'A';
  823.       int var6 = var0.length();
  824.       if (var2 < 10) {
  825.          var3 = (char)(48 + var2 - 1);
  826.       }
  827.  
  828.       if (var2 > 10) {
  829.          var4 = (char)(97 + var2 - 10);
  830.          var5 = (char)(65 + var2 - 10);
  831.       }
  832.  
  833.       double var8 = (double)0.0F;
  834.  
  835.       int var7;
  836.       for(var7 = var1; var7 < var6; ++var7) {
  837.          char var10 = var0.charAt(var7);
  838.          int var11;
  839.          if ('0' <= var10 && var10 <= var3) {
  840.             var11 = var10 - 48;
  841.          } else if ('a' <= var10 && var10 < var4) {
  842.             var11 = var10 - 97 + 10;
  843.          } else {
  844.             if ('A' > var10 || var10 >= var5) {
  845.                break;
  846.             }
  847.  
  848.             var11 = var10 - 65 + 10;
  849.          }
  850.  
  851.          var8 = var8 * (double)var2 + (double)var11;
  852.       }
  853.  
  854.       if (var1 == var7) {
  855.          return NaN;
  856.       } else {
  857.          if (var8 >= (double)9.007199E15F) {
  858.             if (var2 == 10) {
  859.                try {
  860.                   return Double.valueOf(var0.substring(var1, var7));
  861.                } catch (NumberFormatException var17) {
  862.                   return NaN;
  863.                }
  864.             }
  865.  
  866.             if (var2 == 2 || var2 == 4 || var2 == 8 || var2 == 16 || var2 == 32) {
  867.                BinaryDigitReader var19 = new BinaryDigitReader(var2, var0, var1, var7);
  868.                var8 = (double)0.0F;
  869.  
  870.                int var20;
  871.                do {
  872.                   var20 = var19.getNextBinaryDigit();
  873.                } while(var20 == 0);
  874.  
  875.                if (var20 == 1) {
  876.                   var8 = (double)1.0F;
  877.                   int var12 = 52;
  878.  
  879.                   do {
  880.                      var20 = var19.getNextBinaryDigit();
  881.                      if (var20 < 0) {
  882.                         return var8;
  883.                      }
  884.  
  885.                      var8 = var8 * (double)2.0F + (double)var20;
  886.                      --var12;
  887.                   } while(var12 != 0);
  888.  
  889.                   var12 = var19.getNextBinaryDigit();
  890.                   if (var12 >= 0) {
  891.                      double var13 = (double)2.0F;
  892.  
  893.                      int var15;
  894.                      int var16;
  895.                      for(var15 = 0; (var16 = var19.getNextBinaryDigit()) >= 0; var13 *= (double)2.0F) {
  896.                         var15 |= var16;
  897.                      }
  898.  
  899.                      var8 += (double)(var12 & (var20 | var15));
  900.                      var8 *= var13;
  901.                   }
  902.                }
  903.             }
  904.          }
  905.  
  906.          return var8;
  907.       }
  908.    }
  909.  
  910.    public static double toNumber(String var0) {
  911.       int var1 = var0.length();
  912.  
  913.       for(int var2 = 0; var2 != var1; ++var2) {
  914.          char var3 = var0.charAt(var2);
  915.          if (!Character.isWhitespace(var3)) {
  916.             if (var3 == '0' && var2 + 2 < var1 && Character.toLowerCase(var0.charAt(var2 + 1)) == 'x') {
  917.                return stringToNumber(var0, var2 + 2, 16);
  918.             }
  919.  
  920.             if ((var3 == '+' || var3 == '-') && var2 + 3 < var1 && var0.charAt(var2 + 1) == '0' && Character.toLowerCase(var0.charAt(var2 + 2)) == 'x') {
  921.                double var10 = stringToNumber(var0, var2 + 3, 16);
  922.                if (var3 == '-') {
  923.                   return -var10;
  924.                }
  925.  
  926.                return var10;
  927.             }
  928.  
  929.             int var4;
  930.             char var5;
  931.             for(var4 = var1 - 1; Character.isWhitespace(var5 = var0.charAt(var4)); --var4) {
  932.             }
  933.  
  934.             if (var5 == 'y') {
  935.                if (var3 == '+' || var3 == '-') {
  936.                   ++var2;
  937.                }
  938.  
  939.                String var11 = var0.substring(var2, var4 + 1);
  940.                if (var11.equals("Infinity")) {
  941.                   if (var3 == '-') {
  942.                      return Double.NEGATIVE_INFINITY;
  943.                   }
  944.  
  945.                   return Double.POSITIVE_INFINITY;
  946.                }
  947.  
  948.                return NaN;
  949.             }
  950.  
  951.             String var6 = var0.substring(var2, var4 + 1);
  952.  
  953.             for(int var7 = var6.length() - 1; var7 >= 0; --var7) {
  954.                char var8 = var6.charAt(var7);
  955.                if (('0' > var8 || var8 > '9') && var8 != '.' && var8 != 'e' && var8 != 'E' && var8 != '+' && var8 != '-') {
  956.                   return NaN;
  957.                }
  958.             }
  959.  
  960.             try {
  961.                return Double.valueOf(var6);
  962.             } catch (NumberFormatException var9) {
  963.                return NaN;
  964.             }
  965.          }
  966.       }
  967.  
  968.       return (double)0.0F;
  969.    }
  970.  
  971.    public static String typeof(Object var0) {
  972.       if (var0 == Undefined.instance) {
  973.          return "undefined";
  974.       } else if (var0 == null) {
  975.          return "object";
  976.       } else if (var0 instanceof Scriptable) {
  977.          return var0 instanceof Function ? "function" : "object";
  978.       } else if (var0 instanceof String) {
  979.          return "string";
  980.       } else if (var0 instanceof Number) {
  981.          return "number";
  982.       } else if (var0 instanceof Boolean) {
  983.          return "boolean";
  984.       } else {
  985.          throw errorWithClassName("msg.invalid.type", var0);
  986.       }
  987.    }
  988.  
  989.    public static Object postDecrement(Object var0) {
  990.       Double var1;
  991.       if (var0 instanceof Number) {
  992.          var1 = new Double(((Number)var0).doubleValue() - (double)1.0F);
  993.       } else {
  994.          var1 = new Double(toNumber(var0) - (double)1.0F);
  995.       }
  996.  
  997.       return var1;
  998.    }
  999.  
  1000.    public static Object postDecrement(Scriptable var0, String var1) {
  1001.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getParentScope()) {
  1002.          Scriptable var3 = var2;
  1003.  
  1004.          while(true) {
  1005.             Object var4 = var3.get(var1, var2);
  1006.             if (var4 != Scriptable.NOT_FOUND) {
  1007.                if (var4 instanceof Number) {
  1008.                   Double var6 = new Double(((Number)var4).doubleValue() - (double)1.0F);
  1009.                   var3.put(var1, var2, var6);
  1010.                   return var4;
  1011.                }
  1012.  
  1013.                Double var5 = new Double(toNumber(var4) - (double)1.0F);
  1014.                var3.put(var1, var2, var5);
  1015.                return new Double(toNumber(var4));
  1016.             }
  1017.  
  1018.             var3 = var3.getPrototype();
  1019.             if (var3 == null) {
  1020.                break;
  1021.             }
  1022.          }
  1023.       }
  1024.  
  1025.       throw Context.reportRuntimeError(var1.toString() + " is not defined");
  1026.    }
  1027.  
  1028.    public static Object postDecrement(Object var0, String var1, Scriptable var2) {
  1029.       Scriptable var3;
  1030.       try {
  1031.          var3 = (Scriptable)var0;
  1032.       } catch (ClassCastException var7) {
  1033.          var3 = toObject(var2, var0);
  1034.       }
  1035.  
  1036.       if (var3 == null) {
  1037.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  1038.       } else {
  1039.          Scriptable var4 = var3;
  1040.  
  1041.          do {
  1042.             Object var5 = var4.get(var1, var3);
  1043.             if (var5 != Scriptable.NOT_FOUND) {
  1044.                if (var5 instanceof Number) {
  1045.                   Double var8 = new Double(((Number)var5).doubleValue() - (double)1.0F);
  1046.                   var4.put(var1, var3, var8);
  1047.                   return var5;
  1048.                } else {
  1049.                   Double var6 = new Double(toNumber(var5) - (double)1.0F);
  1050.                   var4.put(var1, var3, var6);
  1051.                   return new Double(toNumber(var5));
  1052.                }
  1053.             }
  1054.  
  1055.             var4 = var4.getPrototype();
  1056.          } while(var4 != null);
  1057.  
  1058.          Undefined.obj = var3;
  1059.          Undefined.id = var1;
  1060.          return Undefined.instance;
  1061.       }
  1062.    }
  1063.  
  1064.    public static boolean instanceOf(Object var0, Object var1) {
  1065.       if (!(var1 instanceof Scriptable)) {
  1066.          throw Context.reportRuntimeError(getMessage("msg.instanceof.not.object", (Object[])null));
  1067.       } else {
  1068.          return !(var0 instanceof Scriptable) ? false : ((Scriptable)var1).hasInstance((Scriptable)var0);
  1069.       }
  1070.    }
  1071.  
  1072.    public static int cmp_LE(Object var0, Object var1) {
  1073.       if (var0 instanceof Scriptable) {
  1074.          var0 = ((Scriptable)var0).getDefaultValue(NumberClass);
  1075.       }
  1076.  
  1077.       if (var1 instanceof Scriptable) {
  1078.          var1 = ((Scriptable)var1).getDefaultValue(NumberClass);
  1079.       }
  1080.  
  1081.       if (var0 instanceof String && var1 instanceof String) {
  1082.          return toString(var0).compareTo(toString(var1)) <= 0 ? 1 : 0;
  1083.       } else {
  1084.          double var2 = toNumber(var0);
  1085.          if (var2 != var2) {
  1086.             return 0;
  1087.          } else {
  1088.             double var4 = toNumber(var1);
  1089.             if (var4 != var4) {
  1090.                return 0;
  1091.             } else {
  1092.                return var2 <= var4 ? 1 : 0;
  1093.             }
  1094.          }
  1095.       }
  1096.    }
  1097.  
  1098.    public static NativeCall getCurrentActivation(Context var0) {
  1099.       return var0.currentActivation;
  1100.    }
  1101.  
  1102.    public static void setCurrentActivation(Context var0, NativeCall var1) {
  1103.       var0.currentActivation = var1;
  1104.    }
  1105.  
  1106.    public static boolean shallowEq(Object var0, Object var1) {
  1107.       Class var2 = getTypeOfValue(var0);
  1108.       if (var2 != getTypeOfValue(var1)) {
  1109.          return false;
  1110.       } else if (var2 != StringClass && var2 != BooleanClass) {
  1111.          if (var2 == NumberClass) {
  1112.             return ((Number)var0).doubleValue() == ((Number)var1).doubleValue();
  1113.          } else if (var2 == ScriptableClass) {
  1114.             if (var0 == var1) {
  1115.                return true;
  1116.             } else if (var0 instanceof NativeJavaObject && var1 instanceof NativeJavaObject) {
  1117.                return ((NativeJavaObject)var0).unwrap() == ((NativeJavaObject)var1).unwrap();
  1118.             } else {
  1119.                return false;
  1120.             }
  1121.          } else {
  1122.             return var2 == UndefinedClass;
  1123.          }
  1124.       } else {
  1125.          return var0.equals(var1);
  1126.       }
  1127.    }
  1128.  
  1129.    public static Boolean sneB(Object var0, Object var1) {
  1130.       return shallowEq(var0, var1) ? Boolean.FALSE : Boolean.TRUE;
  1131.    }
  1132.  
  1133.    static void checkDeprecated(Context var0, String var1) {
  1134.       int var2 = var0.getLanguageVersion();
  1135.       if (var2 >= 140 || var2 == 0) {
  1136.          Object[] var3 = new Object[]{var1};
  1137.          String var4 = getMessage("msg.deprec.ctor", var3);
  1138.          if (var2 == 0) {
  1139.             Context.reportWarning(var4);
  1140.          } else {
  1141.             throw Context.reportRuntimeError(var4);
  1142.          }
  1143.       }
  1144.    }
  1145.  
  1146.    // $FF: renamed from: in (java.lang.Object, java.lang.Object) boolean
  1147.    public static boolean method_0(Object var0, Object var1) {
  1148.       if (!(var1 instanceof Scriptable)) {
  1149.          throw Context.reportRuntimeError(getMessage("msg.in.not.object", (Object[])null));
  1150.       } else {
  1151.          FlattenedObject var2 = new FlattenedObject((Scriptable)var1);
  1152.          return var2.hasProperty(var0);
  1153.       }
  1154.    }
  1155.  
  1156.    public static Object add(Object var0, Object var1) {
  1157.       if (var0 instanceof Scriptable) {
  1158.          var0 = ((Scriptable)var0).getDefaultValue((Class)null);
  1159.       }
  1160.  
  1161.       if (var1 instanceof Scriptable) {
  1162.          var1 = ((Scriptable)var1).getDefaultValue((Class)null);
  1163.       }
  1164.  
  1165.       if (!(var0 instanceof String) && !(var1 instanceof String)) {
  1166.          return var0 instanceof Number && var1 instanceof Number ? new Double(((Number)var0).doubleValue() + ((Number)var1).doubleValue()) : new Double(toNumber(var0) + toNumber(var1));
  1167.       } else {
  1168.          return toString(var0) + toString(var1);
  1169.       }
  1170.    }
  1171.  
  1172.    static String getStringId(Object var0) {
  1173.       if (var0 instanceof Number) {
  1174.          double var4 = ((Number)var0).doubleValue();
  1175.          int var3 = (int)var4;
  1176.          return (double)var3 == var4 ? null : toString(var0);
  1177.       } else {
  1178.          String var1 = toString(var0);
  1179.          int var2 = indexFromString(var1);
  1180.          return var2 == 5 && (var1.length() != 1 || var1.charAt(0) != '5') ? var1 : null;
  1181.       }
  1182.    }
  1183.  
  1184.    public static Scriptable getBase(Scriptable var0, String var1) {
  1185.       Scriptable var2 = var0;
  1186.  
  1187.       label21:
  1188.       while(var2 != null) {
  1189.          Scriptable var3 = var2;
  1190.  
  1191.          while(var3.get(var1, var2) == Scriptable.NOT_FOUND) {
  1192.             var3 = var3.getPrototype();
  1193.             if (var3 == null) {
  1194.                var2 = var2.getParentScope();
  1195.                continue label21;
  1196.             }
  1197.          }
  1198.  
  1199.          return var2;
  1200.       }
  1201.  
  1202.       Object[] var4 = new Object[]{var1};
  1203.       throw Context.reportRuntimeError(getMessage("msg.is.not.defined", var4));
  1204.    }
  1205.  
  1206.    public static Boolean neB(Object var0, Object var1) {
  1207.       return method_1(var0, var1) ? Boolean.FALSE : Boolean.TRUE;
  1208.    }
  1209.  
  1210.    public static Scriptable newObjectSpecial(Context var0, Object var1, Object[] var2, Scriptable var3) throws JavaScriptException {
  1211.       return (Scriptable)callOrNewSpecial(var0, var3, var1, (Object)null, var2, false, (String)null, -1);
  1212.    }
  1213.  
  1214.    public static Boolean cmp_LTB(Object var0, Object var1) {
  1215.       return cmp_LT(var0, var1) == 1 ? Boolean.TRUE : Boolean.FALSE;
  1216.    }
  1217.  
  1218.    // $FF: renamed from: eq (java.lang.Object, java.lang.Object) boolean
  1219.    public static boolean method_1(Object var0, Object var1) {
  1220.       Object var2 = var0;
  1221.       Object var3 = var1;
  1222.  
  1223.       while(true) {
  1224.          Class var4 = getTypeOfValue(var0);
  1225.          Class var5 = getTypeOfValue(var1);
  1226.          if (var4 == var5) {
  1227.             if (var4 == UndefinedClass) {
  1228.                return true;
  1229.             }
  1230.  
  1231.             if (var4 == NumberClass) {
  1232.                if (((Number)var0).doubleValue() != ((Number)var1).doubleValue()) {
  1233.                   return false;
  1234.                }
  1235.  
  1236.                return true;
  1237.             }
  1238.  
  1239.             if (var4 != StringClass && var4 != BooleanClass) {
  1240.                if (var4 == ScriptableClass) {
  1241.                   if (var0 == var1) {
  1242.                      return true;
  1243.                   }
  1244.  
  1245.                   if (var0 instanceof NativeJavaObject && var1 instanceof NativeJavaObject) {
  1246.                      if (((NativeJavaObject)var0).unwrap() != ((NativeJavaObject)var1).unwrap()) {
  1247.                         return false;
  1248.                      }
  1249.  
  1250.                      return true;
  1251.                   }
  1252.  
  1253.                   return false;
  1254.                }
  1255.  
  1256.                throw new RuntimeException();
  1257.             }
  1258.  
  1259.             return var2.equals(var3);
  1260.          }
  1261.  
  1262.          if (var0 == null && var1 == Undefined.instance) {
  1263.             return true;
  1264.          }
  1265.  
  1266.          if (var0 == Undefined.instance && var1 == null) {
  1267.             return true;
  1268.          }
  1269.  
  1270.          if (var4 == NumberClass && var5 == StringClass) {
  1271.             if (((Number)var0).doubleValue() != toNumber(var1)) {
  1272.                return false;
  1273.             }
  1274.  
  1275.             return true;
  1276.          }
  1277.  
  1278.          if (var4 == StringClass && var5 == NumberClass) {
  1279.             if (toNumber(var0) != ((Number)var1).doubleValue()) {
  1280.                return false;
  1281.             }
  1282.  
  1283.             return true;
  1284.          }
  1285.  
  1286.          if (var4 != BooleanClass) {
  1287.             if (var5 != BooleanClass) {
  1288.                if (var4 != StringClass && var4 != NumberClass || var5 != ScriptableClass || var1 == null) {
  1289.                   if (var4 != ScriptableClass || var0 == null || var5 != StringClass && var5 != NumberClass) {
  1290.                      return false;
  1291.                   }
  1292.  
  1293.                   var0 = toPrimitive(var0);
  1294.                   var2 = var0;
  1295.                } else {
  1296.                   var1 = toPrimitive(var1);
  1297.                   var3 = var1;
  1298.                }
  1299.             } else {
  1300.                var1 = new Double(toNumber(var1));
  1301.                var3 = var1;
  1302.             }
  1303.          } else {
  1304.             var0 = new Double(toNumber(var0));
  1305.             var2 = var0;
  1306.          }
  1307.       }
  1308.    }
  1309.  
  1310.    public static double toInteger(Object var0) {
  1311.       double var1 = toNumber(var0);
  1312.       if (var1 != var1) {
  1313.          return (double)0.0F;
  1314.       } else if (var1 != (double)0.0F && var1 != Double.POSITIVE_INFINITY && var1 != Double.NEGATIVE_INFINITY) {
  1315.          return var1 > (double)0.0F ? Math.floor(var1) : Math.ceil(var1);
  1316.       } else {
  1317.          return var1;
  1318.       }
  1319.    }
  1320.  
  1321.    public static double toInteger(double var0) {
  1322.       if (var0 != var0) {
  1323.          return (double)0.0F;
  1324.       } else if (var0 != (double)0.0F && var0 != Double.POSITIVE_INFINITY && var0 != Double.NEGATIVE_INFINITY) {
  1325.          return var0 > (double)0.0F ? Math.floor(var0) : Math.ceil(var0);
  1326.       } else {
  1327.          return var0;
  1328.       }
  1329.    }
  1330.  
  1331.    public static Object setName(Scriptable var0, Object var1, Scriptable var2, String var3) {
  1332.       if (var0 != null) {
  1333.          return setProp(var0, var3, var1, var2);
  1334.       } else {
  1335.          Scriptable var4 = var2;
  1336.  
  1337.          do {
  1338.             var0 = var4;
  1339.             var4 = var4.getParentScope();
  1340.          } while(var4 != null);
  1341.  
  1342.          var0.put(var3, var0, var1);
  1343.          String[] var5 = new String[]{var3};
  1344.          String var6 = getMessage("msg.assn.create", var5);
  1345.          Context.reportWarning(var6);
  1346.          return var1;
  1347.       }
  1348.    }
  1349.  
  1350.    public static String typeofName(Scriptable var0, String var1) {
  1351.       Scriptable var2 = bind(var0, var1);
  1352.       return var2 == null ? "undefined" : typeof(getProp(var2, var1, var0));
  1353.    }
  1354.  
  1355.    public static long toUint32(double var0) {
  1356.       double var2 = (double)4.2949673E9F;
  1357.       if (var0 == var0 && var0 != (double)0.0F && var0 != Double.POSITIVE_INFINITY && var0 != Double.NEGATIVE_INFINITY) {
  1358.          if (var0 > (double)0.0F) {
  1359.             var0 = Math.floor(var0);
  1360.          } else {
  1361.             var0 = Math.ceil(var0);
  1362.          }
  1363.  
  1364.          var0 = Math.IEEEremainder(var0, var2);
  1365.          var0 = var0 >= (double)0.0F ? var0 : var0 + var2;
  1366.          return (long)Math.floor(var0);
  1367.       } else {
  1368.          return 0L;
  1369.       }
  1370.    }
  1371.  
  1372.    public static long toUint32(Object var0) {
  1373.       return toUint32(toNumber(var0));
  1374.    }
  1375.  
  1376.    public static Object[] padArguments(Object[] var0, int var1) {
  1377.       if (var1 < var0.length) {
  1378.          return var0;
  1379.       } else {
  1380.          Object[] var3 = new Object[var1];
  1381.  
  1382.          int var2;
  1383.          for(var2 = 0; var2 < var0.length; ++var2) {
  1384.             var3[var2] = var0[var2];
  1385.          }
  1386.  
  1387.          while(var2 < var1) {
  1388.             var3[var2] = Undefined.instance;
  1389.             ++var2;
  1390.          }
  1391.  
  1392.          return var3;
  1393.       }
  1394.    }
  1395.  
  1396.    private static Object callOrNewSpecial(Context var0, Scriptable var1, Object var2, Object var3, Object[] var4, boolean var5, String var6, int var7) throws JavaScriptException {
  1397.       if (var2 instanceof FunctionObject) {
  1398.          FunctionObject var8 = (FunctionObject)var2;
  1399.          Method var9 = var8.method;
  1400.          Class var10 = var9.getDeclaringClass();
  1401.          String var11 = var9.getName();
  1402.          if (var11.equals("eval") && var10 == (class$com$netscape$javascript$NativeGlobal != null ? class$com$netscape$javascript$NativeGlobal : (class$com$netscape$javascript$NativeGlobal = class$("com.netscape.javascript.NativeGlobal")))) {
  1403.             return NativeGlobal.evalSpecial(var0, var1, var3, var4, var6, var7);
  1404.          }
  1405.  
  1406.          if (var11.equals("js_Closure") && var10 == (class$com$netscape$javascript$NativeClosure != null ? class$com$netscape$javascript$NativeClosure : (class$com$netscape$javascript$NativeClosure = class$("com.netscape.javascript.NativeClosure")))) {
  1407.             return NativeClosure.newClosureSpecial(var0, var1, var4, var8);
  1408.          }
  1409.  
  1410.          if (var11.equals("With") && var10 == (class$com$netscape$javascript$NativeWith != null ? class$com$netscape$javascript$NativeWith : (class$com$netscape$javascript$NativeWith = class$("com.netscape.javascript.NativeWith")))) {
  1411.             return NativeWith.newWithSpecial(var0, var4, var8, !var5);
  1412.          }
  1413.       }
  1414.  
  1415.       return var5 ? call(var0, var2, var3, var4) : newObject(var0, var2, var4);
  1416.    }
  1417.  
  1418.    public static Enumeration initEnum(Object var0, Scriptable var1) {
  1419.       Scriptable var2 = toObject(var1, var0);
  1420.       return new IdEnumeration(var2);
  1421.    }
  1422.  
  1423.    public static Object postDecrementElem(Object var0, Object var1, Scriptable var2) {
  1424.       Object var3 = getElem(var0, var1, var2);
  1425.       if (var3 == Undefined.instance) {
  1426.          return Undefined.instance;
  1427.       } else {
  1428.          double var4 = toNumber(var3);
  1429.          Double var6 = new Double(var4 - (double)1.0F);
  1430.          setElem(var0, var1, var6, var2);
  1431.          return new Double(var4);
  1432.       }
  1433.    }
  1434.  
  1435.    public static Object toPrimitive(Object var0) {
  1436.       if (var0 != null && var0 instanceof Scriptable) {
  1437.          Object var1 = ((Scriptable)var0).getDefaultValue((Class)null);
  1438.          if (var1 != null && var1 instanceof Scriptable) {
  1439.             throw Context.reportRuntimeError(getMessage("msg.bad.default.value", (Object[])null));
  1440.          } else {
  1441.             return var1;
  1442.          }
  1443.       } else {
  1444.          return var0;
  1445.       }
  1446.    }
  1447.  
  1448.    public static Object unwrapJavaScriptException(JavaScriptException var0) {
  1449.       return var0.value;
  1450.    }
  1451.  
  1452.    public static Scriptable initVarObj(Context var0, Scriptable var1, NativeFunction var2, Scriptable var3, Object[] var4) {
  1453.       NativeCall var5 = new NativeCall(var0, var1, var2, var3, var4);
  1454.       String[] var6 = var2.names;
  1455.       if (var6 != null) {
  1456.          for(int var7 = var2.argCount + 1; var7 < var2.names.length; ++var7) {
  1457.             String var8 = var2.names[var7];
  1458.             ((ScriptableObject)var5).put(var8, var5, Undefined.instance);
  1459.          }
  1460.       }
  1461.  
  1462.       return var5;
  1463.    }
  1464.  
  1465.    public static void popActivation(Context var0) {
  1466.       if (var0.currentActivation != null) {
  1467.          var0.currentActivation = var0.currentActivation.caller;
  1468.       }
  1469.  
  1470.    }
  1471.  
  1472.    public static NativeFunction defineFunction(Scriptable var0, String var1, String var2, Object var3) throws ClassNotFoundException {
  1473.       NativeFunction var4;
  1474.       try {
  1475.          ClassLoader var5 = var3.getClass().getClassLoader();
  1476.          Class var6 = var5 == null ? Class.forName(var1) : var5.loadClass(var1);
  1477.          var4 = createFunctionObject(var0, var6);
  1478.       } catch (ClassNotFoundException var7) {
  1479.          throw WrappedException.wrapException(var7);
  1480.       }
  1481.  
  1482.       if (var2 != null && var2.length() != 0) {
  1483.          setName(var0, var4, var0, var2);
  1484.       }
  1485.  
  1486.       return var4;
  1487.    }
  1488.  
  1489.    protected ScriptRuntime() {
  1490.    }
  1491.  
  1492.    public static Scriptable getParent(Object var0) {
  1493.       Scriptable var1;
  1494.       try {
  1495.          var1 = (Scriptable)var0;
  1496.       } catch (ClassCastException var2) {
  1497.          return null;
  1498.       }
  1499.  
  1500.       return var1 == null ? null : getThis(var1.getParentScope());
  1501.    }
  1502.  
  1503.    public static Scriptable getParent(Object var0, Scriptable var1) {
  1504.       Scriptable var2;
  1505.       try {
  1506.          var2 = (Scriptable)var0;
  1507.       } catch (ClassCastException var3) {
  1508.          var2 = toObject(var1, var0);
  1509.       }
  1510.  
  1511.       if (var2 == null) {
  1512.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  1513.       } else {
  1514.          return var2.getParentScope();
  1515.       }
  1516.    }
  1517.  
  1518.    public static Object setParent(Object var0, Object var1, Scriptable var2) {
  1519.       Scriptable var3;
  1520.       try {
  1521.          var3 = (Scriptable)var0;
  1522.       } catch (ClassCastException var7) {
  1523.          var3 = toObject(var2, var0);
  1524.       }
  1525.  
  1526.       Scriptable var4 = var1 == null ? null : toObject(var2, var1);
  1527.  
  1528.       for(Scriptable var5 = var4; var5 != null; var5 = var5.getParentScope()) {
  1529.          if (var5 == var3) {
  1530.             Object[] var6 = new Object[]{"__parent__"};
  1531.             throw Context.reportRuntimeError(getMessage("msg.cyclic.value", var6));
  1532.          }
  1533.       }
  1534.  
  1535.       if (var3 == null) {
  1536.          throw Context.reportRuntimeError(getMessage("msg.null.to.object", (Object[])null));
  1537.       } else {
  1538.          var3.setParentScope(var4);
  1539.          return var4;
  1540.       }
  1541.    }
  1542.  
  1543.    public static Scriptable bind(Scriptable var0, String var1) {
  1544.       Scriptable var2 = var0;
  1545.  
  1546.       label21:
  1547.       while(var2 != null) {
  1548.          Scriptable var3 = var2;
  1549.  
  1550.          while(!var3.has(var1, var2)) {
  1551.             var3 = var3.getPrototype();
  1552.             if (var3 == null) {
  1553.                var2 = var2.getParentScope();
  1554.                continue label21;
  1555.             }
  1556.          }
  1557.  
  1558.          return var2;
  1559.       }
  1560.  
  1561.       return null;
  1562.    }
  1563.  
  1564.    public static String numberToString(double var0) {
  1565.       if (var0 != var0) {
  1566.          return "NaN";
  1567.       } else if (var0 == Double.POSITIVE_INFINITY) {
  1568.          return "Infinity";
  1569.       } else if (var0 == Double.NEGATIVE_INFINITY) {
  1570.          return "-Infinity";
  1571.       } else if (var0 == (double)0.0F) {
  1572.          return "0";
  1573.       } else {
  1574.          boolean var2 = true;
  1575.          boolean var3 = true;
  1576.          String var4 = Double.toString(var0);
  1577.          char[] var5 = var4.toCharArray();
  1578.          int var6 = -1;
  1579.          int var7 = -1;
  1580.          boolean var8 = false;
  1581.          boolean var9 = false;
  1582.  
  1583.          for(int var10 = 0; var10 < var5.length; ++var10) {
  1584.             switch (var5[var10]) {
  1585.                case '-':
  1586.                   if (var7 == -1) {
  1587.                      var8 = true;
  1588.                   } else {
  1589.                      var9 = true;
  1590.                   }
  1591.                   break;
  1592.                case '.':
  1593.                   var6 = var10;
  1594.                   break;
  1595.                case 'E':
  1596.                   var7 = var10;
  1597.             }
  1598.          }
  1599.  
  1600.          if (var7 == -1) {
  1601.             return var6 == var5.length - 2 && var5[var5.length - 1] == '0' ? new String(var5, 0, var5.length - 2) : var4;
  1602.          } else {
  1603.             int var16 = Integer.parseInt(new String(var5, var7 + 1, var5.length - var7 - 1));
  1604.             StringBuffer var11 = new StringBuffer();
  1605.             boolean var12 = var6 + 2 == var7 && var5[var6 + 1] == '0';
  1606.             if (var16 >= -6 && var16 <= 20) {
  1607.                if (var8) {
  1608.                   var11.append('-');
  1609.                }
  1610.  
  1611.                if (var16 < 0) {
  1612.                   var11.append("0.");
  1613.  
  1614.                   for(int var17 = var16 + 1; var17 < 0; ++var17) {
  1615.                      var11.append('0');
  1616.                   }
  1617.                }
  1618.  
  1619.                var11.append(var5[var6 - 1]);
  1620.                int var18 = 0;
  1621.                if (!var12) {
  1622.                   var18 = var7 - var6 - 1;
  1623.                   if (var16 > 0 && var16 < var18) {
  1624.                      var11.append(var5, var6 + 1, var16);
  1625.                      var11.append('.');
  1626.                      var11.append(var5, var6 + var16 + 1, var18 - var16);
  1627.                   } else {
  1628.                      var11.append(var5, var6 + 1, var18);
  1629.                   }
  1630.                }
  1631.  
  1632.                if (var16 > 0) {
  1633.                   for(int var19 = var18; var19 < var16; ++var19) {
  1634.                      var11.append('0');
  1635.                   }
  1636.                }
  1637.  
  1638.                return var11.toString();
  1639.             } else {
  1640.                int var13 = var12 ? 1 : var7;
  1641.                if (var8) {
  1642.                   var11.append('-');
  1643.                   var11.append(var5, 1, var13);
  1644.                } else {
  1645.                   var11.append(var5, 0, var13);
  1646.                }
  1647.  
  1648.                var11.append('e');
  1649.                var11.append((char)(var16 < 0 ? '-' : '+'));
  1650.                int var14 = var7 + (var16 < 0 ? 2 : 1);
  1651.                var11.append(var5, var14, var5.length - var14);
  1652.                return var11.toString();
  1653.             }
  1654.          }
  1655.       }
  1656.    }
  1657.  
  1658.    static {
  1659.       UndefinedClass = class$com$netscape$javascript$Undefined != null ? class$com$netscape$javascript$Undefined : (class$com$netscape$javascript$Undefined = class$("com.netscape.javascript.Undefined"));
  1660.       ScriptableClass = class$com$netscape$javascript$Scriptable != null ? class$com$netscape$javascript$Scriptable : (class$com$netscape$javascript$Scriptable = class$("com.netscape.javascript.Scriptable"));
  1661.       StringClass = class$java$lang$String != null ? class$java$lang$String : (class$java$lang$String = class$("java.lang.String"));
  1662.       NumberClass = class$java$lang$Number != null ? class$java$lang$Number : (class$java$lang$Number = class$("java.lang.Number"));
  1663.       BooleanClass = class$java$lang$Boolean != null ? class$java$lang$Boolean : (class$java$lang$Boolean = class$("java.lang.Boolean"));
  1664.       ByteClass = class$java$lang$Byte != null ? class$java$lang$Byte : (class$java$lang$Byte = class$("java.lang.Byte"));
  1665.       ShortClass = class$java$lang$Short != null ? class$java$lang$Short : (class$java$lang$Short = class$("java.lang.Short"));
  1666.       IntegerClass = class$java$lang$Integer != null ? class$java$lang$Integer : (class$java$lang$Integer = class$("java.lang.Integer"));
  1667.       LongClass = class$java$lang$Long != null ? class$java$lang$Long : (class$java$lang$Long = class$("java.lang.Long"));
  1668.       FloatClass = class$java$lang$Float != null ? class$java$lang$Float : (class$java$lang$Float = class$("java.lang.Float"));
  1669.       DoubleClass = class$java$lang$Double != null ? class$java$lang$Double : (class$java$lang$Double = class$("java.lang.Double"));
  1670.       CharacterClass = class$java$lang$Character != null ? class$java$lang$Character : (class$java$lang$Character = class$("java.lang.Character"));
  1671.       ObjectClass = class$java$lang$Object != null ? class$java$lang$Object : (class$java$lang$Object = class$("java.lang.Object"));
  1672.       FunctionClass = class$com$netscape$javascript$Function != null ? class$com$netscape$javascript$Function : (class$com$netscape$javascript$Function = class$("com.netscape.javascript.Function"));
  1673.       NaN = Double.NaN;
  1674.       NaNobj = new Double(Double.NaN);
  1675.       negativeZero = (double)-0.0F;
  1676.       MAX_VALUE_LENGTH = Integer.toString(Integer.MAX_VALUE).length();
  1677.       emptyArgs = new Object[0];
  1678.    }
  1679.  
  1680.    public static Scriptable getThis(Scriptable var0) {
  1681.       while(var0 instanceof NativeWith) {
  1682.          var0 = var0.getPrototype();
  1683.       }
  1684.  
  1685.       if (var0 instanceof NativeCall) {
  1686.          var0 = ScriptableObject.getTopLevelScope(var0);
  1687.       }
  1688.  
  1689.       return var0;
  1690.    }
  1691.  
  1692.    public static Boolean seqB(Object var0, Object var1) {
  1693.       return shallowEq(var0, var1) ? Boolean.TRUE : Boolean.FALSE;
  1694.    }
  1695.  
  1696.    public static Object delete(Object var0, Object var1) {
  1697.       if (!(var0 instanceof Scriptable)) {
  1698.          return Boolean.TRUE;
  1699.       } else {
  1700.          FlattenedObject var2 = new FlattenedObject((Scriptable)var0);
  1701.          return var2.deleteProperty(var1) ? Boolean.TRUE : Boolean.FALSE;
  1702.       }
  1703.    }
  1704.  
  1705.    public static Scriptable enterWith(Object var0, Scriptable var1) {
  1706.       return new NativeWith(var1, toObject(var1, var0));
  1707.    }
  1708.  
  1709.    public static Scriptable leaveWith(Scriptable var0) {
  1710.       return var0.getParentScope();
  1711.    }
  1712.  
  1713.    public static Object name(Scriptable var0, String var1) {
  1714.       for(Scriptable var2 = var0; var2 != null; var2 = var2.getParentScope()) {
  1715.          Scriptable var3 = var2;
  1716.  
  1717.          while(true) {
  1718.             Object var4 = var3.get(var1, var2);
  1719.             if (var4 != Scriptable.NOT_FOUND) {
  1720.                return var4;
  1721.             }
  1722.  
  1723.             var3 = var3.getPrototype();
  1724.             if (var3 == null) {
  1725.                break;
  1726.             }
  1727.          }
  1728.       }
  1729.  
  1730.       Object[] var5 = new Object[]{var1.toString()};
  1731.       throw Context.reportRuntimeError(getMessage("msg.is.not.defined", var5));
  1732.    }
  1733. }
  1734.