aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL
diff options
context:
space:
mode:
authorTedd Hansen2007-08-12 17:37:37 +0000
committerTedd Hansen2007-08-12 17:37:37 +0000
commitfd63c0cd32739f99af0c93ee3115212bb695f063 (patch)
tree5c95d50a2559fcab8815694999b03e12c67d402c /OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL
parentScript now compiles unsuccessfully (diff)
downloadopensim-SC_OLD-fd63c0cd32739f99af0c93ee3115212bb695f063.zip
opensim-SC_OLD-fd63c0cd32739f99af0c93ee3115212bb695f063.tar.gz
opensim-SC_OLD-fd63c0cd32739f99af0c93ee3115212bb695f063.tar.bz2
opensim-SC_OLD-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')
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs9
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs76
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs11
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 @@
1using System; 1using System;
2using System.Collections.Generic; 2using System.Collections.Generic;
3using System.Text; 3using System.Text;
4using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler;
4 5
5namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL 6namespace 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}