[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: code generation bug
- From: Vaughan McAlley <ockegheim@...>
- Date: Thu, 16 Apr 2009 17:07:33 +1000
Maybe it's a parsing issue. This from the Lua Demo site:
print( ((1 or false) and true) or false)
local x, y, z = 1, true, false
print( ((x or z) and y) or z )
-->1
-->true
The strange behaviour doesn't happen if the inner parenthesis is
(false or 1) for example.
Vaughan
2009/4/16 Linker <linker.m.lin@gmail.com>:
> I had try it in Lua 5.1.4 win xp:
>> =1 or false
> 1 -- right
>> =1 and true or false
> true -- right
>> =1 or false and true or false
> 1 -- wrong
>> =((1 or false) and true)or false
> 1 -- wrong
>>
>
>
> On Thu, Apr 16, 2009 at 12:37, Kelley, Brian <bkelley@qualcomm.com> wrote:
>>
>> I was surprised to notice the following:
>>
>> Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
>> > =((1 or false) and true) or false
>> 1
>>
>> Same results on 5.1.2 and 5.1.3, MacOS and Windows.
>>
>> For what it's worth, I observed in lcode.c that the OPR_AND expression
>> inherited the 'k' (kind) of VTRUE from its rhs subexpression, which seems
>> wrong and seems to throw off the subsequent call to luaK_goiffalse().
>>
>> -bhk
>>
>
>
>
> --
> Regards,
> Linker Lin
> linker.m.lin@gmail.com
>