Author: fperrad
Date: Wed May  9 11:10:12 2007
New Revision: 18489

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

Log:
[Lua]
- exception management is hidden in docall() 

Modified: trunk/languages/lua/Lua/pir.pm
==============================================================================
--- trunk/languages/lua/Lua/pir.pm      (original)
+++ trunk/languages/lua/Lua/pir.pm      Wed May  9 11:10:12 2007
@@ -14,19 +14,16 @@
         $self->{fh}       = $fh;
         $self->{prologue} = q{
 .include 'interpinfo.pasm'
-.include 'except_severity.pasm'
 
 .HLL 'Lua', 'lua_group'
 
 .sub '__start' :main
   .param pmc args
-  .local string progname
-  progname = shift args
+  $S0 = shift args
   $I1 = args
   $P1 = new .Array
   set $P1, $I1
   $I0 = 0
-  push_eh _handler
 L1:
   unless $I0 < $I1 goto L2
   $S0 = shift args
@@ -49,50 +46,10 @@
   load_bytecode 'languages/lua/lib/luadebug.pbc'
   load_bytecode 'languages/lua/lib/luaperl.pbc'
 
-  .const .Sub _action = '_action'
-  $P0 = newclosure _action
-  pushaction $P0
-  .local pmc traceback
-  .lex 'traceback', traceback
-  new traceback, .LuaString
-  .local pmc where
-  .lex 'where', where
-  new where, .LuaString
-
   .const .Sub main = '_main'
   $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
-  severity = ex[2]
-  if severity == .EXCEPT_EXIT goto L3
-  .local int lineno
-  $S0 = 'lua: '
-  $S1 = where
-  $S0 .= $S1
-  $S0 .= ' '
-  $S0 .= msg
-  $S0 .= "\n"
-  printerr $S0
-  printerr traceback
-  exit 1
-L3:
-  rethrow ex
-.end
-
-.sub '_action' :anon :outer(__start)
-  $P0 = new .Lua
-  $S0 = $P0.'traceback'(1)
-  $P1 = find_lex 'traceback'
-  set $P1, $S0
-  $S0 = $P0.'where'()
-  $P1 = find_lex 'where'
-  set $P1, $S0
+  docall(main, $P1 :flat)
 .end
 
 .sub '__onload' :anon :init

Modified: trunk/languages/lua/lib/luaaux.pir
==============================================================================
--- trunk/languages/lua/lib/luaaux.pir  (original)
+++ trunk/languages/lua/lib/luaaux.pir  Wed May  9 11:10:12 2007
@@ -467,6 +467,62 @@
 .end
 
 
+=item C<docall (f, arg)>
+
+=cut
+
+.include 'except_severity.pasm'
+
+.sub 'docall'
+    .param pmc f
+    .param pmc vararg :slurpy
+    push_eh _handler
+    .const .Sub _traceback = 'traceback'
+    $P0 = newclosure _traceback
+    pushaction $P0
+    .local pmc traceback
+    .lex 'traceback', traceback
+    new traceback, .LuaString
+    .local pmc where
+    .lex 'where', where
+    new where, .LuaString
+    f(vararg :flat)
+    .return ()
+_handler:
+    .local pmc ex
+    .local string msg
+    .get_results (ex, msg)
+    .local int severity
+    severity = ex[2]
+    if severity == .EXCEPT_EXIT goto L1
+    .local int lineno
+    $S0 = 'lua: '
+    $S1 = where
+    $S0 .= $S1
+    $S0 .= ' '
+    $S0 .= msg
+    $S0 .= "\n"
+    printerr $S0
+    printerr traceback
+    .return ()
+L1:
+    rethrow ex
+.end
+
+.sub 'traceback' :anon :outer(docall)
+    .param int flag
+    unless flag == 1 goto L1
+    $P0 = new .Lua
+    $S0 = $P0.'traceback'(1)
+    $P1 = find_lex 'traceback'
+    set $P1, $S0
+    $S0 = $P0.'where'()
+    $P1 = find_lex 'where'
+    set $P1, $S0
+L1:
+.end
+
+
 =item C<mkarg (argv)>
 
 Support variable number of arguments function call.

Reply via email to