mirror of
https://github.com/opensim/opensim.git
synced 2026-08-01 06:06:06 +08:00
Thanks DoranZemlja for a patch implementing non-shortcircuiting in
logical and and logical or in LSL. Fixes Mantis #3174.
This commit is contained in:
@@ -646,10 +646,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
|
||||
{
|
||||
string retstr = String.Empty;
|
||||
|
||||
retstr += GenerateNode((SYMBOL) be.kids.Pop());
|
||||
retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
|
||||
foreach (SYMBOL kid in be.kids)
|
||||
retstr += GenerateNode(kid);
|
||||
if (be.ExpressionSymbol.Equals("&&") || be.ExpressionSymbol.Equals("||"))
|
||||
{
|
||||
// special case handling for logical and/or, see Mantis 3174
|
||||
retstr += "((bool)(";
|
||||
retstr += GenerateNode((SYMBOL)be.kids.Pop());
|
||||
retstr += "))";
|
||||
retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol.Substring(0,1)), be);
|
||||
retstr += "((bool)(";
|
||||
foreach (SYMBOL kid in be.kids)
|
||||
retstr += GenerateNode(kid);
|
||||
retstr += "))";
|
||||
}
|
||||
else
|
||||
{
|
||||
retstr += GenerateNode((SYMBOL)be.kids.Pop());
|
||||
retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be);
|
||||
foreach (SYMBOL kid in be.kids)
|
||||
retstr += GenerateNode(kid);
|
||||
}
|
||||
|
||||
return retstr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user