From d41c1f40a8abfb466741d2ccec55e21f11e6b63f Mon Sep 17 00:00:00 2001
From: Johan Berntsson
Date: Thu, 10 Jul 2008 05:40:45 +0000
Subject: Patch from Mike: errors from the LSL/C# compilers are now reported to
the user in-world
---
.../DotNetEngine/Compiler/LSL/CSCodeGenerator.cs | 2 +-
.../Shared/CodeTools/CSCodeGenerator.cs | 2 +-
.../Shared/CodeTools/LSLCompilerTest.cs | 31 ++++++++++++++++++++++
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs
index ec34a7b..f7aee66 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
/// String containing LSL source.
public CSCodeGenerator(string script)
{
- Parser p = new LSLSyntax();
+ Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));
// Obviously this needs to be in a try/except block.
LSL2CSCodeTransformer codeTransformer = new LSL2CSCodeTransformer(p.Parse(script));
m_astRoot = codeTransformer.Transform();
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
index 78c636e..82c7eda 100644
--- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/CSCodeGenerator.cs
@@ -43,7 +43,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
/// String containing LSL source.
public CSCodeGenerator(string script)
{
- Parser p = new LSLSyntax();
+ Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true));
// Obviously this needs to be in a try/except block.
LSL2CSCodeTransformer codeTransformer = new LSL2CSCodeTransformer(p.Parse(script));
m_astRoot = codeTransformer.Transform();
diff --git a/OpenSim/Tests/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSLCompilerTest.cs b/OpenSim/Tests/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSLCompilerTest.cs
index 6e42c16..56a5b4c 100644
--- a/OpenSim/Tests/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSLCompilerTest.cs
+++ b/OpenSim/Tests/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSLCompilerTest.cs
@@ -26,6 +26,7 @@
*/
using System.Collections.Generic;
+using System.Text.RegularExpressions;
using NUnit.Framework;
using OpenSim.Region.ScriptEngine.Shared.CodeTools;
@@ -1299,5 +1300,35 @@ default
string output = cg.Generate();
Assert.AreEqual(expected, output);
}
+
+ [Test]
+ [ExpectedException("Tools.CSToolsException")]
+ public void TestSyntaxError()
+ {
+ string input = @"default
+{
+ state_entry()
+ {
+ integer y
+ }
+}
+";
+ try
+ {
+ CSCodeGenerator cg = new CSCodeGenerator(input);
+ string output = cg.Generate();
+ }
+ catch (Tools.CSToolsException e)
+ {
+ // The syntax error is on line 6, char 5 (expected ';', found
+ // '}').
+ Regex r = new Regex("Line ([0-9]+), char ([0-9]+)");
+ Match m = r.Match(e.Message);
+ Assert.AreEqual("6", m.Groups[1].Value);
+ Assert.AreEqual("5", m.Groups[2].Value);
+
+ throw;
+ }
+ }
}
}
--
cgit v1.1