From 21ba18ea2f37a2177c46a435e463771d0d9dd6ee Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 13 Jul 2004 05:21:46 +0000 Subject: [PATCH] update JSReflection darcs-hash:20040713052146-24bed-2d92939f71dfb4176ba1679922695ec7a9f28689.gz --- src/org/ibex/js/JSReflection.java | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/org/ibex/js/JSReflection.java b/src/org/ibex/js/JSReflection.java index d2a9d14..52f7f9c 100644 --- a/src/org/ibex/js/JSReflection.java +++ b/src/org/ibex/js/JSReflection.java @@ -6,16 +6,15 @@ import java.io.*; import java.util.*; import java.lang.reflect.*; -// FIXME: Update for new API /** Automatic JS-ification via Reflection (not for use in the core) */ public class JSReflection extends JS { - /*public static Object wrap(Object o) throws JSExn { + public static JS wrap(Object o) throws JSExn { if (o == null) return null; - if (o instanceof String) return o; - if (o instanceof Boolean) return o; - if (o instanceof Number) return o; - if (o instanceof JS) return o; + if (o instanceof String) return JS.S((String)o); + if (o instanceof Boolean) return JS.B(((Boolean)o).booleanValue()); + if (o instanceof Number) return JS.N((Number)o); + if (o instanceof JS) return (JS)o; if (o instanceof Object[]) { // FIXME: get element type here } @@ -25,15 +24,24 @@ public class JSReflection extends JS { public static class Array extends JS { final Object[] arr; public Array(Object[] arr) { this.arr = arr; } - public Enumeration keys() throws JSExn { return new CounterEnumeration(arr.length); } - public Object get(Object key) throws JSExn { return wrap(arr[toInt(key)]); } - public void put(Object key, Object val) throws JSExn { throw new JSExn("can't write to org.ibex.js.Reflection.Array's"); } + // FEATURE: Add a JSCounterEnumeration + public Enumeration keys() throws JSExn { + return new Enumeration(null) { + private int n = 0; + public boolean _hasMoreElements() { return n < arr.length; } + public JS _nextElement() { + return n >= arr.length ? null : JS.N(n++); + } + }; + } + public JS get(JS key) throws JSExn { return wrap(arr[toInt(key)]); } + public void put(JS key, JS val) throws JSExn { throw new JSExn("can't write to org.ibex.js.Reflection.Array's"); } } // FIXME public static class Hash { } // FIXME public Enumeration keys() throws JSExn { } - public Object get(Object key) throws JSExn { + public JS get(JS key) throws JSExn { String k = toString(key); try { Field f = this.getClass().getField(k); @@ -49,11 +57,11 @@ public class JSReflection extends JS { return null; } - public void put(Object key, Object val) throws JSExn { + public void put(JS key, JS val) throws JSExn { throw new JSExn("put() not supported yet"); } - public Object callMethod(Object method, Object a0, Object a1, Object a2, Object[] rest, int nargs) throws JSExn { + public JS callMethod(JS method, JS a0, JS a1, JS a2, JS[] rest, int nargs) throws JSExn { String k = toString(method); try { Method[] methods = this.getClass().getMethods(); @@ -77,5 +85,5 @@ public class JSReflection extends JS { throw new JSExn("unhandled reflected exception: " + ite.toString()); } catch (SecurityException nfe) { } throw new JSExn("called a reflection method with the wrong number of arguments"); - }*/ + } } -- 1.7.10.4