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

  1. package com.netscape.javascript;
  2.  
  3. import java.util.Hashtable;
  4.  
  5. public class NativeArray extends RescopeableObject {
  6.    private static final int lengthAttr = 6;
  7.    private long length;
  8.    private Object[] dense;
  9.    private static final int maximumDenseLength = 10000;
  10.  
  11.    public static Scriptable js_slice(Context var0, Scriptable var1, Object[] var2, Function var3) {
  12.       Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
  13.       Scriptable var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
  14.       double var6 = getLengthProperty(var1);
  15.       double var8 = (double)0.0F;
  16.       double var10 = var6;
  17.       if (var2.length > 0) {
  18.          var8 = ScriptRuntime.toInteger(var2[0]);
  19.          if (var8 < (double)0.0F) {
  20.             var8 += var6;
  21.             if (var8 < (double)0.0F) {
  22.                var8 = (double)0.0F;
  23.             }
  24.          } else if (var8 > var6) {
  25.             var8 = var6;
  26.          }
  27.  
  28.          if (var2.length > 1) {
  29.             var10 = ScriptRuntime.toInteger(var2[1]);
  30.             if (var10 < (double)0.0F) {
  31.                var10 += var6;
  32.                if (var10 < (double)0.0F) {
  33.                   var10 = (double)0.0F;
  34.                }
  35.             } else if (var10 > var6) {
  36.                var10 = var6;
  37.             }
  38.          }
  39.       }
  40.  
  41.       long var12 = (long)var8;
  42.       long var14 = (long)var10;
  43.  
  44.       for(long var16 = var12; var16 < var14; ++var16) {
  45.          Object var18 = getElem(var1, var16);
  46.          setElem(var5, var16 - var12, var18);
  47.       }
  48.  
  49.       return var5;
  50.    }
  51.  
  52.    static boolean hasLengthProperty(Object var0) {
  53.       if (var0 instanceof Scriptable && var0 != Context.getUndefinedValue()) {
  54.          if (!(var0 instanceof NativeString) && !(var0 instanceof NativeArray)) {
  55.             Scriptable var1 = (Scriptable)var0;
  56.             Object var2 = ScriptRuntime.getProp(var1, "length", var1);
  57.             return var2 instanceof Number;
  58.          } else {
  59.             return true;
  60.          }
  61.       } else {
  62.          return false;
  63.       }
  64.    }
  65.  
  66.    public void put(String var1, Scriptable var2, Object var3) {
  67.       double var4 = ScriptRuntime.toNumber(var1);
  68.       if ((double)ScriptRuntime.toUint32(var4) == var4 && ScriptRuntime.numberToString(var4).equals(var1) && (double)this.length <= var4 && var4 != 4.294967295E9) {
  69.          this.length = (long)var4 + 1L;
  70.       }
  71.  
  72.       super.put(var1, var2, var3);
  73.    }
  74.  
  75.    public void put(int var1, Scriptable var2, Object var3) {
  76.       if (this.length <= (long)var1) {
  77.          this.length = (long)var1 + 1L;
  78.       }
  79.  
  80.       if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
  81.          this.dense[var1] = var3;
  82.       } else {
  83.          super.put(var1, var2, var3);
  84.       }
  85.    }
  86.  
  87.    private static Object getElem(Scriptable var0, long var1) {
  88.       if (var1 > 2147483647L) {
  89.          String var3 = Long.toString(var1);
  90.          return ScriptRuntime.getElem(var0, var3, var0);
  91.       } else {
  92.          return ScriptRuntime.getElem(var0, (int)var1);
  93.       }
  94.    }
  95.  
  96.    public long js_getLength() {
  97.       return this.length;
  98.    }
  99.  
  100.    public void js_setLength(Object var1) {
  101.       long var2 = ScriptRuntime.toUint32(var1);
  102.       if (var2 < this.length) {
  103.          if (this.length - var2 > 4096L) {
  104.             Object[] var4 = this.getIds();
  105.  
  106.             for(int var5 = 0; var5 < var4.length; ++var5) {
  107.                if (var4[var5] instanceof String) {
  108.                   String var6 = (String)var4[var5];
  109.                   double var7 = ScriptRuntime.toNumber(var6);
  110.                   if (var7 == var7 && var7 < (double)this.length) {
  111.                      ((ScriptableObject)this).delete(var6);
  112.                   }
  113.                } else {
  114.                   int var10 = ((Number)var4[var5]).intValue();
  115.                   if ((long)var10 >= var2) {
  116.                      this.delete(var10);
  117.                   }
  118.                }
  119.             }
  120.          } else {
  121.             for(long var9 = var2; var9 < this.length; ++var9) {
  122.                if (hasElem(this, var9)) {
  123.                   ScriptRuntime.delete(this, new Long(var9));
  124.                }
  125.             }
  126.          }
  127.       }
  128.  
  129.       this.length = var2;
  130.    }
  131.  
  132.    private static void setElem(Scriptable var0, long var1, Object var3) {
  133.       if (var1 > 2147483647L) {
  134.          String var4 = Long.toString(var1);
  135.          ScriptRuntime.setElem(var0, var4, var3, var0);
  136.       } else {
  137.          ScriptRuntime.setElem(var0, (int)var1, var3);
  138.       }
  139.    }
  140.  
  141.    private static boolean hasElem(Scriptable var0, long var1) {
  142.       return var1 > 2147483647L ? var0.has(Long.toString(var1), var0) : var0.has((int)var1, var0);
  143.    }
  144.  
  145.    public static String js_toString(Context var0, Scriptable var1, Object[] var2, Function var3) {
  146.       return toStringHelper(var0, var1, var0.getLanguageVersion() == 120);
  147.    }
  148.  
  149.    public static Object js_pop(Context var0, Scriptable var1, Object[] var2, Function var3) {
  150.       double var5 = getLengthProperty(var1);
  151.       Object var4;
  152.       if (var5 > (double)0.0F) {
  153.          --var5;
  154.          var4 = getElem(var1, (long)var5);
  155.       } else {
  156.          var4 = Context.getUndefinedValue();
  157.       }
  158.  
  159.       ScriptRuntime.setProp(var1, "length", new Double(var5), var1);
  160.       return var4;
  161.    }
  162.  
  163.    public static Object js_splice(Context var0, Scriptable var1, Object[] var2, Function var3) {
  164.       Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
  165.       Object var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
  166.       int var6 = var2.length;
  167.       if (var6 == 0) {
  168.          return var5;
  169.       } else {
  170.          double var7 = getLengthProperty(var1);
  171.          double var9 = ScriptRuntime.toInteger(var2[0]);
  172.          if (var9 < (double)0.0F) {
  173.             var9 += var7;
  174.             if (var9 < (double)0.0F) {
  175.                var9 = (double)0.0F;
  176.             }
  177.          } else if (var9 > var7) {
  178.             var9 = var7;
  179.          }
  180.  
  181.          --var6;
  182.          double var13 = var7 - var9;
  183.          double var11;
  184.          double var15;
  185.          if (var2.length == 1) {
  186.             var15 = var13;
  187.             var11 = var7;
  188.          } else {
  189.             var15 = ScriptRuntime.toInteger(var2[1]);
  190.             if (var15 < (double)0.0F) {
  191.                var15 = (double)0.0F;
  192.             } else if (var15 > var13) {
  193.                var15 = var13;
  194.             }
  195.  
  196.             var11 = var9 + var15;
  197.             --var6;
  198.          }
  199.  
  200.          long var17 = (long)var9;
  201.          long var19 = (long)var11;
  202.          if (var15 > (double)0.0F) {
  203.             if (var15 == (double)1.0F && var0.getLanguageVersion() == 120) {
  204.                var5 = getElem(var1, var17);
  205.             } else {
  206.                for(long var21 = var17; var21 < var19; ++var21) {
  207.                   Scriptable var23 = (Scriptable)var5;
  208.                   Object var24 = getElem(var1, var21);
  209.                   setElem(var23, var21 - var17, var24);
  210.                }
  211.             }
  212.          } else if (var15 == (double)0.0F && var0.getLanguageVersion() == 120) {
  213.             var5 = Context.getUndefinedValue();
  214.          }
  215.  
  216.          var13 = (double)var6 - var15;
  217.          if (var13 > (double)0.0F) {
  218.             for(long var27 = (long)var7 - 1L; var27 >= var19; --var27) {
  219.                Object var30 = getElem(var1, var27);
  220.                setElem(var1, var27 + (long)var13, var30);
  221.             }
  222.          } else if (var13 < (double)0.0F) {
  223.             for(long var28 = var19; (double)var28 < var7; ++var28) {
  224.                Object var31 = getElem(var1, var28);
  225.                setElem(var1, var28 + (long)var13, var31);
  226.             }
  227.          }
  228.  
  229.          int var29 = var2.length - var6;
  230.  
  231.          for(int var22 = 0; var22 < var6; ++var22) {
  232.             setElem(var1, var17 + (long)var22, var2[var22 + var29]);
  233.          }
  234.  
  235.          ScriptRuntime.setProp(var1, "length", new Double(var7 + var13), var1);
  236.          return var5;
  237.       }
  238.    }
  239.  
  240.    public static Object js_Array(Context var0, Object[] var1, Function var2, boolean var3) throws JavaScriptException {
  241.       if (!var3) {
  242.          return var2.construct(var0, var2.getParentScope(), var1);
  243.       } else if (var1.length == 0) {
  244.          return new NativeArray();
  245.       } else {
  246.          return var1.length == 1 && var1[0] instanceof Number && var0.getLanguageVersion() != 120 ? new NativeArray(ScriptRuntime.toUint32(var1[0])) : new NativeArray(var1);
  247.       }
  248.    }
  249.  
  250.    public static void finishInit(Scriptable var0, FunctionObject var1, Scriptable var2) {
  251.       String[] var3 = new String[]{"reverse", "toString"};
  252.       short[] var4 = new short[2];
  253.  
  254.       for(int var5 = 0; var5 < var3.length; ++var5) {
  255.          Object var6 = var2.get(var3[var5], var2);
  256.          ((FunctionObject)var6).setLength(var4[var5]);
  257.       }
  258.  
  259.    }
  260.  
  261.    private static double qsortCompare(Context var0, Object var1, Object var2, Object var3) throws JavaScriptException {
  262.       Scriptable var4 = Undefined.instance;
  263.       if (var4 != var2 && var4 != var3) {
  264.          if (var1 == null) {
  265.             String var8 = ScriptRuntime.toString(var2);
  266.             String var9 = ScriptRuntime.toString(var3);
  267.             return (double)var8.compareTo(var9);
  268.          } else {
  269.             Object[] var5 = new Object[]{var2, var3};
  270.             double var6 = ScriptRuntime.toNumber(ScriptRuntime.call(var0, var1, (Object)null, var5));
  271.             return var6 == var6 ? var6 : (double)0.0F;
  272.          }
  273.       } else if (var4 != var2) {
  274.          return (double)-1.0F;
  275.       } else {
  276.          return var4 != var3 ? (double)1.0F : (double)0.0F;
  277.       }
  278.    }
  279.  
  280.    public synchronized Scriptable rescope(Hashtable var1) {
  281.       Scriptable var2 = (Scriptable)var1.get(this);
  282.       if (var2 != null) {
  283.          return var2;
  284.       } else {
  285.          NativeArray var3 = (NativeArray)super.rescope(var1);
  286.          if (this.dense != null) {
  287.             var3.dense = new Object[this.dense.length];
  288.             RescopeableObject.rescopeArray(this.dense, var3.dense, var1);
  289.          }
  290.  
  291.          return var3;
  292.       }
  293.    }
  294.  
  295.    public static Scriptable js_reverse(Context var0, Scriptable var1, Object[] var2, Function var3) {
  296.       long var4 = (long)getLengthProperty(var1);
  297.       long var6 = var4 / 2L;
  298.  
  299.       for(long var8 = 0L; var8 < var6; ++var8) {
  300.          long var10 = var4 - var8 - 1L;
  301.          Object var12 = getElem(var1, var8);
  302.          Object var13 = getElem(var1, var10);
  303.          setElem(var1, var8, var13);
  304.          setElem(var1, var10, var12);
  305.       }
  306.  
  307.       return var1;
  308.    }
  309.  
  310.    private static String toStringHelper(Context var0, Scriptable var1, boolean var2) {
  311.       long var3 = (long)getLengthProperty(var1);
  312.       StringBuffer var5 = new StringBuffer();
  313.       if (var0.iterating == null) {
  314.          var0.iterating = new Hashtable(31);
  315.       }
  316.  
  317.       boolean var6 = var0.iterating.get(var1) == Boolean.TRUE;
  318.       String var7;
  319.       if (var2) {
  320.          var5.append("[");
  321.          var7 = ", ";
  322.       } else {
  323.          var7 = ",";
  324.       }
  325.  
  326.       boolean var8 = false;
  327.       long var9 = 0L;
  328.       if (!var6) {
  329.          for(var9 = 0L; var9 < var3; ++var9) {
  330.             if (var9 > 0L) {
  331.                var5.append(var7);
  332.             }
  333.  
  334.             Object var11 = getElem(var1, var9);
  335.             if (var11 != null && var11 != Undefined.instance) {
  336.                var8 = true;
  337.                if (var11 instanceof String) {
  338.                   if (var2) {
  339.                      var5.append("\"");
  340.                      var5.append(ScriptRuntime.escapeString(ScriptRuntime.toString(var11)));
  341.                      var5.append("\"");
  342.                   } else {
  343.                      var5.append(ScriptRuntime.toString(var11));
  344.                   }
  345.                } else {
  346.                   try {
  347.                      var0.iterating.put(var1, Boolean.TRUE);
  348.                      var5.append(ScriptRuntime.toString(var11));
  349.                   } finally {
  350.                      var0.iterating.remove(var1);
  351.                   }
  352.                }
  353.             } else {
  354.                var8 = false;
  355.             }
  356.          }
  357.       }
  358.  
  359.       if (var2) {
  360.          if (!var8 && var9 > 0L) {
  361.             var5.append(", ]");
  362.          } else {
  363.             var5.append("]");
  364.          }
  365.       }
  366.  
  367.       return var5.toString();
  368.    }
  369.  
  370.    public boolean has(int var1, Scriptable var2) {
  371.       if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
  372.          return this.dense[var1] != Scriptable.NOT_FOUND;
  373.       } else {
  374.          return super.has(var1, var2);
  375.       }
  376.    }
  377.  
  378.    public Object[] getIds() {
  379.       Object[] var1 = super.getIds();
  380.       if (this.dense == null) {
  381.          return var1;
  382.       } else {
  383.          int var2 = 0;
  384.          int var3 = this.dense.length;
  385.          if ((long)var3 > this.length) {
  386.             var3 = (int)this.length;
  387.          }
  388.  
  389.          for(int var4 = var3 - 1; var4 >= 0; --var4) {
  390.             if (this.dense[var4] != Scriptable.NOT_FOUND) {
  391.                ++var2;
  392.             }
  393.          }
  394.  
  395.          var2 += var1.length;
  396.          Object[] var7 = new Object[var2];
  397.          System.arraycopy(var1, 0, var7, 0, var1.length);
  398.  
  399.          for(int var5 = var3 - 1; var5 >= 0; --var5) {
  400.             if (this.dense[var5] != Scriptable.NOT_FOUND) {
  401.                --var2;
  402.                var7[var2] = new Integer(var5);
  403.             }
  404.          }
  405.  
  406.          return var7;
  407.       }
  408.    }
  409.  
  410.    public static Object js_push(Context var0, Scriptable var1, Object[] var2, Function var3) {
  411.       double var4 = getLengthProperty(var1);
  412.  
  413.       for(int var6 = 0; var6 < var2.length; ++var6) {
  414.          setElem(var1, (long)var4 + (long)var6, var2[var6]);
  415.       }
  416.  
  417.       var4 += (double)var2.length;
  418.       ScriptRuntime.setProp(var1, "length", new Double(var4), var1);
  419.       if (var0.getLanguageVersion() == 120) {
  420.          return var2.length == 0 ? Context.getUndefinedValue() : var2[var2.length - 1];
  421.       } else {
  422.          return new Long((long)var4);
  423.       }
  424.    }
  425.  
  426.    public Object get(int var1, Scriptable var2) {
  427.       return this.dense != null && var1 >= 0 && var1 < this.dense.length ? this.dense[var1] : super.get(var1, var2);
  428.    }
  429.  
  430.    public Object getDefaultValue(Class var1) {
  431.       if (var1 == ScriptRuntime.NumberClass) {
  432.          Context var2 = Context.getContext();
  433.          if (var2.getLanguageVersion() == 120) {
  434.             return new Long(this.length);
  435.          }
  436.       }
  437.  
  438.       return super.getDefaultValue(var1);
  439.    }
  440.  
  441.    public static Scriptable js_concat(Context var0, Scriptable var1, Object[] var2, Function var3) {
  442.       Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
  443.       Scriptable var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
  444.       long var8 = 0L;
  445.       if (hasLengthProperty(var1)) {
  446.          double var6 = getLengthProperty(var1);
  447.  
  448.          for(var8 = 0L; (double)var8 < var6; ++var8) {
  449.             Object var10 = getElem(var1, var8);
  450.             setElem(var5, var8, var10);
  451.          }
  452.       } else {
  453.          setElem(var5, var8++, var1);
  454.       }
  455.  
  456.       for(int var17 = 0; var17 < var2.length; ++var17) {
  457.          if (hasLengthProperty(var2[var17])) {
  458.             Scriptable var11 = (Scriptable)var2[var17];
  459.             double var15 = getLengthProperty(var11);
  460.  
  461.             for(long var12 = 0L; (double)var12 < var15; ++var8) {
  462.                Object var14 = getElem(var11, var12);
  463.                setElem(var5, var8, var14);
  464.                ++var12;
  465.             }
  466.          } else {
  467.             setElem(var5, var8++, var2[var17]);
  468.          }
  469.       }
  470.  
  471.       return var5;
  472.    }
  473.  
  474.    public NativeArray() {
  475.       this.dense = null;
  476.       this.length = 0L;
  477.    }
  478.  
  479.    public NativeArray(long var1) {
  480.       int var3 = (int)var1;
  481.       if ((long)var3 == var1 && var3 > 0) {
  482.          if (var3 > 10000) {
  483.             var3 = 10000;
  484.          }
  485.  
  486.          this.dense = new Object[var3];
  487.  
  488.          for(int var4 = 0; var4 < var3; ++var4) {
  489.             this.dense[var4] = Scriptable.NOT_FOUND;
  490.          }
  491.       }
  492.  
  493.       this.length = var1;
  494.    }
  495.  
  496.    public NativeArray(Object[] var1) {
  497.       this.dense = var1;
  498.       this.length = (long)var1.length;
  499.    }
  500.  
  501.    public static String js_join(Context var0, Scriptable var1, Object[] var2, Function var3) {
  502.       StringBuffer var4 = new StringBuffer();
  503.       double var6 = getLengthProperty(var1);
  504.       String var5;
  505.       if (var2.length < 1) {
  506.          var5 = ",";
  507.       } else {
  508.          var5 = ScriptRuntime.toString(var2[0]);
  509.       }
  510.  
  511.       for(long var8 = 0L; (double)var8 < var6; ++var8) {
  512.          if (var8 > 0L) {
  513.             var4.append(var5);
  514.          }
  515.  
  516.          Object var10 = getElem(var1, var8);
  517.          if (var10 != null && var10 != Undefined.instance) {
  518.             var4.append(ScriptRuntime.toString(var10));
  519.          }
  520.       }
  521.  
  522.       return var4.toString();
  523.    }
  524.  
  525.    public static Object js_unshift(Context var0, Scriptable var1, Object[] var2, Function var3) {
  526.       double var4 = getLengthProperty(var1);
  527.       int var6 = var2.length;
  528.       if (var2.length > 0) {
  529.          if (var4 > (double)0.0F) {
  530.             for(long var7 = (long)var4 - 1L; var7 >= 0L; --var7) {
  531.                Object var9 = getElem(var1, var7);
  532.                setElem(var1, var7 + (long)var6, var9);
  533.             }
  534.          }
  535.  
  536.          for(int var10 = 0; var10 < var2.length; ++var10) {
  537.             setElem(var1, (long)var10, var2[var10]);
  538.          }
  539.  
  540.          var4 += (double)var2.length;
  541.          ScriptRuntime.setProp(var1, "length", new Double(var4), var1);
  542.       }
  543.  
  544.       return new Long((long)var4);
  545.    }
  546.  
  547.    private static void qsort_extended(Context var0, Object var1, Scriptable var2, long var3, long var5) throws JavaScriptException {
  548.       while(var3 < var5) {
  549.          long var8 = var3;
  550.          long var10 = var5;
  551.          long var12 = var3;
  552.          Object var7 = getElem(var2, var3);
  553.  
  554.          while(var8 < var10) {
  555.             while(!(qsortCompare(var0, var1, getElem(var2, var10), var7) <= (double)0.0F)) {
  556.                --var10;
  557.             }
  558.  
  559.             setElem(var2, var12, getElem(var2, var10));
  560.  
  561.             while(var8 < var10 && qsortCompare(var0, var1, getElem(var2, var12), var7) <= (double)0.0F) {
  562.                ++var8;
  563.                var12 = var8;
  564.             }
  565.  
  566.             setElem(var2, var10, getElem(var2, var12));
  567.          }
  568.  
  569.          setElem(var2, var12, var7);
  570.          if (var8 - var3 < var5 - var8) {
  571.             qsort_extended(var0, var1, var2, var3, var8 - 1L);
  572.             var3 = var8 + 1L;
  573.          } else {
  574.             qsort_extended(var0, var1, var2, var8 + 1L, var5);
  575.             var5 = var8 - 1L;
  576.          }
  577.       }
  578.  
  579.    }
  580.  
  581.    public static Scriptable js_sort(Context var0, Scriptable var1, Object[] var2, Function var3) throws JavaScriptException {
  582.       long var4 = (long)getLengthProperty(var1);
  583.       Object var6;
  584.       if (var2.length > 0 && Undefined.instance != var2[0]) {
  585.          var6 = var2[0];
  586.       } else {
  587.          var6 = null;
  588.       }
  589.  
  590.       if (var4 >= 2147483647L) {
  591.          qsort_extended(var0, var6, var1, 0L, var4 - 1L);
  592.       } else {
  593.          Object[] var7 = new Object[(int)var4];
  594.  
  595.          for(int var8 = 0; (long)var8 < var4; ++var8) {
  596.             var7[var8] = getElem(var1, (long)var8);
  597.          }
  598.  
  599.          qsort(var0, var6, var7, 0, (int)var4 - 1);
  600.  
  601.          for(int var9 = 0; (long)var9 < var4; ++var9) {
  602.             setElem(var1, (long)var9, var7[var9]);
  603.          }
  604.       }
  605.  
  606.       return var1;
  607.    }
  608.  
  609.    private static void qsort(Context var0, Object var1, Object[] var2, int var3, int var4) throws JavaScriptException {
  610.       while(var3 < var4) {
  611.          int var6 = var3;
  612.          int var7 = var4;
  613.          int var8 = var3;
  614.  
  615.          Object var5;
  616.          for(var5 = var2[var3]; var6 < var7; var2[var7] = var2[var8]) {
  617.             while(!(qsortCompare(var0, var1, var2[var7], var5) <= (double)0.0F)) {
  618.                --var7;
  619.             }
  620.  
  621.             for(var2[var8] = var2[var7]; var6 < var7 && qsortCompare(var0, var1, var2[var8], var5) <= (double)0.0F; var8 = var6) {
  622.                ++var6;
  623.             }
  624.          }
  625.  
  626.          var2[var8] = var5;
  627.          if (var6 - var3 < var4 - var6) {
  628.             qsort(var0, var1, var2, var3, var6 - 1);
  629.             var3 = var6 + 1;
  630.          } else {
  631.             qsort(var0, var1, var2, var6 + 1, var4);
  632.             var4 = var6 - 1;
  633.          }
  634.       }
  635.  
  636.    }
  637.  
  638.    public static Object js_shift(Context var0, Scriptable var1, Object[] var2, Function var3) {
  639.       double var5 = getLengthProperty(var1);
  640.       Object var4;
  641.       if (var5 > (double)0.0F) {
  642.          long var7 = 0L;
  643.          --var5;
  644.          var4 = getElem(var1, var7);
  645.          if (var5 > (double)0.0F) {
  646.             for(long var10 = 1L; (double)var10 <= var5; ++var10) {
  647.                Object var9 = getElem(var1, var10);
  648.                setElem(var1, var10 - 1L, var9);
  649.             }
  650.          }
  651.       } else {
  652.          var4 = Context.getUndefinedValue();
  653.       }
  654.  
  655.       ScriptRuntime.setProp(var1, "length", new Double(var5), var1);
  656.       return var4;
  657.    }
  658.  
  659.    public void delete(int var1) {
  660.       if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
  661.          this.dense[var1] = Scriptable.NOT_FOUND;
  662.       } else {
  663.          super.delete(var1);
  664.       }
  665.    }
  666.  
  667.    static double getLengthProperty(Scriptable var0) {
  668.       if (var0 instanceof NativeString) {
  669.          return ((NativeString)var0).js_getLength();
  670.       } else {
  671.          return var0 instanceof NativeArray ? (double)((NativeArray)var0).js_getLength() : (double)ScriptRuntime.toUint32(ScriptRuntime.getProp(var0, "length", var0));
  672.       }
  673.    }
  674.  
  675.    public String getClassName() {
  676.       return "Array";
  677.    }
  678. }
  679.