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

Reply via email to