Author: fperrad
Date: Tue May  1 22:41:54 2007
New Revision: 18389

Modified:
   trunk/languages/lua/lib/lfs.pir
   trunk/languages/lua/lib/luaaux.pir
   trunk/languages/lua/lib/luabasic.pir
   trunk/languages/lua/lib/luaio.pir
   trunk/languages/lua/lib/luaos.pir
   trunk/languages/lua/t/lfs.t

Log:
[Lua]
- refactor : checkoption & lfs.attributes
- and add tests

Modified: trunk/languages/lua/lib/lfs.pir
==============================================================================
--- trunk/languages/lua/lib/lfs.pir     (original)
+++ trunk/languages/lua/lib/lfs.pir     Tue May  1 22:41:54 2007
@@ -200,52 +200,35 @@
     .param pmc aname :optional
     .local pmc ret
     .local pmc members
-    .local pmc opts
     $S1 = checkstring(filepath)
     $S0 = $S1
-    new opts, .FixedStringArray
-    set opts, 13
-    opts[0] = 'mode'
-    opts[1] = 'dev'
-    opts[2] = 'ino'
-    opts[3] = 'nlink'
-    opts[4] = 'uid'
-    opts[5] = 'gid'
-    opts[6] = 'rdev'
-    opts[7] = 'access'
-    opts[8] = 'modification'
-    opts[9] = 'change'
-    opts[10] = 'size'
-    opts[11] = 'blocks'
-    opts[12] = 'blksize'
-    new members, .FixedPMCArray
-    set members, 13
+    new members, .Hash
     .const .Sub st_mode = 'st_mode'
-    members[0] = st_mode
+    members['mode'] = st_mode
     .const .Sub st_dev = 'st_dev'
-    members[1] = st_dev
+    members['dev'] = st_dev
     .const .Sub st_ino = 'st_ino'
-    members[2] = st_ino
+    members['ino'] = st_ino
     .const .Sub st_nlink = 'st_nlink'
-    members[3] = st_nlink
+    members['nlink'] = st_nlink
     .const .Sub st_uid = 'st_uid'
-    members[4] = st_uid
+    members['uid'] = st_uid
     .const .Sub st_gid = 'st_gid'
-    members[5] = st_gid
+    members['gid'] = st_gid
     .const .Sub st_rdev = 'st_rdev'
-    members[6] = st_rdev
+    members['rdev'] = st_rdev
     .const .Sub st_atime = 'st_atime'
-    members[7] = st_atime
+    members['access'] = st_atime
     .const .Sub st_mtime = 'st_mtime'
-    members[8] = st_mtime
+    members['modification'] = st_mtime
     .const .Sub st_ctime = 'st_ctime'
-    members[9] = st_ctime
+    members['change'] = st_ctime
     .const .Sub st_size = 'st_size'
-    members[10] = st_size
+    members['size'] = st_size
     .const .Sub st_blocks = 'st_blocks'
-    members[11] = st_blocks
+    members['blocks'] = st_blocks
     .const .Sub st_blksize = 'st_blksize'
-    members[12] = st_blksize
+    members['blksize'] = st_blksize
     new $P0, .OS
     push_eh _handler
     $P1 = $P0.'stat'($S1)
@@ -254,30 +237,32 @@
     $I0 = isa aname, 'LuaString'
     unless $I0 goto L2
     $S2 = aname
-    $I2 = checkoption($S2, opts)
-    $P2 = members[$I2]
+    $P2 = members[$S2]
+    unless null $P2 goto L3
+    checkoption($S2, '')
+L3:
     ret = $P2($P1)
     .return (ret)
 L2:
     $I0 = isa aname, 'LuaTable'
     unless $I0 goto L1
     ret = aname
-    goto L3
+    goto L4
 L1:
     new ret, .LuaTable
-L3:
-    new $P2, .LuaString
-    $I0 = 0
 L4:
-    unless $I0 < 13 goto L5
-    $P3 = members[$I0]
-    $P4 = $P3($P1)
-    $S2 = opts[$I0]
+    .local pmc iter
+    new iter, .Iterator, members
+    new $P2, .LuaString
+L5:
+    unless iter goto L6
+    $S2 = shift iter
     set $P2, $S2
+    $P3 = members[$S2]
+    $P4 = $P3($P1)
     ret[$P2] = $P4
-    inc $I0
-    goto L4
-L5:
+    goto L5
+L6:
     .return (ret)
 _handler:
     .local pmc nil

Modified: trunk/languages/lua/lib/luaaux.pir
==============================================================================
--- trunk/languages/lua/lib/luaaux.pir  (original)
+++ trunk/languages/lua/lib/luaaux.pir  Tue May  1 22:41:54 2007
@@ -97,24 +97,23 @@
 
 .sub 'checkoption'
     .param string name
