home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.util.Hashtable;
-
- public class NativeArray extends RescopeableObject {
- private static final int lengthAttr = 6;
- private long length;
- private Object[] dense;
- private static final int maximumDenseLength = 10000;
-
- public static Scriptable js_slice(Context var0, Scriptable var1, Object[] var2, Function var3) {
- Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
- Scriptable var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
- double var6 = getLengthProperty(var1);
- double var8 = (double)0.0F;
- double var10 = var6;
- if (var2.length > 0) {
- var8 = ScriptRuntime.toInteger(var2[0]);
- if (var8 < (double)0.0F) {
- var8 += var6;
- if (var8 < (double)0.0F) {
- var8 = (double)0.0F;
- }
- } else if (var8 > var6) {
- var8 = var6;
- }
-
- if (var2.length > 1) {
- var10 = ScriptRuntime.toInteger(var2[1]);
- if (var10 < (double)0.0F) {
- var10 += var6;
- if (var10 < (double)0.0F) {
- var10 = (double)0.0F;
- }
- } else if (var10 > var6) {
- var10 = var6;
- }
- }
- }
-
- long var12 = (long)var8;
- long var14 = (long)var10;
-
- for(long var16 = var12; var16 < var14; ++var16) {
- Object var18 = getElem(var1, var16);
- setElem(var5, var16 - var12, var18);
- }
-
- return var5;
- }
-
- static boolean hasLengthProperty(Object var0) {
- if (var0 instanceof Scriptable && var0 != Context.getUndefinedValue()) {
- if (!(var0 instanceof NativeString) && !(var0 instanceof NativeArray)) {
- Scriptable var1 = (Scriptable)var0;
- Object var2 = ScriptRuntime.getProp(var1, "length", var1);
- return var2 instanceof Number;
- } else {
- return true;
- }
- } else {
- return false;
- }
- }
-
- public void put(String var1, Scriptable var2, Object var3) {
- double var4 = ScriptRuntime.toNumber(var1);
- if ((double)ScriptRuntime.toUint32(var4) == var4 && ScriptRuntime.numberToString(var4).equals(var1) && (double)this.length <= var4 && var4 != 4.294967295E9) {
- this.length = (long)var4 + 1L;
- }
-
- super.put(var1, var2, var3);
- }
-
- public void put(int var1, Scriptable var2, Object var3) {
- if (this.length <= (long)var1) {
- this.length = (long)var1 + 1L;
- }
-
- if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
- this.dense[var1] = var3;
- } else {
- super.put(var1, var2, var3);
- }
- }
-
- private static Object getElem(Scriptable var0, long var1) {
- if (var1 > 2147483647L) {
- String var3 = Long.toString(var1);
- return ScriptRuntime.getElem(var0, var3, var0);
- } else {
- return ScriptRuntime.getElem(var0, (int)var1);
- }
- }
-
- public long js_getLength() {
- return this.length;
- }
-
- public void js_setLength(Object var1) {
- long var2 = ScriptRuntime.toUint32(var1);
- if (var2 < this.length) {
- if (this.length - var2 > 4096L) {
- Object[] var4 = this.getIds();
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- if (var4[var5] instanceof String) {
- String var6 = (String)var4[var5];
- double var7 = ScriptRuntime.toNumber(var6);
- if (var7 == var7 && var7 < (double)this.length) {
- ((ScriptableObject)this).delete(var6);
- }
- } else {
- int var10 = ((Number)var4[var5]).intValue();
- if ((long)var10 >= var2) {
- this.delete(var10);
- }
- }
- }
- } else {
- for(long var9 = var2; var9 < this.length; ++var9) {
- if (hasElem(this, var9)) {
- ScriptRuntime.delete(this, new Long(var9));
- }
- }
- }
- }
-
- this.length = var2;
- }
-
- private static void setElem(Scriptable var0, long var1, Object var3) {
- if (var1 > 2147483647L) {
- String var4 = Long.toString(var1);
- ScriptRuntime.setElem(var0, var4, var3, var0);
- } else {
- ScriptRuntime.setElem(var0, (int)var1, var3);
- }
- }
-
- private static boolean hasElem(Scriptable var0, long var1) {
- return var1 > 2147483647L ? var0.has(Long.toString(var1), var0) : var0.has((int)var1, var0);
- }
-
- public static String js_toString(Context var0, Scriptable var1, Object[] var2, Function var3) {
- return toStringHelper(var0, var1, var0.getLanguageVersion() == 120);
- }
-
- public static Object js_pop(Context var0, Scriptable var1, Object[] var2, Function var3) {
- double var5 = getLengthProperty(var1);
- Object var4;
- if (var5 > (double)0.0F) {
- --var5;
- var4 = getElem(var1, (long)var5);
- } else {
- var4 = Context.getUndefinedValue();
- }
-
- ScriptRuntime.setProp(var1, "length", new Double(var5), var1);
- return var4;
- }
-
- public static Object js_splice(Context var0, Scriptable var1, Object[] var2, Function var3) {
- Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
- Object var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
- int var6 = var2.length;
- if (var6 == 0) {
- return var5;
- } else {
- double var7 = getLengthProperty(var1);
- double var9 = ScriptRuntime.toInteger(var2[0]);
- if (var9 < (double)0.0F) {
- var9 += var7;
- if (var9 < (double)0.0F) {
- var9 = (double)0.0F;
- }
- } else if (var9 > var7) {
- var9 = var7;
- }
-
- --var6;
- double var13 = var7 - var9;
- double var11;
- double var15;
- if (var2.length == 1) {
- var15 = var13;
- var11 = var7;
- } else {
- var15 = ScriptRuntime.toInteger(var2[1]);
- if (var15 < (double)0.0F) {
- var15 = (double)0.0F;
- } else if (var15 > var13) {
- var15 = var13;
- }
-
- var11 = var9 + var15;
- --var6;
- }
-
- long var17 = (long)var9;
- long var19 = (long)var11;
- if (var15 > (double)0.0F) {
- if (var15 == (double)1.0F && var0.getLanguageVersion() == 120) {
- var5 = getElem(var1, var17);
- } else {
- for(long var21 = var17; var21 < var19; ++var21) {
- Scriptable var23 = (Scriptable)var5;
- Object var24 = getElem(var1, var21);
- setElem(var23, var21 - var17, var24);
- }
- }
- } else if (var15 == (double)0.0F && var0.getLanguageVersion() == 120) {
- var5 = Context.getUndefinedValue();
- }
-
- var13 = (double)var6 - var15;
- if (var13 > (double)0.0F) {
- for(long var27 = (long)var7 - 1L; var27 >= var19; --var27) {
- Object var30 = getElem(var1, var27);
- setElem(var1, var27 + (long)var13, var30);
- }
- } else if (var13 < (double)0.0F) {
- for(long var28 = var19; (double)var28 < var7; ++var28) {
- Object var31 = getElem(var1, var28);
- setElem(var1, var28 + (long)var13, var31);
- }
- }
-
- int var29 = var2.length - var6;
-
- for(int var22 = 0; var22 < var6; ++var22) {
- setElem(var1, var17 + (long)var22, var2[var22 + var29]);
- }
-
- ScriptRuntime.setProp(var1, "length", new Double(var7 + var13), var1);
- return var5;
- }
- }
-
- public static Object js_Array(Context var0, Object[] var1, Function var2, boolean var3) throws JavaScriptException {
- if (!var3) {
- return var2.construct(var0, var2.getParentScope(), var1);
- } else if (var1.length == 0) {
- return new NativeArray();
- } else {
- return var1.length == 1 && var1[0] instanceof Number && var0.getLanguageVersion() != 120 ? new NativeArray(ScriptRuntime.toUint32(var1[0])) : new NativeArray(var1);
- }
- }
-
- public static void finishInit(Scriptable var0, FunctionObject var1, Scriptable var2) {
- String[] var3 = new String[]{"reverse", "toString"};
- short[] var4 = new short[2];
-
- for(int var5 = 0; var5 < var3.length; ++var5) {
- Object var6 = var2.get(var3[var5], var2);
- ((FunctionObject)var6).setLength(var4[var5]);
- }
-
- }
-
- private static double qsortCompare(Context var0, Object var1, Object var2, Object var3) throws JavaScriptException {
- Scriptable var4 = Undefined.instance;
- if (var4 != var2 && var4 != var3) {
- if (var1 == null) {
- String var8 = ScriptRuntime.toString(var2);
- String var9 = ScriptRuntime.toString(var3);
- return (double)var8.compareTo(var9);
- } else {
- Object[] var5 = new Object[]{var2, var3};
- double var6 = ScriptRuntime.toNumber(ScriptRuntime.call(var0, var1, (Object)null, var5));
- return var6 == var6 ? var6 : (double)0.0F;
- }
- } else if (var4 != var2) {
- return (double)-1.0F;
- } else {
- return var4 != var3 ? (double)1.0F : (double)0.0F;
- }
- }
-
- public synchronized Scriptable rescope(Hashtable var1) {
- Scriptable var2 = (Scriptable)var1.get(this);
- if (var2 != null) {
- return var2;
- } else {
- NativeArray var3 = (NativeArray)super.rescope(var1);
- if (this.dense != null) {
- var3.dense = new Object[this.dense.length];
- RescopeableObject.rescopeArray(this.dense, var3.dense, var1);
- }
-
- return var3;
- }
- }
-
- public static Scriptable js_reverse(Context var0, Scriptable var1, Object[] var2, Function var3) {
- long var4 = (long)getLengthProperty(var1);
- long var6 = var4 / 2L;
-
- for(long var8 = 0L; var8 < var6; ++var8) {
- long var10 = var4 - var8 - 1L;
- Object var12 = getElem(var1, var8);
- Object var13 = getElem(var1, var10);
- setElem(var1, var8, var13);
- setElem(var1, var10, var12);
- }
-
- return var1;
- }
-
- private static String toStringHelper(Context var0, Scriptable var1, boolean var2) {
- long var3 = (long)getLengthProperty(var1);
- StringBuffer var5 = new StringBuffer();
- if (var0.iterating == null) {
- var0.iterating = new Hashtable(31);
- }
-
- boolean var6 = var0.iterating.get(var1) == Boolean.TRUE;
- String var7;
- if (var2) {
- var5.append("[");
- var7 = ", ";
- } else {
- var7 = ",";
- }
-
- boolean var8 = false;
- long var9 = 0L;
- if (!var6) {
- for(var9 = 0L; var9 < var3; ++var9) {
- if (var9 > 0L) {
- var5.append(var7);
- }
-
- Object var11 = getElem(var1, var9);
- if (var11 != null && var11 != Undefined.instance) {
- var8 = true;
- if (var11 instanceof String) {
- if (var2) {
- var5.append("\"");
- var5.append(ScriptRuntime.escapeString(ScriptRuntime.toString(var11)));
- var5.append("\"");
- } else {
- var5.append(ScriptRuntime.toString(var11));
- }
- } else {
- try {
- var0.iterating.put(var1, Boolean.TRUE);
- var5.append(ScriptRuntime.toString(var11));
- } finally {
- var0.iterating.remove(var1);
- }
- }
- } else {
- var8 = false;
- }
- }
- }
-
- if (var2) {
- if (!var8 && var9 > 0L) {
- var5.append(", ]");
- } else {
- var5.append("]");
- }
- }
-
- return var5.toString();
- }
-
- public boolean has(int var1, Scriptable var2) {
- if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
- return this.dense[var1] != Scriptable.NOT_FOUND;
- } else {
- return super.has(var1, var2);
- }
- }
-
- public Object[] getIds() {
- Object[] var1 = super.getIds();
- if (this.dense == null) {
- return var1;
- } else {
- int var2 = 0;
- int var3 = this.dense.length;
- if ((long)var3 > this.length) {
- var3 = (int)this.length;
- }
-
- for(int var4 = var3 - 1; var4 >= 0; --var4) {
- if (this.dense[var4] != Scriptable.NOT_FOUND) {
- ++var2;
- }
- }
-
- var2 += var1.length;
- Object[] var7 = new Object[var2];
- System.arraycopy(var1, 0, var7, 0, var1.length);
-
- for(int var5 = var3 - 1; var5 >= 0; --var5) {
- if (this.dense[var5] != Scriptable.NOT_FOUND) {
- --var2;
- var7[var2] = new Integer(var5);
- }
- }
-
- return var7;
- }
- }
-
- public static Object js_push(Context var0, Scriptable var1, Object[] var2, Function var3) {
- double var4 = getLengthProperty(var1);
-
- for(int var6 = 0; var6 < var2.length; ++var6) {
- setElem(var1, (long)var4 + (long)var6, var2[var6]);
- }
-
- var4 += (double)var2.length;
- ScriptRuntime.setProp(var1, "length", new Double(var4), var1);
- if (var0.getLanguageVersion() == 120) {
- return var2.length == 0 ? Context.getUndefinedValue() : var2[var2.length - 1];
- } else {
- return new Long((long)var4);
- }
- }
-
- public Object get(int var1, Scriptable var2) {
- return this.dense != null && var1 >= 0 && var1 < this.dense.length ? this.dense[var1] : super.get(var1, var2);
- }
-
- public Object getDefaultValue(Class var1) {
- if (var1 == ScriptRuntime.NumberClass) {
- Context var2 = Context.getContext();
- if (var2.getLanguageVersion() == 120) {
- return new Long(this.length);
- }
- }
-
- return super.getDefaultValue(var1);
- }
-
- public static Scriptable js_concat(Context var0, Scriptable var1, Object[] var2, Function var3) {
- Scriptable var4 = ScriptableObject.getTopLevelScope(var3);
- Scriptable var5 = ScriptRuntime.newObject(var0, var4, "Array", (Object[])null);
- long var8 = 0L;
- if (hasLengthProperty(var1)) {
- double var6 = getLengthProperty(var1);
-
- for(var8 = 0L; (double)var8 < var6; ++var8) {
- Object var10 = getElem(var1, var8);
- setElem(var5, var8, var10);
- }
- } else {
- setElem(var5, var8++, var1);
- }
-
- for(int var17 = 0; var17 < var2.length; ++var17) {
- if (hasLengthProperty(var2[var17])) {
- Scriptable var11 = (Scriptable)var2[var17];
- double var15 = getLengthProperty(var11);
-
- for(long var12 = 0L; (double)var12 < var15; ++var8) {
- Object var14 = getElem(var11, var12);
- setElem(var5, var8, var14);
- ++var12;
- }
- } else {
- setElem(var5, var8++, var2[var17]);
- }
- }
-
- return var5;
- }
-
- public NativeArray() {
- this.dense = null;
- this.length = 0L;
- }
-
- public NativeArray(long var1) {
- int var3 = (int)var1;
- if ((long)var3 == var1 && var3 > 0) {
- if (var3 > 10000) {
- var3 = 10000;
- }
-
- this.dense = new Object[var3];
-
- for(int var4 = 0; var4 < var3; ++var4) {
- this.dense[var4] = Scriptable.NOT_FOUND;
- }
- }
-
- this.length = var1;
- }
-
- public NativeArray(Object[] var1) {
- this.dense = var1;
- this.length = (long)var1.length;
- }
-
- public static String js_join(Context var0, Scriptable var1, Object[] var2, Function var3) {
- StringBuffer var4 = new StringBuffer();
- double var6 = getLengthProperty(var1);
- String var5;
- if (var2.length < 1) {
- var5 = ",";
- } else {
- var5 = ScriptRuntime.toString(var2[0]);
- }
-
- for(long var8 = 0L; (double)var8 < var6; ++var8) {
- if (var8 > 0L) {
- var4.append(var5);
- }
-
- Object var10 = getElem(var1, var8);
- if (var10 != null && var10 != Undefined.instance) {
- var4.append(ScriptRuntime.toString(var10));
- }
- }
-
- return var4.toString();
- }
-
- public static Object js_unshift(Context var0, Scriptable var1, Object[] var2, Function var3) {
- double var4 = getLengthProperty(var1);
- int var6 = var2.length;
- if (var2.length > 0) {
- if (var4 > (double)0.0F) {
- for(long var7 = (long)var4 - 1L; var7 >= 0L; --var7) {
- Object var9 = getElem(var1, var7);
- setElem(var1, var7 + (long)var6, var9);
- }
- }
-
- for(int var10 = 0; var10 < var2.length; ++var10) {
- setElem(var1, (long)var10, var2[var10]);
- }
-
- var4 += (double)var2.length;
- ScriptRuntime.setProp(var1, "length", new Double(var4), var1);
- }
-
- return new Long((long)var4);
- }
-
- private static void qsort_extended(Context var0, Object var1, Scriptable var2, long var3, long var5) throws JavaScriptException {
- while(var3 < var5) {
- long var8 = var3;
- long var10 = var5;
- long var12 = var3;
- Object var7 = getElem(var2, var3);
-
- while(var8 < var10) {
- while(!(qsortCompare(var0, var1, getElem(var2, var10), var7) <= (double)0.0F)) {
- --var10;
- }
-
- setElem(var2, var12, getElem(var2, var10));
-
- while(var8 < var10 && qsortCompare(var0, var1, getElem(var2, var12), var7) <= (double)0.0F) {
- ++var8;
- var12 = var8;
- }
-
- setElem(var2, var10, getElem(var2, var12));
- }
-
- setElem(var2, var12, var7);
- if (var8 - var3 < var5 - var8) {
- qsort_extended(var0, var1, var2, var3, var8 - 1L);
- var3 = var8 + 1L;
- } else {
- qsort_extended(var0, var1, var2, var8 + 1L, var5);
- var5 = var8 - 1L;
- }
- }
-
- }
-
- public static Scriptable js_sort(Context var0, Scriptable var1, Object[] var2, Function var3) throws JavaScriptException {
- long var4 = (long)getLengthProperty(var1);
- Object var6;
- if (var2.length > 0 && Undefined.instance != var2[0]) {
- var6 = var2[0];
- } else {
- var6 = null;
- }
-
- if (var4 >= 2147483647L) {
- qsort_extended(var0, var6, var1, 0L, var4 - 1L);
- } else {
- Object[] var7 = new Object[(int)var4];
-
- for(int var8 = 0; (long)var8 < var4; ++var8) {
- var7[var8] = getElem(var1, (long)var8);
- }
-
- qsort(var0, var6, var7, 0, (int)var4 - 1);
-
- for(int var9 = 0; (long)var9 < var4; ++var9) {
- setElem(var1, (long)var9, var7[var9]);
- }
- }
-
- return var1;
- }
-
- private static void qsort(Context var0, Object var1, Object[] var2, int var3, int var4) throws JavaScriptException {
- while(var3 < var4) {
- int var6 = var3;
- int var7 = var4;
- int var8 = var3;
-
- Object var5;
- for(var5 = var2[var3]; var6 < var7; var2[var7] = var2[var8]) {
- while(!(qsortCompare(var0, var1, var2[var7], var5) <= (double)0.0F)) {
- --var7;
- }
-
- for(var2[var8] = var2[var7]; var6 < var7 && qsortCompare(var0, var1, var2[var8], var5) <= (double)0.0F; var8 = var6) {
- ++var6;
- }
- }
-
- var2[var8] = var5;
- if (var6 - var3 < var4 - var6) {
- qsort(var0, var1, var2, var3, var6 - 1);
- var3 = var6 + 1;
- } else {
- qsort(var0, var1, var2, var6 + 1, var4);
- var4 = var6 - 1;
- }
- }
-
- }
-
- public static Object js_shift(Context var0, Scriptable var1, Object[] var2, Function var3) {
- double var5 = getLengthProperty(var1);
- Object var4;
- if (var5 > (double)0.0F) {
- long var7 = 0L;
- --var5;
- var4 = getElem(var1, var7);
- if (var5 > (double)0.0F) {
- for(long var10 = 1L; (double)var10 <= var5; ++var10) {
- Object var9 = getElem(var1, var10);
- setElem(var1, var10 - 1L, var9);
- }
- }
- } else {
- var4 = Context.getUndefinedValue();
- }
-
- ScriptRuntime.setProp(var1, "length", new Double(var5), var1);
- return var4;
- }
-
- public void delete(int var1) {
- if (this.dense != null && var1 >= 0 && var1 < this.dense.length) {
- this.dense[var1] = Scriptable.NOT_FOUND;
- } else {
- super.delete(var1);
- }
- }
-
- static double getLengthProperty(Scriptable var0) {
- if (var0 instanceof NativeString) {
- return ((NativeString)var0).js_getLength();
- } else {
- return var0 instanceof NativeArray ? (double)((NativeArray)var0).js_getLength() : (double)ScriptRuntime.toUint32(ScriptRuntime.getProp(var0, "length", var0));
- }
- }
-
- public String getClassName() {
- return "Array";
- }
- }
-