X-Git-Url: http://git.megacz.com/?p=org.ibex.core.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fcore%2FIbex.java;h=b44ba5ad897fc2a3d63b6e10c0251067c0c7f42e;hp=011b9bb2e3de27532edcc4f058f5eda7c5455da7;hb=fffcafc33aa4066bdf85da7a32e1a1cdb9db2d6f;hpb=8e190fb0ff508ccf4962bbfbf8295a431805c12b diff --git a/src/org/ibex/core/Ibex.java b/src/org/ibex/core/Ibex.java index 011b9bb..b44ba5a 100644 --- a/src/org/ibex/core/Ibex.java +++ b/src/org/ibex/core/Ibex.java @@ -10,12 +10,12 @@ import org.ibex.net.*; import org.ibex.crypto.*; /** Singleton class that provides all functionality in the ibex.* namespace */ -public final class Ibex extends JS.Cloneable { +public final class Ibex extends JS implements JS.Cloneable { // FIXME remove this private final JS rr; - public Ibex(Stream rr) { this.rr = bless(rr); } + public Ibex(Stream rr) { try { this.rr = bless(rr);} catch(JSExn e) { throw new Error("should never happen"); } } public JS resolveString(String str, boolean permitAbsolute) throws JSExn { if (str.indexOf("://") != -1) { @@ -161,8 +161,8 @@ public final class Ibex extends JS.Cloneable { case 1: //#switch(name) case "clone": - if (!(a instanceof JS.Cloneable)) throw new JSExn("cannot clone a " + a.getClass().getName()); - return ((JS.Cloneable)a).jsclone(); + if(a == null) throw new JSExn("can't clone the null value"); + return ((JS)a).jsclone(); case "bless": return bless((JS)a); case "ui.browser": Platform.newBrowserWindow((String)a); return null; case "stream.unzip": return new Stream.Zip((Stream)a); @@ -241,36 +241,59 @@ public final class Ibex extends JS.Cloneable { } public static final JSMath ibexMath = new JSMath() { + // FEATURE: find a cleaner way to do this private JS gs = new JSScope.Global(); public Object get(Object key) throws JSExn { //#switch(key) - case "isNaN": return gs.get("isNaN"); - case "isFinite": return gs.get("isFinite"); - case "NaN": return gs.get("NaN"); - case "Infinity": return gs.get("Infinity"); + case "isNaN": return METHOD; + case "isFinite": return METHOD; + case "NaN": return METHOD; + case "Infinity": return METHOD; //#end return super.get(key); } - }; + public Object callMethod(Object name, Object a, Object b, Object c, Object[] rest, int nargs) throws JSExn { + //#switch(name) + case "isNaN": return gs.callMethod(name,a,b,c,rest,nargs); + case "isFinite": return gs.callMethod(name,a,b,c,rest,nargs); + case "NaN": return gs.callMethod(name,a,b,c,rest,nargs); + case "Infinity": return gs.callMethod(name,a,b,c,rest,nargs); + //#end + return super.callMethod(name,a,b,c,rest,nargs); + } + }; public static final JS ibexString = new JS() { private JS gs = new JSScope.Global(); - public void put(Object key, Object val) { } public Object get(Object key) throws JSExn { //#switch(key) - case "parseInt": return gs.get("parseInt"); - case "parseFloat": return gs.get("parseFloat"); - case "decodeURI": return gs.get("decodeURI"); - case "decodeURIComponent": return gs.get("decodeURIComponent"); - case "encodeURI": return gs.get("encodeURI"); - case "encodeURIComponent": return gs.get("encodeURIComponent"); - case "escape": return gs.get("escape"); - case "unescape": return gs.get("unescape"); - case "fromCharCode": return gs.get("stringFromCharCode"); + case "parseInt": return METHOD; + case "parseFloat": return METHOD; + case "decodeURI": return METHOD; + case "decodeURIComponent": return METHOD; + case "encodeURI": return METHOD; + case "encodeURIComponent": return METHOD; + case "escape": return METHOD; + case "unescape": return METHOD; + case "fromCharCode": return METHOD; //#end - return null; + return super.get(key); + } + public Object callMethod(Object name, Object a, Object b, Object c, Object[] rest, int nargs) throws JSExn { + //#switch(name) + case "parseInt": return gs.callMethod(name,a,b,c,rest,nargs); + case "parseFloat": return gs.callMethod(name,a,b,c,rest,nargs); + case "decodeURI": return gs.callMethod(name,a,b,c,rest,nargs); + case "decodeURIComponent": return gs.callMethod(name,a,b,c,rest,nargs); + case "encodeURI": return gs.callMethod(name,a,b,c,rest,nargs); + case "encodeURIComponent": return gs.callMethod(name,a,b,c,rest,nargs); + case "escape": return gs.callMethod(name,a,b,c,rest,nargs); + case "unescape": return gs.callMethod(name,a,b,c,rest,nargs); + case "fromCharCode": return gs.callMethod(name,a,b,c,rest,nargs); + //#end + return super.callMethod(name,a,b,c,rest,nargs); } - }; + }; private class XMLHelper extends XML { private class Wrapper extends XML.Exn { public JSExn wrapee; public Wrapper(JSExn jse) { super(""); wrapee = jse; } } @@ -284,7 +307,7 @@ public final class Ibex extends JS.Cloneable { } public void startElement(XML.Element c) throws XML.Exn { try { - JS attrs = new JS(); + JS attrs = new JS.O(); // FIXME attribute URIs? add an additional hash? for(int i=0; i