-    .param pmc options
+    .param string options
     .local int i
-    .local int n
     i = 0
-    n = options
+    $P1 = split ' ', options
 L1:
-    unless i < n goto L2
-    $S0 = options[i]
+    unless $P1 goto L2
+    $S0 = shift $P1
     unless $S0 == name goto L3
     .return (i)
 L3:
     inc i
     goto L1
 L2:
-    $S1 = "invalid option '"
-    concat $S1, name
-    concat $S1, "'"
-    argerror($S1)
+    $S0 = "invalid option '"
+    concat $S0, name
+    concat $S0, "'"
+    argerror($S0)
 .end
 
 

Modified: trunk/languages/lua/lib/luabasic.pir
==============================================================================
--- trunk/languages/lua/lib/luabasic.pir        (original)
+++ trunk/languages/lua/lib/luabasic.pir        Tue May  1 22:41:54 2007
@@ -269,17 +269,8 @@
     .param pmc opt :optional
     .param pmc arg :optional
     .local pmc ret
-    new $P0, .FixedStringArray
-    set $P0, 7
-    $P0[0] = 'stop'
-    $P0[1] = 'restart'
-    $P0[2] = 'collect'
-    $P0[3] = 'count'
-    $P0[4] = 'step'
-    $P0[5] = 'setpause'
-    $P0[6] = 'setstepmul'
     $S1 = optstring(opt, 'collect')
-    $I1 = checkoption($S1, $P0)
+    checkoption($S1, 'stop restart collect count step setpause setstepmul')
     $I2 = optint(arg, 0)
     $N0 = gc($S1, $I2)
     unless $S1 == 'step' goto L1

Modified: trunk/languages/lua/lib/luaio.pir
==============================================================================
--- trunk/languages/lua/lib/luaio.pir   (original)
+++ trunk/languages/lua/lib/luaio.pir   Tue May  1 22:41:54 2007
@@ -951,17 +951,11 @@
 .sub '_file_seek' :method :anon
     .param pmc whence :optional
     .param pmc offset :optional
-    .local pmc modenames
     .local pmc f
     .local pmc ret
     tofile(self)
-    new modenames, .FixedStringArray
-    set modenames, 3
-    modenames[0] = 'set'
-    modenames[1] = 'cur'
-    modenames[2] = 'end'
     $S1 = optstring(whence, 'cur')
-    $I1 = checkoption($S1, modenames)
+    $I1 = checkoption($S1, 'set cur end')
     $I2 = optint(offset, 0)
     f = getattribute self, 'data'
     seek f, $I2, $I1
@@ -1004,18 +998,12 @@
 .sub '_file_setvbuf' :method :anon
     .param pmc mode :optional
     .param pmc size :optional
-    .local pmc modenames
     .local pmc mode
     .local pmc f
     .local pmc ret
     tofile(self)
-    new modenames, .FixedStringArray
-    set modenames, 3
-    modenames[0] = 'no'
-    modenames[1] = 'full'
-    modenames[2] = 'line'
     $S1 = checkstring(mode)
-    $I1 = checkoption($S1, modenames)
+    $I1 = checkoption($S1, 'no full line')
     $I2 = optint(size, 512)     # LUAL_BUFFERSIZE
     new mode, .FixedIntegerArray
     set mode, 3

Modified: trunk/languages/lua/lib/luaos.pir
==============================================================================
--- trunk/languages/lua/lib/luaos.pir   (original)
+++ trunk/languages/lua/lib/luaos.pir   Tue May  1 22:41:54 2007
@@ -399,18 +399,9 @@
 .sub '_os_setlocale' :anon
     .param pmc locale :optional
     .param pmc category :optional
-    .local pmc catnames
     $S1 = optstring(locale, '')
-    new catnames, .FixedStringArray
-    set catnames, 6
-    catnames[0] = 'all'
-    catnames[1] = 'collate'
-    catnames[2] = 'ctype'
-    catnames[3] = 'monetary'
-    catnames[4] = 'numeric'
-    catnames[5] = 'time'
     $S2 = optstring(category, 'all')
-    $I2 = checkoption($S2, catnames)
+    $I2 = checkoption($S2, 'all collate ctype monetary numeric time')
     not_implemented()
 .end
 

Modified: trunk/languages/lua/t/lfs.t
==============================================================================
--- trunk/languages/lua/t/lfs.t (original)
+++ trunk/languages/lua/t/lfs.t Tue May  1 22:41:54 2007
@@ -22,31 +22,31 @@
 use FindBin;
 use lib "$FindBin::Bin";
 
-use Parrot::Test tests => 15;
+use Parrot::Test tests => 17;
 use Test::More;
 use Cwd;
 use File::Basename;
 use File::Spec;
 
