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()