Fix http://opensimulator.org/mantis/view.php?id=3874 - parenthesis in for statements cause script compile failures
This fixes a problem in OpenSim where statements of the form for ((i = 0); (i < 10); (++i)) { ... } do not compile even though they are valid lsl.0.6.8-post-fixes
parent
0561cf7d93
commit
8f0db68424
|
@ -1266,7 +1266,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// allocations, and there is no more work to be done until someone logs in
|
// allocations, and there is no more work to be done until someone logs in
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
|
|
||||||
m_log.DebugFormat("[REGION]: Enabling Logins for {0}", RegionInfo.RegionName);
|
m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName);
|
||||||
loginsdisabled = false;
|
loginsdisabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -722,8 +722,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
|
||||||
if (fls.kids.Top is IdentExpression && 1 == fls.kids.Count)
|
if (fls.kids.Top is IdentExpression && 1 == fls.kids.Count)
|
||||||
return retstr;
|
return retstr;
|
||||||
|
|
||||||
foreach (SYMBOL s in fls.kids)
|
for (int i = 0; i < fls.kids.Count; i++)
|
||||||
{
|
{
|
||||||
|
SYMBOL s = (SYMBOL)fls.kids[i];
|
||||||
|
|
||||||
|
// Statements surrounded by parentheses in for loops
|
||||||
|
//
|
||||||
|
// e.g. for ((i = 0), (j = 7); (i < 10); (++i))
|
||||||
|
//
|
||||||
|
// are legal in LSL but not in C# so we need to discard the parentheses
|
||||||
|
//
|
||||||
|
// The following, however, does not appear to be legal in LLS
|
||||||
|
//
|
||||||
|
// for ((i = 0, j = 7); (i < 10); (++i))
|
||||||
|
//
|
||||||
|
// As of Friday 20th November 2009, the Linden Lab simulators appear simply never to compile or run this
|
||||||
|
// script but with no debug or warnings at all! Therefore, we won't deal with this yet (which looks
|
||||||
|
// like it would be considerably more complicated to handle).
|
||||||
|
while (s is ParenthesisExpression)
|
||||||
|
s = (SYMBOL)s.kids.Pop();
|
||||||
|
|
||||||
retstr += GenerateNode(s);
|
retstr += GenerateNode(s);
|
||||||
if (0 < comma--)
|
if (0 < comma--)
|
||||||
retstr += Generate(", ");
|
retstr += Generate(", ");
|
||||||
|
|
Loading…
Reference in New Issue