X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fjs%2FArrayImpl.java;h=f76e29ac1469e62ce90d44727fc50c4944ee1d3d;hp=110b301c65449859fb86c4923174be2bb994436b;hb=165fa8803768452068567e604e72840ab67e5548;hpb=7801f1389822442ea539417754d0fc64a7d979ae diff --git a/src/org/xwt/js/ArrayImpl.java b/src/org/xwt/js/ArrayImpl.java index 110b301..f76e29a 100644 --- a/src/org/xwt/js/ArrayImpl.java +++ b/src/org/xwt/js/ArrayImpl.java @@ -6,7 +6,6 @@ import java.io.*; import java.util.*; // FIXME: could use some cleaning up... -// FIXME: Finish implementing ECMA-262 /** A JavaScript Array */ class ArrayImpl extends JS.Obj { @@ -24,21 +23,48 @@ class ArrayImpl extends JS.Obj { for(int i=0; i '9') return Integer.MIN_VALUE; return Integer.parseInt(s); } + + public Object callMethod(Object method, JS.Array args,boolean justChecking) { + if(method.equals("push")) { + if(justChecking) return Boolean.TRUE; + for(int i=0;i 0) { + Object o = vec.elementAt(0); + vec.removeElementAt(0); + return o; + } else { + return null; + } + } + if(method.equals("unshift")) { + if(justChecking) return Boolean.TRUE; + // FIXME: could be optimized a bit with some help from Vec + for(int i=0;i=0;i--) + vec.addElement(oldVec.elementAt(i)); + return this; + } + + private Object slice(JS.Array args) { + int length = length(); + int start = JS.toInt(args.length() < 1 ? null : args.elementAt(0)); + int end = args.length() < 2 ? length : JS.toInt(args.elementAt(1)); + if(start < 0) start = length+start; + if(end < 0) end = length+end; + if(start < 0) start = 0; + if(end < 0) end = 0; + if(start > length) start = length; + if(end > length) end = length; + JS.Array a = new JS.Array(end-start); + for(int i=0;i oldLength) start = oldLength; + if(deleteCount < 0) deleteCount = 0; + if(deleteCount > oldLength-start) deleteCount = oldLength-start; + int newLength = oldLength - deleteCount + newCount; + int lengthChange = newLength - oldLength; + JS.Array ret = new JS.Array(deleteCount); + for(int i=0;i 0) { + setSize(newLength); + for(int i=newLength-1;i>=start+newCount;i--) + setElementAt(elementAt(i-lengthChange),i); + } else if(lengthChange < 0) { + for(int i=start+newCount;i