Revision: 1986
http://svn.sourceforge.net/vexi/?rev=1986&view=rev
Author: mkpg2
Date: 2007-07-15 10:30:12 -0700 (Sun, 15 Jul 2007)
Log Message:
-----------
Fix/improve backtracing.
Modified Paths:
--------------
core/trunk/org.ibex.js/src/org/ibex/js/Interpreter.jpp
core/trunk/org.ibex.js/src/org/ibex/js/JSExn.java
core/trunk/org.ibex.js/src/org/ibex/js/JSU.jpp
core/trunk/org.vexi.core/src/org/vexi/core/Blessing.java
core/trunk/org.vexi.core/src/org/vexi/core/Template.java
core/trunk/org.vexi.core/src/org/vexi/core/TemplateBuilder.java
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/TestLineNumbering.java
Added Paths:
-----------
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_a.t
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_b.t
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_apply.t
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_init.t
Modified: core/trunk/org.ibex.js/src/org/ibex/js/Interpreter.jpp
===================================================================
--- core/trunk/org.ibex.js/src/org/ibex/js/Interpreter.jpp 2007-07-13
14:56:35 UTC (rev 1985)
+++ core/trunk/org.ibex.js/src/org/ibex/js/Interpreter.jpp 2007-07-15
17:30:12 UTC (rev 1986)
@@ -76,17 +76,15 @@
}
}
- static int getLine() {
- Interpreter c = Thread.getCurrentInterpreter();
- return c == null || c.f == null || c.pc < 0 || c.pc >= c.f.size ? -1 :
c.f.line[c.pc];
+ int getLine() {
+ return f == null || pc < 0 || pc >= f.size ? -1 : f.line[pc];
}
- static String getSourceName() {
- Interpreter c = Thread.getCurrentInterpreter();
- return c == null || c.f == null ? null : c.f.sourceName;
+ String getSourceName() {
+ return f == null ? null : f.sourceName;
}
- private static JSExn je(String s) { return new JSExn(getSourceName() + ":"
+ getLine() + " " + s); }
+ private JSExn je(String s) { return new JSExn(getSourceName() + ":" +
getLine() + " " + s); }
private JS run() throws JSExn {
@@ -401,7 +399,9 @@
JS thrown = (JS)stack.pop();
// If already an exception then we recover the JSExn and
rethrow it
if(thrown instanceof JSExn.ExnJSObj){
- throw ((JSExn.ExnJSObj)thrown).getJSExn();
+ JSExn je = ((JSExn.ExnJSObj)thrown).getJSExn();
+ je.fillIfEmpty(this);
+ throw je;
}else
throw new JSExn(thrown, null, this);
}
@@ -716,7 +716,7 @@
}
}
- static final class Stack {
+ final class Stack {
private static final int MAX_STACK_SIZE = 512;
private Object[] stack = new Object[8];
private int sp = 0;
@@ -749,12 +749,21 @@
}
void backtrace(JSExn e) {
- for(int i=sp-1;i>=0;i--) {
+ for(int i=sp-1;i>=0;i--) {
+ if (stack[i] instanceof CallMarker) break;
if (stack[i] instanceof Backtraceable) {
Backtraceable cm = (Backtraceable)stack[i];
e.addBacktrace(cm.traceLine());
}
}
+ if(f!=null)
+ e.addBacktrace(f.sourceName + ":" + f.line[pc]);
+ for(int i=sp-1;i>=0;i--) {
+ if (stack[i] instanceof CallMarker) {
+ CallMarker cm = (CallMarker)stack[i];
+ e.addBacktrace(cm.traceLine());
+ }
+ }
}
}
Modified: core/trunk/org.ibex.js/src/org/ibex/js/JSExn.java
===================================================================
--- core/trunk/org.ibex.js/src/org/ibex/js/JSExn.java 2007-07-13 14:56:35 UTC
(rev 1985)
+++ core/trunk/org.ibex.js/src/org/ibex/js/JSExn.java 2007-07-15 17:30:12 UTC
(rev 1986)
@@ -38,8 +38,6 @@
if(cx == null) cx = Thread.getCurrentInterpreter();
if(cx == null) return;
while(cx!=null){
- if(cx.f!=null)
- addBacktrace(cx.f.sourceName + ":" + cx.f.line[cx.pc]);
cx.stack.backtrace(this);
cx = cx.old;
}
Modified: core/trunk/org.ibex.js/src/org/ibex/js/JSU.jpp
===================================================================
--- core/trunk/org.ibex.js/src/org/ibex/js/JSU.jpp 2007-07-13 14:56:35 UTC
(rev 1985)
+++ core/trunk/org.ibex.js/src/org/ibex/js/JSU.jpp 2007-07-15 17:30:12 UTC
(rev 1986)
@@ -130,7 +130,10 @@
}else if(message == null){
message = "*null*";
}
- Log.uLog(Interpreter.getSourceName(), ""+ Interpreter.getLine(),
message, level);
+ Interpreter cx = Thread.getCurrentInterpreter();
+ String src = cx==null?null:cx.getSourceName();
+ String line = cx==null?null:""+ cx.getLine();
+ Log.uLog(src, line, message, level);
}
public static void debug(Object message) { log(Log.DEBUG, message); }
Modified: core/trunk/org.vexi.core/src/org/vexi/core/Blessing.java
===================================================================
--- core/trunk/org.vexi.core/src/org/vexi/core/Blessing.java 2007-07-13
14:56:35 UTC (rev 1985)
+++ core/trunk/org.vexi.core/src/org/vexi/core/Blessing.java 2007-07-15
17:30:12 UTC (rev 1986)
@@ -88,7 +88,7 @@
}
JS getStatic() throws JSExn {
- return getStatic(new Template(vexi, JSU.toString(parentkey)));
+ return getStatic(new Template(vexi, description()));
}
JS getStatic(Template unresolved) throws JSExn {
if (t == null) {
@@ -139,4 +139,7 @@
return description()+"$"+Integer.toHexString(hashCode());
}
+ /*public String toString(){
+ return coerceToString();
+ }*/
}
Modified: core/trunk/org.vexi.core/src/org/vexi/core/Template.java
===================================================================
--- core/trunk/org.vexi.core/src/org/vexi/core/Template.java 2007-07-13
14:56:35 UTC (rev 1985)
+++ core/trunk/org.vexi.core/src/org/vexi/core/Template.java 2007-07-15
17:30:12 UTC (rev 1986)
@@ -4,8 +4,6 @@
package org.vexi.core;
-import java.io.IOException;
-
import org.ibex.js.Backtraceable;
import org.ibex.js.JS;
import org.ibex.js.JSExn;
@@ -149,33 +147,21 @@
* @param ptemplates a vector of the fileNames to recieve private
references on the pboxes
*/
public void apply(Box b) throws JSExn {
- try {
- apply(b, null);
- } catch (IOException e) {
- throw new JSExn(e.toString());
- } catch (JSExn e) {
- throw e;
- }
+ apply(b, null);
}
- private static Template preapply(Box b, Template t) throws JSExn,
IOException{
+ private static Template preapply(Box b, Template t) throws JSExn{
if (t != null){
// make sure we have resolved
if(t.staticPart.staticObject==null){
- Thread.getCurrentInterpreter().enterNonJSCall(
t.staticPart);
- try{
- t =
((Blessing)Vexi.resolveString(t.vexi,t.staticPart.sourceName,
false)).initTemplate(t);
- }finally{
- Thread.getCurrentInterpreter().exitNonJSCall();
- }
+ t =
((Blessing)Vexi.resolveString(t.vexi,t.staticPart.sourceName,
false)).initTemplate(t);
}
t.apply(b, null);
}
return t;
}
-
- private static final JS[] callempty = new JS[0];
- private void apply(Box b, PerInstantiationScope parentPis) throws JSExn,
IOException {
+
+ private void apply(Box b, PerInstantiationScope parentPis) throws JSExn {
Thread.getCurrentInterpreter().enterNonJSCall( this);
try{
// REMARK - the preapplies may not have been resolved yet,
@@ -206,7 +192,7 @@
script = TemplateBuilder.parseScript(content, content_start,
fileName(), pisParserParam); content = null;
if(script== null)script = JSU.F;
}
- if (script != JSU.F) JSU.cloneWithNewGlobalScope(script,
pis).call(null, callempty);
+ if (script != JSU.F) JSU.cloneWithNewGlobalScope(script,
pis).call(null, EMPTY_JS_ARRAY);
for(int i=0; keys != null && i < keys.length; i++) {
if (keys[i] == null) continue;
@@ -229,8 +215,8 @@
}
b.putAndTriggerTraps(key, val);
}
- }finally{
- Thread.getCurrentInterpreter().exitNonJSCall();
+ }finally{
+ Thread.getCurrentInterpreter().exitNonJSCall();
}
}
public String traceLine() {
Modified: core/trunk/org.vexi.core/src/org/vexi/core/TemplateBuilder.java
===================================================================
--- core/trunk/org.vexi.core/src/org/vexi/core/TemplateBuilder.java
2007-07-13 14:56:35 UTC (rev 1985)
+++ core/trunk/org.vexi.core/src/org/vexi/core/TemplateBuilder.java
2007-07-15 17:30:12 UTC (rev 1986)
@@ -96,7 +96,12 @@
if (t != null) {
initStatic();
JS staticScope = t.new StaticScope();
- if (staticScript != null)
JSU.cloneWithNewGlobalScope(staticScript, staticScope).call(null, callempty);
+
Thread.getCurrentInterpreter().enterNonJSCall( t.staticPart);
+ try{
+ if (staticScript != null)
JSU.cloneWithNewGlobalScope(staticScript, staticScope).call(null, callempty);
+ }finally{
+
Thread.getCurrentInterpreter().exitNonJSCall();
+ }
}else{
Log.uWarn(LOG_TYPE, "'" +
unresolved.staticPart.sourceName + ".t' does not declare a template");
}
Modified:
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/TestLineNumbering.java
===================================================================
---
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/TestLineNumbering.java
2007-07-13 14:56:35 UTC (rev 1985)
+++
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/TestLineNumbering.java
2007-07-15 17:30:12 UTC (rev 1986)
@@ -13,12 +13,19 @@
import junit.framework.TestResult;
import test.core.CoreTestSuite;
import test.core.Util;
+import test.core.download.TestDownload;
/**
* @author mike
*/
public class TestLineNumbering extends CoreTestSuite{
+ public static void main(String[] args) throws Throwable {
+ CoreTestSuite cts = new TestLineNumbering();
+ TestCase t = cts.createTestCase(cts.getResourceDirs(),
"backtrace_init.t");
+ t.runBare();
+ }
+
File tempDir;
public TestLineNumbering() {
Added: core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_a.t
===================================================================
--- core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_a.t
(rev 0)
+++ core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_a.t
2007-07-15 17:30:12 UTC (rev 1986)
@@ -0,0 +1,13 @@
+<!-- Copyleft 2004 - see COPYING for details [LGPL] -->
+<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:li="lib" xmlns="">
+ <meta:doc>
+ Author: Mike
+ </meta:doc>
+
+
+ <ui:box>
+ throw "_LINE_";
+ </ui:box>
+
+
+</vexi>
Added: core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_b.t
===================================================================
--- core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_b.t
(rev 0)
+++ core/trunk/org.vexi.core/src_junit/test/core/linenumbering/_b.t
2007-07-15 17:30:12 UTC (rev 1986)
@@ -0,0 +1,13 @@
+<!-- Copyleft 2004 - see COPYING for details [LGPL] -->
+<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:li="lib" xmlns="">
+ <meta:doc>
+ Author: Mike
+ </meta:doc>
+
+ throw "_LINE_";
+ <ui:box>
+
+ </ui:box>
+
+
+</vexi>
Added:
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_apply.t
===================================================================
---
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_apply.t
(rev 0)
+++
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_apply.t
2007-07-15 17:30:12 UTC (rev 1986)
@@ -0,0 +1,19 @@
+<!-- Copyleft 2004 - see COPYING for details [LGPL] -->
+<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:li="lib" xmlns="">
+ <meta:doc>
+ Author: Mike
+ </meta:doc>
+
+ try{._a(vexi.box);}
+ catch(e){
+ vexi.log.info(e);
+ var st = e.stackTrace;
+ .util..assertEquals("_a:"+e.message,st[0]);
+ .util..assertEquals("(apply)",st[1].substr(-7));
+ return;
+ }
+ assert(false);
+ <ui:box>
+
+ </ui:box>
+</vexi>
Added:
core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_init.t
===================================================================
--- core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_init.t
(rev 0)
+++ core/trunk/org.vexi.core/src_junit/test/core/linenumbering/backtrace_init.t
2007-07-15 17:30:12 UTC (rev 1986)
@@ -0,0 +1,19 @@
+<!-- Copyleft 2004 - see COPYING for details [LGPL] -->
+<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:li="lib" xmlns="">
+ <meta:doc>
+ Author: Mike
+ </meta:doc>
+
+ try{._b(vexi.box);}
+ catch(e){
+ vexi.log.info(e);
+ var st = e.stackTrace;
+ .util..assertEquals("_b:"+e.message,st[0]);
+ .util..assertEquals("(init)",st[1].substr(-6));
+ return;
+ }
+ assert(false);
+ <ui:box>
+
+ </ui:box>
+</vexi>
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn