Author: fperrad
Date: Fri May  4 09:50:44 2007
New Revision: 18422

Modified:
   trunk/languages/lua/Lua/pir.pm

Log:
[Lua]
- top exception looks like original lua

Modified: trunk/languages/lua/Lua/pir.pm
==============================================================================
--- trunk/languages/lua/Lua/pir.pm      (original)
+++ trunk/languages/lua/Lua/pir.pm      Fri May  4 09:50:44 2007
@@ -14,24 +14,26 @@
         $self->{fh}       = $fh;
         $self->{prologue} = q{
 .include 'interpinfo.pasm'
+.include 'except_severity.pasm'
 
 .HLL 'Lua', 'lua_group'
 
 .sub '__start' :main
   .param pmc args
-  $S0 = shift args
-  $I0 = args
-  $P0 = new .Array
-  set $P0, $I0
-  $I1 = 0
-  push_eh root_exception_handler
+  .local string progname
+  progname = shift args
+  $I1 = args
+  $P1 = new .Array
+  set $P1, $I1
+  $I0 = 0
+  push_eh _handler
 L1:
-  unless $I1 < $I0 goto L2
+  unless $I0 < $I1 goto L2
   $S0 = shift args
-  $P1 = new .LuaString
-  set $P1, $S0
-  $P0[$I1] = $P1
-  inc $I1
+  $P0 = new .LuaString
+  set $P0, $S0
+  $P1[$I0] = $P0
+  inc $I0
   goto L1
 L2:
 #  print "start Lua\n"
@@ -48,25 +50,32 @@
   load_bytecode 'languages/lua/lib/luaperl.pbc'
 
   .const .Sub main = '_main'
-  .local pmc env
-  env = get_global '_G'
-  main.'setfenv'(env)
-  .return main($P0 :flat)
-
-root_exception_handler:
-  .include 'except_severity.pasm'
+  $P0 = get_global '_G'
+  main.'setfenv'($P0)
+  .return main($P1 :flat)
+
+_handler:
+  .local pmc ex
+  .local string msg
+  .get_results (ex, msg)
   .local int severity
-  get_results '(0, 0)', $P0, $S0
-  severity = $P0[2]
-  if severity == .EXCEPT_EXIT goto lua_exited
-  $S1 = $P0[0]
-  $S0 = "Unhandled exception: "
+  severity = ex[2]
+  if severity == .EXCEPT_EXIT goto L3
+  .local int lineno
+  $S0 = 'lua: '
+  $S0 .= progname
+  $S0 .= ':'
+  lineno = 0        # TODO: source lineno
+  $S1 = lineno
   $S0 .= $S1
-  $S0 .= "\n"
+  $S0 .= ': '
+  $S0 .= msg
+  $S0 .= "\nstack traceback:\n"
+  $S0 .= "\tTODO\n"
   printerr $S0
   exit 1
-lua_exited:
-  rethrow $P0
+L3:
+  rethrow ex
 .end
 
 .sub '__onload' :anon :init

Reply via email to