Refactor XEngine parser as per suggestions from mikem

0.6.0-stable
Melanie Thielker 2008-09-23 13:28:17 +00:00
parent aef2afd3be
commit d95794d05c
5 changed files with 32 additions and 85 deletions

View File

@ -726,19 +726,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
if ("LSL_Types.LSLFloat" == c.Type)
{
int dotIndex = c.Value.IndexOf('.') + 1;
// Skip first dot (in type name)
dotIndex = c.Value.IndexOf('.', dotIndex) + 1;
if (0 < dotIndex && (dotIndex == c.Value.Length || !Char.IsDigit(c.Value[dotIndex])))
c.Value = c.Value.Insert(dotIndex, "0");
c.Value = "new LSL_Types.LSLFloat("+c.Value+")";
}
else if("LSL_Types.LSLInteger" == c.Type)
{
c.Value = "new LSL_Types.LSLInteger("+c.Value+")";
}
else if("LSL_Types.LSLString" == c.Type)
{
c.Value = "new LSL_Types.LSLString(\""+c.Value+"\")";
}
// commented because the parser does it now
// need to quote strings
// if ("LSL_Types.LSLString" == c.Type)
// retstr += Generate("\"");
retstr += Generate(c.Value, c);
// if ("LSL_Types.LSLString" == c.Type)
// retstr += Generate("\"");
return retstr;
}

View File

@ -153,7 +153,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
return new Constant(p, constantType, "0.0");
case "string":
case "key":
return new Constant(p, constantType, "\"\"");
return new Constant(p, constantType, "");
case "list":
ArgumentList al = new ArgumentList(p);
return new ListConstant(p, al);

View File

@ -124,7 +124,7 @@ state another_state
string expected =
"\n public void default_event_touch_start(LSL_Types.LSLInteger num_detected)" +
"\n {" +
"\n LSL_Types.LSLInteger x = 0;" +
"\n LSL_Types.LSLInteger x = new LSL_Types.LSLInteger(0);" +
"\n }\n";
CSCodeGenerator cg = new CSCodeGenerator();
@ -148,7 +148,7 @@ state another_state
string expected =
"\n public void default_event_touch_start(LSL_Types.LSLInteger num_detected)" +
"\n {" +
"\n LSL_Types.LSLString y = \"\";" +
"\n LSL_Types.LSLString y = new LSL_Types.LSLString(\"\");" +
"\n LSL_Types.LSLInteger x = new LSL_Types.LSLInteger(14);" +
"\n y = new LSL_Types.LSLString(\"Hello\");" +
"\n }\n";
@ -235,7 +235,7 @@ state another_state
string expected =
"\n public void default_event_touch_start(LSL_Types.LSLInteger num_detected)" +
"\n {" +
"\n LSL_Types.LSLInteger y = 0;" +
"\n LSL_Types.LSLInteger y = new LSL_Types.LSLInteger(0);" +
"\n LSL_Types.LSLInteger x = new LSL_Types.LSLInteger(14) + new LSL_Types.LSLInteger(6);" +
"\n y = new LSL_Types.LSLInteger(12) - new LSL_Types.LSLInteger(3);" +
"\n y = new LSL_Types.LSLInteger(12) * new LSL_Types.LSLInteger(3);" +
@ -440,7 +440,7 @@ default
}
";
string expected =
"\n LSL_Types.LSLString globalString = \"\";" +
"\n LSL_Types.LSLString globalString = new LSL_Types.LSLString(\"\");" +
"\n LSL_Types.LSLInteger globalInt = new LSL_Types.LSLInteger(14);" +
"\n LSL_Types.LSLInteger anotherGlobal = new LSL_Types.LSLInteger(20) * globalInt;" +
"\n LSL_Types.LSLString onefunc()" +
@ -495,7 +495,7 @@ default
}
";
string expected =
"\n LSL_Types.LSLString globalString = \"\";" +
"\n LSL_Types.LSLString globalString = new LSL_Types.LSLString(\"\");" +
"\n LSL_Types.LSLInteger globalInt = new LSL_Types.LSLInteger(14);" +
"\n LSL_Types.LSLString onefunc(LSL_Types.LSLString addition)" +
"\n {" +
@ -1251,19 +1251,19 @@ default
string expected =
"\n public void default_event_touch_start(LSL_Types.LSLInteger num_detected)" +
"\n {" +
"\n LSL_Types.LSLInteger i = 0;" +
"\n LSL_Types.LSLInteger i = new LSL_Types.LSLInteger(0);" +
"\n LSL_Types.LSLInteger j = new LSL_Types.LSLInteger(14);" +
"\n LSL_Types.LSLFloat f = 0.0;" +
"\n LSL_Types.LSLFloat f = new LSL_Types.LSLFloat(0.0);" +
"\n LSL_Types.LSLFloat g = new LSL_Types.LSLFloat(14.0);" +
"\n LSL_Types.LSLString s = \"\";" +
"\n LSL_Types.LSLString s = new LSL_Types.LSLString(\"\");" +
"\n LSL_Types.LSLString t = new LSL_Types.LSLString(\"Hi there\");" +
"\n LSL_Types.list l = new LSL_Types.list();" +
"\n LSL_Types.list m = new LSL_Types.list(new LSL_Types.LSLInteger(1), new LSL_Types.LSLInteger(2), new LSL_Types.LSLInteger(3));" +
"\n LSL_Types.Vector3 v = new LSL_Types.Vector3(0.0, 0.0, 0.0);" +
"\n LSL_Types.Vector3 v = new LSL_Types.Vector3(new LSL_Types.LSLFloat(0.0), new LSL_Types.LSLFloat(0.0), new LSL_Types.LSLFloat(0.0));" +
"\n LSL_Types.Vector3 w = new LSL_Types.Vector3(new LSL_Types.LSLFloat(1.0), new LSL_Types.LSLFloat(0.1), new LSL_Types.LSLFloat(0.5));" +
"\n LSL_Types.Quaternion r = new LSL_Types.Quaternion(0.0, 0.0, 0.0, 0.0);" +
"\n LSL_Types.Quaternion r = new LSL_Types.Quaternion(new LSL_Types.LSLFloat(0.0), new LSL_Types.LSLFloat(0.0), new LSL_Types.LSLFloat(0.0), new LSL_Types.LSLFloat(0.0));" +
"\n LSL_Types.Quaternion u = new LSL_Types.Quaternion(new LSL_Types.LSLFloat(0.8), new LSL_Types.LSLFloat(0.7), new LSL_Types.LSLFloat(0.6), llSomeFunc());" +
"\n LSL_Types.LSLString k = \"\";" +
"\n LSL_Types.LSLString k = new LSL_Types.LSLString(\"\");" +
"\n LSL_Types.LSLString n = new LSL_Types.LSLString(\"ping\");" +
"\n }\n";
@ -1292,8 +1292,8 @@ default
string expected =
"\n public void default_event_touch_start(LSL_Types.LSLInteger num_detected)" +
"\n {" +
"\n LSL_Types.LSLInteger x = 0;" +
"\n LSL_Types.LSLInteger y = 0;" +
"\n LSL_Types.LSLInteger x = new LSL_Types.LSLInteger(0);" +
"\n LSL_Types.LSLInteger y = new LSL_Types.LSLInteger(0);" +
"\n x = y = new LSL_Types.LSLInteger(5);" +
"\n x += y -= new LSL_Types.LSLInteger(5);" +
"\n llOwnerSay(new LSL_Types.LSLString(\"x is: \") + (LSL_Types.LSLString) (x) + new LSL_Types.LSLString(\", y is: \") + (LSL_Types.LSLString) (y));" +
@ -1504,7 +1504,7 @@ default
string expected =
"\n public void default_event_state_entry()" +
"\n {" +
"\n LSL_Types.LSLInteger x = 0;" +
"\n LSL_Types.LSLInteger x = new LSL_Types.LSLInteger(0);" +
"\n while (x = new LSL_Types.LSLInteger(14))" +
"\n llOwnerSay(new LSL_Types.LSLString(\"x is: \") + (LSL_Types.LSLString) (x));" +
"\n if (x = new LSL_Types.LSLInteger(24))" +

View File

@ -1,30 +1,3 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;using Tools;
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools {
//%+STRING_CONSTANT+3

View File

@ -1,30 +1,3 @@
/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;using Tools;
namespace OpenSim.Region.ScriptEngine.Shared.CodeTools {
//%+LSLProgramRoot+95
@ -1304,24 +1277,24 @@ public class ReturnStatement_2 : ReturnStatement {
public ReturnStatement_2(Parser yyq):base(yyq){}}
public class Constant_1 : Constant {
public Constant_1(Parser yyq):base(yyq,"integer", "new LSL_Types.LSLInteger("+
public Constant_1(Parser yyq):base(yyq,"integer",
((INTEGER_CONSTANT)(yyq.StackAt(0).m_value))
.yytext+")"){}}
.yytext){}}
public class Constant_2 : Constant {
public Constant_2(Parser yyq):base(yyq,"integer", "new LSL_Types.LSLInteger("+
public Constant_2(Parser yyq):base(yyq,"integer",
((HEX_INTEGER_CONSTANT)(yyq.StackAt(0).m_value))
.yytext+")"){}}
.yytext){}}
public class Constant_3 : Constant {
public Constant_3(Parser yyq):base(yyq,"float", "new LSL_Types.LSLFloat("+
public Constant_3(Parser yyq):base(yyq,"float",
((FLOAT_CONSTANT)(yyq.StackAt(0).m_value))
.yytext+")"){}}
.yytext){}}
public class Constant_4 : Constant {
public Constant_4(Parser yyq):base(yyq,"string", "new LSL_Types.LSLString(\""+
public Constant_4(Parser yyq):base(yyq,"string",
((STRING_CONSTANT)(yyq.StackAt(0).m_value))
.yytext+"\")"){}}
.yytext){}}
public class ListConstant_1 : ListConstant {
public ListConstant_1(Parser yyq):base(yyq,