# New Ticket Created by Robert G. Jakabosky # Please include the string: [perl #57504] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=57504 >
Hello everyone, This is my first patch to the parrot project. This patch fixes 19 failed tests for the Lua language. Changes to 'languages/lua/src/build/translator.pl': When the 32bit Lua instruction codes are being decoded they are stored in a 64bit signed integer. The top 32bits where not always masked off. This caused a problem for instructions that had the 31st bit sit, since the top 32bits would have been sign-extended (filled with 1s). Changes to 'languages/lua/t/os.t': 1 test from 'os.t' fails on 64bit systems because 'os.time()' does not return a 'nil' for dates with year < 1970. 'os.time()' only returns 'nil' when mktime returns ((time_t)-1). On 32bit systems mktime uses -1 for dates outside year range 1970-2038. On 64bit systems mktime returns negative values for dates before year 1970, so there is only one date that will cause mktime to return -1 and make 'os.time()' in lua return 'nil'. I have updated the test to use that one date that returns 'nil' on both 32bit & 64bit systems. CREDITS | 4 ++++ languages/lua/src/build/translator.pl | 4 ++++ languages/lua/t/os.t | 16 +++++++++------- 3 files changed, 17 insertions(+), 7 deletions(-) -- Robert G. Jakabosky
Index: CREDITS =================================================================== --- CREDITS (revision 29918) +++ CREDITS (working copy) @@ -568,6 +568,10 @@ N: Ritz Daniel +N: Robert G. Jakabosky +E: [EMAIL PROTECTED] +D: language Lua bugfix. + N: Robert Spier D: Keeps us running Index: languages/lua/t/os.t =================================================================== --- languages/lua/t/os.t (revision 29918) +++ languages/lua/t/os.t (working copy) @@ -197,14 +197,16 @@ -- os.time returns nil when C mktime returns -1 -- this test needs a out of range value on any platform +-- On 64bit systems the following date & time is the only +-- on that mktime will return -1 for. print(os.time({ - sec = 0, - min = 0, - hour = 0, - day = 1, - month = 1, - year = 1000, - isdst = 0, + sec = 59, + min = 59, + hour = 15, + day = 31, + month = 12, + year = 1969, + isdst = false, })) CODE /^ Index: languages/lua/src/build/translator.pl =================================================================== --- languages/lua/src/build/translator.pl (revision 29918) +++ languages/lua/src/build/translator.pl (working copy) @@ -361,10 +361,12 @@ if ($rule->{format} =~ /sBx$/) { $pir .= " arg_b = cur_ic >>> 14\n"; + $pir .= " arg_b &= 0x0003ffff\n"; $pir .= " arg_b -= 131071\n"; } elsif ($rule->{format} =~ /Bx$/) { $pir .= " arg_b = cur_ic >>> 14\n"; + $pir .= " arg_b &= 0x0003ffff\n"; } elsif ($rule->{format} =~ /B/) { $pir .= " arg_b = cur_ic >> 23\n"; @@ -433,11 +435,13 @@ if ($rule->{format} =~ /sBx$/) { $pir .= " arg_b = cur_ic >>> 14\n"; + $pir .= " arg_b &= 0x0003ffff\n"; $pir .= " arg_b -= 131071\n"; $pir .= " push args, arg_b\n"; } elsif ($rule->{format} =~ /Bx$/) { $pir .= " arg_b = cur_ic >>> 14\n"; + $pir .= " arg_b &= 0x0003ffff\n"; $pir .= " push args, arg_b\n"; } elsif ($rule->{format} =~ /B/) {