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
Justin Clark-Casey (justincc) 2009-11-20 18:39:39 +00:00
parent 0561cf7d93
commit 8f0db68424
2 changed files with 20 additions and 2 deletions

View File

@ -1266,7 +1266,7 @@ namespace OpenSim.Region.Framework.Scenes
// allocations, and there is no more work to be done until someone logs in
GC.Collect();
m_log.DebugFormat("[REGION]: Enabling Logins for {0}", RegionInfo.RegionName);
m_log.DebugFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName);
loginsdisabled = false;
}
}

View File

@ -722,8 +722,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if (fls.kids.Top is IdentExpression && 1 == fls.kids.Count)
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);
if (0 < comma--)
retstr += Generate(", ");