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.