Author: fperrad
Date: Sat Jan 10 01:53:20 2009
New Revision: 35333

Modified:
   trunk/languages/lua/src/lib/luaaux.pir
   trunk/languages/lua/src/pmc/luafunction.pmc

Log:
[Lua] traceback
- only with function name (step 1)

Modified: trunk/languages/lua/src/lib/luaaux.pir
==============================================================================
--- trunk/languages/lua/src/lib/luaaux.pir      (original)
+++ trunk/languages/lua/src/lib/luaaux.pir      Sat Jan 10 01:53:20 2009
@@ -993,32 +993,57 @@
     $I0 = $P0
     if $I0 == .EXCEPT_EXIT goto L2
   L1:
-    .local string msg
-    msg = ex
-    .local int lineno
-    .local string traceback, where
-    (traceback, where) = 'traceback'()
-    $S0 = where
+    .local pmc bt
+    bt = ex.'backtrace'()
+    $S0 = where()
     $S0 .= ' '
-    $S0 .= msg
+    $S1 = ex
+    $S0 .= $S1
     $S0 .= "\n"
-    $S0 .= traceback
+    $S1 = traceback(bt)
+    $S0 .= $S1
     .return (1, $S0)
   L2:
     rethrow ex
 .end
 
-.sub 'traceback'
+.sub 'where' :anon
     # dummy implementation
-    .return ("stack traceback:\n\tdummy\n", "_._:0:")
+    .return ("_._:0:")
     # previous one that segfaults (see RT #60206)
     .local pmc obj
-    .local string traceback, where
     new obj, 'Lua'
-    traceback = obj.'traceback'(1)
-    where = obj.'where'()
+    $S0 = obj.'where'()
+    .return ($S0)
+.end
 
-    .return (traceback, where)
+.sub 'traceback' :anon
+    .param pmc bt
+    .local pmc iter, sub, outer, annos
+    new iter, 'Iterator', bt
+    .local string ret
+    ret = "stack traceback:"
+  L1:
+    unless iter goto L2
+    $P0 = shift iter
+    sub = $P0['sub']
+    if null sub goto L2
+    $S0 = sub.'get_name'()
+    outer = sub.'get_outer'()
+    ret .= "\n\t"
+    unless null outer goto L3
+    ret .= "[PIR]:"
+    goto L4
+  L3:
+    ret .= "_._:0:"
+  L4:
+    ret .= " in function '"
+    ret .= $S0
+    ret .= "'"
+    annos = $P0['annotations']
+    goto L1
+  L2:
+    .return (ret)
 .end
 
 

Modified: trunk/languages/lua/src/pmc/luafunction.pmc
==============================================================================
--- trunk/languages/lua/src/pmc/luafunction.pmc (original)
+++ trunk/languages/lua/src/pmc/luafunction.pmc Sat Jan 10 01:53:20 2009
@@ -148,6 +148,15 @@
 
 =over 4
 
+*/
+    METHOD STRING *get_name() {
+        const Parrot_sub * const sub = PMC_sub(SELF);
+        STRING *retval = string_copy(INTERP, sub->name);
+        RETURN(STRING *retval);
+    }
+
+/*
+
 =item C<PMC *getfenv()>
 
 =cut

Reply via email to