diff options
author | Tedd Hansen | 2007-08-12 17:37:37 +0000 |
---|---|---|
committer | Tedd Hansen | 2007-08-12 17:37:37 +0000 |
commit | fd63c0cd32739f99af0c93ee3115212bb695f063 (patch) | |
tree | 5c95d50a2559fcab8815694999b03e12c67d402c /OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL | |
parent | Script now compiles unsuccessfully (diff) | |
download | opensim-SC-fd63c0cd32739f99af0c93ee3115212bb695f063.zip opensim-SC-fd63c0cd32739f99af0c93ee3115212bb695f063.tar.gz opensim-SC-fd63c0cd32739f99af0c93ee3115212bb695f063.tar.bz2 opensim-SC-fd63c0cd32739f99af0c93ee3115212bb695f063.tar.xz |
Code comments and cleanup, correct datatypes for key, vector, rotation, (hopefully) reference to Axiom during compile, passing of BuiltIns during script load, BuiltIn interface added, etc etc
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 | } |