aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorCharles Krinke2008-06-09 01:06:59 +0000
committerCharles Krinke2008-06-09 01:06:59 +0000
commit0d07cf9dddbcfc31837b57631ca9987288ede15c (patch)
tree127f36a5d43a7b876da7800953418a19131bc548
parent* Fixed it so you can do a lot more llDetected* methods in many additional si... (diff)
downloadopensim-SC-0d07cf9dddbcfc31837b57631ca9987288ede15c.zip
opensim-SC-0d07cf9dddbcfc31837b57631ca9987288ede15c.tar.gz
opensim-SC-0d07cf9dddbcfc31837b57631ca9987288ede15c.tar.bz2
opensim-SC-0d07cf9dddbcfc31837b57631ca9987288ede15c.tar.xz
Mantis#1469. Thank you kindly, Mikem for a patch that addresses:
Currently LSL code such as below does not compile on OpenSim, but compiles fine in Second Life: list mylist = []; mylist += [1, 2, 3]; mylist += "four"; list newlist = mylist + 5.0; The problem is that the LSL_Types.list class does not have an operator for adding a string to a list. I am including a patch which implements adding a string, integer or float to a list. I am also including tests. The file LSL_TypesTestList.cs belongs in OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/.
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_Types.cs24
-rw-r--r--OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/LSL_TypesTestList.cs101
2 files changed, 125 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
index f8650a0..ab3cba8 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs
@@ -425,6 +425,30 @@ namespace OpenSim.Region.ScriptEngine.Common
425 return new list(tmp); 425 return new list(tmp);
426 } 426 }
427 427
428 private void ExtendAndAdd(object o)
429 {
430 Array.Resize(ref m_data, Length + 1);
431 m_data.SetValue(o, Length - 1);
432 }
433
434 public static list operator +(list a, string s)
435 {
436 a.ExtendAndAdd(s);
437 return a;
438 }
439
440 public static list operator +(list a, int i)
441 {
442 a.ExtendAndAdd(i);
443 return a;
444 }
445
446 public static list operator +(list a, double d)
447 {
448 a.ExtendAndAdd(d);
449 return a;
450 }
451
428 public void Add(object o) 452 public void Add(object o)
429 { 453 {
430 object[] tmp; 454 object[] tmp;
diff --git a/OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/LSL_TypesTestList.cs b/OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/LSL_TypesTestList.cs
new file mode 100644
index 0000000..cd2dadf
--- /dev/null
+++ b/OpenSim/Tests/OpenSim/Region/ScriptEngine/Common/LSL_TypesTestList.cs
@@ -0,0 +1,101 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections.Generic;
29using NUnit.Framework;
30using OpenSim.Tests.Common;
31using OpenSim.Region.ScriptEngine.Common;
32
33namespace OpenSim.Region.ScriptEngine.Common.Tests
34{
35 /// <summary>
36 /// Tests the LSL_Types.list class.
37 /// </summary>
38 [TestFixture]
39 public class LSL_TypesTestList
40 {
41 /// <summary>
42 /// Tests concatenating a string to a list.
43 /// </summary>
44 [Test]
45 public void TestConcatenateString()
46 {
47 LSL_Types.list testList = new LSL_Types.list(1, 'a', "test");
48 testList += "addition";
49
50 Assert.AreEqual(4, testList.Length);
51 Assert.AreEqual("addition", testList.Data[3]);
52 Assert.AreEqual(typeof(System.String), testList.Data[3].GetType());
53
54 LSL_Types.list secondTestList = testList + "more";
55
56 Assert.AreEqual(5, secondTestList.Length);
57 Assert.AreEqual("more", secondTestList.Data[4]);
58 Assert.AreEqual(typeof(System.String), secondTestList.Data[4].GetType());
59 }
60
61 /// <summary>
62 /// Tests concatenating an integer to a list.
63 /// </summary>
64 [Test]
65 public void TestConcatenateInteger()
66 {
67 LSL_Types.list testList = new LSL_Types.list(1, 'a', "test");
68 testList += 20;
69
70 Assert.AreEqual(4, testList.Length);
71 Assert.AreEqual(20, testList.Data[3]);
72 Assert.AreEqual(typeof(int), testList.Data[3].GetType());
73
74 LSL_Types.list secondTestList = testList + 2;
75
76 Assert.AreEqual(5, secondTestList.Length);
77 Assert.AreEqual(2, secondTestList.Data[4]);
78 Assert.AreEqual(typeof(int), secondTestList.Data[4].GetType());
79 }
80
81 /// <summary>
82 /// Tests concatenating an integer to a list.
83 /// </summary>
84 [Test]
85 public void TestConcatenateDouble()
86 {
87 LSL_Types.list testList = new LSL_Types.list(1, 'a', "test");
88 testList += 2.0;
89
90 Assert.AreEqual(4, testList.Length);
91 Assert.AreEqual(2.0, testList.Data[3]);
92 Assert.AreEqual(typeof(double), testList.Data[3].GetType());
93
94 LSL_Types.list secondTestList = testList + 0.04;
95
96 Assert.AreEqual(5, secondTestList.Length);
97 Assert.AreEqual(0.04, secondTestList.Data[4]);
98 Assert.AreEqual(typeof(double), secondTestList.Data[4].GetType());
99 }
100 }
101}