-language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'require lfs' );
+language_output_is( 'lua', << 'CODE', << 'OUT', 'require lfs' );
 require "lfs"
 print(type(lfs))
 print(lfs._VERSION)
 CODE
 table
 LuaFileSystem 1.2
-OUTPUT
+OUT
 
 my $cwd = dirname(File::Spec->canonpath(getcwd));
-language_output_is( 'lua', << 'CODE', << "OUTPUT", 'function lfs.currentdir' );
+language_output_is( 'lua', << 'CODE', << "OUT", 'function lfs.currentdir' );
 require "lfs"
 print(lfs.currentdir())
 CODE
 $cwd
-OUTPUT
+OUT
 
 my $upcwd = File::Spec->catfile($cwd, 'src');
-language_output_is( 'lua', << 'CODE', << "OUTPUT", 'function lfs.chdir' );
+language_output_is( 'lua', << 'CODE', << "OUT", 'function lfs.chdir' );
 require "lfs"
 print(lfs.chdir("src"))
 print(lfs.currentdir())
@@ -57,9 +57,9 @@
 $upcwd
 true
 $cwd
-OUTPUT
+OUT
 
-language_output_is( 'lua', << 'CODE', << 'OUTPUT', 'function lfs.chdir' );
+language_output_is( 'lua', << 'CODE', << 'OUT', 'function lfs.chdir' );
 require "lfs"
 r, msg = lfs.chdir("bad_dir")
 print(r)
@@ -69,7 +69,7 @@
 Unable to change working directory to 'bad_dir'
 No such file or directory
 
-OUTPUT
+OUT
 
 my $xpto = File::Spec->catfile($cwd, 'xpto');
 language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.mkdir' );
@@ -87,7 +87,7 @@
 $cwd
 OUT
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.dir' );
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.dir' );
 require "lfs"
 for file in lfs.dir("xpto") do
     print(file)
@@ -99,7 +99,7 @@
 
 rmdir '../xpto' if (-d '../xpto');
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.mkdir' );
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.mkdir' );
 require "lfs"
 r, msg = lfs.mkdir("xptoo/xptoo")
 print(r)
@@ -109,7 +109,7 @@
 No such file or directory
 OUT
 
-language_output_like( 'lua', <<'CODE', <<"OUT", 'function lfs.dir' );
+language_output_like( 'lua', <<'CODE', <<'OUT', 'function lfs.dir' );
 require "lfs"
 lfs.dir("xptoo")
 CODE
@@ -118,7 +118,7 @@
 
 mkdir '../xpto' unless -d '../xpto';
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.mkdir' );
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.mkdir' );
 require "lfs"
 print(lfs.rmdir("xpto"))
 CODE
@@ -128,7 +128,7 @@
 ok( !-d $xpto, "Test that rm removed the directory" );
 rmdir '../xpto' if (-d '../xpto');
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.mkdir' );
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.mkdir' );
 require "lfs"
 r, msg = lfs.rmdir("xpto")
 print(r)
@@ -144,7 +144,7 @@
 print {$X} "file with text\n";
 close $X;
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.attributes' );
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.attributes' );
 require "lfs"
 attr = lfs.attributes("file.txt")
 print(type(attr))
@@ -156,8 +156,19 @@
 15
 OUT
 
+my $nb = ($^O eq 'MSWin32') ? 11 : 13;
 language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.attributes' );
 require "lfs"
+attr = lfs.attributes("file.txt")
+local nb = 0
+for k in pairs(attr) do nb = nb + 1 end
+print(nb)
+CODE
+$nb
+OUT
+
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.attributes' );
+require "lfs"
 print(lfs.attributes("file.txt", "mode"))
 print(lfs.attributes("file.txt", "size"))
 CODE
@@ -165,7 +176,19 @@
 15
 OUT
 
-language_output_is( 'lua', <<'CODE', <<"OUT", 'function lfs.attributes (no 
file)' );
+SKIP:
+{
+skip('only with Parrot', 1) if (exists $ENV{PARROT_LUA_TEST_PROG});
+
+language_output_like( 'lua', <<'CODE', <<'OUT', 'function lfs.attributes 
(invalid)' );
+require "lfs"
+print(lfs.attributes("file.txt", "bad"))
+CODE
+/invalid option 'bad'/
+OUT
+}
+
+language_output_is( 'lua', <<'CODE', <<'OUT', 'function lfs.attributes (no 
file)' );
 require "lfs"
 r, msg = lfs.attributes("no_file.txt")
 print(r)
@@ -175,7 +198,7 @@
 cannot obtain information from file `no_file.txt'
 OUT
 
-language_output_like( 'lua', <<'CODE', <<"OUT", 'function lfs.lock (closed)' );
+language_output_like( 'lua', <<'CODE', <<'OUT', 'function lfs.lock (closed)' );
 require "lfs"
 f = io.open("file.txt")
 f:close()

Reply via email to