From 165fa8803768452068567e604e72840ab67e5548 Mon Sep 17 00:00:00 2001 From: brian Date: Fri, 30 Jan 2004 07:04:10 +0000 Subject: [PATCH] 2003/07/28 23:10:27 darcs-hash:20040130070410-aa32f-27702bdf7b8aeccf33e486f7547ad8eac2521421.gz --- src/org/xwt/js/ArrayImpl.java | 152 +++++++++++++++++++++++++++++++++++++---- src/org/xwt/util/Vec.java | 43 ++++++++++++ 2 files changed, 181 insertions(+), 14 deletions(-) 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= end) return; + if(end-start <= 6) { + for(int i=start+1;i<=end;i++) { + tmp = store[i]; + int j; + for(j=i-1;j>=start;j--) { + if(c.compare(store[j],tmp) <= 0) break; + store[j+1] = store[j]; + } + store[j+1] = tmp; + } + return; + } + Object pivot = store[end]; + int lo = start - 1; + int hi = end; + do { + while(c.compare(store[++lo],pivot) < 0) { } + while((hi > lo) && c.compare(store[--hi],pivot) > 0) { } + swap(lo,hi); + } while(lo < hi); + swap(lo,end); + sort(c,start,lo-1); + sort(c,lo+1,end); + } } -- 1.7.10.4