Revision: 3607
http://vexi.svn.sourceforge.net/vexi/?rev=3607&view=rev
Author: mkpg2
Date: 2009-08-18 00:56:54 +0000 (Tue, 18 Aug 2009)
Log Message:
-----------
Refactoring. Component-ize js. No longer uses singleton scheduler, log.
Modified Paths:
--------------
trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp
trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp
trunk/core/org.ibex.js/src/org/ibex/js/Parser.java
trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java
trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp
trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java
trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java
trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java
trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java
trunk/core/org.ibex.util/src/org/ibex/util/Logger.java
trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp
trunk/core/org.vexi.core/src/org/vexi/core/Main.java
trunk/core/org.vexi.core/src/org/vexi/core/Surface.java
trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java
trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
trunk/core/org.vexi.core/src_junit/test/core/TestCore.java
Modified: trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp 2009-08-17 11:50:36 UTC
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/JS.jpp 2009-08-18 00:56:54 UTC
(rev 3607)
@@ -674,10 +674,10 @@
}
// Do we need both the Trap interface and this (its only implementor)
- static final class TrapHolder implements Trap {
+ static final public class TrapHolder implements Trap {
private final JS target, key, function;
private Trap next;
- TrapHolder(JS t, JS k, JS f, Trap n) { target = t; key = k; function =
f; next = n; }
+ public TrapHolder(JS t, JS k, JS f, Trap n) { target = t; key = k;
function = f; next = n; }
public JS key() { return key; }
public JS target() { return target; }
public JS function() { return function; }
Modified: trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp 2009-08-17 11:50:36 UTC
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/JSExn.jpp 2009-08-18 00:56:54 UTC
(rev 3607)
@@ -4,8 +4,7 @@
package org.ibex.js;
-import java.io.PrintStream;
-import java.io.PrintWriter;
+import java.io.*;
import org.ibex.util.*;
@@ -72,9 +71,13 @@
public void printStackTrace(PrintWriter pw) {
printStackTrace(pw, Logger.DEBUG);
}
- public void printStackTrace(int level, Logger logger){
- if(level<=logger.level)
- printStackTrace(new
PrintWriter(logger.logstream()),logger.level);
+ public void printStackTrace(int level, Logger logger, Object o){
+ if(level<=logger.getLevel()){
+ StringWriter sw = new StringWriter(1024);
+ PrintWriter pw = new PrintWriter(sw);
+ printStackTrace(pw,logger.getLevel());
+ logger.log(o, sw.toString(), level);
+ }
}
public void printStackTrace(PrintWriter pw, int level) {
int size = Math.min(backtrace.size(), MAX_BACKTRACE_SIZE);
Modified: trunk/core/org.ibex.js/src/org/ibex/js/Parser.java
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/Parser.java 2009-08-17 11:50:36 UTC
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/Parser.java 2009-08-18 00:56:54 UTC
(rev 3607)
@@ -83,7 +83,7 @@
// Constructors //////////////////////////////////////////////////////
- Parser(Reader r, String sourceName, int line) throws IOException {
super(r, sourceName, line); }
+ Parser(Reader r, String sourceName, int line, GlobalsChecker param) throws
IOException { super(r, sourceName, line); this.param = param; }
/** for debugging */
public static void main(String[] s) throws IOException {
@@ -254,36 +254,29 @@
/** parse and compile a function */
public static JSFunction fromReader(String sourceName, int firstLine,
Reader sourceCode, GlobalsChecker param) throws IOException {
- JSFunction ret = new JSFunction(sourceName, firstLine, null);
- if (sourceCode == null) return ret;
- Parser p = new Parser(sourceCode, sourceName, firstLine);
- p.param = param;
-
- p.scopeStack.clear();
+ if (sourceCode == null) return new JSFunction(sourceName, firstLine,
null);
+ Parser p = new Parser(sourceCode, sourceName, firstLine, param);
+ return p.parseScript(null);
+ }
+
+ public JSFunction parseScript(Scope scope) throws IOException{
+ JSFunction ret = new JSFunction(sourceName, line, scope);
+ scopeStack.clear();
ScopeInfo si = new ScopeInfo();
si.jsfunc = ret;
- p.scopeStack.push(si);
- p.scopePush(ret);
- p.scopeDeclare("arguments", true);
- ret.add(firstLine, SCOPEPUT,p.scopeKey("arguments"));
+ scopeStack.push(si);
+ scopePush(ret);
+ scopeDeclare("arguments", true);
+ ret.add(line, SCOPEPUT, scopeKey("arguments"));
while(true) {
- //int s = ret.size;
- if(p.peekToken() == -1) break; // FIXME: Check this logic one more
time
- p.parseStatement(ret, null);
- //if (s == ret.size) break;
+ if(peekToken() == -1) break; // FIXME: Check this logic one more
time
+ parseStatement(ret, null);
}
- p.scopePop(ret);
- if(p.scopeStack.size() != 1) throw new Error("scopeStack height
mismatch");
+ scopePop(ret);
+ if(scopeStack.size() != 1) throw new Error("scopeStack height
mismatch");
ret.add(-1, LITERAL, null);
ret.add(-1, RETURN);
-
- /*java.io.BufferedReader br = new java.io.BufferedReader(new
java.io.StringReader(ret.dump()));
- String line = "";
- while((line=br.readLine())!=null){
- System.out.println(line.replaceAll("[0-9]*\\s\\(-?[0-9]*\\)",
""));
- }*/
- //System.out.println(ret.dump());
return ret;
}
@@ -751,7 +744,6 @@
}
/** Parse a block of statements which must be surrounded by LC..RC. */
- void parseBlock(JSFunction b) throws IOException { parseBlock(b, null); }
void parseBlock(JSFunction b, String label) throws IOException {
int saveParserLine = parserLine;
_parseBlock(b, label);
Modified: trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java
===================================================================
--- trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src/org/ibex/js/Scheduler.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -77,40 +77,44 @@
public Exception defaultRun() {
- while(true) {
- try {
- if(runnable.size()==0 && isFinished()){
- logger.error(Scheduler.class,
"halting");
- return null;
+ try{
+ while(true) {
+ try {
+ if(runnable.size()==0 && isFinished()){
+ logger.error(Scheduler.class,
"halting");
+ return null;
+ }
+ current =
(Callable)runnable.remove(true);
+ synchronized(this) {
+ //Log.debug(Scheduler.class,
"performing " + current);
+ current.run(null);
+ }
+ renderAll();
+ } /*catch (Stop e){
+ Log.uInfo(Scheduler.class, "Scheduler
halted: " + e.getMessage());
+ return;
+ }*/
+ catch (Exception e) {
+ // HACK for running tests, as we need
to pass any
+ // uncaught js/assertion exceptions out.
+ if(quitOnExn)
+ return e;
+
+ String message;
+ // FIXME - are these messages always
accurate(!) Could look at current
+ // task for more information
+ if(e instanceof JSExn){
+ message = "A JavaScript thread
spawned with vexi.thread threw an exception:";
+ }else{
+ message = "A Callable threw an
exception which was caught by the scheduler:";
+ }
+ logger.error(Scheduler.class, message);
+ logger.error(Scheduler.class, e);
}
- current = (Callable)runnable.remove(true);
- synchronized(this) {
- //Log.debug(Scheduler.class,
"performing " + current);
- current.run(null);
- }
- renderAll();
- } /*catch (Stop e){
- Log.uInfo(Scheduler.class, "Scheduler halted: "
+ e.getMessage());
- return;
- }*/
- catch (Exception e) {
- // HACK for running tests, as we need to pass
any
- // uncaught js/assertion exceptions out.
- if(quitOnExn)
- return e;
-
- String message;
- // FIXME - are these messages always
accurate(!) Could look at current
- // task for more information
- if(e instanceof JSExn){
- message = "A JavaScript thread spawned
with vexi.thread threw an exception:";
- }else{
- message = "A Callable threw an
exception which was caught by the scheduler:";
- }
- logger.error(Scheduler.class, message);
- logger.error(Scheduler.class, e);
+ // if an Error is thrown it will cause the
engine to quit
}
- // if an Error is thrown it will cause the engine to
quit
+ }finally{
+ threadlocal.set(null);
}
}
Modified: trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp
===================================================================
--- trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp 2009-08-17 11:50:36 UTC
(rev 3606)
+++ trunk/core/org.ibex.js/src/org/vexi/js/VexiJS.jpp 2009-08-18 00:56:54 UTC
(rev 3607)
@@ -22,14 +22,19 @@
// }
static private Scheduler scheduler(){ return Scheduler.findCurrent(); }
- static private Logger logger(){ return scheduler().logger; }
+ static private Logger logger(){
+ Scheduler s = Scheduler.getCurrent();
+ // HACK ??
+ if(s==null) return DefaultLog.logger;
+ return s.logger;
+ }
static final JS internal = new JS.Immutable() {
public JS get(JS key) throws JSExn {
//#switch(JSU.toString(key))
case "print": return METHOD;
case "stackframe": return METHOD;
- case "loglevel": return JSU.N(logger().level);
+ case "loglevel": return JSU.N(logger().getLevel());
//#end
return super.get(key);
}
@@ -37,7 +42,11 @@
switch(args.length) {
case 1: {
//#switch(JSU.toString(method))
- case "print":
logger().logstream().print(JSU.toString(args[0])); return null;
+ case "print":
+ PrintWriter w = logger().directWriter();
+ w.print(JSU.toString(args[0]));
+ w.flush();
+ return null;
case "stackframe": return
JSU.stackframe(JSU.toInt(args[0]));
//#end
}
Modified: trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java
===================================================================
--- trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_dev/org/ibex/js/DevUtil.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -105,7 +105,7 @@
static JSFunction getTrapJS(String jscode, String srcname, boolean
isWrite, JS global) throws IOException{
StringReader sr = new StringReader(jscode);
JSFunction ret = new JSFunction(srcname, 1, null);
- Parser p = new Parser( sr, srcname, 1);
+ Parser p = new Parser( sr, srcname, 1, null);
p.scopeStack.clear();
ScopeInfo si = new ScopeInfo();
si.jsfunc = ret;
Modified: trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java
===================================================================
--- trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_dev/org/ibex/js/RunJS.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -37,8 +37,8 @@
boolean isRoot;
static public void changeLogLevel(int level){
- if(LOG.level == level) return;
- LOG.level = level;
+ if(LOG.getLevel() == level) return;
+ LOG.setLevel(level);
RunJS.LOG.warn(RunJS.class, "Setting LOG LEVEL " +
Util.logLevelString(level));
}
Modified: trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
===================================================================
--- trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
2009-08-17 11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.js/src_junit/test/js/parse/TestParse.java
2009-08-18 00:56:54 UTC (rev 3607)
@@ -8,10 +8,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.ibex.js.DevUtil;
-import org.ibex.js.JS;
-import org.ibex.js.JSExn;
-import org.ibex.js.Parser;
+import org.ibex.js.*;
import org.ibex.util.SourceException;
import junit.framework.TestCase;
@@ -91,6 +88,7 @@
}*/
}
+
public void testUnterminatedStatement() throws Exception {
try{
parseFile("unterminated_statement.js");
Modified: trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java
===================================================================
--- trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.net/src/org/ibex/net/OrigHTTP.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -425,7 +425,7 @@
}
private void doProxyAuth(Hashtable h0, String method) throws IOException {
- if (logger.level >= Logger.INFO) logger.info(this, "Proxy
AuthChallenge: " + h0.get("proxy-authenticate"));
+ if (logger.isInfo()) logger.info(this, "Proxy AuthChallenge: " +
h0.get("proxy-authenticate"));
Hashtable h =
parseAuthenticationChallenge(h0.get("proxy-authenticate").toString());
String style = h.get("AUTHTYPE").toString();
//String realm = (String)h.get("realm");
Modified: trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java
===================================================================
--- trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.util/src/org/ibex/util/IbexLogger.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -108,8 +108,8 @@
public void flush() {
logstream.flush();
}
- public PrintStream logstream() {
- return logstream;
+ public PrintWriter directWriter() {
+ return new PrintWriter(logstream);
}
synchronized void log(Object major, Object minor, Object message, int
level) {
Modified: trunk/core/org.ibex.util/src/org/ibex/util/Logger.java
===================================================================
--- trunk/core/org.ibex.util/src/org/ibex/util/Logger.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.ibex.util/src/org/ibex/util/Logger.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -1,6 +1,6 @@
package org.ibex.util;
-import java.io.PrintStream;
+import java.io.*;
abstract public class Logger {
@@ -24,17 +24,20 @@
public static final int ERROR = 3;
public static final int SILENT = Integer.MAX_VALUE;
+ private int level;
+
/** Overriding implementations should synchronize this method */
public void log(Object o, Object message, int level){
if(level>=this.level)
log_(o,message,level);
}
- public int level;
+ public int getLevel(){ return level; }
+ public void setLevel(int level){ this.level = level; }
+
abstract protected void log_(Object o, Object message, int level);
- abstract public void flush();
- abstract public PrintStream logstream();
+ abstract public PrintWriter directWriter();
+ public void flush(){}
-
public boolean isDebug() { return level<=DEBUG; }
public boolean isInfo() { return level<=INFO; }
@@ -43,6 +46,6 @@
public FilterLogger(int level, Logger filtee){ super(level);
this.filtee = filtee; }
protected void log_(Object o, Object message, int level) {
filtee.log_(o,message,level); }
public void flush() { filtee.flush(); }
- public PrintStream logstream() { return filtee.logstream(); }
+ public PrintWriter directWriter() { return
filtee.directWriter(); }
}
}
Modified: trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp 2009-08-17 11:50:36 UTC
(rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Box.jpp 2009-08-18 00:56:54 UTC
(rev 3607)
@@ -941,7 +941,7 @@
return justTriggerTraps(name, val);
} catch (JSExn e) {
Log.warn(Box.class,"Caught JS Exception while putting to trap
\""+name+"\"");
- e.printStackTrace(Logger.WARN, Log.user);
+ e.printStackTrace(Logger.WARN, Log.user, Box.class);
}
return null;
}
@@ -953,7 +953,7 @@
return putAndTriggerTraps(name, val);
} catch (JSExn e) {
Log.warn(Box.class,"Caught JS Exception while putting to trap
\""+name+"\"");
- e.printStackTrace(Logger.WARN, Log.user);
+ e.printStackTrace(Logger.WARN, Log.user, Box.class);
}
return null;
}
@@ -977,7 +977,7 @@
if (t != null) Main.SCHEDULER.runBeforePut(t, val);
} catch (JSExn e) {
Log.warn(Box.class,"Caught JS Exception while putting to trap
\""+name+"\"");
- e.printStackTrace(Logger.WARN, Log.user);
+ e.printStackTrace(Logger.WARN, Log.user, Box.class);
return e;
}
return null;
@@ -990,7 +990,7 @@
if (t != null) Main.SCHEDULER.runAfterPut(trapException);
} catch (JSExn e) {
Log.warn(Box.class,"Caught JS Exception while putting to trap
\""+name+"\"");
- e.printStackTrace(Logger.WARN, Log.user);
+ e.printStackTrace(Logger.WARN, Log.user, Box.class);
}
}
Modified: trunk/core/org.vexi.core/src/org/vexi/core/Main.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Main.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Main.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -99,12 +99,12 @@
if (opt.indexOf(':') > 1) // >1 so that we don't catch
DOS drive letters
Log.user.tcp(opt.substring(0, opt.indexOf(':')),
Integer.parseInt(opt.substring(opt.indexOf(':') + 1)));
- else if (opt.equals("debug")) Log.user.level =
Logger.DEBUG;
- else if (opt.equals("info")) Log.user.level = Logger.INFO;
- else if (opt.equals("warn")) Log.user.level = Logger.WARN;
- else if (opt.equals("error")) Log.user.level =
Logger.ERROR;
- else if (opt.equals("silent")) Log.user.level =
Logger.SILENT;
- else if (opt.equals("rpc")) Log.rpc.level = Logger.DEBUG;
+ else if (opt.equals("debug"))
Log.user.setLevel(Logger.DEBUG);
+ else if (opt.equals("info"))
Log.user.setLevel(Logger.INFO);
+ else if (opt.equals("warn"))
Log.user.setLevel(Logger.WARN);
+ else if (opt.equals("error"))
Log.user.setLevel(Logger.ERROR);
+ else if (opt.equals("silent"))
Log.user.setLevel(Logger.SILENT);
+ else if (opt.equals("rpc")) Log.rpc.setLevel(Logger.DEBUG);
else Log.user.file(opt);
}
} else if (args[startargs].equals("-debug")) {
Modified: trunk/core/org.vexi.core/src/org/vexi/core/Surface.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/core/Surface.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/core/Surface.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -478,7 +478,7 @@
mouseUpdateRequired = false;
} catch (JSExn e) {
Log.warn(Box.class,"Caught JS Exception while invoking
tryPropagateMove");
- e.printStackTrace(Logger.WARN,Log.user);
+ e.printStackTrace(Logger.WARN,Log.user,Box.class);
}
}
Modified: trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java
===================================================================
--- trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src/org/vexi/plat/Platform.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -81,7 +81,7 @@
criticalAbort("Unable to detect JVM");
}
- if (slog.level >= Logger.INFO) slog.info(Platform.class,
"Detecting JVM..." + os_name +
+ if (slog.isInfo()) slog.info(Platform.class, "Detecting JVM..." +
os_name +
" ==> org.vexi.plat." + platform_class);
try {
if (platform_class != null) Class.forName("org.vexi.plat." +
platform_class).newInstance();
Modified: trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
===================================================================
--- trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
2009-08-17 11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src_junit/org/vexi/core/TestResources.java
2009-08-18 00:56:54 UTC (rev 3607)
@@ -7,9 +7,8 @@
import junit.framework.TestCase;
import junit.framework.TestSuite;
-import org.ibex.js.Fountain;
-import org.ibex.js.JS;
-import org.ibex.js.JSU;
+import org.ibex.js.*;
+
import test.Util;
import testdeployment.NanoHTTPD;
Modified: trunk/core/org.vexi.core/src_junit/test/core/TestCore.java
===================================================================
--- trunk/core/org.vexi.core/src_junit/test/core/TestCore.java 2009-08-17
11:50:36 UTC (rev 3606)
+++ trunk/core/org.vexi.core/src_junit/test/core/TestCore.java 2009-08-18
00:56:54 UTC (rev 3607)
@@ -13,8 +13,8 @@
public class TestCore {
static public void changeLogLevel(int level){
- if(Log.user.level == level) return;
- Log.user.level = level;
+ if(Log.user.getLevel() == level) return;
+ Log.user.setLevel(level);
Log.user.warn(RunJS.class, "Setting LOG LEVEL " +
Util.logLevelString(level));
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn