diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL')
3 files changed, 40 insertions, 56 deletions
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs index 33be6ec..6eadb0e 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs | |||
@@ -16,16 +16,21 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL | |||
16 | { | 16 | { |
17 | 17 | ||
18 | 18 | ||
19 | string OutFile = Path.GetFileNameWithoutExtension(LSOFileName); | 19 | // Output assembly name |
20 | string OutFile = Path.GetFileNameWithoutExtension(LSOFileName) + ".dll"; | ||
20 | 21 | ||
21 | // TODO: Add error handling | 22 | // TODO: Add error handling |
22 | string CS_Code = LSL_Converter.Convert(File.ReadAllText(LSOFileName)); | 23 | string CS_Code = LSL_Converter.Convert(File.ReadAllText(LSOFileName)); |
23 | 24 | ||
25 | // Do actual compile | ||
24 | System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); | 26 | System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); |
25 | parameters.GenerateExecutable = true; | 27 | parameters.IncludeDebugInformation = true; |
28 | parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment"); | ||
29 | parameters.GenerateExecutable = false; | ||
26 | parameters.OutputAssembly = OutFile; | 30 | parameters.OutputAssembly = OutFile; |
27 | CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, CS_Code); | 31 | CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, CS_Code); |
28 | 32 | ||
33 | // Go through errors | ||
29 | // TODO: Return errors to user somehow | 34 | // TODO: Return errors to user somehow |
30 | if (results.Errors.Count > 0) | 35 | if (results.Errors.Count > 0) |
31 | { | 36 | { |
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs index f058566..d9042b5 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs | |||
@@ -18,11 +18,12 @@ namespace LSL2CS.Converter | |||
18 | DataTypes.Add("float", "float"); | 18 | DataTypes.Add("float", "float"); |
19 | DataTypes.Add("string", "string"); | 19 | DataTypes.Add("string", "string"); |
20 | DataTypes.Add("key", "string"); | 20 | DataTypes.Add("key", "string"); |
21 | DataTypes.Add("vector", "vector"); | 21 | DataTypes.Add("vector", "Axiom.Math.Vector3"); |
22 | DataTypes.Add("rotation", "rotation"); | 22 | DataTypes.Add("rotation", "Axiom.Math.Quaternion"); |
23 | DataTypes.Add("list", "list"); | 23 | DataTypes.Add("list", "list"); |
24 | DataTypes.Add("null", "null"); | 24 | DataTypes.Add("null", "null"); |
25 | } | 25 | } |
26 | |||
26 | 27 | ||
27 | 28 | ||
28 | 29 | ||
@@ -34,37 +35,14 @@ namespace LSL2CS.Converter | |||
34 | // Prepare script for processing | 35 | // Prepare script for processing |
35 | // | 36 | // |
36 | 37 | ||
37 | // Here we will remove those linebreaks that are allowed in so many languages. | 38 | // Clean up linebreaks |
38 | // One hard-ass regex should do the job. | ||
39 | |||
40 | // Then we will add some linebreaks. | ||
41 | Script = Regex.Replace(Script, @"\r\n", "\n"); | 39 | Script = Regex.Replace(Script, @"\r\n", "\n"); |
42 | Script = Regex.Replace(Script, @"\n", "\r\n"); | 40 | Script = Regex.Replace(Script, @"\n", "\r\n"); |
43 | //Script = Regex.Replace(Script, @"\n\s*{", @"{"); | ||
44 | //Script = Regex.Replace(Script, @"[\r\n]", @""); | ||
45 | |||
46 | // Then we remove unwanted linebreaks | ||
47 | |||
48 | |||
49 | //// | ||
50 | //// Split up script to process line by line | ||
51 | //// | ||
52 | //int count = 0; | ||
53 | //string line; | ||
54 | //Regex r = new Regex("\r?\n", RegexOptions.Multiline | RegexOptions.Compiled); | ||
55 | //string[] lines = r.Split(Script); | ||
56 | |||
57 | //for (int i = 0; i < lines.Length; i++) | ||
58 | //{ | ||
59 | // // Remove space in front and back | ||
60 | // line = lines[i].Trim(); | ||
61 | // count++; | ||
62 | // Return += count + ". " + translate(line) + "\r\n"; | ||
63 | //} | ||
64 | 41 | ||
65 | 42 | ||
66 | // QUOTE REPLACEMENT | 43 | // QUOTE REPLACEMENT |
67 | //char[] SA = Script.ToCharArray(); | 44 | // temporarily replace quotes so we can work our magic on the script without |
45 | // always considering if we are inside our outside ""'s | ||
68 | string _Script = ""; | 46 | string _Script = ""; |
69 | string C; | 47 | string C; |
70 | bool in_quote = false; | 48 | bool in_quote = false; |
@@ -129,8 +107,10 @@ namespace LSL2CS.Converter | |||
129 | 107 | ||
130 | 108 | ||
131 | 109 | ||
132 | 110 | // | |
133 | // PROCESS STATES | 111 | // PROCESS STATES |
112 | // Remove state definitions and add state names to start of each event within state | ||
113 | // | ||
134 | int ilevel = 0; | 114 | int ilevel = 0; |
135 | int lastlevel = 0; | 115 | int lastlevel = 0; |
136 | string ret = ""; | 116 | string ret = ""; |
@@ -190,13 +170,6 @@ namespace LSL2CS.Converter | |||
190 | current_statename = ""; | 170 | current_statename = ""; |
191 | } | 171 | } |
192 | 172 | ||
193 | // if we moved from level 0 to level 1 don't add last word + { | ||
194 | // if we moved from level 1 to level 0 don't add last } | ||
195 | // if level > 0 cache all data so we can run regex on it when going to level 0 | ||
196 | |||
197 | |||
198 | |||
199 | |||
200 | break; | 173 | break; |
201 | } | 174 | } |
202 | lastlevel = ilevel; | 175 | lastlevel = ilevel; |
@@ -209,17 +182,23 @@ namespace LSL2CS.Converter | |||
209 | 182 | ||
210 | 183 | ||
211 | 184 | ||
212 | // Replace CAST - (integer) with (int) | 185 | foreach (string key in DataTypes.Keys) |
213 | Script = Regex.Replace(Script, @"\(integer\)", @"(int)", RegexOptions.Compiled | RegexOptions.Multiline); | 186 | { |
214 | // Replace return types and function variables - integer a() and f(integer a, integer a) | 187 | string val; |
215 | Script = Regex.Replace(Script, @"(^|;|}|[\(,])(\s*int)eger(\s*)", @"$1$2$3", RegexOptions.Compiled | RegexOptions.Multiline); | 188 | DataTypes.TryGetValue(key, out val); |
189 | |||
190 | // Replace CAST - (integer) with (int) | ||
191 | Script = Regex.Replace(Script, @"\(" + key + @"\)", @"(" + val + ")", RegexOptions.Compiled | RegexOptions.Multiline); | ||
192 | // Replace return types and function variables - integer a() and f(integer a, integer a) | ||
193 | Script = Regex.Replace(Script, @"(^|;|}|[\(,])(\s*)" + key + @"(\s*)", @"$1$2" + val + "$3", RegexOptions.Compiled | RegexOptions.Multiline); | ||
194 | } | ||
216 | 195 | ||
217 | // Add "void" in front of functions that needs it | 196 | // Add "void" in front of functions that needs it |
218 | Script = Regex.Replace(Script, @"^(\s*)((?!if|switch|for)[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1void $2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); | 197 | Script = Regex.Replace(Script, @"^(\s*)((?!if|switch|for)[a-zA-Z0-9_]*\s*\([^\)]*\)[^;]*\{)", @"$1void $2", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); |
219 | 198 | ||
220 | // Replace <x,y,z> and <x,y,z,r> | 199 | // Replace <x,y,z> and <x,y,z,r> |
221 | Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*,[^,>]*)>", @"Rotation.Parse($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); | 200 | Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*,[^,>]*)>", @"new Axiom.Math.Quaternion($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); |
222 | Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*)>", @"Vector.Parse($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); | 201 | Script = Regex.Replace(Script, @"<([^,>]*,[^,>]*,[^,>]*)>", @"new Axiom.Math.Vector3($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); |
223 | 202 | ||
224 | // Replace List []'s | 203 | // Replace List []'s |
225 | Script = Regex.Replace(Script, @"\[([^\]]*)\]", @"List.Parse($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); | 204 | Script = Regex.Replace(Script, @"\[([^\]]*)\]", @"List.Parse($1)", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.Singleline); |
@@ -239,6 +218,7 @@ namespace LSL2CS.Converter | |||
239 | } | 218 | } |
240 | 219 | ||
241 | 220 | ||
221 | // Add namespace, class name and inheritance | ||
242 | Return = "namespace SecondLife {" + Environment.NewLine; | 222 | Return = "namespace SecondLife {" + Environment.NewLine; |
243 | Return += "public class Script : LSL_BaseClass {" + Environment.NewLine; | 223 | Return += "public class Script : LSL_BaseClass {" + Environment.NewLine; |
244 | Return += Script; | 224 | Return += Script; |
@@ -246,18 +226,6 @@ namespace LSL2CS.Converter | |||
246 | 226 | ||
247 | return Return; | 227 | return Return; |
248 | } | 228 | } |
249 | //private string GetWord(char[] SA, int p) | ||
250 | //{ | ||
251 | // string ret = ""; | ||
252 | // for (int i = p; p < SA.Length; i++) | ||
253 | // { | ||
254 | // if (!rnw.IsMatch(SA[i].ToString())) | ||
255 | // break; | ||
256 | // ret += SA[i]; | ||
257 | // } | ||
258 | // return ret; | ||
259 | //} | ||
260 | |||
261 | 229 | ||
262 | 230 | ||
263 | } | 231 | } |
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs index 03d8ba5..a065683 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs | |||
@@ -1,10 +1,21 @@ | |||
1 | using System; | 1 | using System; |
2 | using System.Collections.Generic; | 2 | using System.Collections.Generic; |
3 | using System.Text; | 3 | using System.Text; |
4 | using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler; | ||
4 | 5 | ||
5 | namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL | 6 | namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL |
6 | { | 7 | { |
7 | class LSL_BaseClass | 8 | class LSL_BaseClass |
8 | { | 9 | { |
10 | public UInt32 State = 0; | ||
11 | public LSL_BuiltIn_Commands_Interface LSL_Builtins; | ||
12 | |||
13 | public void Start(LSL_BuiltIn_Commands_Interface LSLBuiltins) | ||
14 | { | ||
15 | LSL_Builtins = LSLBuiltins; | ||
16 | Common.SendToLog("OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass.Start() called"); | ||
17 | |||
18 | return; | ||
19 | } | ||
9 | } | 20 | } |
10 | } | 21 | } |