Revision: 3507 http://vexi.svn.sourceforge.net/vexi/?rev=3507&view=rev Author: clrg Date: 2009-05-25 23:54:55 +0000 (Mon, 25 May 2009)
Log Message: ----------- Now vexi.trace takes multiple arguments, logs a comma-delimited string, and also returns it Modified Paths: -------------- trunk/core/org.ibex.js/src/org/ibex/js/JSON.java trunk/core/org.vexi.core/src/org/vexi/core/Vexi.jpp Modified: trunk/core/org.ibex.js/src/org/ibex/js/JSON.java =================================================================== --- trunk/core/org.ibex.js/src/org/ibex/js/JSON.java 2009-05-22 21:06:27 UTC (rev 3506) +++ trunk/core/org.ibex.js/src/org/ibex/js/JSON.java 2009-05-25 23:54:55 UTC (rev 3507) @@ -11,7 +11,7 @@ } } - static void marshal(StringBuffer sb, JS value) throws JSExn{ + static public void marshal(StringBuffer sb, JS value) throws JSExn{ if(value==null){ sb.append("null"); Modified: trunk/core/org.vexi.core/src/org/vexi/core/Vexi.jpp =================================================================== --- trunk/core/org.vexi.core/src/org/vexi/core/Vexi.jpp 2009-05-22 21:06:27 UTC (rev 3506) +++ trunk/core/org.vexi.core/src/org/vexi/core/Vexi.jpp 2009-05-25 23:54:55 UTC (rev 3507) @@ -4,6 +4,7 @@ package org.vexi.core; +import java.lang.StringBuffer; import org.ibex.crypto.MD5; import org.ibex.js.*; import org.vexi.js.*; @@ -238,81 +239,90 @@ try { //#switch(JSU.toString(method)) case "bless": return bless_jsthread(this_, args[0],(args.length<2)?null:args[1]); - case "cache": return Resources.cache(args); - case "date": return new JSDate(args); - case "file.load": return accessFile(args,false); - case "file.save": return accessFile(args,true); - case "js.eval": return Methods.eval(args); + case "cache": return Resources.cache(args); + case "date": return new JSDate(args); + case "file.load": return accessFile(args,false); + case "file.save": return accessFile(args,true); + case "js.eval": return Methods.eval(args); // FIXME support object dumping case "log.debug": if(args.length<1) JSU.debug(null); else JSU.debug(args[0]); return null; case "log.info": if(args.length<1) JSU.info(null); else JSU.info(args[0]); return null; case "log.warn": if(args.length<1) JSU.warn(null); else JSU.warn(args[0]); return null; case "log.error": if(args.length<1) JSU.error(null); else JSU.error(args[0]); return null; case "net.rpc.soap": return new SOAP(JSU.toString(args[0]), JSU.toString(args[1]), JSU.toString(args[2])); + case "trace": + StringBuffer sb = new StringBuffer(); + for (int i=0; i<args.length; i++) { + if (i>0) sb.append(','); + JSON.marshal(sb, args[i]); + } + JS ret = JSU.S(sb.toString()); + JSU.warn(ret); + return ret; //#end switch (args.length) { - case 0: - //#switch(JSU.toString(method)) - case "exit": Main.exit(); return null; - case "thread.yield": JSU.sleep(-1); return null; - //#end - break; - case 1: - //#switch(JSU.toString(method)) - case "clone": - if(args[0] == null) throw new JSExn("can't clone the null value"); - return new JS.Clone(args[0]); - case "crypto.rsa": /* FEATURE */ return null; - case "crypto.md5": - byte[] content = JSU.toString(args[0]).getBytes(); - MD5 md5 = new MD5(); - md5.update(content, 0, content.length); - byte[] data = new byte[md5.getDigestSize()]; - md5.doFinal(data, 0); - return JSU.S(Encode.bytesToHex(data).toLowerCase()); - case "crypto.sha1": /* FEATURE */ return null; - case "crypto.rc4": /* FEATURE */ return null; - case "file.remove": ((Fountain.File)args[0]).remove(); return null; - case "js.stringify": return JSON.marshal(args[0]); - case "net.rpc.xml": return new XMLRPC(JSU.toString(args[0]), ""); - case "regexp": return new JSRegexp(args[0], null); - case "thread.sleep": JSU.sleep(JSU.toInt(args[0])); return null; - case "trace": JSU.warn(JSON.marshal(args[0])); return null; - case "ui.browser": Platform.newBrowserWindow(JSU.toString(args[0])); return null; - case "ui.font.install": Resources.installFont(args[0]); return null; - case "ui.insets": - if(args[0] == null) throw new JSExn("can't discern insets for a null frame"); - Box b = null; - try{ b = (Box)args[0]; } - catch(ClassCastException cce) { throw new JSExn("can't discern insets for non-box '"+args[0]+"'"); } - Surface s = null; - try{ s = b.getSurface(); } - catch(ClassCastException cce) { throw new JSExn("can't discern insets for box not attached to a surface"); } - JS ret = new JS.Obj(); - ret.put(JSU.S("top"), JSU.N(s.topInset)); - ret.put(JSU.S("left"), JSU.N(s.leftInset)); - ret.put(JSU.S("bottom"), JSU.N(s.bottomInset)); - ret.put(JSU.S("right"), JSU.N(s.rightInset)); - return ret; - case "unclone": return args[0].unclone(); - //#end - break; - case 2: - //#switch(JSU.toString(method)) - case "regexp": return new JSRegexp(args[0], args[1]); - //#end - case 3: - //#switch(JSU.toString(method)) - case "ui.font.height": - try { return JSU.N(Font.getFont(args[0], Text.jsToPointsize(args[1])).textheight(JSU.toString(args[2]))); } - catch (Exception e) { throw new JSExn("called vexi.ui.font.height with illegal arguments"); } - case "ui.font.wait": throw new Error("FIXME: vexi.ui.font.wait not implemented"); - case "ui.font.width": - try { return JSU.N(Font.getFont(args[0], Text.jsToPointsize(args[1])).textwidth(JSU.toString(args[2]))); } - catch (Exception e) { throw new JSExn("called vexi.ui.font.width with illegal arguments"); } - //#end - break; + case 0: + //#switch(JSU.toString(method)) + case "exit": Main.exit(); return null; + case "thread.yield": JSU.sleep(-1); return null; + //#end + break; + case 1: + //#switch(JSU.toString(method)) + case "clone": + if (args[0] == null) throw new JSExn("can't clone the null value"); + return new JS.Clone(args[0]); + case "crypto.rsa": /* FEATURE */ return null; + case "crypto.md5": + byte[] content = JSU.toString(args[0]).getBytes(); + MD5 md5 = new MD5(); + md5.update(content, 0, content.length); + byte[] data = new byte[md5.getDigestSize()]; + md5.doFinal(data, 0); + return JSU.S(Encode.bytesToHex(data).toLowerCase()); + case "crypto.sha1": /* FEATURE */ return null; + case "crypto.rc4": /* FEATURE */ return null; + case "file.remove": ((Fountain.File)args[0]).remove(); return null; + case "js.stringify": return JSON.marshal(args[0]); + case "net.rpc.xml": return new XMLRPC(JSU.toString(args[0]), ""); + case "regexp": return new JSRegexp(args[0], null); + case "thread.sleep": JSU.sleep(JSU.toInt(args[0])); return null; + case "ui.browser": Platform.newBrowserWindow(JSU.toString(args[0])); return null; + case "ui.font.install": Resources.installFont(args[0]); return null; + case "ui.insets": + if (args[0] == null) throw new JSExn("can't discern insets for a null frame"); + Box b = null; + try { b = (Box)args[0]; } + catch(ClassCastException cce) { throw new JSExn("can't discern insets for non-box '"+args[0]+"'"); } + Surface s = null; + try { s = b.getSurface(); } + catch(ClassCastException cce) { throw new JSExn("can't discern insets for box not attached to a surface"); } + JS ret = new JS.Obj(); + ret.put(JSU.S("top"), JSU.N(s.topInset)); + ret.put(JSU.S("left"), JSU.N(s.leftInset)); + ret.put(JSU.S("bottom"), JSU.N(s.bottomInset)); + ret.put(JSU.S("right"), JSU.N(s.rightInset)); + return ret; + case "unclone": return args[0].unclone(); + //#end + break; + case 2: + //#switch(JSU.toString(method)) + case "regexp": return new JSRegexp(args[0], args[1]); + //#end + break; + case 3: + //#switch(JSU.toString(method)) + case "ui.font.height": + try { return JSU.N(Font.getFont(args[0], Text.jsToPointsize(args[1])).textheight(JSU.toString(args[2]))); } + catch (Exception e) { throw new JSExn("called vexi.ui.font.height with illegal arguments"); } + case "ui.font.wait": throw new Error("FIXME: vexi.ui.font.wait not implemented"); + case "ui.font.width": + try { return JSU.N(Font.getFont(args[0], Text.jsToPointsize(args[1])).textwidth(JSU.toString(args[2]))); } + catch (Exception e) { throw new JSExn("called vexi.ui.font.width with illegal arguments"); } + //#end + break; } } catch (RuntimeException e) { // FIXME: maybe JSExn should take a second argument, Exception This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT is a gathering of tech-side developers & brand creativity professionals. Meet the minds behind Google Creative Lab, Visual Complexity, Processing, & iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian Group, R/GA, & Big Spaceship. http://www.creativitycat.com _______________________________________________ Vexi-svn mailing list Vexi-svn@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/vexi-svn