From 9d989612b0da9c5cc4e33a2f72d13d94116865d1 Mon Sep 17 00:00:00 2001
From: MW
Date: Wed, 11 Jul 2007 14:39:03 +0000
Subject: updated libsecondlife.dll to a 1.18 version (from the libsecondlife
aditi branch, so when they have a trunk version that is 1.18 ready, best to
update again). Started some work on a userProfile/inventory cache.
---
OpenSim/Framework/Data/InventoryData.cs | 12 +
OpenSim/Region/Caches/CachedUserInfo.cs | 20 +
OpenSim/Region/Caches/InventoryFolder.cs | 51 +++
OpenSim/Region/Caches/UserProfileCache.cs | 75 ++++
OpenSim/Region/ClientStack/ClientViewBase.cs | 2 +-
.../Region/Communications/OGS1/OGS1GridServices.cs | 73 +++-
.../Engines/JVMEngine/Interpreter.Logic.cs | 427 +++++++++++++++++++++
.../Engines/JVMEngine/Interpreter.Methods.cs | 96 +++++
.../Engines/JVMEngine/Interpreter.Return.cs | 40 ++
.../Engines/JVMEngine/InterpreterLogic.cs | 427 ---------------------
.../Engines/JVMEngine/InterpreterMethods.cs | 96 -----
.../Engines/JVMEngine/InterpreterReturn.cs | 40 --
bin/libsecondlife.dll | Bin 2289664 -> 2166784 bytes
prebuild.xml | 46 +--
14 files changed, 808 insertions(+), 597 deletions(-)
create mode 100644 OpenSim/Region/Caches/CachedUserInfo.cs
create mode 100644 OpenSim/Region/Caches/InventoryFolder.cs
create mode 100644 OpenSim/Region/Caches/UserProfileCache.cs
create mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Logic.cs
create mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Methods.cs
create mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Return.cs
delete mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs
delete mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs
delete mode 100644 OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs
diff --git a/OpenSim/Framework/Data/InventoryData.cs b/OpenSim/Framework/Data/InventoryData.cs
index c2a1d06..fe2e25c 100644
--- a/OpenSim/Framework/Data/InventoryData.cs
+++ b/OpenSim/Framework/Data/InventoryData.cs
@@ -56,6 +56,10 @@ namespace OpenSim.Framework.Data
///
public LLUUID avatarID;
///
+ /// The creator of this folder
+ ///
+ public LLUUID creatorsID;
+ ///
/// The name of the inventory item (must be less than 64 characters)
///
public string inventoryName;
@@ -94,6 +98,14 @@ namespace OpenSim.Framework.Data
/// The UUID for this folder
///
public LLUUID folderID;
+ ///
+ /// Tyep of Items normally stored in this folder
+ ///
+ public ushort type;
+ ///
+ ///
+ ///
+ public ushort version;
}
///
diff --git a/OpenSim/Region/Caches/CachedUserInfo.cs b/OpenSim/Region/Caches/CachedUserInfo.cs
new file mode 100644
index 0000000..08a7848
--- /dev/null
+++ b/OpenSim/Region/Caches/CachedUserInfo.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using OpenSim.Framework.Data;
+using libsecondlife;
+
+namespace OpenSim.Region.Caches
+{
+ public class CachedUserInfo
+ {
+ public UserProfileData UserProfile;
+ //public Dictionary Folders = new Dictionary();
+ public InventoryFolder RootFolder;
+
+ public CachedUserInfo()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim/Region/Caches/InventoryFolder.cs b/OpenSim/Region/Caches/InventoryFolder.cs
new file mode 100644
index 0000000..364a184
--- /dev/null
+++ b/OpenSim/Region/Caches/InventoryFolder.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using OpenSim.Framework.Data;
+
+namespace OpenSim.Region.Caches
+{
+ public class InventoryFolder : InventoryFolderBase
+ {
+ public Dictionary SubFolders = new Dictionary();
+ public Dictionary Items = new Dictionary();
+
+ public InventoryFolder()
+ {
+ }
+
+ public InventoryFolder HasSubFolder(LLUUID folderID)
+ {
+ InventoryFolder returnFolder = null;
+ if (this.SubFolders.ContainsKey(folderID))
+ {
+ returnFolder = this.SubFolders[folderID];
+ }
+ else
+ {
+ foreach (InventoryFolder folder in this.SubFolders.Values)
+ {
+ returnFolder = folder.HasSubFolder(folderID);
+ if (returnFolder != null)
+ {
+ break;
+ }
+ }
+ }
+ return returnFolder;
+ }
+
+ public InventoryFolder CreateNewSubFolder(LLUUID folderID, string folderName, ushort type)
+ {
+ InventoryFolder subFold = new InventoryFolder();
+ subFold.name = folderName;
+ subFold.folderID = folderID;
+ subFold.type = type;
+ subFold.parentID = this.folderID;
+ subFold.agentID = this.agentID;
+ this.SubFolders.Add(subFold.folderID, subFold);
+ return subFold;
+ }
+ }
+}
diff --git a/OpenSim/Region/Caches/UserProfileCache.cs b/OpenSim/Region/Caches/UserProfileCache.cs
new file mode 100644
index 0000000..0717e55
--- /dev/null
+++ b/OpenSim/Region/Caches/UserProfileCache.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using OpenSim.Framework.Data;
+
+namespace OpenSim.Region.Caches
+{
+ public class UserProfileCache
+ {
+ public Dictionary UserProfiles = new Dictionary();
+
+ public UserProfileCache()
+ {
+
+ }
+
+ ///
+ /// A new user has moved into a region in this instance
+ /// so get info from servers
+ ///
+ ///
+ public void AddNewUser(LLUUID userID)
+ {
+
+ }
+
+ ///
+ /// A user has left this instance
+ /// so make sure servers have been updated
+ /// Then remove cached info
+ ///
+ ///
+ public void UserLogOut(LLUUID userID)
+ {
+
+ }
+
+ ///
+ /// Request the user profile from User server
+ ///
+ ///
+ private void RequestUserProfileForUser(LLUUID userID)
+ {
+
+ }
+
+ ///
+ /// Request Iventory Info from Inventory server
+ ///
+ ///
+ private void RequestInventoryForUser(LLUUID userID)
+ {
+
+ }
+
+ ///
+ /// Make sure UserProfile is updated on user server
+ ///
+ ///
+ private void UpdateUserProfileToServer(LLUUID userID)
+ {
+
+ }
+
+ ///
+ /// Update Inventory data to Inventory server
+ ///
+ ///
+ private void UpdateInventoryToServer(LLUUID userID)
+ {
+
+ }
+ }
+}
diff --git a/OpenSim/Region/ClientStack/ClientViewBase.cs b/OpenSim/Region/ClientStack/ClientViewBase.cs
index 048f4df..211ba8b 100644
--- a/OpenSim/Region/ClientStack/ClientViewBase.cs
+++ b/OpenSim/Region/ClientStack/ClientViewBase.cs
@@ -71,7 +71,7 @@ namespace OpenSim.Region.ClientStack
// Keep track of when this packet was sent out
Pack.TickCount = Environment.TickCount;
- Console.WriteLine(CircuitCode + ":OUT: " + Pack.Type.ToString());
+ // Console.WriteLine(CircuitCode + ":OUT: " + Pack.Type.ToString());
if (!Pack.Header.Resent)
{
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 66c1739..d32976f 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -24,6 +24,11 @@ namespace OpenSim.Region.Communications.OGS1
public NetworkServersInfo serversInfo;
public BaseHttpServer httpServer;
+ ///
+ ///
+ ///
+ ///
+ ///
public OGS1GridServices(NetworkServersInfo servers_info, BaseHttpServer httpServe)
{
serversInfo = servers_info;
@@ -32,6 +37,11 @@ namespace OpenSim.Region.Communications.OGS1
this.StartRemoting();
}
+ ///
+ ///
+ ///
+ ///
+ ///
public RegionCommsListener RegisterRegion(RegionInfo regionInfo)
{
if (!this.regions.ContainsKey((uint)regionInfo.RegionHandle))
@@ -40,8 +50,6 @@ namespace OpenSim.Region.Communications.OGS1
}
Hashtable GridParams = new Hashtable();
-
-
// Login / Authentication
GridParams["authkey"] = serversInfo.GridSendKey;
@@ -74,15 +82,6 @@ namespace OpenSim.Region.Communications.OGS1
return null;
}
- /* if (!this.listeners.ContainsKey(regionInfo.RegionHandle))
- {
- MainLog.Instance.Verbose("OGS1 - Registering new HTTP listener on port " + regionInfo.InternalEndPoint.Port.ToString());
- // initialised = true;
- httpListener = new BaseHttpServer( regionInfo.InternalEndPoint.Port );
- httpListener.AddXmlRPCHandler("expect_user", this.ExpectUser);
- httpListener.Start();
- }*/
-
// Initialise the background listeners
RegionCommsListener regListener = new RegionCommsListener();
if (this.listeners.ContainsKey(regionInfo.RegionHandle))
@@ -97,6 +96,11 @@ namespace OpenSim.Region.Communications.OGS1
return regListener;
}
+ ///
+ ///
+ ///
+ ///
+ ///
public List RequestNeighbours(RegionInfo regionInfo)
{
@@ -136,6 +140,11 @@ namespace OpenSim.Region.Communications.OGS1
return neighbours;
}
+ ///
+ ///
+ ///
+ ///
+ ///
public RegionInfo RequestNeighbourInfo(ulong regionHandle)
{
if (this.regions.ContainsKey(regionHandle))
@@ -179,6 +188,14 @@ namespace OpenSim.Region.Communications.OGS1
return regionInfo;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public List RequestNeighbourMapBlocks(int minX, int minY, int maxX, int maxY)
{
Hashtable respData = MapBlockQuery(minX, minY, maxX, maxY);
@@ -232,6 +249,11 @@ namespace OpenSim.Region.Communications.OGS1
}
// Grid Request Processing
+ ///
+ ///
+ ///
+ ///
+ ///
public XmlRpcResponse ExpectUser(XmlRpcRequest request)
{
Console.WriteLine("Expecting User...");
@@ -269,6 +291,9 @@ namespace OpenSim.Region.Communications.OGS1
}
#region InterRegion Comms
+ ///
+ ///
+ ///
private void StartRemoting()
{
TcpChannel ch = new TcpChannel(this.serversInfo.RemotingListenerPort);
@@ -281,6 +306,12 @@ namespace OpenSim.Region.Communications.OGS1
}
#region Methods called by regions in this instance
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public bool InformRegionOfChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
if (this.listeners.ContainsKey(regionHandle))
@@ -316,6 +347,13 @@ namespace OpenSim.Region.Communications.OGS1
return false;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public bool ExpectAvatarCrossing(ulong regionHandle, LLUUID agentID, LLVector3 position)
{
if (this.listeners.ContainsKey(regionHandle))
@@ -353,6 +391,12 @@ namespace OpenSim.Region.Communications.OGS1
#endregion
#region Methods triggered by calls from external instances
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public bool IncomingChildAgent(ulong regionHandle, AgentCircuitData agentData)
{
if (this.listeners.ContainsKey(regionHandle))
@@ -363,6 +407,13 @@ namespace OpenSim.Region.Communications.OGS1
return false;
}
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public bool IncomingArrival(ulong regionHandle, LLUUID agentID, LLVector3 position)
{
if (this.listeners.ContainsKey(regionHandle))
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Logic.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Logic.cs
new file mode 100644
index 0000000..2a11afd
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Logic.cs
@@ -0,0 +1,427 @@
+/*
+* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
+using System.Text;
+using OpenSim.Scripting.EmbeddedJVM.Types;
+using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
+
+namespace OpenSim.Scripting.EmbeddedJVM
+{
+ partial class Thread
+ {
+ private partial class Interpreter
+ {
+ private bool IsLogicOpCode(byte opcode)
+ {
+ bool result = false;
+ switch (opcode)
+ {
+ case 2:
+ Int m_int= new Int();
+ m_int.mValue = -1;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 3:
+ m_int= new Int();
+ m_int.mValue = 0;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 4:
+ m_int = new Int();
+ m_int.mValue = 1;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 5:
+ m_int = new Int();
+ m_int.mValue = 2;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 6:
+ m_int = new Int();
+ m_int.mValue = 3;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ break;
+ case 7:
+ m_int = new Int();
+ m_int.mValue = 4;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 8:
+ m_int = new Int();
+ m_int.mValue = 5;
+ this._mThread.currentFrame.OpStack.Push(m_int);
+ result = true;
+ break;
+ case 11:
+ Float m_float = new Float();
+ m_float.mValue = 0.0f;
+ this._mThread.currentFrame.OpStack.Push(m_float);
+ result = true;
+ break;
+ case 12:
+ m_float = new Float();
+ m_float.mValue = 1.0f;
+ this._mThread.currentFrame.OpStack.Push(m_float);
+ result = true;
+ break;
+ case 13:
+ m_float = new Float();
+ m_float.mValue = 2.0f;
+ this._mThread.currentFrame.OpStack.Push(m_float);
+ result = true;
+ break;
+ case 16:
+ int pushvalue = (int)GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC];
+ Int pushInt = new Int();
+ pushInt.mValue = pushvalue;
+ this._mThread.currentFrame.OpStack.Push(pushInt);
+ this._mThread.PC++;
+ result = true;
+ break;
+ case 17:
+ short pushvalue2 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
+ Int pushInt2 = new Int();
+ pushInt2.mValue = pushvalue2;
+ this._mThread.currentFrame.OpStack.Push(pushInt2);
+ this._mThread.PC += 2;
+ result = true;
+ break;
+ case 23:
+ short findex1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]));
+ Float fload = new Float();
+ if (this._mThread.currentFrame.LocalVariables[findex1] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[findex1] is Float)
+ {
+ fload.mValue = ((Float)this._mThread.currentFrame.LocalVariables[findex1]).mValue;
+ this._mThread.currentFrame.OpStack.Push(fload);
+ }
+ }
+ this._mThread.PC++;
+ result = true;
+ break;
+ case 26:
+ if (this._mThread.currentFrame.LocalVariables[0] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[0] is Int)
+ {
+ Int newInt = new Int();
+ newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[0]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newInt);
+ }
+ }
+ result = true;
+ break;
+ case 27:
+ if (this._mThread.currentFrame.LocalVariables[1] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[1] is Int)
+ {
+ Int newInt = new Int();
+ newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[1]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newInt);
+ }
+ }
+ result = true;
+ break;
+ case 34:
+ if (this._mThread.currentFrame.LocalVariables[0] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[0] is Float)
+ {
+ Float newfloat = new Float();
+ newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[0]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newfloat);
+ }
+ }
+ result = true;
+ break;
+ case 35:
+ if (this._mThread.currentFrame.LocalVariables[1] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[1] is Float)
+ {
+ Float newfloat = new Float();
+ newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[1]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newfloat);
+ }
+ }
+ result = true;
+ break;
+ case 36:
+ if (this._mThread.currentFrame.LocalVariables[2] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[2] is Float)
+ {
+ Float newfloat = new Float();
+ newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[2]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newfloat);
+ }
+ }
+ result = true;
+ break;
+ case 37:
+ if (this._mThread.currentFrame.LocalVariables[3] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[3] is Float)
+ {
+ Float newfloat = new Float();
+ newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[3]).mValue;
+ this._mThread.currentFrame.OpStack.Push(newfloat);
+ }
+ }
+ result = true;
+ break;
+ case 56:
+ short findex = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] ));
+ BaseType fstor = this._mThread.currentFrame.OpStack.Pop();
+ if (fstor is Float)
+ {
+ this._mThread.currentFrame.LocalVariables[findex] = (Float)fstor;
+ }
+ this._mThread.PC++;
+ result = true;
+ break;
+ case 59:
+ BaseType baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Int)
+ {
+ this._mThread.currentFrame.LocalVariables[0] = (Int)baset;
+ }
+ result = true;
+ break;
+ case 60:
+ baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Int)
+ {
+ this._mThread.currentFrame.LocalVariables[1] = (Int)baset;
+ }
+ result = true;
+ break;
+ case 67:
+ baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Float)
+ {
+ this._mThread.currentFrame.LocalVariables[0] = (Float)baset;
+ }
+ result = true;
+ break;
+ case 68:
+ baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Float)
+ {
+ this._mThread.currentFrame.LocalVariables[1] = (Float)baset;
+ }
+ result = true;
+ break;
+ case 69:
+ baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Float)
+ {
+ this._mThread.currentFrame.LocalVariables[2] = (Float)baset;
+ }
+ result = true;
+ break;
+ case 70:
+ baset = this._mThread.currentFrame.OpStack.Pop();
+ if (baset is Float)
+ {
+ this._mThread.currentFrame.LocalVariables[3] = (Float)baset;
+ }
+ result = true;
+ break;
+ case 87:
+ this._mThread.currentFrame.OpStack.Pop();
+ result = true;
+ break;
+ case 98:
+ BaseType bf2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType bf1 = this._mThread.currentFrame.OpStack.Pop();
+ if (bf1 is Float && bf2 is Float)
+ {
+ Float nflt = new Float();
+ nflt.mValue = ((Float)bf1).mValue + ((Float)bf2).mValue;
+ this._mThread.currentFrame.OpStack.Push(nflt);
+ }
+ result = true;
+ break;
+ case 102:
+ BaseType bsf2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType bsf1 = this._mThread.currentFrame.OpStack.Pop();
+ if (bsf1 is Float && bsf2 is Float)
+ {
+ Float resf = new Float();
+ resf.mValue = ((Float)bsf1).mValue - ((Float)bsf2).mValue;
+ this._mThread.currentFrame.OpStack.Push(resf);
+ }
+ result = true;
+ break;
+ case 104: //check the order of the two values off the stack is correct
+ BaseType bs2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType bs1 = this._mThread.currentFrame.OpStack.Pop();
+ if (bs1 is Int && bs2 is Int)
+ {
+ Int nInt = new Int();
+ nInt.mValue = ((Int)bs1).mValue * ((Int)bs2).mValue;
+ this._mThread.currentFrame.OpStack.Push(nInt);
+ }
+ result = true;
+ break;
+ case 132:
+ if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] != null)
+ {
+ if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] is Int)
+ {
+ ((Int)this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]]).mValue += (sbyte) GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1];
+ }
+ }
+ this._mThread.PC += 2;
+ result = true;
+ break;
+ case 139:
+ BaseType conv1 = this._mThread.currentFrame.OpStack.Pop();
+ if (conv1 is Float)
+ {
+ Int newconv = new Int();
+ newconv.mValue = (int)((Float)conv1).mValue;
+ this._mThread.currentFrame.OpStack.Push(newconv);
+ }
+ result = true;
+ break;
+ case 149:
+ BaseType flcom2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType flcom1 = this._mThread.currentFrame.OpStack.Pop();
+ if (flcom1 is Float && flcom2 is Float)
+ {
+ Int compres = new Int();
+ if (((Float)flcom1).mValue < ((Float)flcom2).mValue)
+ {
+ compres.mValue = -1;
+ }
+ else if (((Float)flcom1).mValue > ((Float)flcom2).mValue)
+ {
+ compres.mValue = 1;
+ }
+ else
+ {
+ compres.mValue = 0;
+ }
+ this._mThread.currentFrame.OpStack.Push(compres);
+ }
+ result = true;
+ break;
+ case 158:
+ short compareoffset1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
+ BaseType comp1 = this._mThread.currentFrame.OpStack.Pop();
+ if (comp1 is Int)
+ {
+ if (((Int)comp1).mValue <= 0)
+ {
+ this._mThread.PC += -1 + compareoffset1;
+ }
+ else
+ {
+ this._mThread.PC += 2;
+ }
+ }
+ else
+ {
+ this._mThread.PC += 2;
+ }
+ result = true;
+ break;
+ case 162:
+ short compareoffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
+ BaseType bc2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType bc1 = this._mThread.currentFrame.OpStack.Pop();
+ if (bc1 is Int && bc2 is Int)
+ {
+ //Console.WriteLine("comparing " + ((Int)bc1).mValue + " and " + ((Int)bc2).mValue);
+ if (((Int)bc1).mValue >= ((Int)bc2).mValue)
+ {
+ // Console.WriteLine("branch compare true , offset is " +compareoffset);
+ // Console.WriteLine("current PC is " + this._mThread.PC);
+ this._mThread.PC += -1 + compareoffset;
+ //Console.WriteLine("new PC is " + this._mThread.PC);
+ }
+ else
+ {
+ //Console.WriteLine("branch compare false");
+ this._mThread.PC += 2;
+ }
+ }
+ else
+ {
+ this._mThread.PC += 2;
+ }
+ result = true;
+ break;
+ case 164:
+ short compareloffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
+ BaseType bcl2 = this._mThread.currentFrame.OpStack.Pop();
+ BaseType bcl1 = this._mThread.currentFrame.OpStack.Pop();
+ if (bcl1 is Int && bcl2 is Int)
+ {
+ //Console.WriteLine("comparing " + ((Int)bcl1).mValue + " and " + ((Int)bcl2).mValue);
+ if (((Int)bcl1).mValue <= ((Int)bcl2).mValue)
+ {
+ // Console.WriteLine("branch compare true , offset is " + compareloffset);
+ // Console.WriteLine("current PC is " + this._mThread.PC);
+ this._mThread.PC += -1 + compareloffset;
+ // Console.WriteLine("new PC is " + this._mThread.PC);
+ }
+ else
+ {
+ //Console.WriteLine("branch compare false");
+ this._mThread.PC += 2;
+ }
+ }
+ else
+ {
+ this._mThread.PC += 2;
+ }
+ result = true;
+ break;
+ case 167:
+ short offset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
+ this._mThread.PC += -1 + offset;
+ result = true;
+ break;
+ }
+
+ return result;
+ }
+ }
+ }
+}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Methods.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Methods.cs
new file mode 100644
index 0000000..4d60559
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Methods.cs
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
+using System.Text;
+using OpenSim.Scripting.EmbeddedJVM.Types;
+using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework;
+using OpenSim.Framework.Types;
+
+namespace OpenSim.Scripting.EmbeddedJVM
+{
+ partial class Thread
+ {
+ private partial class Interpreter
+ {
+ private bool IsMethodOpCode(byte opcode)
+ {
+ bool result = false;
+ switch (opcode)
+ {
+ case 184:
+ short refIndex = (short) ((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
+ if (this._mThread.currentClass._constantsPool[refIndex - 1] is ClassRecord.PoolMethodRef)
+ {
+ string typ = ((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Type.Value;
+ string typeparam = "";
+ string typereturn = "";
+ int firstbrak = 0;
+ int secondbrak = 0;
+ firstbrak = typ.LastIndexOf('(');
+ secondbrak = typ.LastIndexOf(')');
+ typeparam = typ.Substring(firstbrak + 1, secondbrak - firstbrak - 1);
+ typereturn = typ.Substring(secondbrak + 1, typ.Length - secondbrak - 1);
+ if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == this._mThread.currentClass.mClass.Name.Value)
+ {
+ //calling a method in this class
+ if (typeparam.Length == 0)
+ {
+ this._mThread.JumpToStaticVoidMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, (this._mThread.PC + 2));
+ }
+ else
+ {
+ this._mThread.JumpToStaticParamMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, typeparam, (this._mThread.PC + 2));
+ }
+ }
+ else
+ {
+ //calling a method of a different class
+
+ // OpenSimAPI Class
+ if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == "OpenSimAPI")
+ {
+ this._mThread.scriptInfo.api.CallMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, null);
+ }
+ }
+ }
+ else
+ {
+ this._mThread.PC += 2;
+ }
+ result = true;
+ break;
+ }
+
+ return result;
+ }
+ }
+ }
+}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Return.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Return.cs
new file mode 100644
index 0000000..cbedb71
--- /dev/null
+++ b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/Interpreter.Return.cs
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Scripting.EmbeddedJVM
+{
+ partial class Thread
+ {
+ private partial class Interpreter
+ {
+ }
+ }
+}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs
deleted file mode 100644
index 2a11afd..0000000
--- a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterLogic.cs
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
-using System.Text;
-using OpenSim.Scripting.EmbeddedJVM.Types;
-using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
-
-namespace OpenSim.Scripting.EmbeddedJVM
-{
- partial class Thread
- {
- private partial class Interpreter
- {
- private bool IsLogicOpCode(byte opcode)
- {
- bool result = false;
- switch (opcode)
- {
- case 2:
- Int m_int= new Int();
- m_int.mValue = -1;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 3:
- m_int= new Int();
- m_int.mValue = 0;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 4:
- m_int = new Int();
- m_int.mValue = 1;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 5:
- m_int = new Int();
- m_int.mValue = 2;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 6:
- m_int = new Int();
- m_int.mValue = 3;
- this._mThread.currentFrame.OpStack.Push(m_int);
- break;
- case 7:
- m_int = new Int();
- m_int.mValue = 4;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 8:
- m_int = new Int();
- m_int.mValue = 5;
- this._mThread.currentFrame.OpStack.Push(m_int);
- result = true;
- break;
- case 11:
- Float m_float = new Float();
- m_float.mValue = 0.0f;
- this._mThread.currentFrame.OpStack.Push(m_float);
- result = true;
- break;
- case 12:
- m_float = new Float();
- m_float.mValue = 1.0f;
- this._mThread.currentFrame.OpStack.Push(m_float);
- result = true;
- break;
- case 13:
- m_float = new Float();
- m_float.mValue = 2.0f;
- this._mThread.currentFrame.OpStack.Push(m_float);
- result = true;
- break;
- case 16:
- int pushvalue = (int)GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC];
- Int pushInt = new Int();
- pushInt.mValue = pushvalue;
- this._mThread.currentFrame.OpStack.Push(pushInt);
- this._mThread.PC++;
- result = true;
- break;
- case 17:
- short pushvalue2 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
- Int pushInt2 = new Int();
- pushInt2.mValue = pushvalue2;
- this._mThread.currentFrame.OpStack.Push(pushInt2);
- this._mThread.PC += 2;
- result = true;
- break;
- case 23:
- short findex1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]));
- Float fload = new Float();
- if (this._mThread.currentFrame.LocalVariables[findex1] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[findex1] is Float)
- {
- fload.mValue = ((Float)this._mThread.currentFrame.LocalVariables[findex1]).mValue;
- this._mThread.currentFrame.OpStack.Push(fload);
- }
- }
- this._mThread.PC++;
- result = true;
- break;
- case 26:
- if (this._mThread.currentFrame.LocalVariables[0] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[0] is Int)
- {
- Int newInt = new Int();
- newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[0]).mValue;
- this._mThread.currentFrame.OpStack.Push(newInt);
- }
- }
- result = true;
- break;
- case 27:
- if (this._mThread.currentFrame.LocalVariables[1] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[1] is Int)
- {
- Int newInt = new Int();
- newInt.mValue = ((Int)this._mThread.currentFrame.LocalVariables[1]).mValue;
- this._mThread.currentFrame.OpStack.Push(newInt);
- }
- }
- result = true;
- break;
- case 34:
- if (this._mThread.currentFrame.LocalVariables[0] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[0] is Float)
- {
- Float newfloat = new Float();
- newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[0]).mValue;
- this._mThread.currentFrame.OpStack.Push(newfloat);
- }
- }
- result = true;
- break;
- case 35:
- if (this._mThread.currentFrame.LocalVariables[1] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[1] is Float)
- {
- Float newfloat = new Float();
- newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[1]).mValue;
- this._mThread.currentFrame.OpStack.Push(newfloat);
- }
- }
- result = true;
- break;
- case 36:
- if (this._mThread.currentFrame.LocalVariables[2] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[2] is Float)
- {
- Float newfloat = new Float();
- newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[2]).mValue;
- this._mThread.currentFrame.OpStack.Push(newfloat);
- }
- }
- result = true;
- break;
- case 37:
- if (this._mThread.currentFrame.LocalVariables[3] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[3] is Float)
- {
- Float newfloat = new Float();
- newfloat.mValue = ((Float)this._mThread.currentFrame.LocalVariables[3]).mValue;
- this._mThread.currentFrame.OpStack.Push(newfloat);
- }
- }
- result = true;
- break;
- case 56:
- short findex = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] ));
- BaseType fstor = this._mThread.currentFrame.OpStack.Pop();
- if (fstor is Float)
- {
- this._mThread.currentFrame.LocalVariables[findex] = (Float)fstor;
- }
- this._mThread.PC++;
- result = true;
- break;
- case 59:
- BaseType baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Int)
- {
- this._mThread.currentFrame.LocalVariables[0] = (Int)baset;
- }
- result = true;
- break;
- case 60:
- baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Int)
- {
- this._mThread.currentFrame.LocalVariables[1] = (Int)baset;
- }
- result = true;
- break;
- case 67:
- baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Float)
- {
- this._mThread.currentFrame.LocalVariables[0] = (Float)baset;
- }
- result = true;
- break;
- case 68:
- baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Float)
- {
- this._mThread.currentFrame.LocalVariables[1] = (Float)baset;
- }
- result = true;
- break;
- case 69:
- baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Float)
- {
- this._mThread.currentFrame.LocalVariables[2] = (Float)baset;
- }
- result = true;
- break;
- case 70:
- baset = this._mThread.currentFrame.OpStack.Pop();
- if (baset is Float)
- {
- this._mThread.currentFrame.LocalVariables[3] = (Float)baset;
- }
- result = true;
- break;
- case 87:
- this._mThread.currentFrame.OpStack.Pop();
- result = true;
- break;
- case 98:
- BaseType bf2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType bf1 = this._mThread.currentFrame.OpStack.Pop();
- if (bf1 is Float && bf2 is Float)
- {
- Float nflt = new Float();
- nflt.mValue = ((Float)bf1).mValue + ((Float)bf2).mValue;
- this._mThread.currentFrame.OpStack.Push(nflt);
- }
- result = true;
- break;
- case 102:
- BaseType bsf2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType bsf1 = this._mThread.currentFrame.OpStack.Pop();
- if (bsf1 is Float && bsf2 is Float)
- {
- Float resf = new Float();
- resf.mValue = ((Float)bsf1).mValue - ((Float)bsf2).mValue;
- this._mThread.currentFrame.OpStack.Push(resf);
- }
- result = true;
- break;
- case 104: //check the order of the two values off the stack is correct
- BaseType bs2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType bs1 = this._mThread.currentFrame.OpStack.Pop();
- if (bs1 is Int && bs2 is Int)
- {
- Int nInt = new Int();
- nInt.mValue = ((Int)bs1).mValue * ((Int)bs2).mValue;
- this._mThread.currentFrame.OpStack.Push(nInt);
- }
- result = true;
- break;
- case 132:
- if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] != null)
- {
- if (this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]] is Int)
- {
- ((Int)this._mThread.currentFrame.LocalVariables[GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC]]).mValue += (sbyte) GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1];
- }
- }
- this._mThread.PC += 2;
- result = true;
- break;
- case 139:
- BaseType conv1 = this._mThread.currentFrame.OpStack.Pop();
- if (conv1 is Float)
- {
- Int newconv = new Int();
- newconv.mValue = (int)((Float)conv1).mValue;
- this._mThread.currentFrame.OpStack.Push(newconv);
- }
- result = true;
- break;
- case 149:
- BaseType flcom2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType flcom1 = this._mThread.currentFrame.OpStack.Pop();
- if (flcom1 is Float && flcom2 is Float)
- {
- Int compres = new Int();
- if (((Float)flcom1).mValue < ((Float)flcom2).mValue)
- {
- compres.mValue = -1;
- }
- else if (((Float)flcom1).mValue > ((Float)flcom2).mValue)
- {
- compres.mValue = 1;
- }
- else
- {
- compres.mValue = 0;
- }
- this._mThread.currentFrame.OpStack.Push(compres);
- }
- result = true;
- break;
- case 158:
- short compareoffset1 = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
- BaseType comp1 = this._mThread.currentFrame.OpStack.Pop();
- if (comp1 is Int)
- {
- if (((Int)comp1).mValue <= 0)
- {
- this._mThread.PC += -1 + compareoffset1;
- }
- else
- {
- this._mThread.PC += 2;
- }
- }
- else
- {
- this._mThread.PC += 2;
- }
- result = true;
- break;
- case 162:
- short compareoffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
- BaseType bc2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType bc1 = this._mThread.currentFrame.OpStack.Pop();
- if (bc1 is Int && bc2 is Int)
- {
- //Console.WriteLine("comparing " + ((Int)bc1).mValue + " and " + ((Int)bc2).mValue);
- if (((Int)bc1).mValue >= ((Int)bc2).mValue)
- {
- // Console.WriteLine("branch compare true , offset is " +compareoffset);
- // Console.WriteLine("current PC is " + this._mThread.PC);
- this._mThread.PC += -1 + compareoffset;
- //Console.WriteLine("new PC is " + this._mThread.PC);
- }
- else
- {
- //Console.WriteLine("branch compare false");
- this._mThread.PC += 2;
- }
- }
- else
- {
- this._mThread.PC += 2;
- }
- result = true;
- break;
- case 164:
- short compareloffset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC + 1]);
- BaseType bcl2 = this._mThread.currentFrame.OpStack.Pop();
- BaseType bcl1 = this._mThread.currentFrame.OpStack.Pop();
- if (bcl1 is Int && bcl2 is Int)
- {
- //Console.WriteLine("comparing " + ((Int)bcl1).mValue + " and " + ((Int)bcl2).mValue);
- if (((Int)bcl1).mValue <= ((Int)bcl2).mValue)
- {
- // Console.WriteLine("branch compare true , offset is " + compareloffset);
- // Console.WriteLine("current PC is " + this._mThread.PC);
- this._mThread.PC += -1 + compareloffset;
- // Console.WriteLine("new PC is " + this._mThread.PC);
- }
- else
- {
- //Console.WriteLine("branch compare false");
- this._mThread.PC += 2;
- }
- }
- else
- {
- this._mThread.PC += 2;
- }
- result = true;
- break;
- case 167:
- short offset = (short)((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
- this._mThread.PC += -1 + offset;
- result = true;
- break;
- }
-
- return result;
- }
- }
- }
-}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs
deleted file mode 100644
index 4d60559..0000000
--- a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterMethods.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
-using System.Text;
-using OpenSim.Scripting.EmbeddedJVM.Types;
-using OpenSim.Scripting.EmbeddedJVM.Types.PrimitiveTypes;
-using OpenSim.Framework.Interfaces;
-using OpenSim.Framework;
-using OpenSim.Framework.Types;
-
-namespace OpenSim.Scripting.EmbeddedJVM
-{
- partial class Thread
- {
- private partial class Interpreter
- {
- private bool IsMethodOpCode(byte opcode)
- {
- bool result = false;
- switch (opcode)
- {
- case 184:
- short refIndex = (short) ((GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC] << 8) + GlobalMemory.MethodArea.MethodBuffer[this._mThread.PC+1]);
- if (this._mThread.currentClass._constantsPool[refIndex - 1] is ClassRecord.PoolMethodRef)
- {
- string typ = ((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Type.Value;
- string typeparam = "";
- string typereturn = "";
- int firstbrak = 0;
- int secondbrak = 0;
- firstbrak = typ.LastIndexOf('(');
- secondbrak = typ.LastIndexOf(')');
- typeparam = typ.Substring(firstbrak + 1, secondbrak - firstbrak - 1);
- typereturn = typ.Substring(secondbrak + 1, typ.Length - secondbrak - 1);
- if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == this._mThread.currentClass.mClass.Name.Value)
- {
- //calling a method in this class
- if (typeparam.Length == 0)
- {
- this._mThread.JumpToStaticVoidMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, (this._mThread.PC + 2));
- }
- else
- {
- this._mThread.JumpToStaticParamMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, typeparam, (this._mThread.PC + 2));
- }
- }
- else
- {
- //calling a method of a different class
-
- // OpenSimAPI Class
- if (((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mClass.Name.Value == "OpenSimAPI")
- {
- this._mThread.scriptInfo.api.CallMethod(((ClassRecord.PoolMethodRef)this._mThread.currentClass._constantsPool[refIndex - 1]).mNameType.Name.Value, null);
- }
- }
- }
- else
- {
- this._mThread.PC += 2;
- }
- result = true;
- break;
- }
-
- return result;
- }
- }
- }
-}
diff --git a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs b/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs
deleted file mode 100644
index cbedb71..0000000
--- a/OpenSim/Region/Environment/Scenes/scripting/Engines/JVMEngine/InterpreterReturn.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) Contributors, http://www.openmetaverse.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 System.Collections.Generic;
-using System.Text;
-
-namespace OpenSim.Scripting.EmbeddedJVM
-{
- partial class Thread
- {
- private partial class Interpreter
- {
- }
- }
-}
diff --git a/bin/libsecondlife.dll b/bin/libsecondlife.dll
index 0618eb8..c89788b 100644
Binary files a/bin/libsecondlife.dll and b/bin/libsecondlife.dll differ
diff --git a/prebuild.xml b/prebuild.xml
index 688437a..248fdf9 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -103,6 +103,29 @@
+
+
+
+ ../../../bin/
+
+
+
+
+ ../../../bin/
+
+
+
+ ../../../bin/
+
+
+
+
+
+
+
+
+
+
@@ -120,6 +143,7 @@
+
@@ -417,28 +441,6 @@
-
-
-
- ../../../bin/
-
-
-
-
- ../../../bin/
-
-
-
- ../../../bin/
-
-
-
-
-
-
-
-
-
--
cgit v1.1