François Perrad schrieb:
chromatic a écrit :
On Tuesday 08 July 2008 02:36:37 François PERRAD via RT wrote:
This bug starts with r28354 (cache string).
The cache don't handle empty string.
Now, in Pipp (PHP), an empty string is used to stringify boolean False.
// languages/pipp/src/pmc/phpboolean.pmc
STRING* get_string() {
if (PMC_int_val(SELF))
return const_string(INTERP, "1");
else
return const_string(INTERP, "");
}
Instead of an empty string, I obtain another cached string like "MD2",
"PhpUndef", ...
I can't reproduce that with this test case:
.loadlib 'php_group'
.sub 'main' :main
.local pmc true, false
true = new 'PhpBoolean'
false = new 'PhpBoolean'
true = 1
false = 0
$S0 = true
say $S0
$S0 = false
say $S0
.end
On windows, r29191, with this test, I obtain :
D:\fperrad\Parrot\trunk\languages\pipp>parrot bool.pir
1
Php
D:\fperrad\Parrot\trunk\languages\pipp>
and with a Lua PMC test
D:\fperrad\Parrot\trunk\languages\lua>perl -I../../lib t/pmc/string.t
1..13
ok 1 - check inheritance
ok 2 - check interface
ok 3 - check name
ok 4 - check get_bool
ok 5 - check logical_not
ok 6 - check embedded zero
ok 7 - check HLL
ok 8 - check HLL (autoboxing)
ok 9 - check HLL & .const
not ok 10 - .const & empty string
# Failed test '.const & empty string'
# at t/pmc/string.t line 196.
# got: '¤
# 1
# '
# expected: '
# 1
# '
ok 11 - check tostring
ok 12 - check tonumber
ok 13 - check tobase
# Looks like you failed 1 test of 13.
I shaw the same behavior on Xubuntu 8.04 (r29194).
But I notice that this issue is random (disappear or re-appear after
an update & re-compilation).
I made the same experience under Linux. This misfeature appears and
disappears after making
arbitrary changes.
Regards,
Bernhard