diff options
author | lbsa71 | 2008-06-24 21:09:49 +0000 |
---|---|---|
committer | lbsa71 | 2008-06-24 21:09:49 +0000 |
commit | 6b7930104bdb845d3b9c085dc04f52b6446f23b1 (patch) | |
tree | 05ee45781a455817fa400bb99f30f4d19d4eb1f8 /OpenSim | |
parent | based on positive feedback on performance of making keys fixed length (diff) | |
download | opensim-SC-6b7930104bdb845d3b9c085dc04f52b6446f23b1.zip opensim-SC-6b7930104bdb845d3b9c085dc04f52b6446f23b1.tar.gz opensim-SC-6b7930104bdb845d3b9c085dc04f52b6446f23b1.tar.bz2 opensim-SC-6b7930104bdb845d3b9c085dc04f52b6446f23b1.tar.xz |
* Applied patch from Melanie, mantis issue #1581 - "Refactor LSL language, api and compiler out of XEngine"
"First stage in a major Script Engine refactor, that will result in the LSL implementaions ebing reconverged. Not there yet, but one major part is done."
Thank you, Melanie!
Diffstat (limited to 'OpenSim')
49 files changed, 15616 insertions, 1288 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/IScript.cs b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs index e5d0b33..efb05d3 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/IScript.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/ICompiler.cs | |||
@@ -25,22 +25,15 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Reflection; | ||
29 | using System; | 28 | using System; |
30 | using System.Collections; | ||
31 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
32 | using OpenSim.Region.Environment.Interfaces; | 30 | using Nini.Config; |
33 | 31 | ||
34 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 32 | namespace OpenSim.Region.ScriptEngine.Interfaces |
35 | { | 33 | { |
36 | public interface IScript | 34 | public interface ICompiler |
37 | { | 35 | { |
38 | Type Start(ILSL_ScriptCommands lsl, IOSSL_ScriptCommands ossl); | 36 | void Configure(IConfig configSource); |
39 | 37 | void Compile(string text, string outFile, List<IScriptApi> apiList); | |
40 | Dictionary<string, object> GetVars(); | ||
41 | void SetVars(Dictionary<string, object> vars); | ||
42 | void ResetVars(); | ||
43 | |||
44 | string State { get; set; } | ||
45 | } | 38 | } |
46 | } | 39 | } |
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs new file mode 100644 index 0000000..553d56d --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScript.cs | |||
@@ -0,0 +1,17 @@ | |||
1 | using System; | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
5 | |||
6 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | ||
7 | { | ||
8 | public interface IScript | ||
9 | { | ||
10 | string[] GetApis(); | ||
11 | void InitApi(string name, IScriptApi data); | ||
12 | |||
13 | Dictionary<string,Object> GetVars(); | ||
14 | void SetVars(Dictionary<string,Object> vars); | ||
15 | void ResetVars(); | ||
16 | } | ||
17 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs new file mode 100644 index 0000000..2df41d0 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptApi.cs | |||
@@ -0,0 +1,43 @@ | |||
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 | |||
28 | using System; | ||
29 | using libsecondlife; | ||
30 | using OpenSim.Region.Environment.Scenes; | ||
31 | |||
32 | |||
33 | namespace OpenSim.Region.ScriptEngine.Interfaces | ||
34 | { | ||
35 | public interface IScriptApi | ||
36 | { | ||
37 | // | ||
38 | // Each API has an identifier, which is used to load the | ||
39 | // proper runtime assembly at load time. | ||
40 | // | ||
41 | void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, LLUUID item); | ||
42 | } | ||
43 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Eventstream.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs index dab7a0a..2fa67a4 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Eventstream.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs | |||
@@ -25,51 +25,35 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using log4net; | ||
28 | using System; | 29 | using System; |
29 | using System.Collections; | 30 | using OpenSim.Region.ScriptEngine.Shared; |
30 | using System.Collections.Generic; | ||
31 | using libsecondlife; | ||
32 | using OpenSim.Region.Environment.Scenes; | 31 | using OpenSim.Region.Environment.Scenes; |
32 | using libsecondlife; | ||
33 | using Nini.Config; | ||
34 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
33 | 35 | ||
34 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 36 | namespace OpenSim.Region.ScriptEngine.Interfaces |
35 | { | 37 | { |
36 | public class Eventstream | 38 | public interface IScriptEngine |
37 | { | 39 | { |
38 | public AsyncCommandManager m_CmdManager; | 40 | // |
39 | 41 | // An interface for a script API module to communicate with | |
40 | private class Event | 42 | // the engine it's running under |
41 | { | 43 | // |
42 | public uint LocalID; | 44 | |
43 | public string EventName; | 45 | Scene World { get; } |
44 | public Dictionary<LLUUID, XDetectParams> DetectParams; | 46 | IConfig Config { get; } |
45 | } | 47 | Object AsyncCommands { get; } |
46 | 48 | ILog Log { get; } | |
47 | private Dictionary<uint, Dictionary<string, Event> > m_Events = | 49 | |
48 | new Dictionary<uint, Dictionary<string, Event> >(); | 50 | bool PostScriptEvent(LLUUID itemID, EventParams parms); |
49 | 51 | bool PostObjectEvent(uint localID, EventParams parms); | |
50 | public Eventstream(AsyncCommandManager CmdManager) | 52 | void ResetScript(LLUUID itemID); |
51 | { | 53 | void SetScriptState(LLUUID itemID, bool state); |
52 | m_CmdManager = CmdManager; | 54 | bool GetScriptState(LLUUID itemID); |
53 | } | 55 | void SetState(LLUUID itemID, string newState); |
54 | 56 | ||
55 | public void AddObjectEvent(uint localID, string eventName, XDetectParams det) | 57 | DetectParams GetDetectParams(LLUUID item, int number); |
56 | { | ||
57 | SceneObjectPart part = m_CmdManager.m_ScriptEngine.World. | ||
58 | GetSceneObjectPart(localID); | ||
59 | |||
60 | if (part == null) // Can't register events for non-prims | ||
61 | return; | ||
62 | |||
63 | if (!part.ContainsScripts()) | ||
64 | return; | ||
65 | } | ||
66 | |||
67 | public void RemoveObjectEvent(uint localID, string eventName, LLUUID id) | ||
68 | { | ||
69 | } | ||
70 | |||
71 | public void RemoveObjects(uint localID) | ||
72 | { | ||
73 | } | ||
74 | } | 58 | } |
75 | } | 59 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs new file mode 100644 index 0000000..f7f2676 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/ApiManager.cs | |||
@@ -0,0 +1,79 @@ | |||
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 | |||
28 | using System; | ||
29 | using System.Collections; | ||
30 | using System.Collections.Generic; | ||
31 | using System.Reflection; | ||
32 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.Api | ||
35 | { | ||
36 | public class ApiManager | ||
37 | { | ||
38 | private Dictionary<string,Type> m_Apis = new Dictionary<string,Type>(); | ||
39 | |||
40 | public string[] GetApis() | ||
41 | { | ||
42 | if(m_Apis.Count > 0) | ||
43 | { | ||
44 | List<string> l = new List<string>(m_Apis.Keys); | ||
45 | return l.ToArray(); | ||
46 | } | ||
47 | |||
48 | Assembly a = Assembly.GetExecutingAssembly(); | ||
49 | |||
50 | Type[] types = a.GetExportedTypes(); | ||
51 | |||
52 | foreach (Type t in types) | ||
53 | { | ||
54 | string name = t.ToString(); | ||
55 | int idx = name.LastIndexOf('.'); | ||
56 | if(idx != -1) | ||
57 | name = name.Substring(idx+1); | ||
58 | |||
59 | if(name.EndsWith("_Api")) | ||
60 | { | ||
61 | name = name.Substring(0, name.Length - 4); | ||
62 | m_Apis[name] = t; | ||
63 | } | ||
64 | } | ||
65 | |||
66 | List<string> ret = new List<string>(m_Apis.Keys); | ||
67 | return ret.ToArray(); | ||
68 | } | ||
69 | |||
70 | public IScriptApi CreateApi(string api) | ||
71 | { | ||
72 | if(!m_Apis.ContainsKey(api)) | ||
73 | return null; | ||
74 | |||
75 | IScriptApi ret = (IScriptApi)(Activator.CreateInstance(m_Apis[api])); | ||
76 | return ret; | ||
77 | } | ||
78 | } | ||
79 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index fdad5b0..8c967a2 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs | |||
@@ -32,11 +32,12 @@ using System.Threading; | |||
32 | using libsecondlife; | 32 | using libsecondlife; |
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Region.Environment.Interfaces; | 34 | using OpenSim.Region.Environment.Interfaces; |
35 | using OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins; | 35 | using OpenSim.Region.ScriptEngine.Interfaces; |
36 | using Timer=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Timer; | 36 | using OpenSim.Region.ScriptEngine.Shared; |
37 | using Dataserver=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Dataserver; | 37 | using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; |
38 | using Timer=OpenSim.Region.ScriptEngine.Shared.Api.Plugins.Timer; | ||
38 | 39 | ||
39 | namespace OpenSim.Region.ScriptEngine.XEngine | 40 | namespace OpenSim.Region.ScriptEngine.Shared.Api |
40 | { | 41 | { |
41 | /// <summary> | 42 | /// <summary> |
42 | /// Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc. | 43 | /// Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc. |
@@ -46,18 +47,57 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
46 | private static Thread cmdHandlerThread; | 47 | private static Thread cmdHandlerThread; |
47 | private static int cmdHandlerThreadCycleSleepms; | 48 | private static int cmdHandlerThreadCycleSleepms; |
48 | 49 | ||
49 | public XEngine m_ScriptEngine; | 50 | private static List<AsyncCommandManager> m_Managers = new List<AsyncCommandManager>(); |
51 | public IScriptEngine m_ScriptEngine; | ||
50 | 52 | ||
51 | public Dataserver m_Dataserver; | 53 | private Dataserver m_Dataserver; |
52 | public Timer m_Timer; | 54 | private Timer m_Timer; |
53 | public HttpRequest m_HttpRequest; | 55 | private HttpRequest m_HttpRequest; |
54 | public Listener m_Listener; | 56 | private Listener m_Listener; |
55 | public SensorRepeat m_SensorRepeat; | 57 | private SensorRepeat m_SensorRepeat; |
56 | public XmlRequest m_XmlRequest; | 58 | private XmlRequest m_XmlRequest; |
57 | 59 | ||
58 | public AsyncCommandManager(XEngine _ScriptEngine) | 60 | public Dataserver DataserverPlugin |
61 | { | ||
62 | get { return m_Dataserver; } | ||
63 | } | ||
64 | |||
65 | public Timer TimerPlugin | ||
66 | { | ||
67 | get { return m_Timer; } | ||
68 | } | ||
69 | |||
70 | public HttpRequest HttpRequestPlugin | ||
71 | { | ||
72 | get { return m_HttpRequest; } | ||
73 | } | ||
74 | |||
75 | public Listener ListenerPlugin | ||
76 | { | ||
77 | get { return m_Listener; } | ||
78 | } | ||
79 | |||
80 | public SensorRepeat SensorRepeatPlugin | ||
81 | { | ||
82 | get { return m_SensorRepeat; } | ||
83 | } | ||
84 | |||
85 | public XmlRequest XmlRequestPlugin | ||
86 | { | ||
87 | get { return m_XmlRequest; } | ||
88 | } | ||
89 | |||
90 | public AsyncCommandManager[] Managers | ||
91 | { | ||
92 | get { return m_Managers.ToArray(); } | ||
93 | } | ||
94 | |||
95 | public AsyncCommandManager(IScriptEngine _ScriptEngine) | ||
59 | { | 96 | { |
60 | m_ScriptEngine = _ScriptEngine; | 97 | m_ScriptEngine = _ScriptEngine; |
98 | if(!m_Managers.Contains(this)) | ||
99 | m_Managers.Add(this); | ||
100 | |||
61 | ReadConfig(); | 101 | ReadConfig(); |
62 | 102 | ||
63 | // Create instances of all plugins | 103 | // Create instances of all plugins |
@@ -87,7 +127,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
87 | 127 | ||
88 | public void ReadConfig() | 128 | public void ReadConfig() |
89 | { | 129 | { |
90 | cmdHandlerThreadCycleSleepms = m_ScriptEngine.ScriptConfigSource.GetInt("AsyncLLCommandLoopms", 100); | 130 | cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100); |
91 | } | 131 | } |
92 | 132 | ||
93 | ~AsyncCommandManager() | 133 | ~AsyncCommandManager() |
@@ -119,9 +159,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
119 | { | 159 | { |
120 | Thread.Sleep(cmdHandlerThreadCycleSleepms); | 160 | Thread.Sleep(cmdHandlerThreadCycleSleepms); |
121 | 161 | ||
122 | foreach (XEngine xe in XEngine.ScriptEngines) | 162 | foreach (AsyncCommandManager m in m_Managers) |
123 | { | 163 | { |
124 | xe.m_ASYNCLSLCommandManager.DoOneCmdHandlerPass(); | 164 | m.DoOneCmdHandlerPass(); |
125 | } | 165 | } |
126 | } | 166 | } |
127 | } | 167 | } |
@@ -131,7 +171,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
131 | } | 171 | } |
132 | } | 172 | } |
133 | 173 | ||
134 | internal void DoOneCmdHandlerPass() | 174 | public void DoOneCmdHandlerPass() |
135 | { | 175 | { |
136 | // Check timers | 176 | // Check timers |
137 | m_Timer.CheckTimerEvents(); | 177 | m_Timer.CheckTimerEvents(); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 9c660c1..7832633 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -41,65 +41,50 @@ using OpenSim.Region.Environment.Interfaces; | |||
41 | using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; | 41 | using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; |
42 | using OpenSim.Region.Environment.Modules.World.Land; | 42 | using OpenSim.Region.Environment.Modules.World.Land; |
43 | using OpenSim.Region.Environment.Scenes; | 43 | using OpenSim.Region.Environment.Scenes; |
44 | using OpenSim.Region.ScriptEngine.XEngine; | 44 | using OpenSim.Region.ScriptEngine.Shared; |
45 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 45 | using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; |
46 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
47 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
48 | using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; | ||
46 | 49 | ||
47 | 50 | namespace OpenSim.Region.ScriptEngine.Shared.Api | |
48 | namespace OpenSim.Region.ScriptEngine.XEngine | ||
49 | { | 51 | { |
50 | /// <summary> | 52 | /// <summary> |
51 | /// Contains all LSL ll-functions. This class will be in Default AppDomain. | 53 | /// Contains all LSL ll-functions. This class will be in Default AppDomain. |
52 | /// </summary> | 54 | /// </summary> |
53 | public class LSL_ScriptCommands : MarshalByRefObject, ILSL_ScriptCommands | 55 | public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi |
54 | { | 56 | { |
55 | // private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 57 | // private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); |
56 | 58 | ||
57 | internal XEngine m_ScriptEngine; | 59 | internal IScriptEngine m_ScriptEngine; |
58 | internal XScriptInstance m_Instance; | ||
59 | internal SceneObjectPart m_host; | 60 | internal SceneObjectPart m_host; |
60 | internal uint m_localID; | 61 | internal uint m_localID; |
61 | internal LLUUID m_itemID; | 62 | internal LLUUID m_itemID; |
62 | internal bool throwErrorOnNotImplemented = true; | 63 | internal bool throwErrorOnNotImplemented = true; |
64 | internal static AsyncCommandManager AsyncCommands = null; | ||
63 | 65 | ||
64 | public LSL_ScriptCommands(XEngine ScriptEngine, XScriptInstance instance, SceneObjectPart host, uint localID, LLUUID itemID) | 66 | public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) |
65 | { | 67 | { |
66 | m_ScriptEngine = ScriptEngine; | 68 | m_ScriptEngine = ScriptEngine; |
67 | m_Instance = instance; | ||
68 | m_host = host; | 69 | m_host = host; |
69 | m_localID = localID; | 70 | m_localID = localID; |
70 | m_itemID = itemID; | 71 | m_itemID = itemID; |
71 | 72 | ||
72 | //m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]"); | 73 | AsyncCommands = (AsyncCommandManager)ScriptEngine.AsyncCommands; |
73 | } | 74 | } |
74 | 75 | ||
75 | private DateTime m_timer = DateTime.Now; | 76 | private DateTime m_timer = DateTime.Now; |
76 | private string m_state = "default"; | ||
77 | private bool m_waitingForScriptAnswer=false; | 77 | private bool m_waitingForScriptAnswer=false; |
78 | 78 | ||
79 | 79 | ||
80 | public string State | ||
81 | { | ||
82 | get { return m_Instance.State; } | ||
83 | set { m_Instance.State = value; } | ||
84 | } | ||
85 | |||
86 | public void state(string newState) | ||
87 | { | ||
88 | m_Instance.SetState(newState); | ||
89 | } | ||
90 | |||
91 | // Object never expires | 80 | // Object never expires |
92 | public override Object InitializeLifetimeService() | 81 | public override Object InitializeLifetimeService() |
93 | { | 82 | { |
94 | //Console.WriteLine("LSL_BuiltIn_Commands: InitializeLifetimeService()"); | ||
95 | // return null; | ||
96 | ILease lease = (ILease)base.InitializeLifetimeService(); | 83 | ILease lease = (ILease)base.InitializeLifetimeService(); |
97 | 84 | ||
98 | if (lease.CurrentState == LeaseState.Initial) | 85 | if (lease.CurrentState == LeaseState.Initial) |
99 | { | 86 | { |
100 | lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1); | 87 | lease.InitialLeaseTime = TimeSpan.Zero; |
101 | // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2); | ||
102 | // lease.RenewOnCallTime = TimeSpan.FromSeconds(2); | ||
103 | } | 88 | } |
104 | return lease; | 89 | return lease; |
105 | } | 90 | } |
@@ -109,6 +94,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
109 | get { return m_ScriptEngine.World; } | 94 | get { return m_ScriptEngine.World; } |
110 | } | 95 | } |
111 | 96 | ||
97 | public void state(string newState) | ||
98 | { | ||
99 | m_ScriptEngine.SetState(m_itemID, newState); | ||
100 | } | ||
101 | |||
112 | public void llSay(int channelID, string text) | 102 | public void llSay(int channelID, string text) |
113 | { | 103 | { |
114 | m_host.AddScriptLPS(1); | 104 | m_host.AddScriptLPS(1); |
@@ -501,7 +491,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
501 | LLUUID keyID = LLUUID.Zero; | 491 | LLUUID keyID = LLUUID.Zero; |
502 | LLUUID.TryParse(id, out keyID); | 492 | LLUUID.TryParse(id, out keyID); |
503 | 493 | ||
504 | m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host); | 494 | AsyncCommands.SensorRepeatPlugin.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host); |
505 | } | 495 | } |
506 | 496 | ||
507 | public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) | 497 | public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) |
@@ -510,13 +500,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
510 | LLUUID keyID = LLUUID.Zero; | 500 | LLUUID keyID = LLUUID.Zero; |
511 | LLUUID.TryParse(id, out keyID); | 501 | LLUUID.TryParse(id, out keyID); |
512 | 502 | ||
513 | m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); | 503 | AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host); |
514 | } | 504 | } |
515 | 505 | ||
516 | public void llSensorRemove() | 506 | public void llSensorRemove() |
517 | { | 507 | { |
518 | m_host.AddScriptLPS(1); | 508 | m_host.AddScriptLPS(1); |
519 | m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.UnSetSenseRepeaterEvents(m_localID, m_itemID); | 509 | AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_localID, m_itemID); |
520 | } | 510 | } |
521 | 511 | ||
522 | public string resolveName(LLUUID objecUUID) | 512 | public string resolveName(LLUUID objecUUID) |
@@ -550,7 +540,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
550 | public string llDetectedName(int number) | 540 | public string llDetectedName(int number) |
551 | { | 541 | { |
552 | m_host.AddScriptLPS(1); | 542 | m_host.AddScriptLPS(1); |
553 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 543 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
554 | if (d == null) | 544 | if (d == null) |
555 | return String.Empty; | 545 | return String.Empty; |
556 | return d.Name; | 546 | return d.Name; |
@@ -559,7 +549,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
559 | public string llDetectedKey(int number) | 549 | public string llDetectedKey(int number) |
560 | { | 550 | { |
561 | m_host.AddScriptLPS(1); | 551 | m_host.AddScriptLPS(1); |
562 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 552 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
563 | if (d == null) | 553 | if (d == null) |
564 | return String.Empty; | 554 | return String.Empty; |
565 | return d.Key.ToString(); | 555 | return d.Key.ToString(); |
@@ -568,7 +558,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
568 | public string llDetectedOwner(int number) | 558 | public string llDetectedOwner(int number) |
569 | { | 559 | { |
570 | m_host.AddScriptLPS(1); | 560 | m_host.AddScriptLPS(1); |
571 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 561 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
572 | if (d == null) | 562 | if (d == null) |
573 | return String.Empty; | 563 | return String.Empty; |
574 | return d.Owner.ToString(); | 564 | return d.Owner.ToString(); |
@@ -577,7 +567,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
577 | public LSL_Types.LSLInteger llDetectedType(int number) | 567 | public LSL_Types.LSLInteger llDetectedType(int number) |
578 | { | 568 | { |
579 | m_host.AddScriptLPS(1); | 569 | m_host.AddScriptLPS(1); |
580 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 570 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
581 | if (d == null) | 571 | if (d == null) |
582 | return 0; | 572 | return 0; |
583 | return new LSL_Types.LSLInteger(d.Type); | 573 | return new LSL_Types.LSLInteger(d.Type); |
@@ -586,7 +576,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
586 | public LSL_Types.Vector3 llDetectedPos(int number) | 576 | public LSL_Types.Vector3 llDetectedPos(int number) |
587 | { | 577 | { |
588 | m_host.AddScriptLPS(1); | 578 | m_host.AddScriptLPS(1); |
589 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 579 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
590 | if (d == null) | 580 | if (d == null) |
591 | return new LSL_Types.Vector3(); | 581 | return new LSL_Types.Vector3(); |
592 | return d.Position; | 582 | return d.Position; |
@@ -595,7 +585,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
595 | public LSL_Types.Vector3 llDetectedVel(int number) | 585 | public LSL_Types.Vector3 llDetectedVel(int number) |
596 | { | 586 | { |
597 | m_host.AddScriptLPS(1); | 587 | m_host.AddScriptLPS(1); |
598 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 588 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
599 | if (d == null) | 589 | if (d == null) |
600 | return new LSL_Types.Vector3(); | 590 | return new LSL_Types.Vector3(); |
601 | return d.Velocity; | 591 | return d.Velocity; |
@@ -604,7 +594,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
604 | public LSL_Types.Vector3 llDetectedGrab(int number) | 594 | public LSL_Types.Vector3 llDetectedGrab(int number) |
605 | { | 595 | { |
606 | m_host.AddScriptLPS(1); | 596 | m_host.AddScriptLPS(1); |
607 | XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number); | 597 | DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number); |
608 | if (parms == null) | 598 | if (parms == null) |
609 | return new LSL_Types.Vector3(0, 0, 0); | 599 | return new LSL_Types.Vector3(0, 0, 0); |
610 | 600 | ||
@@ -614,7 +604,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
614 | public LSL_Types.Quaternion llDetectedRot(int number) | 604 | public LSL_Types.Quaternion llDetectedRot(int number) |
615 | { | 605 | { |
616 | m_host.AddScriptLPS(1); | 606 | m_host.AddScriptLPS(1); |
617 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 607 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
618 | if (d == null) | 608 | if (d == null) |
619 | return new LSL_Types.Quaternion(); | 609 | return new LSL_Types.Quaternion(); |
620 | return d.Rotation; | 610 | return d.Rotation; |
@@ -623,7 +613,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
623 | public LSL_Types.LSLInteger llDetectedGroup(int number) | 613 | public LSL_Types.LSLInteger llDetectedGroup(int number) |
624 | { | 614 | { |
625 | m_host.AddScriptLPS(1); | 615 | m_host.AddScriptLPS(1); |
626 | XDetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); | 616 | DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number); |
627 | if (d == null) | 617 | if (d == null) |
628 | return new LSL_Types.LSLInteger(0); | 618 | return new LSL_Types.LSLInteger(0); |
629 | if (m_host.GroupID == d.Group) | 619 | if (m_host.GroupID == d.Group) |
@@ -634,7 +624,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
634 | public LSL_Types.LSLInteger llDetectedLinkNumber(int number) | 624 | public LSL_Types.LSLInteger llDetectedLinkNumber(int number) |
635 | { | 625 | { |
636 | m_host.AddScriptLPS(1); | 626 | m_host.AddScriptLPS(1); |
637 | XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number); | 627 | DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number); |
638 | if (parms == null) | 628 | if (parms == null) |
639 | return new LSL_Types.LSLInteger(0); | 629 | return new LSL_Types.LSLInteger(0); |
640 | 630 | ||
@@ -675,7 +665,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
675 | 665 | ||
676 | int statusrotationaxis = 0; | 666 | int statusrotationaxis = 0; |
677 | 667 | ||
678 | if ((status & BuiltIn_Commands_BaseClass.STATUS_PHYSICS) == BuiltIn_Commands_BaseClass.STATUS_PHYSICS) | 668 | if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS) |
679 | { | 669 | { |
680 | if (value == 1) | 670 | if (value == 1) |
681 | m_host.ScriptSetPhysicsStatus(true); | 671 | m_host.ScriptSetPhysicsStatus(true); |
@@ -683,7 +673,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
683 | m_host.ScriptSetPhysicsStatus(false); | 673 | m_host.ScriptSetPhysicsStatus(false); |
684 | } | 674 | } |
685 | 675 | ||
686 | if ((status & BuiltIn_Commands_BaseClass.STATUS_PHANTOM) == BuiltIn_Commands_BaseClass.STATUS_PHANTOM) | 676 | if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM) |
687 | { | 677 | { |
688 | if (value == 1) | 678 | if (value == 1) |
689 | m_host.ScriptSetPhantomStatus(true); | 679 | m_host.ScriptSetPhantomStatus(true); |
@@ -691,32 +681,32 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
691 | m_host.ScriptSetPhantomStatus(false); | 681 | m_host.ScriptSetPhantomStatus(false); |
692 | } | 682 | } |
693 | 683 | ||
694 | if ((status & BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) == BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS) | 684 | if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS) |
695 | { | 685 | { |
696 | m_host.AddFlag(LLObject.ObjectFlags.CastShadows); | 686 | m_host.AddFlag(LLObject.ObjectFlags.CastShadows); |
697 | } | 687 | } |
698 | 688 | ||
699 | if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) | 689 | if ((status & ScriptBaseClass.STATUS_ROTATE_X) == ScriptBaseClass.STATUS_ROTATE_X) |
700 | { | 690 | { |
701 | statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X; | 691 | statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_X; |
702 | } | 692 | } |
703 | 693 | ||
704 | if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) | 694 | if ((status & ScriptBaseClass.STATUS_ROTATE_Y) == ScriptBaseClass.STATUS_ROTATE_Y) |
705 | { | 695 | { |
706 | statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y; | 696 | statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Y; |
707 | } | 697 | } |
708 | 698 | ||
709 | if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) | 699 | if ((status & ScriptBaseClass.STATUS_ROTATE_Z) == ScriptBaseClass.STATUS_ROTATE_Z) |
710 | { | 700 | { |
711 | statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z; | 701 | statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Z; |
712 | } | 702 | } |
713 | 703 | ||
714 | if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) | 704 | if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) |
715 | { | 705 | { |
716 | NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); | 706 | NotImplemented("llSetStatus - STATUS_BLOCK_GRAB"); |
717 | } | 707 | } |
718 | 708 | ||
719 | if ((status & BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE) | 709 | if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) |
720 | { | 710 | { |
721 | if (value == 1) | 711 | if (value == 1) |
722 | m_host.SetDieAtEdge(true); | 712 | m_host.SetDieAtEdge(true); |
@@ -724,12 +714,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
724 | m_host.SetDieAtEdge(false); | 714 | m_host.SetDieAtEdge(false); |
725 | } | 715 | } |
726 | 716 | ||
727 | if ((status & BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) == BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE) | 717 | if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE) |
728 | { | 718 | { |
729 | NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); | 719 | NotImplemented("llSetStatus - STATUS_RETURN_AT_EDGE"); |
730 | } | 720 | } |
731 | 721 | ||
732 | if ((status & BuiltIn_Commands_BaseClass.STATUS_SANDBOX) == BuiltIn_Commands_BaseClass.STATUS_SANDBOX) | 722 | if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX) |
733 | { | 723 | { |
734 | NotImplemented("llSetStatus - STATUS_SANDBOX"); | 724 | NotImplemented("llSetStatus - STATUS_SANDBOX"); |
735 | } | 725 | } |
@@ -746,54 +736,54 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
746 | // Console.WriteLine(m_host.UUID.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); | 736 | // Console.WriteLine(m_host.UUID.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); |
747 | switch (status) | 737 | switch (status) |
748 | { | 738 | { |
749 | case BuiltIn_Commands_BaseClass.STATUS_PHYSICS: | 739 | case ScriptBaseClass.STATUS_PHYSICS: |
750 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == (uint)LLObject.ObjectFlags.Physics) | 740 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == (uint)LLObject.ObjectFlags.Physics) |
751 | { | 741 | { |
752 | return 1; | 742 | return 1; |
753 | } | 743 | } |
754 | return 0; | 744 | return 0; |
755 | 745 | ||
756 | case BuiltIn_Commands_BaseClass.STATUS_PHANTOM: | 746 | case ScriptBaseClass.STATUS_PHANTOM: |
757 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) | 747 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Phantom) == (uint)LLObject.ObjectFlags.Phantom) |
758 | { | 748 | { |
759 | return 1; | 749 | return 1; |
760 | } | 750 | } |
761 | return 0; | 751 | return 0; |
762 | 752 | ||
763 | case BuiltIn_Commands_BaseClass.STATUS_CAST_SHADOWS: | 753 | case ScriptBaseClass.STATUS_CAST_SHADOWS: |
764 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) | 754 | if ((m_host.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.CastShadows) == (uint)LLObject.ObjectFlags.CastShadows) |
765 | { | 755 | { |
766 | return 1; | 756 | return 1; |
767 | } | 757 | } |
768 | return 0; | 758 | return 0; |
769 | 759 | ||
770 | case BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB: | 760 | case ScriptBaseClass.STATUS_BLOCK_GRAB: |
771 | NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); | 761 | NotImplemented("llGetStatus - STATUS_BLOCK_GRAB"); |
772 | return 0; | 762 | return 0; |
773 | 763 | ||
774 | case BuiltIn_Commands_BaseClass.STATUS_DIE_AT_EDGE: | 764 | case ScriptBaseClass.STATUS_DIE_AT_EDGE: |
775 | if (m_host.GetDieAtEdge()) | 765 | if (m_host.GetDieAtEdge()) |
776 | return 1; | 766 | return 1; |
777 | else | 767 | else |
778 | return 0; | 768 | return 0; |
779 | 769 | ||
780 | case BuiltIn_Commands_BaseClass.STATUS_RETURN_AT_EDGE: | 770 | case ScriptBaseClass.STATUS_RETURN_AT_EDGE: |
781 | NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); | 771 | NotImplemented("llGetStatus - STATUS_RETURN_AT_EDGE"); |
782 | return 0; | 772 | return 0; |
783 | 773 | ||
784 | case BuiltIn_Commands_BaseClass.STATUS_ROTATE_X: | 774 | case ScriptBaseClass.STATUS_ROTATE_X: |
785 | NotImplemented("llGetStatus - STATUS_ROTATE_X"); | 775 | NotImplemented("llGetStatus - STATUS_ROTATE_X"); |
786 | return 0; | 776 | return 0; |
787 | 777 | ||
788 | case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y: | 778 | case ScriptBaseClass.STATUS_ROTATE_Y: |
789 | NotImplemented("llGetStatus - STATUS_ROTATE_Y"); | 779 | NotImplemented("llGetStatus - STATUS_ROTATE_Y"); |
790 | return 0; | 780 | return 0; |
791 | 781 | ||
792 | case BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z: | 782 | case ScriptBaseClass.STATUS_ROTATE_Z: |
793 | NotImplemented("llGetStatus - STATUS_ROTATE_Z"); | 783 | NotImplemented("llGetStatus - STATUS_ROTATE_Z"); |
794 | return 0; | 784 | return 0; |
795 | 785 | ||
796 | case BuiltIn_Commands_BaseClass.STATUS_SANDBOX: | 786 | case ScriptBaseClass.STATUS_SANDBOX: |
797 | NotImplemented("llGetStatus - STATUS_SANDBOX"); | 787 | NotImplemented("llGetStatus - STATUS_SANDBOX"); |
798 | return 0; | 788 | return 0; |
799 | } | 789 | } |
@@ -1743,7 +1733,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1743 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) | 1733 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) |
1744 | return 0; | 1734 | return 0; |
1745 | 1735 | ||
1746 | if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) == 0) | 1736 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) |
1747 | { | 1737 | { |
1748 | LSLError("No permissions to give money"); | 1738 | LSLError("No permissions to give money"); |
1749 | return 0; | 1739 | return 0; |
@@ -1840,11 +1830,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1840 | // objects rezzed with this method are die_at_edge by default. | 1830 | // objects rezzed with this method are die_at_edge by default. |
1841 | new_group.RootPart.SetDieAtEdge(true); | 1831 | new_group.RootPart.SetDieAtEdge(true); |
1842 | 1832 | ||
1843 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 1833 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
1844 | "object_rez", new Object[] { | 1834 | "object_rez", new Object[] { |
1845 | new LSL_Types.LSLString( | 1835 | new LSL_Types.LSLString( |
1846 | new_group.RootPart.UUID.ToString()) }, | 1836 | new_group.RootPart.UUID.ToString()) }, |
1847 | new XDetectParams[0])); | 1837 | new DetectParams[0])); |
1848 | 1838 | ||
1849 | float groupmass = new_group.GetMass(); | 1839 | float groupmass = new_group.GetMass(); |
1850 | 1840 | ||
@@ -1876,7 +1866,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1876 | { | 1866 | { |
1877 | m_host.AddScriptLPS(1); | 1867 | m_host.AddScriptLPS(1); |
1878 | // Setting timer repeat | 1868 | // Setting timer repeat |
1879 | m_ScriptEngine.m_ASYNCLSLCommandManager.m_Timer.SetTimerEvent(m_localID, m_itemID, sec); | 1869 | AsyncCommands.TimerPlugin.SetTimerEvent(m_localID, m_itemID, sec); |
1880 | } | 1870 | } |
1881 | 1871 | ||
1882 | public void llSleep(double sec) | 1872 | public void llSleep(double sec) |
@@ -1910,7 +1900,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1910 | 1900 | ||
1911 | if (presence != null) | 1901 | if (presence != null) |
1912 | { | 1902 | { |
1913 | if ((m_host.TaskInventory[InventorySelf()].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS) != 0) | 1903 | if ((m_host.TaskInventory[InventorySelf()].PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) |
1914 | { | 1904 | { |
1915 | presence.RegisterControlEventsToScript(controls, accept, pass_on, m_localID, m_itemID); | 1905 | presence.RegisterControlEventsToScript(controls, accept, pass_on, m_localID, m_itemID); |
1916 | 1906 | ||
@@ -1937,12 +1927,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1937 | 1927 | ||
1938 | if (presence != null) | 1928 | if (presence != null) |
1939 | { | 1929 | { |
1940 | if ((m_host.TaskInventory[InventorySelf()].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS) != 0) | 1930 | if ((m_host.TaskInventory[InventorySelf()].PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) |
1941 | { | 1931 | { |
1942 | // Unregister controls from Presence | 1932 | // Unregister controls from Presence |
1943 | presence.UnRegisterControlEventsToScript(m_localID, m_itemID); | 1933 | presence.UnRegisterControlEventsToScript(m_localID, m_itemID); |
1944 | // Remove Take Control permission. | 1934 | // Remove Take Control permission. |
1945 | m_host.TaskInventory[InventorySelf()].PermsMask &= ~BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS; | 1935 | m_host.TaskInventory[InventorySelf()].PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS; |
1946 | } | 1936 | } |
1947 | } | 1937 | } |
1948 | } | 1938 | } |
@@ -2110,7 +2100,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2110 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) | 2100 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) |
2111 | return; | 2101 | return; |
2112 | 2102 | ||
2113 | if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) | 2103 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) |
2114 | { | 2104 | { |
2115 | ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter); | 2105 | ScenePresence presence = World.GetScenePresence(m_host.TaskInventory[invItemID].PermsGranter); |
2116 | 2106 | ||
@@ -2137,7 +2127,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2137 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) | 2127 | if (m_host.TaskInventory[invItemID].PermsGranter == LLUUID.Zero) |
2138 | return; | 2128 | return; |
2139 | 2129 | ||
2140 | if ((m_host.TaskInventory[invItemID].PermsMask & BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) | 2130 | if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) |
2141 | { | 2131 | { |
2142 | LLUUID animID = new LLUUID(); | 2132 | LLUUID animID = new LLUUID(); |
2143 | 2133 | ||
@@ -2212,10 +2202,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2212 | m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero; | 2202 | m_host.TaskInventory[invItemID].PermsGranter=LLUUID.Zero; |
2213 | m_host.TaskInventory[invItemID].PermsMask=0; | 2203 | m_host.TaskInventory[invItemID].PermsMask=0; |
2214 | 2204 | ||
2215 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 2205 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
2216 | "run_time_permissions", new Object[] { | 2206 | "run_time_permissions", new Object[] { |
2217 | new LSL_Types.LSLInteger(0) }, | 2207 | new LSL_Types.LSLInteger(0) }, |
2218 | new XDetectParams[0])); | 2208 | new DetectParams[0])); |
2219 | 2209 | ||
2220 | return; | 2210 | return; |
2221 | } | 2211 | } |
@@ -2225,19 +2215,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2225 | if (m_host.ParentGroup.RootPart.m_IsAttachment && agent == m_host.ParentGroup.RootPart.m_attachedAvatar) | 2215 | if (m_host.ParentGroup.RootPart.m_IsAttachment && agent == m_host.ParentGroup.RootPart.m_attachedAvatar) |
2226 | { | 2216 | { |
2227 | // When attached, certain permissions are implicit if requested from owner | 2217 | // When attached, certain permissions are implicit if requested from owner |
2228 | int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TAKE_CONTROLS | | 2218 | int implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | |
2229 | BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION | | 2219 | ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
2230 | BuiltIn_Commands_BaseClass.PERMISSION_ATTACH; | 2220 | ScriptBaseClass.PERMISSION_ATTACH; |
2231 | 2221 | ||
2232 | if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms | 2222 | if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms |
2233 | { | 2223 | { |
2234 | m_host.TaskInventory[invItemID].PermsGranter=agentID; | 2224 | m_host.TaskInventory[invItemID].PermsGranter=agentID; |
2235 | m_host.TaskInventory[invItemID].PermsMask=perm; | 2225 | m_host.TaskInventory[invItemID].PermsMask=perm; |
2236 | 2226 | ||
2237 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 2227 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
2238 | "run_time_permissions", new Object[] { | 2228 | "run_time_permissions", new Object[] { |
2239 | new LSL_Types.LSLInteger(perm) }, | 2229 | new LSL_Types.LSLInteger(perm) }, |
2240 | new XDetectParams[0])); | 2230 | new DetectParams[0])); |
2241 | 2231 | ||
2242 | return; | 2232 | return; |
2243 | } | 2233 | } |
@@ -2245,18 +2235,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2245 | else if (m_host.m_sitTargetAvatar == agentID) // Sitting avatar | 2235 | else if (m_host.m_sitTargetAvatar == agentID) // Sitting avatar |
2246 | { | 2236 | { |
2247 | // When agent is sitting, certain permissions are implicit if requested from sitting agent | 2237 | // When agent is sitting, certain permissions are implicit if requested from sitting agent |
2248 | int implicitPerms = BuiltIn_Commands_BaseClass.PERMISSION_TRIGGER_ANIMATION | | 2238 | int implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
2249 | BuiltIn_Commands_BaseClass.PERMISSION_TRACK_CAMERA; | 2239 | ScriptBaseClass.PERMISSION_TRACK_CAMERA; |
2250 | 2240 | ||
2251 | if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms | 2241 | if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms |
2252 | { | 2242 | { |
2253 | m_host.TaskInventory[invItemID].PermsGranter=agentID; | 2243 | m_host.TaskInventory[invItemID].PermsGranter=agentID; |
2254 | m_host.TaskInventory[invItemID].PermsMask=perm; | 2244 | m_host.TaskInventory[invItemID].PermsMask=perm; |
2255 | 2245 | ||
2256 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 2246 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
2257 | "run_time_permissions", new Object[] { | 2247 | "run_time_permissions", new Object[] { |
2258 | new LSL_Types.LSLInteger(perm) }, | 2248 | new LSL_Types.LSLInteger(perm) }, |
2259 | new XDetectParams[0])); | 2249 | new DetectParams[0])); |
2260 | 2250 | ||
2261 | return; | 2251 | return; |
2262 | } | 2252 | } |
@@ -2283,10 +2273,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2283 | } | 2273 | } |
2284 | 2274 | ||
2285 | // Requested agent is not in range, refuse perms | 2275 | // Requested agent is not in range, refuse perms |
2286 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 2276 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
2287 | "run_time_permissions", new Object[] { | 2277 | "run_time_permissions", new Object[] { |
2288 | new LSL_Types.LSLInteger(0) }, | 2278 | new LSL_Types.LSLInteger(0) }, |
2289 | new XDetectParams[0])); | 2279 | new DetectParams[0])); |
2290 | } | 2280 | } |
2291 | 2281 | ||
2292 | void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer) | 2282 | void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer) |
@@ -2303,10 +2293,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2303 | m_waitingForScriptAnswer=false; | 2293 | m_waitingForScriptAnswer=false; |
2304 | 2294 | ||
2305 | m_host.TaskInventory[invItemID].PermsMask=answer; | 2295 | m_host.TaskInventory[invItemID].PermsMask=answer; |
2306 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 2296 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
2307 | "run_time_permissions", new Object[] { | 2297 | "run_time_permissions", new Object[] { |
2308 | new LSL_Types.LSLInteger(answer) }, | 2298 | new LSL_Types.LSLInteger(answer) }, |
2309 | new XDetectParams[0])); | 2299 | new DetectParams[0])); |
2310 | } | 2300 | } |
2311 | 2301 | ||
2312 | public string llGetPermissionsKey() | 2302 | public string llGetPermissionsKey() |
@@ -2631,12 +2621,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2631 | 2621 | ||
2632 | LLUUID rq = LLUUID.Random(); | 2622 | LLUUID rq = LLUUID.Random(); |
2633 | 2623 | ||
2634 | LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. | 2624 | LLUUID tid = AsyncCommands. |
2635 | m_Dataserver.RegisterRequest(m_localID, | 2625 | DataserverPlugin.RegisterRequest(m_localID, |
2636 | m_itemID, rq.ToString()); | 2626 | m_itemID, rq.ToString()); |
2637 | 2627 | ||
2638 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 2628 | AsyncCommands. |
2639 | m_Dataserver.DataserverReply(rq.ToString(), reply); | 2629 | DataserverPlugin.DataserverReply(rq.ToString(), reply); |
2640 | 2630 | ||
2641 | return tid.ToString(); | 2631 | return tid.ToString(); |
2642 | } | 2632 | } |
@@ -2649,8 +2639,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2649 | { | 2639 | { |
2650 | if (item.Type == 3 && item.Name == name) | 2640 | if (item.Type == 3 && item.Name == name) |
2651 | { | 2641 | { |
2652 | LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. | 2642 | LLUUID tid = AsyncCommands. |
2653 | m_Dataserver.RegisterRequest(m_localID, | 2643 | DataserverPlugin.RegisterRequest(m_localID, |
2654 | m_itemID, item.AssetID.ToString()); | 2644 | m_itemID, item.AssetID.ToString()); |
2655 | 2645 | ||
2656 | LLVector3 region = new LLVector3( | 2646 | LLVector3 region = new LLVector3( |
@@ -2667,8 +2657,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2667 | 2657 | ||
2668 | string reply = region.ToString(); | 2658 | string reply = region.ToString(); |
2669 | 2659 | ||
2670 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 2660 | AsyncCommands. |
2671 | m_Dataserver.DataserverReply(i.ToString(), | 2661 | DataserverPlugin.DataserverReply(i.ToString(), |
2672 | reply); | 2662 | reply); |
2673 | }, false); | 2663 | }, false); |
2674 | 2664 | ||
@@ -2733,7 +2723,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2733 | switch ((int)linknum) | 2723 | switch ((int)linknum) |
2734 | { | 2724 | { |
2735 | 2725 | ||
2736 | case (int)BuiltIn_Commands_BaseClass.LINK_ROOT: | 2726 | case (int)ScriptBaseClass.LINK_ROOT: |
2737 | 2727 | ||
2738 | SceneObjectPart part = m_host.ParentGroup.RootPart; | 2728 | SceneObjectPart part = m_host.ParentGroup.RootPart; |
2739 | 2729 | ||
@@ -2750,14 +2740,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2750 | }; | 2740 | }; |
2751 | 2741 | ||
2752 | m_ScriptEngine.PostScriptEvent(partItemID, | 2742 | m_ScriptEngine.PostScriptEvent(partItemID, |
2753 | new XEventParams("link_message", | 2743 | new EventParams("link_message", |
2754 | resobj, new XDetectParams[0])); | 2744 | resobj, new DetectParams[0])); |
2755 | } | 2745 | } |
2756 | } | 2746 | } |
2757 | 2747 | ||
2758 | break; | 2748 | break; |
2759 | 2749 | ||
2760 | case (int)BuiltIn_Commands_BaseClass.LINK_SET: | 2750 | case (int)ScriptBaseClass.LINK_SET: |
2761 | 2751 | ||
2762 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) | 2752 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) |
2763 | { | 2753 | { |
@@ -2774,15 +2764,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2774 | }; | 2764 | }; |
2775 | 2765 | ||
2776 | m_ScriptEngine.PostScriptEvent(partItemID, | 2766 | m_ScriptEngine.PostScriptEvent(partItemID, |
2777 | new XEventParams("link_message", | 2767 | new EventParams("link_message", |
2778 | resobj, new XDetectParams[0])); | 2768 | resobj, new DetectParams[0])); |
2779 | } | 2769 | } |
2780 | } | 2770 | } |
2781 | } | 2771 | } |
2782 | 2772 | ||
2783 | break; | 2773 | break; |
2784 | 2774 | ||
2785 | case (int)BuiltIn_Commands_BaseClass.LINK_ALL_OTHERS: | 2775 | case (int)ScriptBaseClass.LINK_ALL_OTHERS: |
2786 | 2776 | ||
2787 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) | 2777 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) |
2788 | { | 2778 | { |
@@ -2802,8 +2792,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2802 | }; | 2792 | }; |
2803 | 2793 | ||
2804 | m_ScriptEngine.PostScriptEvent(partItemID, | 2794 | m_ScriptEngine.PostScriptEvent(partItemID, |
2805 | new XEventParams("link_message", | 2795 | new EventParams("link_message", |
2806 | resobj, new XDetectParams[0])); | 2796 | resobj, new DetectParams[0])); |
2807 | } | 2797 | } |
2808 | } | 2798 | } |
2809 | 2799 | ||
@@ -2812,7 +2802,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2812 | 2802 | ||
2813 | break; | 2803 | break; |
2814 | 2804 | ||
2815 | case (int)BuiltIn_Commands_BaseClass.LINK_ALL_CHILDREN: | 2805 | case (int)ScriptBaseClass.LINK_ALL_CHILDREN: |
2816 | 2806 | ||
2817 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) | 2807 | foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts()) |
2818 | { | 2808 | { |
@@ -2832,8 +2822,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2832 | }; | 2822 | }; |
2833 | 2823 | ||
2834 | m_ScriptEngine.PostScriptEvent(partItemID, | 2824 | m_ScriptEngine.PostScriptEvent(partItemID, |
2835 | new XEventParams("link_message", | 2825 | new EventParams("link_message", |
2836 | resobj, new XDetectParams[0])); | 2826 | resobj, new DetectParams[0])); |
2837 | } | 2827 | } |
2838 | } | 2828 | } |
2839 | 2829 | ||
@@ -2842,7 +2832,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2842 | 2832 | ||
2843 | break; | 2833 | break; |
2844 | 2834 | ||
2845 | case (int)BuiltIn_Commands_BaseClass.LINK_THIS: | 2835 | case (int)ScriptBaseClass.LINK_THIS: |
2846 | 2836 | ||
2847 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) | 2837 | foreach (TaskInventoryItem item in m_host.TaskInventory.Values) |
2848 | { | 2838 | { |
@@ -2856,8 +2846,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2856 | }; | 2846 | }; |
2857 | 2847 | ||
2858 | m_ScriptEngine.PostScriptEvent(partItemID, | 2848 | m_ScriptEngine.PostScriptEvent(partItemID, |
2859 | new XEventParams("link_message", | 2849 | new EventParams("link_message", |
2860 | resobj, new XDetectParams[0])); | 2850 | resobj, new DetectParams[0])); |
2861 | } | 2851 | } |
2862 | } | 2852 | } |
2863 | 2853 | ||
@@ -2883,8 +2873,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2883 | }; | 2873 | }; |
2884 | 2874 | ||
2885 | m_ScriptEngine.PostScriptEvent(partItemID, | 2875 | m_ScriptEngine.PostScriptEvent(partItemID, |
2886 | new XEventParams("link_message", | 2876 | new EventParams("link_message", |
2887 | resObjDef, new XDetectParams[0])); | 2877 | resObjDef, new DetectParams[0])); |
2888 | } | 2878 | } |
2889 | } | 2879 | } |
2890 | 2880 | ||
@@ -4061,23 +4051,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4061 | { | 4051 | { |
4062 | switch ((int)rules.Data[i]) | 4052 | switch ((int)rules.Data[i]) |
4063 | { | 4053 | { |
4064 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_FLAGS: | 4054 | case (int)ScriptBaseClass.PSYS_PART_FLAGS: |
4065 | prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)((uint)Convert.ToInt32(rules.Data[i + 1].ToString())); | 4055 | prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)((uint)Convert.ToInt32(rules.Data[i + 1].ToString())); |
4066 | break; | 4056 | break; |
4067 | 4057 | ||
4068 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_COLOR: | 4058 | case (int)ScriptBaseClass.PSYS_PART_START_COLOR: |
4069 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4059 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4070 | prules.PartStartColor.R = (float)tempv.x; | 4060 | prules.PartStartColor.R = (float)tempv.x; |
4071 | prules.PartStartColor.G = (float)tempv.y; | 4061 | prules.PartStartColor.G = (float)tempv.y; |
4072 | prules.PartStartColor.B = (float)tempv.z; | 4062 | prules.PartStartColor.B = (float)tempv.z; |
4073 | break; | 4063 | break; |
4074 | 4064 | ||
4075 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_ALPHA: | 4065 | case (int)ScriptBaseClass.PSYS_PART_START_ALPHA: |
4076 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4066 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4077 | prules.PartStartColor.A = (float)tempf; | 4067 | prules.PartStartColor.A = (float)tempf; |
4078 | break; | 4068 | break; |
4079 | 4069 | ||
4080 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_COLOR: | 4070 | case (int)ScriptBaseClass.PSYS_PART_END_COLOR: |
4081 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4071 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4082 | //prules.PartEndColor = new LLColor(tempv.x,tempv.y,tempv.z,1); | 4072 | //prules.PartEndColor = new LLColor(tempv.x,tempv.y,tempv.z,1); |
4083 | 4073 | ||
@@ -4086,36 +4076,36 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4086 | prules.PartEndColor.B = (float)tempv.z; | 4076 | prules.PartEndColor.B = (float)tempv.z; |
4087 | break; | 4077 | break; |
4088 | 4078 | ||
4089 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_ALPHA: | 4079 | case (int)ScriptBaseClass.PSYS_PART_END_ALPHA: |
4090 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4080 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4091 | prules.PartEndColor.A = (float)tempf; | 4081 | prules.PartEndColor.A = (float)tempf; |
4092 | break; | 4082 | break; |
4093 | 4083 | ||
4094 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_START_SCALE: | 4084 | case (int)ScriptBaseClass.PSYS_PART_START_SCALE: |
4095 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4085 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4096 | prules.PartStartScaleX = (float)tempv.x; | 4086 | prules.PartStartScaleX = (float)tempv.x; |
4097 | prules.PartStartScaleY = (float)tempv.y; | 4087 | prules.PartStartScaleY = (float)tempv.y; |
4098 | break; | 4088 | break; |
4099 | 4089 | ||
4100 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_END_SCALE: | 4090 | case (int)ScriptBaseClass.PSYS_PART_END_SCALE: |
4101 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4091 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4102 | prules.PartEndScaleX = (float)tempv.x; | 4092 | prules.PartEndScaleX = (float)tempv.x; |
4103 | prules.PartEndScaleY = (float)tempv.y; | 4093 | prules.PartEndScaleY = (float)tempv.y; |
4104 | break; | 4094 | break; |
4105 | 4095 | ||
4106 | case (int)BuiltIn_Commands_BaseClass.PSYS_PART_MAX_AGE: | 4096 | case (int)ScriptBaseClass.PSYS_PART_MAX_AGE: |
4107 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4097 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4108 | prules.PartMaxAge = (float)tempf; | 4098 | prules.PartMaxAge = (float)tempf; |
4109 | break; | 4099 | break; |
4110 | 4100 | ||
4111 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ACCEL: | 4101 | case (int)ScriptBaseClass.PSYS_SRC_ACCEL: |
4112 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4102 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4113 | prules.PartAcceleration.X = (float)tempv.x; | 4103 | prules.PartAcceleration.X = (float)tempv.x; |
4114 | prules.PartAcceleration.Y = (float)tempv.y; | 4104 | prules.PartAcceleration.Y = (float)tempv.y; |
4115 | prules.PartAcceleration.Z = (float)tempv.z; | 4105 | prules.PartAcceleration.Z = (float)tempv.z; |
4116 | break; | 4106 | break; |
4117 | 4107 | ||
4118 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_PATTERN: | 4108 | case (int)ScriptBaseClass.PSYS_SRC_PATTERN: |
4119 | int tmpi = int.Parse(rules.Data[i + 1].ToString()); | 4109 | int tmpi = int.Parse(rules.Data[i + 1].ToString()); |
4120 | prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; | 4110 | prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; |
4121 | break; | 4111 | break; |
@@ -4124,40 +4114,40 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4124 | // Wiki: PSYS_SRC_TEXTURE string inventory item name or key of the particle texture | 4114 | // Wiki: PSYS_SRC_TEXTURE string inventory item name or key of the particle texture |
4125 | // "" = default texture. | 4115 | // "" = default texture. |
4126 | // 20080530 Updated to remove code duplication | 4116 | // 20080530 Updated to remove code duplication |
4127 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_TEXTURE: | 4117 | case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: |
4128 | prules.Texture = KeyOrName(rules.Data[i + 1].ToString()); | 4118 | prules.Texture = KeyOrName(rules.Data[i + 1].ToString()); |
4129 | break; | 4119 | break; |
4130 | 4120 | ||
4131 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_RATE: | 4121 | case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: |
4132 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4122 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4133 | prules.BurstRate = (float)tempf; | 4123 | prules.BurstRate = (float)tempf; |
4134 | break; | 4124 | break; |
4135 | 4125 | ||
4136 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_PART_COUNT: | 4126 | case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT: |
4137 | prules.BurstPartCount = (byte)Convert.ToByte(rules.Data[i + 1].ToString()); | 4127 | prules.BurstPartCount = (byte)Convert.ToByte(rules.Data[i + 1].ToString()); |
4138 | break; | 4128 | break; |
4139 | 4129 | ||
4140 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_RADIUS: | 4130 | case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS: |
4141 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4131 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4142 | prules.BurstRadius = (float)tempf; | 4132 | prules.BurstRadius = (float)tempf; |
4143 | break; | 4133 | break; |
4144 | 4134 | ||
4145 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_SPEED_MIN: | 4135 | case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN: |
4146 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4136 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4147 | prules.BurstSpeedMin = (float)tempf; | 4137 | prules.BurstSpeedMin = (float)tempf; |
4148 | break; | 4138 | break; |
4149 | 4139 | ||
4150 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_BURST_SPEED_MAX: | 4140 | case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX: |
4151 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4141 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4152 | prules.BurstSpeedMax = (float)tempf; | 4142 | prules.BurstSpeedMax = (float)tempf; |
4153 | break; | 4143 | break; |
4154 | 4144 | ||
4155 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_MAX_AGE: | 4145 | case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE: |
4156 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4146 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4157 | prules.MaxAge = (float)tempf; | 4147 | prules.MaxAge = (float)tempf; |
4158 | break; | 4148 | break; |
4159 | 4149 | ||
4160 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_TARGET_KEY: | 4150 | case (int)ScriptBaseClass.PSYS_SRC_TARGET_KEY: |
4161 | LLUUID key = LLUUID.Zero; | 4151 | LLUUID key = LLUUID.Zero; |
4162 | if (LLUUID.TryParse(rules.Data[i + 1].ToString(), out key)) | 4152 | if (LLUUID.TryParse(rules.Data[i + 1].ToString(), out key)) |
4163 | { | 4153 | { |
@@ -4169,7 +4159,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4169 | } | 4159 | } |
4170 | break; | 4160 | break; |
4171 | 4161 | ||
4172 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_OMEGA: | 4162 | case (int)ScriptBaseClass.PSYS_SRC_OMEGA: |
4173 | // AL: This is an assumption, since it is the only thing that would match. | 4163 | // AL: This is an assumption, since it is the only thing that would match. |
4174 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; | 4164 | tempv = (LSL_Types.Vector3)rules.Data[i + 1]; |
4175 | prules.AngularVelocity.X = (float)tempv.x; | 4165 | prules.AngularVelocity.X = (float)tempv.x; |
@@ -4178,12 +4168,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4178 | //cast?? prules.MaxAge = (float)rules[i + 1]; | 4168 | //cast?? prules.MaxAge = (float)rules[i + 1]; |
4179 | break; | 4169 | break; |
4180 | 4170 | ||
4181 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ANGLE_BEGIN: | 4171 | case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN: |
4182 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4172 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4183 | prules.InnerAngle = (float)tempf; | 4173 | prules.InnerAngle = (float)tempf; |
4184 | break; | 4174 | break; |
4185 | 4175 | ||
4186 | case (int)BuiltIn_Commands_BaseClass.PSYS_SRC_ANGLE_END: | 4176 | case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END: |
4187 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); | 4177 | tempf = Convert.ToSingle(rules.Data[i + 1].ToString()); |
4188 | prules.OuterAngle = (float)tempf; | 4178 | prules.OuterAngle = (float)tempf; |
4189 | break; | 4179 | break; |
@@ -4444,9 +4434,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
4444 | { | 4434 | { |
4445 | LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, LLUUID.Zero); | 4435 | LLUUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, LLUUID.Zero); |
4446 | object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; | 4436 | object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(LLUUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) }; |
4447 | m_ScriptEngine.PostScriptEvent(m_itemID, new XEventParams( | 4437 | m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams( |
4448 | "remote_data", resobj, | 4438 | "remote_data", resobj, |
4449 | new XDetectParams[0])); | 4439 | new DetectParams[0])); |
4450 | } | 4440 | } |
4451 | } | 4441 | } |
4452 | 4442 | ||
@@ -5472,27 +5462,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
5472 | 5462 | ||
5473 | int permmask = 0; | 5463 | int permmask = 0; |
5474 | 5464 | ||
5475 | if (mask == BuiltIn_Commands_BaseClass.MASK_BASE)//0 | 5465 | if (mask == ScriptBaseClass.MASK_BASE)//0 |
5476 | { | 5466 | { |
5477 | permmask = (int)m_host.BaseMask; | 5467 | permmask = (int)m_host.BaseMask; |
5478 | } | 5468 | } |
5479 | 5469 | ||
5480 | else if (mask == BuiltIn_Commands_BaseClass.MASK_OWNER)//1 | 5470 | else if (mask == ScriptBaseClass.MASK_OWNER)//1 |
5481 | { | 5471 | { |
5482 | permmask = (int)m_host.OwnerMask; | 5472 | permmask = (int)m_host.OwnerMask; |
5483 | } | 5473 | } |
5484 | 5474 | ||
5485 | else if (mask == BuiltIn_Commands_BaseClass.MASK_GROUP)//2 | 5475 | else if (mask == ScriptBaseClass.MASK_GROUP)//2 |
5486 | { | 5476 | { |
5487 | permmask = (int)m_host.GroupMask; | 5477 | permmask = (int)m_host.GroupMask; |
5488 | } | 5478 | } |
5489 | 5479 | ||
5490 | else if (mask == BuiltIn_Commands_BaseClass.MASK_EVERYONE)//3 | 5480 | else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 |
5491 | { | 5481 | { |
5492 | permmask = (int)m_host.EveryoneMask; | 5482 | permmask = (int)m_host.EveryoneMask; |
5493 | } | 5483 | } |
5494 | 5484 | ||
5495 | else if (mask == BuiltIn_Commands_BaseClass.MASK_NEXT)//4 | 5485 | else if (mask == ScriptBaseClass.MASK_NEXT)//4 |
5496 | { | 5486 | { |
5497 | permmask = (int)m_host.NextOwnerMask; | 5487 | permmask = (int)m_host.NextOwnerMask; |
5498 | } | 5488 | } |
@@ -5511,27 +5501,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
5511 | { | 5501 | { |
5512 | if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID)) | 5502 | if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID)) |
5513 | { | 5503 | { |
5514 | if (mask == BuiltIn_Commands_BaseClass.MASK_BASE)//0 | 5504 | if (mask == ScriptBaseClass.MASK_BASE)//0 |
5515 | { | 5505 | { |
5516 | m_host.BaseMask = (uint)value; | 5506 | m_host.BaseMask = (uint)value; |
5517 | } | 5507 | } |
5518 | 5508 | ||
5519 | else if (mask == BuiltIn_Commands_BaseClass.MASK_OWNER)//1 | 5509 | else if (mask == ScriptBaseClass.MASK_OWNER)//1 |
5520 | { | 5510 | { |
5521 | m_host.OwnerMask = (uint)value; | 5511 | m_host.OwnerMask = (uint)value; |
5522 | } | 5512 | } |
5523 | 5513 | ||
5524 | else if (mask == BuiltIn_Commands_BaseClass.MASK_GROUP)//2 | 5514 | else if (mask == ScriptBaseClass.MASK_GROUP)//2 |
5525 | { | 5515 | { |
5526 | m_host.GroupMask = (uint)value; | 5516 | m_host.GroupMask = (uint)value; |
5527 | } | 5517 | } |
5528 | 5518 | ||
5529 | else if (mask == BuiltIn_Commands_BaseClass.MASK_EVERYONE)//3 | 5519 | else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 |
5530 | { | 5520 | { |
5531 | m_host.EveryoneMask = (uint)value; | 5521 | m_host.EveryoneMask = (uint)value; |
5532 | } | 5522 | } |
5533 | 5523 | ||
5534 | else if (mask == BuiltIn_Commands_BaseClass.MASK_NEXT)//4 | 5524 | else if (mask == ScriptBaseClass.MASK_NEXT)//4 |
5535 | { | 5525 | { |
5536 | m_host.NextOwnerMask = (uint)value; | 5526 | m_host.NextOwnerMask = (uint)value; |
5537 | } | 5527 | } |
@@ -5635,12 +5625,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
5635 | } | 5625 | } |
5636 | LLUUID rq = LLUUID.Random(); | 5626 | LLUUID rq = LLUUID.Random(); |
5637 | 5627 | ||
5638 | LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. | 5628 | LLUUID tid = AsyncCommands. |
5639 | m_Dataserver.RegisterRequest(m_localID, | 5629 | DataserverPlugin.RegisterRequest(m_localID, |
5640 | m_itemID, rq.ToString()); | 5630 | m_itemID, rq.ToString()); |
5641 | 5631 | ||
5642 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 5632 | AsyncCommands. |
5643 | m_Dataserver.DataserverReply(rq.ToString(), reply); | 5633 | DataserverPlugin.DataserverReply(rq.ToString(), reply); |
5644 | 5634 | ||
5645 | return tid.ToString(); | 5635 | return tid.ToString(); |
5646 | } | 5636 | } |
@@ -5943,27 +5933,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
5943 | LSL_Types.list nums = LSL_Types.list.ToDoubleList(src); | 5933 | LSL_Types.list nums = LSL_Types.list.ToDoubleList(src); |
5944 | switch (operation) | 5934 | switch (operation) |
5945 | { | 5935 | { |
5946 | case BuiltIn_Commands_BaseClass.LIST_STAT_RANGE: | 5936 | case ScriptBaseClass.LIST_STAT_RANGE: |
5947 | return nums.Range(); | 5937 | return nums.Range(); |
5948 | case BuiltIn_Commands_BaseClass.LIST_STAT_MIN: | 5938 | case ScriptBaseClass.LIST_STAT_MIN: |
5949 | return nums.Min(); | 5939 | return nums.Min(); |
5950 | case BuiltIn_Commands_BaseClass.LIST_STAT_MAX: | 5940 | case ScriptBaseClass.LIST_STAT_MAX: |
5951 | return nums.Max(); | 5941 | return nums.Max(); |
5952 | case BuiltIn_Commands_BaseClass.LIST_STAT_MEAN: | 5942 | case ScriptBaseClass.LIST_STAT_MEAN: |
5953 | return nums.Mean(); | 5943 | return nums.Mean(); |
5954 | case BuiltIn_Commands_BaseClass.LIST_STAT_MEDIAN: | 5944 | case ScriptBaseClass.LIST_STAT_MEDIAN: |
5955 | return nums.Median(); | 5945 | return nums.Median(); |
5956 | case BuiltIn_Commands_BaseClass.LIST_STAT_NUM_COUNT: | 5946 | case ScriptBaseClass.LIST_STAT_NUM_COUNT: |
5957 | return nums.NumericLength(); | 5947 | return nums.NumericLength(); |
5958 | case BuiltIn_Commands_BaseClass.LIST_STAT_STD_DEV: | 5948 | case ScriptBaseClass.LIST_STAT_STD_DEV: |
5959 | return nums.StdDev(); | 5949 | return nums.StdDev(); |
5960 | case BuiltIn_Commands_BaseClass.LIST_STAT_SUM: | 5950 | case ScriptBaseClass.LIST_STAT_SUM: |
5961 | return nums.Sum(); | 5951 | return nums.Sum(); |
5962 | case BuiltIn_Commands_BaseClass.LIST_STAT_SUM_SQUARES: | 5952 | case ScriptBaseClass.LIST_STAT_SUM_SQUARES: |
5963 | return nums.SumSqrs(); | 5953 | return nums.SumSqrs(); |
5964 | case BuiltIn_Commands_BaseClass.LIST_STAT_GEOMETRIC_MEAN: | 5954 | case ScriptBaseClass.LIST_STAT_GEOMETRIC_MEAN: |
5965 | return nums.GeometricMean(); | 5955 | return nums.GeometricMean(); |
5966 | case BuiltIn_Commands_BaseClass.LIST_STAT_HARMONIC_MEAN: | 5956 | case ScriptBaseClass.LIST_STAT_HARMONIC_MEAN: |
5967 | return nums.HarmonicMean(); | 5957 | return nums.HarmonicMean(); |
5968 | default: | 5958 | default: |
5969 | return 0.0; | 5959 | return 0.0; |
@@ -6230,9 +6220,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6230 | public string llStringTrim(string src, int type) | 6220 | public string llStringTrim(string src, int type) |
6231 | { | 6221 | { |
6232 | m_host.AddScriptLPS(1); | 6222 | m_host.AddScriptLPS(1); |
6233 | if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); } | 6223 | if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); } |
6234 | if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); } | 6224 | if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); } |
6235 | if (type == (int)BuiltIn_Commands_BaseClass.STRING_TRIM) { return src.Trim(); } | 6225 | if (type == (int)ScriptBaseClass.STRING_TRIM) { return src.Trim(); } |
6236 | return src; | 6226 | return src; |
6237 | } | 6227 | } |
6238 | 6228 | ||
@@ -6331,7 +6321,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6331 | 6321 | ||
6332 | internal void ShoutError(string msg) | 6322 | internal void ShoutError(string msg) |
6333 | { | 6323 | { |
6334 | llShout(BuiltIn_Commands_BaseClass.DEBUG_CHANNEL, msg); | 6324 | llShout(ScriptBaseClass.DEBUG_CHANNEL, msg); |
6335 | } | 6325 | } |
6336 | 6326 | ||
6337 | 6327 | ||
@@ -6366,13 +6356,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6366 | { | 6356 | { |
6367 | if (item.Type == 7 && item.Name == name) | 6357 | if (item.Type == 7 && item.Name == name) |
6368 | { | 6358 | { |
6369 | LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. | 6359 | LLUUID tid = AsyncCommands. |
6370 | m_Dataserver.RegisterRequest(m_localID, | 6360 | DataserverPlugin.RegisterRequest(m_localID, |
6371 | m_itemID, item.AssetID.ToString()); | 6361 | m_itemID, item.AssetID.ToString()); |
6372 | if (NotecardCache.IsCached(item.AssetID)) | 6362 | if (NotecardCache.IsCached(item.AssetID)) |
6373 | { | 6363 | { |
6374 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 6364 | AsyncCommands. |
6375 | m_Dataserver.DataserverReply(item.AssetID.ToString(), | 6365 | DataserverPlugin.DataserverReply(item.AssetID.ToString(), |
6376 | NotecardCache.GetLines(item.AssetID).ToString()); | 6366 | NotecardCache.GetLines(item.AssetID).ToString()); |
6377 | return tid.ToString(); | 6367 | return tid.ToString(); |
6378 | } | 6368 | } |
@@ -6383,8 +6373,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6383 | string data = enc.GetString(a.Data); | 6373 | string data = enc.GetString(a.Data); |
6384 | //Console.WriteLine(data); | 6374 | //Console.WriteLine(data); |
6385 | NotecardCache.Cache(id, data); | 6375 | NotecardCache.Cache(id, data); |
6386 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 6376 | AsyncCommands. |
6387 | m_Dataserver.DataserverReply(id.ToString(), | 6377 | DataserverPlugin.DataserverReply(id.ToString(), |
6388 | NotecardCache.GetLines(id).ToString()); | 6378 | NotecardCache.GetLines(id).ToString()); |
6389 | }); | 6379 | }); |
6390 | 6380 | ||
@@ -6402,13 +6392,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6402 | { | 6392 | { |
6403 | if (item.Type == 7 && item.Name == name) | 6393 | if (item.Type == 7 && item.Name == name) |
6404 | { | 6394 | { |
6405 | LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. | 6395 | LLUUID tid = AsyncCommands. |
6406 | m_Dataserver.RegisterRequest(m_localID, | 6396 | DataserverPlugin.RegisterRequest(m_localID, |
6407 | m_itemID, item.AssetID.ToString()); | 6397 | m_itemID, item.AssetID.ToString()); |
6408 | if (NotecardCache.IsCached(item.AssetID)) | 6398 | if (NotecardCache.IsCached(item.AssetID)) |
6409 | { | 6399 | { |
6410 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 6400 | AsyncCommands. |
6411 | m_Dataserver.DataserverReply(item.AssetID.ToString(), | 6401 | DataserverPlugin.DataserverReply(item.AssetID.ToString(), |
6412 | NotecardCache.GetLine(item.AssetID, line)); | 6402 | NotecardCache.GetLine(item.AssetID, line)); |
6413 | return tid.ToString(); | 6403 | return tid.ToString(); |
6414 | } | 6404 | } |
@@ -6419,8 +6409,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
6419 | string data = enc.GetString(a.Data); | 6409 | string data = enc.GetString(a.Data); |
6420 | //Console.WriteLine(data); | 6410 | //Console.WriteLine(data); |
6421 | NotecardCache.Cache(id, data); | 6411 | NotecardCache.Cache(id, data); |
6422 | m_ScriptEngine.m_ASYNCLSLCommandManager. | 6412 | AsyncCommands. |
6423 | m_Dataserver.DataserverReply(id.ToString(), | 6413 | DataserverPlugin.DataserverReply(id.ToString(), |
6424 | NotecardCache.GetLine(id, line)); | 6414 | NotecardCache.GetLine(id, line)); |
6425 | }); | 6415 | }); |
6426 | 6416 | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/OSSL_ScriptCommands.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index bc4e8ba..dbb78a4 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/OSSL_ScriptCommands.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -31,25 +31,25 @@ using Nini.Config; | |||
31 | using OpenSim.Framework.Console; | 31 | using OpenSim.Framework.Console; |
32 | using OpenSim.Region.Environment.Interfaces; | 32 | using OpenSim.Region.Environment.Interfaces; |
33 | using OpenSim.Region.Environment.Scenes; | 33 | using OpenSim.Region.Environment.Scenes; |
34 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 34 | using OpenSim.Region.ScriptEngine.Shared; |
35 | using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; | ||
36 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
37 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
38 | using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; | ||
35 | 39 | ||
36 | namespace OpenSim.Region.ScriptEngine.XEngine | 40 | namespace OpenSim.Region.ScriptEngine.Shared.Api |
37 | { | 41 | { |
38 | [Serializable] | 42 | [Serializable] |
39 | public class OSSL_ScriptCommands : MarshalByRefObject, IOSSL_ScriptCommands | 43 | public class OSSL_Api : MarshalByRefObject, IOSSL_Api, IScriptApi |
40 | { | 44 | { |
41 | internal XEngine m_ScriptEngine; | 45 | internal IScriptEngine m_ScriptEngine; |
42 | internal XScriptInstance m_Instance; | ||
43 | internal SceneObjectPart m_host; | 46 | internal SceneObjectPart m_host; |
44 | internal uint m_localID; | 47 | internal uint m_localID; |
45 | internal LLUUID m_itemID; | 48 | internal LLUUID m_itemID; |
46 | 49 | ||
47 | public OSSL_ScriptCommands(XEngine scriptEngine, | 50 | public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, LLUUID itemID) |
48 | XScriptInstance instance, SceneObjectPart host, | ||
49 | uint localID, LLUUID itemID) | ||
50 | { | 51 | { |
51 | m_ScriptEngine = scriptEngine; | 52 | m_ScriptEngine = ScriptEngine; |
52 | m_Instance = instance; | ||
53 | m_host = host; | 53 | m_host = host; |
54 | m_localID = localID; | 54 | m_localID = localID; |
55 | m_itemID = itemID; | 55 | m_itemID = itemID; |
@@ -62,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
62 | 62 | ||
63 | public int osTerrainSetHeight(int x, int y, double val) | 63 | public int osTerrainSetHeight(int x, int y, double val) |
64 | { | 64 | { |
65 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 65 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
66 | { | 66 | { |
67 | OSSLError("osTerrainSetHeight: permission denied"); | 67 | OSSLError("osTerrainSetHeight: permission denied"); |
68 | return 0; | 68 | return 0; |
@@ -85,7 +85,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
85 | 85 | ||
86 | public double osTerrainGetHeight(int x, int y) | 86 | public double osTerrainGetHeight(int x, int y) |
87 | { | 87 | { |
88 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 88 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
89 | { | 89 | { |
90 | OSSLError("osTerrainGetHeight: permission denied"); | 90 | OSSLError("osTerrainGetHeight: permission denied"); |
91 | return 0.0; | 91 | return 0.0; |
@@ -100,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
100 | 100 | ||
101 | public int osRegionRestart(double seconds) | 101 | public int osRegionRestart(double seconds) |
102 | { | 102 | { |
103 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 103 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
104 | { | 104 | { |
105 | OSSLError("osRegionRestart: permission denied"); | 105 | OSSLError("osRegionRestart: permission denied"); |
106 | return 0; | 106 | return 0; |
@@ -120,7 +120,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
120 | 120 | ||
121 | public void osRegionNotice(string msg) | 121 | public void osRegionNotice(string msg) |
122 | { | 122 | { |
123 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 123 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
124 | { | 124 | { |
125 | OSSLError("osRegionNotice: permission denied"); | 125 | OSSLError("osRegionNotice: permission denied"); |
126 | return; | 126 | return; |
@@ -132,7 +132,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
132 | 132 | ||
133 | public void osSetRot(LLUUID target, Quaternion rotation) | 133 | public void osSetRot(LLUUID target, Quaternion rotation) |
134 | { | 134 | { |
135 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 135 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
136 | { | 136 | { |
137 | OSSLError("osSetRot: permission denied"); | 137 | OSSLError("osSetRot: permission denied"); |
138 | return; | 138 | return; |
@@ -152,7 +152,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
152 | public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, | 152 | public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, |
153 | int timer) | 153 | int timer) |
154 | { | 154 | { |
155 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 155 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
156 | { | 156 | { |
157 | OSSLError("osSetDynamicTextureURL: permission denied"); | 157 | OSSLError("osSetDynamicTextureURL: permission denied"); |
158 | return String.Empty; | 158 | return String.Empty; |
@@ -178,7 +178,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
178 | public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, | 178 | public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, |
179 | int timer, int alpha) | 179 | int timer, int alpha) |
180 | { | 180 | { |
181 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 181 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
182 | { | 182 | { |
183 | OSSLError("osSetDynamicTextureURLBlend: permission denied"); | 183 | OSSLError("osSetDynamicTextureURLBlend: permission denied"); |
184 | return String.Empty; | 184 | return String.Empty; |
@@ -204,7 +204,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
204 | public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, | 204 | public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, |
205 | int timer) | 205 | int timer) |
206 | { | 206 | { |
207 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 207 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
208 | { | 208 | { |
209 | OSSLError("osSetDynamicTextureData: permission denied"); | 209 | OSSLError("osSetDynamicTextureData: permission denied"); |
210 | return String.Empty; | 210 | return String.Empty; |
@@ -233,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
233 | public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, | 233 | public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, |
234 | int timer, int alpha) | 234 | int timer, int alpha) |
235 | { | 235 | { |
236 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 236 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
237 | { | 237 | { |
238 | OSSLError("osSetDynamicTextureDataBlend: permission denied"); | 238 | OSSLError("osSetDynamicTextureDataBlend: permission denied"); |
239 | return String.Empty; | 239 | return String.Empty; |
@@ -262,7 +262,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
262 | public bool osConsoleCommand(string command) | 262 | public bool osConsoleCommand(string command) |
263 | { | 263 | { |
264 | m_host.AddScriptLPS(1); | 264 | m_host.AddScriptLPS(1); |
265 | if (m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowosConsoleCommand", false)) | 265 | if (m_ScriptEngine.Config.GetBoolean("AllowosConsoleCommand", false)) |
266 | { | 266 | { |
267 | if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID)) | 267 | if (World.ExternalChecks.ExternalChecksCanRunConsoleCommand(m_host.OwnerID)) |
268 | { | 268 | { |
@@ -275,7 +275,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
275 | } | 275 | } |
276 | public void osSetPrimFloatOnWater(int floatYN) | 276 | public void osSetPrimFloatOnWater(int floatYN) |
277 | { | 277 | { |
278 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 278 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
279 | { | 279 | { |
280 | OSSLError("osSetPrimFloatOnWater: permission denied"); | 280 | OSSLError("osSetPrimFloatOnWater: permission denied"); |
281 | return; | 281 | return; |
@@ -294,7 +294,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
294 | // Adam's super super custom animation functions | 294 | // Adam's super super custom animation functions |
295 | public void osAvatarPlayAnimation(string avatar, string animation) | 295 | public void osAvatarPlayAnimation(string avatar, string animation) |
296 | { | 296 | { |
297 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 297 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
298 | { | 298 | { |
299 | OSSLError("osAvatarPlayAnimation: permission denied"); | 299 | OSSLError("osAvatarPlayAnimation: permission denied"); |
300 | return; | 300 | return; |
@@ -310,7 +310,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
310 | 310 | ||
311 | public void osAvatarStopAnimation(string avatar, string animation) | 311 | public void osAvatarStopAnimation(string avatar, string animation) |
312 | { | 312 | { |
313 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 313 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
314 | { | 314 | { |
315 | OSSLError("osAvatarStopAnimation: permission denied"); | 315 | OSSLError("osAvatarStopAnimation: permission denied"); |
316 | return; | 316 | return; |
@@ -327,7 +327,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
327 | //Texture draw functions | 327 | //Texture draw functions |
328 | public string osMovePen(string drawList, int x, int y) | 328 | public string osMovePen(string drawList, int x, int y) |
329 | { | 329 | { |
330 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 330 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
331 | { | 331 | { |
332 | OSSLError("osMovePen: permission denied"); | 332 | OSSLError("osMovePen: permission denied"); |
333 | return String.Empty; | 333 | return String.Empty; |
@@ -340,7 +340,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
340 | 340 | ||
341 | public string osDrawLine(string drawList, int startX, int startY, int endX, int endY) | 341 | public string osDrawLine(string drawList, int startX, int startY, int endX, int endY) |
342 | { | 342 | { |
343 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 343 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
344 | { | 344 | { |
345 | OSSLError("osDrawLine: permission denied"); | 345 | OSSLError("osDrawLine: permission denied"); |
346 | return String.Empty; | 346 | return String.Empty; |
@@ -353,7 +353,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
353 | 353 | ||
354 | public string osDrawLine(string drawList, int endX, int endY) | 354 | public string osDrawLine(string drawList, int endX, int endY) |
355 | { | 355 | { |
356 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 356 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
357 | { | 357 | { |
358 | OSSLError("osDrawLine: permission denied"); | 358 | OSSLError("osDrawLine: permission denied"); |
359 | return String.Empty; | 359 | return String.Empty; |
@@ -366,7 +366,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
366 | 366 | ||
367 | public string osDrawText(string drawList, string text) | 367 | public string osDrawText(string drawList, string text) |
368 | { | 368 | { |
369 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 369 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
370 | { | 370 | { |
371 | OSSLError("osDrawText: permission denied"); | 371 | OSSLError("osDrawText: permission denied"); |
372 | return String.Empty; | 372 | return String.Empty; |
@@ -379,7 +379,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
379 | 379 | ||
380 | public string osDrawEllipse(string drawList, int width, int height) | 380 | public string osDrawEllipse(string drawList, int width, int height) |
381 | { | 381 | { |
382 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 382 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
383 | { | 383 | { |
384 | OSSLError("osDrawEllipse: permission denied"); | 384 | OSSLError("osDrawEllipse: permission denied"); |
385 | return String.Empty; | 385 | return String.Empty; |
@@ -392,7 +392,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
392 | 392 | ||
393 | public string osDrawRectangle(string drawList, int width, int height) | 393 | public string osDrawRectangle(string drawList, int width, int height) |
394 | { | 394 | { |
395 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 395 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
396 | { | 396 | { |
397 | OSSLError("osDrawRectangle: permission denied"); | 397 | OSSLError("osDrawRectangle: permission denied"); |
398 | return String.Empty; | 398 | return String.Empty; |
@@ -405,7 +405,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
405 | 405 | ||
406 | public string osDrawFilledRectangle(string drawList, int width, int height) | 406 | public string osDrawFilledRectangle(string drawList, int width, int height) |
407 | { | 407 | { |
408 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 408 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
409 | { | 409 | { |
410 | OSSLError("osDrawFilledRectangle: permission denied"); | 410 | OSSLError("osDrawFilledRectangle: permission denied"); |
411 | return String.Empty; | 411 | return String.Empty; |
@@ -418,7 +418,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
418 | 418 | ||
419 | public string osSetFontSize(string drawList, int fontSize) | 419 | public string osSetFontSize(string drawList, int fontSize) |
420 | { | 420 | { |
421 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 421 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
422 | { | 422 | { |
423 | OSSLError("osSetFontSize: permission denied"); | 423 | OSSLError("osSetFontSize: permission denied"); |
424 | return String.Empty; | 424 | return String.Empty; |
@@ -431,7 +431,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
431 | 431 | ||
432 | public string osSetPenSize(string drawList, int penSize) | 432 | public string osSetPenSize(string drawList, int penSize) |
433 | { | 433 | { |
434 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 434 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
435 | { | 435 | { |
436 | OSSLError("osSetPenSize: permission denied"); | 436 | OSSLError("osSetPenSize: permission denied"); |
437 | return String.Empty; | 437 | return String.Empty; |
@@ -444,7 +444,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
444 | 444 | ||
445 | public string osSetPenColour(string drawList, string colour) | 445 | public string osSetPenColour(string drawList, string colour) |
446 | { | 446 | { |
447 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 447 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
448 | { | 448 | { |
449 | OSSLError("osSetPenColour: permission denied"); | 449 | OSSLError("osSetPenColour: permission denied"); |
450 | return String.Empty; | 450 | return String.Empty; |
@@ -457,7 +457,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
457 | 457 | ||
458 | public string osDrawImage(string drawList, int width, int height, string imageUrl) | 458 | public string osDrawImage(string drawList, int width, int height, string imageUrl) |
459 | { | 459 | { |
460 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 460 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
461 | { | 461 | { |
462 | OSSLError("osDrawImage: permission denied"); | 462 | OSSLError("osDrawImage: permission denied"); |
463 | return String.Empty; | 463 | return String.Empty; |
@@ -470,7 +470,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
470 | 470 | ||
471 | public void osSetStateEvents(int events) | 471 | public void osSetStateEvents(int events) |
472 | { | 472 | { |
473 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 473 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
474 | { | 474 | { |
475 | OSSLError("osSetStateEvents: permission denied"); | 475 | OSSLError("osSetStateEvents: permission denied"); |
476 | return; | 476 | return; |
@@ -481,7 +481,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
481 | 481 | ||
482 | public void osSetRegionWaterHeight(double height) | 482 | public void osSetRegionWaterHeight(double height) |
483 | { | 483 | { |
484 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 484 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
485 | { | 485 | { |
486 | OSSLError("osSetRegionWaterHeight: permission denied"); | 486 | OSSLError("osSetRegionWaterHeight: permission denied"); |
487 | return; | 487 | return; |
@@ -498,7 +498,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
498 | 498 | ||
499 | public double osList2Double(LSL_Types.list src, int index) | 499 | public double osList2Double(LSL_Types.list src, int index) |
500 | { | 500 | { |
501 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 501 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
502 | { | 502 | { |
503 | OSSLError("osList2Double: permission denied"); | 503 | OSSLError("osList2Double: permission denied"); |
504 | return 0.0; | 504 | return 0.0; |
@@ -518,7 +518,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
518 | 518 | ||
519 | public void osSetParcelMediaURL(string url) | 519 | public void osSetParcelMediaURL(string url) |
520 | { | 520 | { |
521 | if (!m_ScriptEngine.ScriptConfigSource.GetBoolean("AllowOSFunctions", false)) | 521 | if (!m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false)) |
522 | { | 522 | { |
523 | OSSLError("osSetParcelMediaURL: permission denied"); | 523 | OSSLError("osSetParcelMediaURL: permission denied"); |
524 | return; | 524 | return; |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Dataserver.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs index 47ab420..6c88ae86 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Dataserver.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Dataserver.cs | |||
@@ -29,9 +29,10 @@ using System; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using libsecondlife; | 31 | using libsecondlife; |
32 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 32 | using OpenSim.Region.ScriptEngine.Shared; |
33 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
33 | 34 | ||
34 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 35 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
35 | { | 36 | { |
36 | public class Dataserver | 37 | public class Dataserver |
37 | { | 38 | { |
@@ -94,10 +95,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
94 | } | 95 | } |
95 | 96 | ||
96 | m_CmdManager.m_ScriptEngine.PostObjectEvent(ds.localID, | 97 | m_CmdManager.m_ScriptEngine.PostObjectEvent(ds.localID, |
97 | new XEventParams("dataserver", new Object[] | 98 | new EventParams("dataserver", new Object[] |
98 | { new LSL_Types.LSLString(ds.ID.ToString()), | 99 | { new LSL_Types.LSLString(ds.ID.ToString()), |
99 | new LSL_Types.LSLString(reply)}, | 100 | new LSL_Types.LSLString(reply)}, |
100 | new XDetectParams[0])); | 101 | new DetectParams[0])); |
101 | } | 102 | } |
102 | 103 | ||
103 | public void RemoveEvents(uint localID, LLUUID itemID) | 104 | public void RemoveEvents(uint localID, LLUUID itemID) |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/HttpRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs index 089e016..92f603d 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/HttpRequest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/HttpRequest.cs | |||
@@ -28,9 +28,11 @@ | |||
28 | using System; | 28 | using System; |
29 | using OpenSim.Region.Environment.Interfaces; | 29 | using OpenSim.Region.Environment.Interfaces; |
30 | using OpenSim.Region.Environment.Modules.Scripting.HttpRequest; | 30 | using OpenSim.Region.Environment.Modules.Scripting.HttpRequest; |
31 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 31 | using OpenSim.Region.ScriptEngine.Shared; |
32 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
33 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
32 | 34 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 35 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
34 | { | 36 | { |
35 | public class HttpRequest | 37 | public class HttpRequest |
36 | { | 38 | { |
@@ -75,11 +77,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
75 | new LSL_Types.LSLString(httpInfo.response_body) | 77 | new LSL_Types.LSLString(httpInfo.response_body) |
76 | }; | 78 | }; |
77 | 79 | ||
78 | foreach (XEngine xe in XEngine.ScriptEngines) | 80 | foreach (AsyncCommandManager m in m_CmdManager.Managers) |
79 | { | 81 | { |
80 | if (xe.PostObjectEvent(httpInfo.localID, | 82 | if (m.m_ScriptEngine.PostObjectEvent(httpInfo.localID, |
81 | new XEventParams("http_response", | 83 | new EventParams("http_response", |
82 | resobj, new XDetectParams[0]))) | 84 | resobj, new DetectParams[0]))) |
83 | break; | 85 | break; |
84 | } | 86 | } |
85 | httpInfo = iHttpReq.GetNextCompletedRequest(); | 87 | httpInfo = iHttpReq.GetNextCompletedRequest(); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Listener.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs index 1144c00..11b45b1 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Listener.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Listener.cs | |||
@@ -29,9 +29,10 @@ using System; | |||
29 | using libsecondlife; | 29 | using libsecondlife; |
30 | using OpenSim.Region.Environment.Interfaces; | 30 | using OpenSim.Region.Environment.Interfaces; |
31 | using OpenSim.Region.Environment.Modules.Scripting.WorldComm; | 31 | using OpenSim.Region.Environment.Modules.Scripting.WorldComm; |
32 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 32 | using OpenSim.Region.ScriptEngine.Shared; |
33 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
33 | 34 | ||
34 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 35 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
35 | { | 36 | { |
36 | public class Listener | 37 | public class Listener |
37 | { | 38 | { |
@@ -66,9 +67,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
66 | }; | 67 | }; |
67 | 68 | ||
68 | m_CmdManager.m_ScriptEngine.PostScriptEvent( | 69 | m_CmdManager.m_ScriptEngine.PostScriptEvent( |
69 | lInfo.GetItemID(), new XEventParams( | 70 | lInfo.GetItemID(), new EventParams( |
70 | "listen", resobj, | 71 | "listen", resobj, |
71 | new XDetectParams[0])); | 72 | new DetectParams[0])); |
72 | } | 73 | } |
73 | } | 74 | } |
74 | } | 75 | } |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 8a25098..5833512 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | |||
@@ -30,9 +30,10 @@ using System.Collections.Generic; | |||
30 | using libsecondlife; | 30 | using libsecondlife; |
31 | using OpenSim.Framework; | 31 | using OpenSim.Framework; |
32 | using OpenSim.Region.Environment.Scenes; | 32 | using OpenSim.Region.Environment.Scenes; |
33 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 33 | using OpenSim.Region.ScriptEngine.Shared; |
34 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
34 | 35 | ||
35 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 36 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
36 | { | 37 | { |
37 | public class SensorRepeat | 38 | public class SensorRepeat |
38 | { | 39 | { |
@@ -72,8 +73,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
72 | string name, LLUUID keyID, int type, double range, | 73 | string name, LLUUID keyID, int type, double range, |
73 | double arc, double sec, SceneObjectPart host) | 74 | double arc, double sec, SceneObjectPart host) |
74 | { | 75 | { |
75 | Console.WriteLine("SetSensorEvent"); | ||
76 | |||
77 | // Always remove first, in case this is a re-set | 76 | // Always remove first, in case this is a re-set |
78 | UnSetSenseRepeaterEvents(m_localID, m_itemID); | 77 | UnSetSenseRepeaterEvents(m_localID, m_itemID); |
79 | if (sec == 0) // Disabling timer | 78 | if (sec == 0) // Disabling timer |
@@ -163,7 +162,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
163 | Dictionary<LLUUID, LSL_Types.list> Obj = null; | 162 | Dictionary<LLUUID, LSL_Types.list> Obj = null; |
164 | if (!SenseEvents.TryGetValue(m_localID, out Obj)) | 163 | if (!SenseEvents.TryGetValue(m_localID, out Obj)) |
165 | { | 164 | { |
166 | m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing localID: " + m_localID); | ||
167 | return null; | 165 | return null; |
168 | } | 166 | } |
169 | lock (Obj) | 167 | lock (Obj) |
@@ -172,7 +170,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
172 | LSL_Types.list SenseList = null; | 170 | LSL_Types.list SenseList = null; |
173 | if (!Obj.TryGetValue(m_itemID, out SenseList)) | 171 | if (!Obj.TryGetValue(m_itemID, out SenseList)) |
174 | { | 172 | { |
175 | m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing itemID: " + m_itemID); | ||
176 | return null; | 173 | return null; |
177 | } | 174 | } |
178 | return SenseList; | 175 | return SenseList; |
@@ -182,15 +179,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
182 | 179 | ||
183 | private void SensorSweep(SenseRepeatClass ts) | 180 | private void SensorSweep(SenseRepeatClass ts) |
184 | { | 181 | { |
185 | //m_ScriptEngine.Log.Info("[AsyncLSL]:Enter SensorSweep"); | ||
186 | SceneObjectPart SensePoint = ts.host; | 182 | SceneObjectPart SensePoint = ts.host; |
187 | 183 | ||
188 | if (SensePoint == null) | 184 | if (SensePoint == null) |
189 | { | 185 | { |
190 | //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep (SensePoint == null) for "+ts.itemID.ToString()); | ||
191 | return; | 186 | return; |
192 | } | 187 | } |
193 | //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep Scan"); | ||
194 | 188 | ||
195 | LLVector3 sensorPos = SensePoint.AbsolutePosition; | 189 | LLVector3 sensorPos = SensePoint.AbsolutePosition; |
196 | LLVector3 regionPos = new LLVector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); | 190 | LLVector3 regionPos = new LLVector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0); |
@@ -220,7 +214,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
220 | objtype |= 0x04; // passive non-moving | 214 | objtype |= 0x04; // passive non-moving |
221 | else | 215 | else |
222 | objtype |= 0x02; // active moving | 216 | objtype |= 0x02; // active moving |
223 | if (ent is IScript) objtype |= 0x08; // Scripted. It COULD have one hidden ... | 217 | |
218 | SceneObjectPart part = m_CmdManager.m_ScriptEngine.World.GetSceneObjectPart(ent.UUID); | ||
219 | |||
220 | if (part != null && part.ContainsScripts()) objtype |= 0x08; // Scripted. It COULD have one hidden ... | ||
224 | 221 | ||
225 | if (((ts.type & objtype) != 0) || ((ts.type & objtype) == ts.type)) | 222 | if (((ts.type & objtype) != 0) || ((ts.type & objtype) == ts.type)) |
226 | { | 223 | { |
@@ -288,7 +285,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
288 | } | 285 | } |
289 | } | 286 | } |
290 | } | 287 | } |
291 | //m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep SenseLock"); | ||
292 | 288 | ||
293 | lock (SenseLock) | 289 | lock (SenseLock) |
294 | { | 290 | { |
@@ -311,24 +307,24 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
311 | // send a "no_sensor" | 307 | // send a "no_sensor" |
312 | // Add it to queue | 308 | // Add it to queue |
313 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, | 309 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, |
314 | new XEventParams("no_sensor", new Object[0], | 310 | new EventParams("no_sensor", new Object[0], |
315 | new XDetectParams[0])); | 311 | new DetectParams[0])); |
316 | } | 312 | } |
317 | else | 313 | else |
318 | { | 314 | { |
319 | XDetectParams[] detect = | 315 | DetectParams[] detect = |
320 | new XDetectParams[SensedObjects.Length]; | 316 | new DetectParams[SensedObjects.Length]; |
321 | 317 | ||
322 | int idx; | 318 | int idx; |
323 | for (idx = 0; idx < SensedObjects.Length; idx++) | 319 | for (idx = 0; idx < SensedObjects.Length; idx++) |
324 | { | 320 | { |
325 | detect[idx] = new XDetectParams(); | 321 | detect[idx] = new DetectParams(); |
326 | detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]); | 322 | detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]); |
327 | detect[idx].Populate(m_CmdManager.m_ScriptEngine.World); | 323 | detect[idx].Populate(m_CmdManager.m_ScriptEngine.World); |
328 | } | 324 | } |
329 | 325 | ||
330 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, | 326 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, |
331 | new XEventParams("sensor", | 327 | new EventParams("sensor", |
332 | new Object[] { | 328 | new Object[] { |
333 | new LSL_Types.LSLInteger(SensedObjects.Length) }, | 329 | new LSL_Types.LSLInteger(SensedObjects.Length) }, |
334 | detect)); | 330 | detect)); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Timer.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs index 3dd875a..36e992b 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Timer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs | |||
@@ -29,8 +29,9 @@ using System; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using libsecondlife; | 31 | using libsecondlife; |
32 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
32 | 33 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 34 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
34 | { | 35 | { |
35 | public class Timer | 36 | public class Timer |
36 | { | 37 | { |
@@ -110,8 +111,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
110 | // Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next); | 111 | // Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next); |
111 | // Add it to queue | 112 | // Add it to queue |
112 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, | 113 | m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID, |
113 | new XEventParams("timer", new Object[0], | 114 | new EventParams("timer", new Object[0], |
114 | new XDetectParams[0])); | 115 | new DetectParams[0])); |
115 | // set next interval | 116 | // set next interval |
116 | 117 | ||
117 | //ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval); | 118 | //ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/XmlRequest.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs index 288349e..89bf51c 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/XmlRequest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/XmlRequest.cs | |||
@@ -28,9 +28,11 @@ | |||
28 | using System; | 28 | using System; |
29 | using OpenSim.Region.Environment.Interfaces; | 29 | using OpenSim.Region.Environment.Interfaces; |
30 | using OpenSim.Region.Environment.Modules.Scripting.XMLRPC; | 30 | using OpenSim.Region.Environment.Modules.Scripting.XMLRPC; |
31 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 31 | using OpenSim.Region.ScriptEngine.Interfaces; |
32 | using OpenSim.Region.ScriptEngine.Shared; | ||
33 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
32 | 34 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | 35 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins |
34 | { | 36 | { |
35 | public class XmlRequest | 37 | public class XmlRequest |
36 | { | 38 | { |
@@ -69,12 +71,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
69 | new LSL_Types.LSLString(rInfo.GetStrVal()) | 71 | new LSL_Types.LSLString(rInfo.GetStrVal()) |
70 | }; | 72 | }; |
71 | 73 | ||
72 | foreach (XEngine xe in XEngine.ScriptEngines) | 74 | foreach (AsyncCommandManager m in m_CmdManager.Managers) |
73 | { | 75 | { |
74 | if (xe.PostScriptEvent( | 76 | if (m.m_ScriptEngine.PostScriptEvent( |
75 | rInfo.GetItemID(), new XEventParams( | 77 | rInfo.GetItemID(), new EventParams( |
76 | "remote_data", resobj, | 78 | "remote_data", resobj, |
77 | new XDetectParams[0]))) | 79 | new DetectParams[0]))) |
78 | break; | 80 | break; |
79 | } | 81 | } |
80 | 82 | ||
@@ -98,12 +100,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins | |||
98 | new LSL_Types.LSLString(srdInfo.sdata) | 100 | new LSL_Types.LSLString(srdInfo.sdata) |
99 | }; | 101 | }; |
100 | 102 | ||
101 | foreach (XEngine xe in XEngine.ScriptEngines) | 103 | foreach (AsyncCommandManager m in m_CmdManager.Managers) |
102 | { | 104 | { |
103 | if (xe.PostScriptEvent( | 105 | if (m.m_ScriptEngine.PostScriptEvent( |
104 | srdInfo.m_itemID, new XEventParams( | 106 | srdInfo.m_itemID, new EventParams( |
105 | "remote_data", resobj, | 107 | "remote_data", resobj, |
106 | new XDetectParams[0]))) | 108 | new DetectParams[0]))) |
107 | break; | 109 | break; |
108 | } | 110 | } |
109 | 111 | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/ILSL_ScriptCommands.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 9e8965c..75672a1 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/ILSL_ScriptCommands.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs | |||
@@ -25,20 +25,16 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using OpenSim.Region.Environment.Interfaces; | 28 | using System; |
29 | using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; | ||
30 | using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; | ||
29 | 31 | ||
30 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 32 | |
33 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | ||
31 | { | 34 | { |
32 | public interface ILSL_ScriptCommands | 35 | public interface ILSL_Api |
33 | { | 36 | { |
34 | // Interface used for loading and executing scripts | ||
35 | |||
36 | string State { get; set ; } | ||
37 | |||
38 | void state(string newState); | 37 | void state(string newState); |
39 | |||
40 | ICommander GetCommander(string name); | ||
41 | |||
42 | void llSay(int channelID, string text); | 38 | void llSay(int channelID, string text); |
43 | double llSin(double f); | 39 | double llSin(double f); |
44 | double llCos(double f); | 40 | double llCos(double f); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/IOSSL_ScriptCommands.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs index 82d4673..1e14c63 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/IOSSL_ScriptCommands.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs | |||
@@ -25,9 +25,9 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 28 | namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces |
29 | { | 29 | { |
30 | public interface IOSSL_ScriptCommands | 30 | public interface IOSSL_Api |
31 | { | 31 | { |
32 | //OpenSim functions | 32 | //OpenSim functions |
33 | string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer); | 33 | string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs new file mode 100644 index 0000000..69be69b --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs | |||
@@ -0,0 +1,421 @@ | |||
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 | |||
28 | using System; | ||
29 | using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; | ||
30 | using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; | ||
31 | |||
32 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | ||
33 | { | ||
34 | public partial class ScriptBaseClass : MarshalByRefObject | ||
35 | { | ||
36 | // LSL CONSTANTS | ||
37 | public const int TRUE = 1; | ||
38 | public const int FALSE = 0; | ||
39 | |||
40 | public const int STATUS_PHYSICS = 1; | ||
41 | public const int STATUS_ROTATE_X = 2; | ||
42 | public const int STATUS_ROTATE_Y = 4; | ||
43 | public const int STATUS_ROTATE_Z = 8; | ||
44 | public const int STATUS_PHANTOM = 16; | ||
45 | public const int STATUS_SANDBOX = 32; | ||
46 | public const int STATUS_BLOCK_GRAB = 64; | ||
47 | public const int STATUS_DIE_AT_EDGE = 128; | ||
48 | public const int STATUS_RETURN_AT_EDGE = 256; | ||
49 | public const int STATUS_CAST_SHADOWS = 512; | ||
50 | |||
51 | public const int AGENT = 1; | ||
52 | public const int ACTIVE = 2; | ||
53 | public const int PASSIVE = 4; | ||
54 | public const int SCRIPTED = 8; | ||
55 | |||
56 | public const int CONTROL_FWD = 1; | ||
57 | public const int CONTROL_BACK = 2; | ||
58 | public const int CONTROL_LEFT = 4; | ||
59 | public const int CONTROL_RIGHT = 8; | ||
60 | public const int CONTROL_UP = 16; | ||
61 | public const int CONTROL_DOWN = 32; | ||
62 | public const int CONTROL_ROT_LEFT = 256; | ||
63 | public const int CONTROL_ROT_RIGHT = 512; | ||
64 | public const int CONTROL_LBUTTON = 268435456; | ||
65 | public const int CONTROL_ML_LBUTTON = 1073741824; | ||
66 | |||
67 | //Permissions | ||
68 | public const int PERMISSION_DEBIT = 2; | ||
69 | public const int PERMISSION_TAKE_CONTROLS = 4; | ||
70 | public const int PERMISSION_REMAP_CONTROLS = 8; | ||
71 | public const int PERMISSION_TRIGGER_ANIMATION = 16; | ||
72 | public const int PERMISSION_ATTACH = 32; | ||
73 | public const int PERMISSION_RELEASE_OWNERSHIP = 64; | ||
74 | public const int PERMISSION_CHANGE_LINKS = 128; | ||
75 | public const int PERMISSION_CHANGE_JOINTS = 256; | ||
76 | public const int PERMISSION_CHANGE_PERMISSIONS = 512; | ||
77 | public const int PERMISSION_TRACK_CAMERA = 1024; | ||
78 | |||
79 | public const int AGENT_FLYING = 1; | ||
80 | public const int AGENT_ATTACHMENTS = 2; | ||
81 | public const int AGENT_SCRIPTED = 4; | ||
82 | public const int AGENT_MOUSELOOK = 8; | ||
83 | public const int AGENT_SITTING = 16; | ||
84 | public const int AGENT_ON_OBJECT = 32; | ||
85 | public const int AGENT_AWAY = 64; | ||
86 | public const int AGENT_WALKING = 128; | ||
87 | public const int AGENT_IN_AIR = 256; | ||
88 | public const int AGENT_TYPING = 512; | ||
89 | public const int AGENT_CROUCHING = 1024; | ||
90 | public const int AGENT_BUSY = 2048; | ||
91 | public const int AGENT_ALWAYS_RUN = 4096; | ||
92 | |||
93 | //Particle Systems | ||
94 | public const int PSYS_PART_INTERP_COLOR_MASK = 1; | ||
95 | public const int PSYS_PART_INTERP_SCALE_MASK = 2; | ||
96 | public const int PSYS_PART_BOUNCE_MASK = 4; | ||
97 | public const int PSYS_PART_WIND_MASK = 8; | ||
98 | public const int PSYS_PART_FOLLOW_SRC_MASK = 16; | ||
99 | public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32; | ||
100 | public const int PSYS_PART_TARGET_POS_MASK = 64; | ||
101 | public const int PSYS_PART_TARGET_LINEAR_MASK = 128; | ||
102 | public const int PSYS_PART_EMISSIVE_MASK = 256; | ||
103 | public const int PSYS_PART_FLAGS = 0; | ||
104 | public const int PSYS_PART_START_COLOR = 1; | ||
105 | public const int PSYS_PART_START_ALPHA = 2; | ||
106 | public const int PSYS_PART_END_COLOR = 3; | ||
107 | public const int PSYS_PART_END_ALPHA = 4; | ||
108 | public const int PSYS_PART_START_SCALE = 5; | ||
109 | public const int PSYS_PART_END_SCALE = 6; | ||
110 | public const int PSYS_PART_MAX_AGE = 7; | ||
111 | public const int PSYS_SRC_ACCEL = 8; | ||
112 | public const int PSYS_SRC_PATTERN = 9; | ||
113 | public const int PSYS_SRC_INNERANGLE = 10; | ||
114 | public const int PSYS_SRC_OUTERANGLE = 11; | ||
115 | public const int PSYS_SRC_TEXTURE = 12; | ||
116 | public const int PSYS_SRC_BURST_RATE = 13; | ||
117 | public const int PSYS_SRC_BURST_PART_COUNT = 15; | ||
118 | public const int PSYS_SRC_BURST_RADIUS = 16; | ||
119 | public const int PSYS_SRC_BURST_SPEED_MIN = 17; | ||
120 | public const int PSYS_SRC_BURST_SPEED_MAX = 18; | ||
121 | public const int PSYS_SRC_MAX_AGE = 19; | ||
122 | public const int PSYS_SRC_TARGET_KEY = 20; | ||
123 | public const int PSYS_SRC_OMEGA = 21; | ||
124 | public const int PSYS_SRC_ANGLE_BEGIN = 22; | ||
125 | public const int PSYS_SRC_ANGLE_END = 23; | ||
126 | public const int PSYS_SRC_PATTERN_DROP = 1; | ||
127 | public const int PSYS_SRC_PATTERN_EXPLODE = 2; | ||
128 | public const int PSYS_SRC_PATTERN_ANGLE = 4; | ||
129 | public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8; | ||
130 | public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16; | ||
131 | |||
132 | public const int VEHICLE_TYPE_NONE = 0; | ||
133 | public const int VEHICLE_TYPE_SLED = 1; | ||
134 | public const int VEHICLE_TYPE_CAR = 2; | ||
135 | public const int VEHICLE_TYPE_BOAT = 3; | ||
136 | public const int VEHICLE_TYPE_AIRPLANE = 4; | ||
137 | public const int VEHICLE_TYPE_BALLOON = 5; | ||
138 | public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16; | ||
139 | public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17; | ||
140 | public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18; | ||
141 | public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20; | ||
142 | public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19; | ||
143 | public const int VEHICLE_HOVER_HEIGHT = 24; | ||
144 | public const int VEHICLE_HOVER_EFFICIENCY = 25; | ||
145 | public const int VEHICLE_HOVER_TIMESCALE = 26; | ||
146 | public const int VEHICLE_BUOYANCY = 27; | ||
147 | public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28; | ||
148 | public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29; | ||
149 | public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30; | ||
150 | public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31; | ||
151 | public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32; | ||
152 | public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33; | ||
153 | public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34; | ||
154 | public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35; | ||
155 | public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36; | ||
156 | public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37; | ||
157 | public const int VEHICLE_BANKING_EFFICIENCY = 38; | ||
158 | public const int VEHICLE_BANKING_MIX = 39; | ||
159 | public const int VEHICLE_BANKING_TIMESCALE = 40; | ||
160 | public const int VEHICLE_REFERENCE_FRAME = 44; | ||
161 | public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; | ||
162 | public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; | ||
163 | public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; | ||
164 | public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8; | ||
165 | public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16; | ||
166 | public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32; | ||
167 | public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64; | ||
168 | public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; | ||
169 | public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; | ||
170 | public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; | ||
171 | |||
172 | public const int INVENTORY_ALL = -1; | ||
173 | public const int INVENTORY_NONE = -1; | ||
174 | public const int INVENTORY_TEXTURE = 0; | ||
175 | public const int INVENTORY_SOUND = 1; | ||
176 | public const int INVENTORY_LANDMARK = 3; | ||
177 | public const int INVENTORY_CLOTHING = 5; | ||
178 | public const int INVENTORY_OBJECT = 6; | ||
179 | public const int INVENTORY_NOTECARD = 7; | ||
180 | public const int INVENTORY_SCRIPT = 10; | ||
181 | public const int INVENTORY_BODYPART = 13; | ||
182 | public const int INVENTORY_ANIMATION = 20; | ||
183 | public const int INVENTORY_GESTURE = 21; | ||
184 | |||
185 | public const int ATTACH_CHEST = 1; | ||
186 | public const int ATTACH_HEAD = 2; | ||
187 | public const int ATTACH_LSHOULDER = 3; | ||
188 | public const int ATTACH_RSHOULDER = 4; | ||
189 | public const int ATTACH_LHAND = 5; | ||
190 | public const int ATTACH_RHAND = 6; | ||
191 | public const int ATTACH_LFOOT = 7; | ||
192 | public const int ATTACH_RFOOT = 8; | ||
193 | public const int ATTACH_BACK = 9; | ||
194 | public const int ATTACH_PELVIS = 10; | ||
195 | public const int ATTACH_MOUTH = 11; | ||
196 | public const int ATTACH_CHIN = 12; | ||
197 | public const int ATTACH_LEAR = 13; | ||
198 | public const int ATTACH_REAR = 14; | ||
199 | public const int ATTACH_LEYE = 15; | ||
200 | public const int ATTACH_REYE = 16; | ||
201 | public const int ATTACH_NOSE = 17; | ||
202 | public const int ATTACH_RUARM = 18; | ||
203 | public const int ATTACH_RLARM = 19; | ||
204 | public const int ATTACH_LUARM = 20; | ||
205 | public const int ATTACH_LLARM = 21; | ||
206 | public const int ATTACH_RHIP = 22; | ||
207 | public const int ATTACH_RULEG = 23; | ||
208 | public const int ATTACH_RLLEG = 24; | ||
209 | public const int ATTACH_LHIP = 25; | ||
210 | public const int ATTACH_LULEG = 26; | ||
211 | public const int ATTACH_LLLEG = 27; | ||
212 | public const int ATTACH_BELLY = 28; | ||
213 | public const int ATTACH_RPEC = 29; | ||
214 | public const int ATTACH_LPEC = 30; | ||
215 | |||
216 | public const int LAND_LEVEL = 0; | ||
217 | public const int LAND_RAISE = 1; | ||
218 | public const int LAND_LOWER = 2; | ||
219 | public const int LAND_SMOOTH = 3; | ||
220 | public const int LAND_NOISE = 4; | ||
221 | public const int LAND_REVERT = 5; | ||
222 | public const int LAND_SMALL_BRUSH = 1; | ||
223 | public const int LAND_MEDIUM_BRUSH = 2; | ||
224 | public const int LAND_LARGE_BRUSH = 3; | ||
225 | |||
226 | //Agent Dataserver | ||
227 | public const int DATA_ONLINE = 1; | ||
228 | public const int DATA_NAME = 2; | ||
229 | public const int DATA_BORN = 3; | ||
230 | public const int DATA_RATING = 4; | ||
231 | public const int DATA_SIM_POS = 5; | ||
232 | public const int DATA_SIM_STATUS = 6; | ||
233 | public const int DATA_SIM_RATING = 7; | ||
234 | public const int DATA_PAYINFO = 8; | ||
235 | |||
236 | public const int ANIM_ON = 1; | ||
237 | public const int LOOP = 2; | ||
238 | public const int REVERSE = 4; | ||
239 | public const int PING_PONG = 8; | ||
240 | public const int SMOOTH = 16; | ||
241 | public const int ROTATE = 32; | ||
242 | public const int SCALE = 64; | ||
243 | public const int ALL_SIDES = -1; | ||
244 | public const int LINK_SET = -1; | ||
245 | public const int LINK_ROOT = 1; | ||
246 | public const int LINK_ALL_OTHERS = -2; | ||
247 | public const int LINK_ALL_CHILDREN = -3; | ||
248 | public const int LINK_THIS = -4; | ||
249 | public const int CHANGED_INVENTORY = 1; | ||
250 | public const int CHANGED_COLOR = 2; | ||
251 | public const int CHANGED_SHAPE = 4; | ||
252 | public const int CHANGED_SCALE = 8; | ||
253 | public const int CHANGED_TEXTURE = 16; | ||
254 | public const int CHANGED_LINK = 32; | ||
255 | public const int CHANGED_ALLOWED_DROP = 64; | ||
256 | public const int CHANGED_OWNER = 128; | ||
257 | public const int CHANGED_REGION_RESTART = 256; | ||
258 | public const int TYPE_INVALID = 0; | ||
259 | public const int TYPE_INTEGER = 1; | ||
260 | public const int TYPE_double = 2; | ||
261 | public const int TYPE_STRING = 3; | ||
262 | public const int TYPE_KEY = 4; | ||
263 | public const int TYPE_VECTOR = 5; | ||
264 | public const int TYPE_ROTATION = 6; | ||
265 | |||
266 | //XML RPC Remote Data Channel | ||
267 | public const int REMOTE_DATA_CHANNEL = 1; | ||
268 | public const int REMOTE_DATA_REQUEST = 2; | ||
269 | public const int REMOTE_DATA_REPLY = 3; | ||
270 | |||
271 | //llHTTPRequest | ||
272 | public const int HTTP_METHOD = 0; | ||
273 | public const int HTTP_MIMETYPE = 1; | ||
274 | public const int HTTP_BODY_MAXLENGTH = 2; | ||
275 | public const int HTTP_VERIFY_CERT = 3; | ||
276 | |||
277 | public const int PRIM_MATERIAL = 2; | ||
278 | public const int PRIM_PHYSICS = 3; | ||
279 | public const int PRIM_TEMP_ON_REZ = 4; | ||
280 | public const int PRIM_PHANTOM = 5; | ||
281 | public const int PRIM_POSITION = 6; | ||
282 | public const int PRIM_SIZE = 7; | ||
283 | public const int PRIM_ROTATION = 8; | ||
284 | public const int PRIM_TYPE = 9; | ||
285 | public const int PRIM_TEXTURE = 17; | ||
286 | public const int PRIM_COLOR = 18; | ||
287 | public const int PRIM_BUMP_SHINY = 19; | ||
288 | public const int PRIM_FULLBRIGHT = 20; | ||
289 | public const int PRIM_FLEXIBLE = 21; | ||
290 | public const int PRIM_TEXGEN = 22; | ||
291 | public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake | ||
292 | public const int PRIM_POINT_LIGHT = 23; // Huh? | ||
293 | public const int PRIM_TEXGEN_DEFAULT = 0; | ||
294 | public const int PRIM_TEXGEN_PLANAR = 1; | ||
295 | |||
296 | public const int PRIM_TYPE_BOX = 0; | ||
297 | public const int PRIM_TYPE_CYLINDER = 1; | ||
298 | public const int PRIM_TYPE_PRISM = 2; | ||
299 | public const int PRIM_TYPE_SPHERE = 3; | ||
300 | public const int PRIM_TYPE_TORUS = 4; | ||
301 | public const int PRIM_TYPE_TUBE = 5; | ||
302 | public const int PRIM_TYPE_RING = 6; | ||
303 | public const int PRIM_TYPE_SCULPT = 7; | ||
304 | |||
305 | public const int PRIM_HOLE_DEFAULT = 0; | ||
306 | public const int PRIM_HOLE_CIRCLE = 16; | ||
307 | public const int PRIM_HOLE_SQUARE = 32; | ||
308 | public const int PRIM_HOLE_TRIANGLE = 48; | ||
309 | |||
310 | public const int PRIM_MATERIAL_STONE = 0; | ||
311 | public const int PRIM_MATERIAL_METAL = 1; | ||
312 | public const int PRIM_MATERIAL_GLASS = 2; | ||
313 | public const int PRIM_MATERIAL_WOOD = 3; | ||
314 | public const int PRIM_MATERIAL_FLESH = 4; | ||
315 | public const int PRIM_MATERIAL_PLASTIC = 5; | ||
316 | public const int PRIM_MATERIAL_RUBBER = 6; | ||
317 | public const int PRIM_MATERIAL_LIGHT = 7; | ||
318 | |||
319 | public const int PRIM_SHINY_NONE = 0; | ||
320 | public const int PRIM_SHINY_LOW = 1; | ||
321 | public const int PRIM_SHINY_MEDIUM = 2; | ||
322 | public const int PRIM_SHINY_HIGH = 3; | ||
323 | public const int PRIM_BUMP_NONE = 0; | ||
324 | public const int PRIM_BUMP_BRIGHT = 1; | ||
325 | public const int PRIM_BUMP_DARK = 2; | ||
326 | public const int PRIM_BUMP_WOOD = 3; | ||
327 | public const int PRIM_BUMP_BARK = 4; | ||
328 | public const int PRIM_BUMP_BRICKS = 5; | ||
329 | public const int PRIM_BUMP_CHECKER = 6; | ||
330 | public const int PRIM_BUMP_CONCRETE = 7; | ||
331 | public const int PRIM_BUMP_TILE = 8; | ||
332 | public const int PRIM_BUMP_STONE = 9; | ||
333 | public const int PRIM_BUMP_DISKS = 10; | ||
334 | public const int PRIM_BUMP_GRAVEL = 11; | ||
335 | public const int PRIM_BUMP_BLOBS = 12; | ||
336 | public const int PRIM_BUMP_SIDING = 13; | ||
337 | public const int PRIM_BUMP_LARGETILE = 14; | ||
338 | public const int PRIM_BUMP_STUCCO = 15; | ||
339 | public const int PRIM_BUMP_SUCTION = 16; | ||
340 | public const int PRIM_BUMP_WEAVE = 17; | ||
341 | |||
342 | public const int PRIM_SCULPT_TYPE_SPHERE = 1; | ||
343 | public const int PRIM_SCULPT_TYPE_TORUS = 2; | ||
344 | public const int PRIM_SCULPT_TYPE_PLANE = 3; | ||
345 | public const int PRIM_SCULPT_TYPE_CYLINDER = 4; | ||
346 | |||
347 | public const int MASK_BASE = 0; | ||
348 | public const int MASK_OWNER = 1; | ||
349 | public const int MASK_GROUP = 2; | ||
350 | public const int MASK_EVERYONE = 3; | ||
351 | public const int MASK_NEXT = 4; | ||
352 | |||
353 | public const int PERM_TRANSFER = 8192; | ||
354 | public const int PERM_MODIFY = 16384; | ||
355 | public const int PERM_COPY = 32768; | ||
356 | public const int PERM_MOVE = 524288; | ||
357 | public const int PERM_ALL = 2147483647; | ||
358 | |||
359 | public const int PARCEL_MEDIA_COMMAND_STOP = 0; | ||
360 | public const int PARCEL_MEDIA_COMMAND_PAUSE = 1; | ||
361 | public const int PARCEL_MEDIA_COMMAND_PLAY = 2; | ||
362 | public const int PARCEL_MEDIA_COMMAND_LOOP = 3; | ||
363 | public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4; | ||
364 | public const int PARCEL_MEDIA_COMMAND_URL = 5; | ||
365 | public const int PARCEL_MEDIA_COMMAND_TIME = 6; | ||
366 | public const int PARCEL_MEDIA_COMMAND_AGENT = 7; | ||
367 | public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8; | ||
368 | public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9; | ||
369 | |||
370 | public const int PAY_HIDE = -1; | ||
371 | public const int PAY_DEFAULT = -2; | ||
372 | |||
373 | public const string NULL_KEY = "00000000-0000-0000-0000-000000000000"; | ||
374 | public const string EOF = "\n\n\n"; | ||
375 | public const double PI = 3.14159274f; | ||
376 | public const double TWO_PI = 6.28318548f; | ||
377 | public const double PI_BY_TWO = 1.57079637f; | ||
378 | public const double DEG_TO_RAD = 0.01745329238f; | ||
379 | public const double RAD_TO_DEG = 57.29578f; | ||
380 | public const double SQRT2 = 1.414213538f; | ||
381 | public const int STRING_TRIM_HEAD = 1; | ||
382 | public const int STRING_TRIM_TAIL = 2; | ||
383 | public const int STRING_TRIM = 3; | ||
384 | public const int LIST_STAT_RANGE = 0; | ||
385 | public const int LIST_STAT_MIN = 1; | ||
386 | public const int LIST_STAT_MAX = 2; | ||
387 | public const int LIST_STAT_MEAN = 3; | ||
388 | public const int LIST_STAT_MEDIAN = 4; | ||
389 | public const int LIST_STAT_STD_DEV = 5; | ||
390 | public const int LIST_STAT_SUM = 6; | ||
391 | public const int LIST_STAT_SUM_SQUARES = 7; | ||
392 | public const int LIST_STAT_NUM_COUNT = 8; | ||
393 | public const int LIST_STAT_GEOMETRIC_MEAN = 9; | ||
394 | public const int LIST_STAT_HARMONIC_MEAN = 100; | ||
395 | |||
396 | //ParcelPrim Categories | ||
397 | public const int PARCEL_COUNT_TOTAL = 0; | ||
398 | public const int PARCEL_COUNT_OWNER = 1; | ||
399 | public const int PARCEL_COUNT_GROUP = 2; | ||
400 | public const int PARCEL_COUNT_OTHER = 3; | ||
401 | public const int PARCEL_COUNT_SELECTED = 4; | ||
402 | public const int PARCEL_COUNT_TEMP = 5; | ||
403 | |||
404 | public const int DEBUG_CHANNEL = 0x7FFFFFFF; | ||
405 | public const int PUBLIC_CHANNEL = 0x00000000; | ||
406 | |||
407 | public const int OBJECT_NAME = 1; | ||
408 | public const int OBJECT_DESC = 2; | ||
409 | public const int OBJECT_POS = 3; | ||
410 | public const int OBJECT_ROT = 4; | ||
411 | public const int OBJECT_VELOCITY = 5; | ||
412 | public const int OBJECT_OWNER = 6; | ||
413 | public const int OBJECT_GROUP = 7; | ||
414 | public const int OBJECT_CREATOR = 8; | ||
415 | |||
416 | // Can not be public const? | ||
417 | public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0); | ||
418 | public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0); | ||
419 | |||
420 | } | ||
421 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/BuiltIn_Commands_BaseClass.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index fc9f8fc..7b3907f 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/BuiltIn_Commands_BaseClass.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs | |||
@@ -31,100 +31,25 @@ using System.Threading; | |||
31 | using System.Reflection; | 31 | using System.Reflection; |
32 | using System.Collections; | 32 | using System.Collections; |
33 | using System.Collections.Generic; | 33 | using System.Collections.Generic; |
34 | using OpenSim.Region.Environment.Interfaces; | 34 | using OpenSim.Region.ScriptEngine.Interfaces; |
35 | using integer = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.LSLInteger; | 35 | using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; |
36 | using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; | ||
36 | using key = System.String; | 37 | using key = System.String; |
37 | using vector = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.Vector3; | 38 | using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; |
38 | using rotation = OpenSim.Region.ScriptEngine.XEngine.Script.LSL_Types.Quaternion; | 39 | using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; |
39 | 40 | ||
40 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 41 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase |
41 | { | 42 | { |
42 | public class BuiltIn_Commands_BaseClass : MarshalByRefObject, IOSSL_ScriptCommands, ILSL_ScriptCommands, IScript | 43 | public partial class ScriptBaseClass : MarshalByRefObject |
43 | { | 44 | { |
44 | //private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | 45 | public ILSL_Api m_LSL_Functions; |
45 | 46 | ||
46 | // Object never expires | 47 | public void ApiTypeLSL(IScriptApi api) |
47 | public override Object InitializeLifetimeService() | ||
48 | { | 48 | { |
49 | //Console.WriteLine("LSL_BaseClass: InitializeLifetimeService()"); | 49 | if(!(api is ILSL_Api)) |
50 | // return null; | 50 | return; |
51 | ILease lease = (ILease)base.InitializeLifetimeService(); | ||
52 | 51 | ||
53 | if (lease.CurrentState == LeaseState.Initial) | 52 | m_LSL_Functions = (ILSL_Api)api; |
54 | { | ||
55 | lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1); | ||
56 | //lease.SponsorshipTimeout = TimeSpan.FromMinutes(2); | ||
57 | //lease.RenewOnCallTime = TimeSpan.FromSeconds(2); | ||
58 | } | ||
59 | return lease; | ||
60 | } | ||
61 | |||
62 | public ILSL_ScriptCommands m_LSL_Functions; | ||
63 | public IOSSL_ScriptCommands m_OSSL_Functions; | ||
64 | |||
65 | public BuiltIn_Commands_BaseClass() | ||
66 | { | ||
67 | } | ||
68 | |||
69 | public Type Start(ILSL_ScriptCommands LSL_Functions, IOSSL_ScriptCommands OSSL_Functions) | ||
70 | { | ||
71 | m_LSL_Functions = LSL_Functions; | ||
72 | m_OSSL_Functions = OSSL_Functions; | ||
73 | m_InitialValues=GetVars(); | ||
74 | return GetType(); | ||
75 | } | ||
76 | |||
77 | private Dictionary<string, object> m_InitialValues = | ||
78 | new Dictionary<string, object>(); | ||
79 | private Dictionary<string, FieldInfo> m_Fields = | ||
80 | new Dictionary<string, FieldInfo>(); | ||
81 | |||
82 | public Dictionary<string, object> GetVars() | ||
83 | { | ||
84 | Dictionary<string, object> vars = new Dictionary<string, object>(); | ||
85 | |||
86 | if (m_Fields == null) | ||
87 | return vars; | ||
88 | |||
89 | m_Fields.Clear(); | ||
90 | |||
91 | Type t = GetType(); | ||
92 | |||
93 | FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | | ||
94 | BindingFlags.Public | | ||
95 | BindingFlags.Instance | | ||
96 | BindingFlags.DeclaredOnly); | ||
97 | |||
98 | foreach (FieldInfo field in fields) | ||
99 | { | ||
100 | m_Fields[field.Name]=field; | ||
101 | |||
102 | vars[field.Name]=field.GetValue(this); | ||
103 | } | ||
104 | |||
105 | return vars; | ||
106 | } | ||
107 | |||
108 | public void SetVars(Dictionary<string, object> vars) | ||
109 | { | ||
110 | foreach (KeyValuePair<string, object> var in vars) | ||
111 | { | ||
112 | if (m_Fields.ContainsKey(var.Key)) | ||
113 | { | ||
114 | m_Fields[var.Key].SetValue(this, var.Value); | ||
115 | } | ||
116 | } | ||
117 | } | ||
118 | |||
119 | public void ResetVars() | ||
120 | { | ||
121 | SetVars(m_InitialValues); | ||
122 | } | ||
123 | |||
124 | public string State | ||
125 | { | ||
126 | get { return m_LSL_Functions.State; } | ||
127 | set { m_LSL_Functions.State = value; } | ||
128 | } | 53 | } |
129 | 54 | ||
130 | public void state(string newState) | 55 | public void state(string newState) |
@@ -132,26 +57,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
132 | m_LSL_Functions.state(newState); | 57 | m_LSL_Functions.state(newState); |
133 | } | 58 | } |
134 | 59 | ||
135 | public void llSay(int channelID, string text) | ||
136 | { | ||
137 | m_LSL_Functions.llSay(channelID, text); | ||
138 | } | ||
139 | |||
140 | // | ||
141 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
142 | // | 60 | // |
143 | // They are only forwarders to LSL_BuiltIn_Commands.cs | 61 | // Script functions |
144 | // | 62 | // |
145 | 63 | public void llSay(int channelID, string text) | |
146 | public ICommander GetCommander(string name) | ||
147 | { | 64 | { |
148 | return m_LSL_Functions.GetCommander(name); | 65 | m_LSL_Functions.llSay(channelID, text); |
149 | } | 66 | } |
150 | 67 | ||
151 | public double llSin(double f) | 68 | public double llSin(double f) |
152 | { | 69 | { |
153 | return m_LSL_Functions.llSin(f); | 70 | return m_LSL_Functions.llSin(f); |
154 | } | 71 | } |
72 | |||
155 | public double llCos(double f) | 73 | public double llCos(double f) |
156 | { | 74 | { |
157 | return m_LSL_Functions.llCos(f); | 75 | return m_LSL_Functions.llCos(f); |
@@ -262,9 +180,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
262 | m_LSL_Functions.llWhisper(channelID, text); | 180 | m_LSL_Functions.llWhisper(channelID, text); |
263 | } | 181 | } |
264 | 182 | ||
265 | // | ||
266 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
267 | // | ||
268 | public void llShout(int channelID, string text) | 183 | public void llShout(int channelID, string text) |
269 | { | 184 | { |
270 | m_LSL_Functions.llShout(channelID, text); | 185 | m_LSL_Functions.llShout(channelID, text); |
@@ -355,9 +270,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
355 | return m_LSL_Functions.llDetectedLinkNumber(number); | 270 | return m_LSL_Functions.llDetectedLinkNumber(number); |
356 | } | 271 | } |
357 | 272 | ||
358 | // | ||
359 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
360 | // | ||
361 | public void llDie() | 273 | public void llDie() |
362 | { | 274 | { |
363 | m_LSL_Functions.llDie(); | 275 | m_LSL_Functions.llDie(); |
@@ -443,9 +355,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
443 | return m_LSL_Functions.llGetTexture(face); | 355 | return m_LSL_Functions.llGetTexture(face); |
444 | } | 356 | } |
445 | 357 | ||
446 | // | ||
447 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
448 | // | ||
449 | public void llSetPos(vector pos) | 358 | public void llSetPos(vector pos) |
450 | { | 359 | { |
451 | m_LSL_Functions.llSetPos(pos); | 360 | m_LSL_Functions.llSetPos(pos); |
@@ -521,9 +430,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
521 | m_LSL_Functions.llApplyImpulse(force, local); | 430 | m_LSL_Functions.llApplyImpulse(force, local); |
522 | } | 431 | } |
523 | 432 | ||
524 | // | ||
525 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
526 | // | ||
527 | public void llApplyRotationalImpulse(vector force, int local) | 433 | public void llApplyRotationalImpulse(vector force, int local) |
528 | { | 434 | { |
529 | m_LSL_Functions.llApplyRotationalImpulse(force, local); | 435 | m_LSL_Functions.llApplyRotationalImpulse(force, local); |
@@ -614,9 +520,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
614 | m_LSL_Functions.llPlaySoundSlave(sound, volume); | 520 | m_LSL_Functions.llPlaySoundSlave(sound, volume); |
615 | } | 521 | } |
616 | 522 | ||
617 | // | ||
618 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
619 | // | ||
620 | public void llTriggerSound(string sound, double volume) | 523 | public void llTriggerSound(string sound, double volume) |
621 | { | 524 | { |
622 | m_LSL_Functions.llTriggerSound(sound, volume); | 525 | m_LSL_Functions.llTriggerSound(sound, volume); |
@@ -707,9 +610,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
707 | m_LSL_Functions.llSleep(sec); | 610 | m_LSL_Functions.llSleep(sec); |
708 | } | 611 | } |
709 | 612 | ||
710 | // | ||
711 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
712 | // | ||
713 | public double llGetMass() | 613 | public double llGetMass() |
714 | { | 614 | { |
715 | return m_LSL_Functions.llGetMass(); | 615 | return m_LSL_Functions.llGetMass(); |
@@ -805,9 +705,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
805 | m_LSL_Functions.llRotLookAt(target, strength, damping); | 705 | m_LSL_Functions.llRotLookAt(target, strength, damping); |
806 | } | 706 | } |
807 | 707 | ||
808 | // | ||
809 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
810 | // | ||
811 | public LSL_Types.LSLInteger llStringLength(string str) | 708 | public LSL_Types.LSLInteger llStringLength(string str) |
812 | { | 709 | { |
813 | return m_LSL_Functions.llStringLength(str); | 710 | return m_LSL_Functions.llStringLength(str); |
@@ -908,9 +805,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
908 | return m_LSL_Functions.llGetInventoryName(type, number); | 805 | return m_LSL_Functions.llGetInventoryName(type, number); |
909 | } | 806 | } |
910 | 807 | ||
911 | // | ||
912 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
913 | // | ||
914 | public void llSetScriptState(string name, int run) | 808 | public void llSetScriptState(string name, int run) |
915 | { | 809 | { |
916 | m_LSL_Functions.llSetScriptState(name, run); | 810 | m_LSL_Functions.llSetScriptState(name, run); |
@@ -1016,9 +910,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1016 | return m_LSL_Functions.llGetNumberOfSides(); | 910 | return m_LSL_Functions.llGetNumberOfSides(); |
1017 | } | 911 | } |
1018 | 912 | ||
1019 | // | ||
1020 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1021 | // | ||
1022 | public rotation llAxisAngle2Rot(vector axis, double angle) | 913 | public rotation llAxisAngle2Rot(vector axis, double angle) |
1023 | { | 914 | { |
1024 | return m_LSL_Functions.llAxisAngle2Rot(axis, angle); | 915 | return m_LSL_Functions.llAxisAngle2Rot(axis, angle); |
@@ -1104,9 +995,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1104 | return m_LSL_Functions.llGetListLength(src); | 995 | return m_LSL_Functions.llGetListLength(src); |
1105 | } | 996 | } |
1106 | 997 | ||
1107 | // | ||
1108 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1109 | // | ||
1110 | public LSL_Types.LSLInteger llList2Integer(LSL_Types.list src, int index) | 998 | public LSL_Types.LSLInteger llList2Integer(LSL_Types.list src, int index) |
1111 | { | 999 | { |
1112 | return m_LSL_Functions.llList2Integer(src, index); | 1000 | return m_LSL_Functions.llList2Integer(src, index); |
@@ -1207,9 +1095,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1207 | return m_LSL_Functions.llGetAgentInfo(id); | 1095 | return m_LSL_Functions.llGetAgentInfo(id); |
1208 | } | 1096 | } |
1209 | 1097 | ||
1210 | // | ||
1211 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1212 | // | ||
1213 | public void llAdjustSoundVolume(double volume) | 1098 | public void llAdjustSoundVolume(double volume) |
1214 | { | 1099 | { |
1215 | m_LSL_Functions.llAdjustSoundVolume(volume); | 1100 | m_LSL_Functions.llAdjustSoundVolume(volume); |
@@ -1320,9 +1205,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1320 | return m_LSL_Functions.llGetRegionFPS(); | 1205 | return m_LSL_Functions.llGetRegionFPS(); |
1321 | } | 1206 | } |
1322 | 1207 | ||
1323 | // | ||
1324 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1325 | // | ||
1326 | public void llParticleSystem(LSL_Types.list rules) | 1208 | public void llParticleSystem(LSL_Types.list rules) |
1327 | { | 1209 | { |
1328 | m_LSL_Functions.llParticleSystem(rules); | 1210 | m_LSL_Functions.llParticleSystem(rules); |
@@ -1453,9 +1335,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1453 | m_LSL_Functions.llRemoteLoadScriptPin(target, name, pin, running, start_param); | 1335 | m_LSL_Functions.llRemoteLoadScriptPin(target, name, pin, running, start_param); |
1454 | } | 1336 | } |
1455 | 1337 | ||
1456 | // | ||
1457 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1458 | // | ||
1459 | public void llOpenRemoteDataChannel() | 1338 | public void llOpenRemoteDataChannel() |
1460 | { | 1339 | { |
1461 | m_LSL_Functions.llOpenRemoteDataChannel(); | 1340 | m_LSL_Functions.llOpenRemoteDataChannel(); |
@@ -1590,9 +1469,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1590 | return m_LSL_Functions.llGetPrimitiveParams(rules); | 1469 | return m_LSL_Functions.llGetPrimitiveParams(rules); |
1591 | } | 1470 | } |
1592 | 1471 | ||
1593 | // | ||
1594 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1595 | // | ||
1596 | public string llIntegerToBase64(int number) | 1472 | public string llIntegerToBase64(int number) |
1597 | { | 1473 | { |
1598 | return m_LSL_Functions.llIntegerToBase64(number); | 1474 | return m_LSL_Functions.llIntegerToBase64(number); |
@@ -1698,9 +1574,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1698 | return m_LSL_Functions.llModPow(a, b, c); | 1574 | return m_LSL_Functions.llModPow(a, b, c); |
1699 | } | 1575 | } |
1700 | 1576 | ||
1701 | // | ||
1702 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1703 | // | ||
1704 | public LSL_Types.LSLInteger llGetInventoryType(string name) | 1577 | public LSL_Types.LSLInteger llGetInventoryType(string name) |
1705 | { | 1578 | { |
1706 | return m_LSL_Functions.llGetInventoryType(name); | 1579 | return m_LSL_Functions.llGetInventoryType(name); |
@@ -1826,9 +1699,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1826 | return m_LSL_Functions.llGetObjectPrimCount(object_id); | 1699 | return m_LSL_Functions.llGetObjectPrimCount(object_id); |
1827 | } | 1700 | } |
1828 | 1701 | ||
1829 | // | ||
1830 | // DO NOT MODIFY HERE: MODIFY IN LSL_BuiltIn_Commands.cs | ||
1831 | // | ||
1832 | public LSL_Types.LSLInteger llGetParcelMaxPrims(vector pos, int sim_wide) | 1702 | public LSL_Types.LSLInteger llGetParcelMaxPrims(vector pos, int sim_wide) |
1833 | { | 1703 | { |
1834 | return m_LSL_Functions.llGetParcelMaxPrims(pos, sim_wide); | 1704 | return m_LSL_Functions.llGetParcelMaxPrims(pos, sim_wide); |
@@ -1858,540 +1728,5 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1858 | { | 1728 | { |
1859 | return m_LSL_Functions.llList2Float(src, index); | 1729 | return m_LSL_Functions.llList2Float(src, index); |
1860 | } | 1730 | } |
1861 | |||
1862 | // LSL CONSTANTS | ||
1863 | public const int TRUE = 1; | ||
1864 | public const int FALSE = 0; | ||
1865 | |||
1866 | public const int STATUS_PHYSICS = 1; | ||
1867 | public const int STATUS_ROTATE_X = 2; | ||
1868 | public const int STATUS_ROTATE_Y = 4; | ||
1869 | public const int STATUS_ROTATE_Z = 8; | ||
1870 | public const int STATUS_PHANTOM = 16; | ||
1871 | public const int STATUS_SANDBOX = 32; | ||
1872 | public const int STATUS_BLOCK_GRAB = 64; | ||
1873 | public const int STATUS_DIE_AT_EDGE = 128; | ||
1874 | public const int STATUS_RETURN_AT_EDGE = 256; | ||
1875 | public const int STATUS_CAST_SHADOWS = 512; | ||
1876 | |||
1877 | public const int AGENT = 1; | ||
1878 | public const int ACTIVE = 2; | ||
1879 | public const int PASSIVE = 4; | ||
1880 | public const int SCRIPTED = 8; | ||
1881 | |||
1882 | public const int CONTROL_FWD = 1; | ||
1883 | public const int CONTROL_BACK = 2; | ||
1884 | public const int CONTROL_LEFT = 4; | ||
1885 | public const int CONTROL_RIGHT = 8; | ||
1886 | public const int CONTROL_UP = 16; | ||
1887 | public const int CONTROL_DOWN = 32; | ||
1888 | public const int CONTROL_ROT_LEFT = 256; | ||
1889 | public const int CONTROL_ROT_RIGHT = 512; | ||
1890 | public const int CONTROL_LBUTTON = 268435456; | ||
1891 | public const int CONTROL_ML_LBUTTON = 1073741824; | ||
1892 | |||
1893 | //Permissions | ||
1894 | public const int PERMISSION_DEBIT = 2; | ||
1895 | public const int PERMISSION_TAKE_CONTROLS = 4; | ||
1896 | public const int PERMISSION_REMAP_CONTROLS = 8; | ||
1897 | public const int PERMISSION_TRIGGER_ANIMATION = 16; | ||
1898 | public const int PERMISSION_ATTACH = 32; | ||
1899 | public const int PERMISSION_RELEASE_OWNERSHIP = 64; | ||
1900 | public const int PERMISSION_CHANGE_LINKS = 128; | ||
1901 | public const int PERMISSION_CHANGE_JOINTS = 256; | ||
1902 | public const int PERMISSION_CHANGE_PERMISSIONS = 512; | ||
1903 | public const int PERMISSION_TRACK_CAMERA = 1024; | ||
1904 | |||
1905 | public const int AGENT_FLYING = 1; | ||
1906 | public const int AGENT_ATTACHMENTS = 2; | ||
1907 | public const int AGENT_SCRIPTED = 4; | ||
1908 | public const int AGENT_MOUSELOOK = 8; | ||
1909 | public const int AGENT_SITTING = 16; | ||
1910 | public const int AGENT_ON_OBJECT = 32; | ||
1911 | public const int AGENT_AWAY = 64; | ||
1912 | public const int AGENT_WALKING = 128; | ||
1913 | public const int AGENT_IN_AIR = 256; | ||
1914 | public const int AGENT_TYPING = 512; | ||
1915 | public const int AGENT_CROUCHING = 1024; | ||
1916 | public const int AGENT_BUSY = 2048; | ||
1917 | public const int AGENT_ALWAYS_RUN = 4096; | ||
1918 | |||
1919 | //Particle Systems | ||
1920 | public const int PSYS_PART_INTERP_COLOR_MASK = 1; | ||
1921 | public const int PSYS_PART_INTERP_SCALE_MASK = 2; | ||
1922 | public const int PSYS_PART_BOUNCE_MASK = 4; | ||
1923 | public const int PSYS_PART_WIND_MASK = 8; | ||
1924 | public const int PSYS_PART_FOLLOW_SRC_MASK = 16; | ||
1925 | public const int PSYS_PART_FOLLOW_VELOCITY_MASK = 32; | ||
1926 | public const int PSYS_PART_TARGET_POS_MASK = 64; | ||
1927 | public const int PSYS_PART_TARGET_LINEAR_MASK = 128; | ||
1928 | public const int PSYS_PART_EMISSIVE_MASK = 256; | ||
1929 | public const int PSYS_PART_FLAGS = 0; | ||
1930 | public const int PSYS_PART_START_COLOR = 1; | ||
1931 | public const int PSYS_PART_START_ALPHA = 2; | ||
1932 | public const int PSYS_PART_END_COLOR = 3; | ||
1933 | public const int PSYS_PART_END_ALPHA = 4; | ||
1934 | public const int PSYS_PART_START_SCALE = 5; | ||
1935 | public const int PSYS_PART_END_SCALE = 6; | ||
1936 | public const int PSYS_PART_MAX_AGE = 7; | ||
1937 | public const int PSYS_SRC_ACCEL = 8; | ||
1938 | public const int PSYS_SRC_PATTERN = 9; | ||
1939 | public const int PSYS_SRC_INNERANGLE = 10; | ||
1940 | public const int PSYS_SRC_OUTERANGLE = 11; | ||
1941 | public const int PSYS_SRC_TEXTURE = 12; | ||
1942 | public const int PSYS_SRC_BURST_RATE = 13; | ||
1943 | public const int PSYS_SRC_BURST_PART_COUNT = 15; | ||
1944 | public const int PSYS_SRC_BURST_RADIUS = 16; | ||
1945 | public const int PSYS_SRC_BURST_SPEED_MIN = 17; | ||
1946 | public const int PSYS_SRC_BURST_SPEED_MAX = 18; | ||
1947 | public const int PSYS_SRC_MAX_AGE = 19; | ||
1948 | public const int PSYS_SRC_TARGET_KEY = 20; | ||
1949 | public const int PSYS_SRC_OMEGA = 21; | ||
1950 | public const int PSYS_SRC_ANGLE_BEGIN = 22; | ||
1951 | public const int PSYS_SRC_ANGLE_END = 23; | ||
1952 | public const int PSYS_SRC_PATTERN_DROP = 1; | ||
1953 | public const int PSYS_SRC_PATTERN_EXPLODE = 2; | ||
1954 | public const int PSYS_SRC_PATTERN_ANGLE = 4; | ||
1955 | public const int PSYS_SRC_PATTERN_ANGLE_CONE = 8; | ||
1956 | public const int PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY = 16; | ||
1957 | |||
1958 | public const int VEHICLE_TYPE_NONE = 0; | ||
1959 | public const int VEHICLE_TYPE_SLED = 1; | ||
1960 | public const int VEHICLE_TYPE_CAR = 2; | ||
1961 | public const int VEHICLE_TYPE_BOAT = 3; | ||
1962 | public const int VEHICLE_TYPE_AIRPLANE = 4; | ||
1963 | public const int VEHICLE_TYPE_BALLOON = 5; | ||
1964 | public const int VEHICLE_LINEAR_FRICTION_TIMESCALE = 16; | ||
1965 | public const int VEHICLE_ANGULAR_FRICTION_TIMESCALE = 17; | ||
1966 | public const int VEHICLE_LINEAR_MOTOR_DIRECTION = 18; | ||
1967 | public const int VEHICLE_LINEAR_MOTOR_OFFSET = 20; | ||
1968 | public const int VEHICLE_ANGULAR_MOTOR_DIRECTION = 19; | ||
1969 | public const int VEHICLE_HOVER_HEIGHT = 24; | ||
1970 | public const int VEHICLE_HOVER_EFFICIENCY = 25; | ||
1971 | public const int VEHICLE_HOVER_TIMESCALE = 26; | ||
1972 | public const int VEHICLE_BUOYANCY = 27; | ||
1973 | public const int VEHICLE_LINEAR_DEFLECTION_EFFICIENCY = 28; | ||
1974 | public const int VEHICLE_LINEAR_DEFLECTION_TIMESCALE = 29; | ||
1975 | public const int VEHICLE_LINEAR_MOTOR_TIMESCALE = 30; | ||
1976 | public const int VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE = 31; | ||
1977 | public const int VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY = 32; | ||
1978 | public const int VEHICLE_ANGULAR_DEFLECTION_TIMESCALE = 33; | ||
1979 | public const int VEHICLE_ANGULAR_MOTOR_TIMESCALE = 34; | ||
1980 | public const int VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE = 35; | ||
1981 | public const int VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY = 36; | ||
1982 | public const int VEHICLE_VERTICAL_ATTRACTION_TIMESCALE = 37; | ||
1983 | public const int VEHICLE_BANKING_EFFICIENCY = 38; | ||
1984 | public const int VEHICLE_BANKING_MIX = 39; | ||
1985 | public const int VEHICLE_BANKING_TIMESCALE = 40; | ||
1986 | public const int VEHICLE_REFERENCE_FRAME = 44; | ||
1987 | public const int VEHICLE_FLAG_NO_DEFLECTION_UP = 1; | ||
1988 | public const int VEHICLE_FLAG_LIMIT_ROLL_ONLY = 2; | ||
1989 | public const int VEHICLE_FLAG_HOVER_WATER_ONLY = 4; | ||
1990 | public const int VEHICLE_FLAG_HOVER_TERRAIN_ONLY = 8; | ||
1991 | public const int VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT = 16; | ||
1992 | public const int VEHICLE_FLAG_HOVER_UP_ONLY = 32; | ||
1993 | public const int VEHICLE_FLAG_LIMIT_MOTOR_UP = 64; | ||
1994 | public const int VEHICLE_FLAG_MOUSELOOK_STEER = 128; | ||
1995 | public const int VEHICLE_FLAG_MOUSELOOK_BANK = 256; | ||
1996 | public const int VEHICLE_FLAG_CAMERA_DECOUPLED = 512; | ||
1997 | |||
1998 | public const int INVENTORY_ALL = -1; | ||
1999 | public const int INVENTORY_NONE = -1; | ||
2000 | public const int INVENTORY_TEXTURE = 0; | ||
2001 | public const int INVENTORY_SOUND = 1; | ||
2002 | public const int INVENTORY_LANDMARK = 3; | ||
2003 | public const int INVENTORY_CLOTHING = 5; | ||
2004 | public const int INVENTORY_OBJECT = 6; | ||
2005 | public const int INVENTORY_NOTECARD = 7; | ||
2006 | public const int INVENTORY_SCRIPT = 10; | ||
2007 | public const int INVENTORY_BODYPART = 13; | ||
2008 | public const int INVENTORY_ANIMATION = 20; | ||
2009 | public const int INVENTORY_GESTURE = 21; | ||
2010 | |||
2011 | public const int ATTACH_CHEST = 1; | ||
2012 | public const int ATTACH_HEAD = 2; | ||
2013 | public const int ATTACH_LSHOULDER = 3; | ||
2014 | public const int ATTACH_RSHOULDER = 4; | ||
2015 | public const int ATTACH_LHAND = 5; | ||
2016 | public const int ATTACH_RHAND = 6; | ||
2017 | public const int ATTACH_LFOOT = 7; | ||
2018 | public const int ATTACH_RFOOT = 8; | ||
2019 | public const int ATTACH_BACK = 9; | ||
2020 | public const int ATTACH_PELVIS = 10; | ||
2021 | public const int ATTACH_MOUTH = 11; | ||
2022 | public const int ATTACH_CHIN = 12; | ||
2023 | public const int ATTACH_LEAR = 13; | ||
2024 | public const int ATTACH_REAR = 14; | ||
2025 | public const int ATTACH_LEYE = 15; | ||
2026 | public const int ATTACH_REYE = 16; | ||
2027 | public const int ATTACH_NOSE = 17; | ||
2028 | public const int ATTACH_RUARM = 18; | ||
2029 | public const int ATTACH_RLARM = 19; | ||
2030 | public const int ATTACH_LUARM = 20; | ||
2031 | public const int ATTACH_LLARM = 21; | ||
2032 | public const int ATTACH_RHIP = 22; | ||
2033 | public const int ATTACH_RULEG = 23; | ||
2034 | public const int ATTACH_RLLEG = 24; | ||
2035 | public const int ATTACH_LHIP = 25; | ||
2036 | public const int ATTACH_LULEG = 26; | ||
2037 | public const int ATTACH_LLLEG = 27; | ||
2038 | public const int ATTACH_BELLY = 28; | ||
2039 | public const int ATTACH_RPEC = 29; | ||
2040 | public const int ATTACH_LPEC = 30; | ||
2041 | |||
2042 | public const int LAND_LEVEL = 0; | ||
2043 | public const int LAND_RAISE = 1; | ||
2044 | public const int LAND_LOWER = 2; | ||
2045 | public const int LAND_SMOOTH = 3; | ||
2046 | public const int LAND_NOISE = 4; | ||
2047 | public const int LAND_REVERT = 5; | ||
2048 | public const int LAND_SMALL_BRUSH = 1; | ||
2049 | public const int LAND_MEDIUM_BRUSH = 2; | ||
2050 | public const int LAND_LARGE_BRUSH = 3; | ||
2051 | |||
2052 | //Agent Dataserver | ||
2053 | public const int DATA_ONLINE = 1; | ||
2054 | public const int DATA_NAME = 2; | ||
2055 | public const int DATA_BORN = 3; | ||
2056 | public const int DATA_RATING = 4; | ||
2057 | public const int DATA_SIM_POS = 5; | ||
2058 | public const int DATA_SIM_STATUS = 6; | ||
2059 | public const int DATA_SIM_RATING = 7; | ||
2060 | public const int DATA_PAYINFO = 8; | ||
2061 | |||
2062 | public const int ANIM_ON = 1; | ||
2063 | public const int LOOP = 2; | ||
2064 | public const int REVERSE = 4; | ||
2065 | public const int PING_PONG = 8; | ||
2066 | public const int SMOOTH = 16; | ||
2067 | public const int ROTATE = 32; | ||
2068 | public const int SCALE = 64; | ||
2069 | public const int ALL_SIDES = -1; | ||
2070 | public const int LINK_SET = -1; | ||
2071 | public const int LINK_ROOT = 1; | ||
2072 | public const int LINK_ALL_OTHERS = -2; | ||
2073 | public const int LINK_ALL_CHILDREN = -3; | ||
2074 | public const int LINK_THIS = -4; | ||
2075 | public const int CHANGED_INVENTORY = 1; | ||
2076 | public const int CHANGED_COLOR = 2; | ||
2077 | public const int CHANGED_SHAPE = 4; | ||
2078 | public const int CHANGED_SCALE = 8; | ||
2079 | public const int CHANGED_TEXTURE = 16; | ||
2080 | public const int CHANGED_LINK = 32; | ||
2081 | public const int CHANGED_ALLOWED_DROP = 64; | ||
2082 | public const int CHANGED_OWNER = 128; | ||
2083 | public const int CHANGED_REGION_RESTART = 256; | ||
2084 | public const int TYPE_INVALID = 0; | ||
2085 | public const int TYPE_INTEGER = 1; | ||
2086 | public const int TYPE_double = 2; | ||
2087 | public const int TYPE_STRING = 3; | ||
2088 | public const int TYPE_KEY = 4; | ||
2089 | public const int TYPE_VECTOR = 5; | ||
2090 | public const int TYPE_ROTATION = 6; | ||
2091 | |||
2092 | //XML RPC Remote Data Channel | ||
2093 | public const int REMOTE_DATA_CHANNEL = 1; | ||
2094 | public const int REMOTE_DATA_REQUEST = 2; | ||
2095 | public const int REMOTE_DATA_REPLY = 3; | ||
2096 | |||
2097 | //llHTTPRequest | ||
2098 | public const int HTTP_METHOD = 0; | ||
2099 | public const int HTTP_MIMETYPE = 1; | ||
2100 | public const int HTTP_BODY_MAXLENGTH = 2; | ||
2101 | public const int HTTP_VERIFY_CERT = 3; | ||
2102 | |||
2103 | public const int PRIM_MATERIAL = 2; | ||
2104 | public const int PRIM_PHYSICS = 3; | ||
2105 | public const int PRIM_TEMP_ON_REZ = 4; | ||
2106 | public const int PRIM_PHANTOM = 5; | ||
2107 | public const int PRIM_POSITION = 6; | ||
2108 | public const int PRIM_SIZE = 7; | ||
2109 | public const int PRIM_ROTATION = 8; | ||
2110 | public const int PRIM_TYPE = 9; | ||
2111 | public const int PRIM_TEXTURE = 17; | ||
2112 | public const int PRIM_COLOR = 18; | ||
2113 | public const int PRIM_BUMP_SHINY = 19; | ||
2114 | public const int PRIM_FULLBRIGHT = 20; | ||
2115 | public const int PRIM_FLEXIBLE = 21; | ||
2116 | public const int PRIM_TEXGEN = 22; | ||
2117 | public const int PRIM_CAST_SHADOWS = 24; // Not implemented, here for completeness sake | ||
2118 | public const int PRIM_POINT_LIGHT = 23; // Huh? | ||
2119 | public const int PRIM_TEXGEN_DEFAULT = 0; | ||
2120 | public const int PRIM_TEXGEN_PLANAR = 1; | ||
2121 | |||
2122 | public const int PRIM_TYPE_BOX = 0; | ||
2123 | public const int PRIM_TYPE_CYLINDER = 1; | ||
2124 | public const int PRIM_TYPE_PRISM = 2; | ||
2125 | public const int PRIM_TYPE_SPHERE = 3; | ||
2126 | public const int PRIM_TYPE_TORUS = 4; | ||
2127 | public const int PRIM_TYPE_TUBE = 5; | ||
2128 | public const int PRIM_TYPE_RING = 6; | ||
2129 | public const int PRIM_TYPE_SCULPT = 7; | ||
2130 | |||
2131 | public const int PRIM_HOLE_DEFAULT = 0; | ||
2132 | public const int PRIM_HOLE_CIRCLE = 16; | ||
2133 | public const int PRIM_HOLE_SQUARE = 32; | ||
2134 | public const int PRIM_HOLE_TRIANGLE = 48; | ||
2135 | |||
2136 | public const int PRIM_MATERIAL_STONE = 0; | ||
2137 | public const int PRIM_MATERIAL_METAL = 1; | ||
2138 | public const int PRIM_MATERIAL_GLASS = 2; | ||
2139 | public const int PRIM_MATERIAL_WOOD = 3; | ||
2140 | public const int PRIM_MATERIAL_FLESH = 4; | ||
2141 | public const int PRIM_MATERIAL_PLASTIC = 5; | ||
2142 | public const int PRIM_MATERIAL_RUBBER = 6; | ||
2143 | public const int PRIM_MATERIAL_LIGHT = 7; | ||
2144 | |||
2145 | public const int PRIM_SHINY_NONE = 0; | ||
2146 | public const int PRIM_SHINY_LOW = 1; | ||
2147 | public const int PRIM_SHINY_MEDIUM = 2; | ||
2148 | public const int PRIM_SHINY_HIGH = 3; | ||
2149 | public const int PRIM_BUMP_NONE = 0; | ||
2150 | public const int PRIM_BUMP_BRIGHT = 1; | ||
2151 | public const int PRIM_BUMP_DARK = 2; | ||
2152 | public const int PRIM_BUMP_WOOD = 3; | ||
2153 | public const int PRIM_BUMP_BARK = 4; | ||
2154 | public const int PRIM_BUMP_BRICKS = 5; | ||
2155 | public const int PRIM_BUMP_CHECKER = 6; | ||
2156 | public const int PRIM_BUMP_CONCRETE = 7; | ||
2157 | public const int PRIM_BUMP_TILE = 8; | ||
2158 | public const int PRIM_BUMP_STONE = 9; | ||
2159 | public const int PRIM_BUMP_DISKS = 10; | ||
2160 | public const int PRIM_BUMP_GRAVEL = 11; | ||
2161 | public const int PRIM_BUMP_BLOBS = 12; | ||
2162 | public const int PRIM_BUMP_SIDING = 13; | ||
2163 | public const int PRIM_BUMP_LARGETILE = 14; | ||
2164 | public const int PRIM_BUMP_STUCCO = 15; | ||
2165 | public const int PRIM_BUMP_SUCTION = 16; | ||
2166 | public const int PRIM_BUMP_WEAVE = 17; | ||
2167 | |||
2168 | public const int PRIM_SCULPT_TYPE_SPHERE = 1; | ||
2169 | public const int PRIM_SCULPT_TYPE_TORUS = 2; | ||
2170 | public const int PRIM_SCULPT_TYPE_PLANE = 3; | ||
2171 | public const int PRIM_SCULPT_TYPE_CYLINDER = 4; | ||
2172 | |||
2173 | public const int MASK_BASE = 0; | ||
2174 | public const int MASK_OWNER = 1; | ||
2175 | public const int MASK_GROUP = 2; | ||
2176 | public const int MASK_EVERYONE = 3; | ||
2177 | public const int MASK_NEXT = 4; | ||
2178 | |||
2179 | public const int PERM_TRANSFER = 8192; | ||
2180 | public const int PERM_MODIFY = 16384; | ||
2181 | public const int PERM_COPY = 32768; | ||
2182 | public const int PERM_MOVE = 524288; | ||
2183 | public const int PERM_ALL = 2147483647; | ||
2184 | |||
2185 | public const int PARCEL_MEDIA_COMMAND_STOP = 0; | ||
2186 | public const int PARCEL_MEDIA_COMMAND_PAUSE = 1; | ||
2187 | public const int PARCEL_MEDIA_COMMAND_PLAY = 2; | ||
2188 | public const int PARCEL_MEDIA_COMMAND_LOOP = 3; | ||
2189 | public const int PARCEL_MEDIA_COMMAND_TEXTURE = 4; | ||
2190 | public const int PARCEL_MEDIA_COMMAND_URL = 5; | ||
2191 | public const int PARCEL_MEDIA_COMMAND_TIME = 6; | ||
2192 | public const int PARCEL_MEDIA_COMMAND_AGENT = 7; | ||
2193 | public const int PARCEL_MEDIA_COMMAND_UNLOAD = 8; | ||
2194 | public const int PARCEL_MEDIA_COMMAND_AUTO_ALIGN = 9; | ||
2195 | |||
2196 | public const int PAY_HIDE = -1; | ||
2197 | public const int PAY_DEFAULT = -2; | ||
2198 | |||
2199 | public const string NULL_KEY = "00000000-0000-0000-0000-000000000000"; | ||
2200 | public const string EOF = "\n\n\n"; | ||
2201 | public const double PI = 3.14159274f; | ||
2202 | public const double TWO_PI = 6.28318548f; | ||
2203 | public const double PI_BY_TWO = 1.57079637f; | ||
2204 | public const double DEG_TO_RAD = 0.01745329238f; | ||
2205 | public const double RAD_TO_DEG = 57.29578f; | ||
2206 | public const double SQRT2 = 1.414213538f; | ||
2207 | public const int STRING_TRIM_HEAD = 1; | ||
2208 | public const int STRING_TRIM_TAIL = 2; | ||
2209 | public const int STRING_TRIM = 3; | ||
2210 | public const int LIST_STAT_RANGE = 0; | ||
2211 | public const int LIST_STAT_MIN = 1; | ||
2212 | public const int LIST_STAT_MAX = 2; | ||
2213 | public const int LIST_STAT_MEAN = 3; | ||
2214 | public const int LIST_STAT_MEDIAN = 4; | ||
2215 | public const int LIST_STAT_STD_DEV = 5; | ||
2216 | public const int LIST_STAT_SUM = 6; | ||
2217 | public const int LIST_STAT_SUM_SQUARES = 7; | ||
2218 | public const int LIST_STAT_NUM_COUNT = 8; | ||
2219 | public const int LIST_STAT_GEOMETRIC_MEAN = 9; | ||
2220 | public const int LIST_STAT_HARMONIC_MEAN = 100; | ||
2221 | |||
2222 | //ParcelPrim Categories | ||
2223 | public const int PARCEL_COUNT_TOTAL = 0; | ||
2224 | public const int PARCEL_COUNT_OWNER = 1; | ||
2225 | public const int PARCEL_COUNT_GROUP = 2; | ||
2226 | public const int PARCEL_COUNT_OTHER = 3; | ||
2227 | public const int PARCEL_COUNT_SELECTED = 4; | ||
2228 | public const int PARCEL_COUNT_TEMP = 5; | ||
2229 | |||
2230 | public const int DEBUG_CHANNEL = 0x7FFFFFFF; | ||
2231 | public const int PUBLIC_CHANNEL = 0x00000000; | ||
2232 | |||
2233 | public const int OBJECT_NAME = 1; | ||
2234 | public const int OBJECT_DESC = 2; | ||
2235 | public const int OBJECT_POS = 3; | ||
2236 | public const int OBJECT_ROT = 4; | ||
2237 | public const int OBJECT_VELOCITY = 5; | ||
2238 | public const int OBJECT_OWNER = 6; | ||
2239 | public const int OBJECT_GROUP = 7; | ||
2240 | public const int OBJECT_CREATOR = 8; | ||
2241 | |||
2242 | // Can not be public const? | ||
2243 | public vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0); | ||
2244 | public rotation ZERO_ROTATION = new rotation(0.0, 0, 0.0, 1.0); | ||
2245 | |||
2246 | |||
2247 | // | ||
2248 | // OSSL | ||
2249 | // | ||
2250 | // FIXME: Refactor so we don't need to pull the script engine | ||
2251 | // into the app domain | ||
2252 | // | ||
2253 | |||
2254 | public void osSetRegionWaterHeight(double height) | ||
2255 | { | ||
2256 | m_OSSL_Functions.osSetRegionWaterHeight(height); | ||
2257 | } | ||
2258 | |||
2259 | public double osList2Double(LSL_Types.list src, int index) | ||
2260 | { | ||
2261 | return m_OSSL_Functions.osList2Double(src, index); | ||
2262 | } | ||
2263 | |||
2264 | public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, | ||
2265 | int timer) | ||
2266 | { | ||
2267 | return m_OSSL_Functions.osSetDynamicTextureURL(dynamicID, contentType, url, extraParams, timer); | ||
2268 | } | ||
2269 | |||
2270 | public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, | ||
2271 | int timer) | ||
2272 | { | ||
2273 | return m_OSSL_Functions.osSetDynamicTextureData(dynamicID, contentType, data, extraParams, timer); | ||
2274 | } | ||
2275 | |||
2276 | public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, | ||
2277 | int timer, int alpha) | ||
2278 | { | ||
2279 | return m_OSSL_Functions.osSetDynamicTextureURLBlend(dynamicID, contentType, url, extraParams, timer, alpha); | ||
2280 | } | ||
2281 | |||
2282 | public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, | ||
2283 | int timer, int alpha) | ||
2284 | { | ||
2285 | return m_OSSL_Functions.osSetDynamicTextureDataBlend(dynamicID, contentType, data, extraParams, timer, alpha); | ||
2286 | } | ||
2287 | |||
2288 | public double osTerrainGetHeight(int x, int y) | ||
2289 | { | ||
2290 | return m_OSSL_Functions.osTerrainGetHeight(x, y); | ||
2291 | } | ||
2292 | |||
2293 | public int osTerrainSetHeight(int x, int y, double val) | ||
2294 | { | ||
2295 | return m_OSSL_Functions.osTerrainSetHeight(x, y, val); | ||
2296 | } | ||
2297 | |||
2298 | public int osRegionRestart(double seconds) | ||
2299 | { | ||
2300 | return m_OSSL_Functions.osRegionRestart(seconds); | ||
2301 | } | ||
2302 | |||
2303 | public void osRegionNotice(string msg) | ||
2304 | { | ||
2305 | m_OSSL_Functions.osRegionNotice(msg); | ||
2306 | } | ||
2307 | |||
2308 | public bool osConsoleCommand(string Command) | ||
2309 | { | ||
2310 | return m_OSSL_Functions.osConsoleCommand(Command); | ||
2311 | } | ||
2312 | |||
2313 | public void osSetParcelMediaURL(string url) | ||
2314 | { | ||
2315 | m_OSSL_Functions.osSetParcelMediaURL(url); | ||
2316 | } | ||
2317 | |||
2318 | public void osSetPrimFloatOnWater(int floatYN) | ||
2319 | { | ||
2320 | m_OSSL_Functions.osSetPrimFloatOnWater(floatYN); | ||
2321 | } | ||
2322 | |||
2323 | // Animation Functions | ||
2324 | |||
2325 | public void osAvatarPlayAnimation(string avatar, string animation) | ||
2326 | { | ||
2327 | m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation); | ||
2328 | } | ||
2329 | |||
2330 | public void osAvatarStopAnimation(string avatar, string animation) | ||
2331 | { | ||
2332 | m_OSSL_Functions.osAvatarStopAnimation(avatar, animation); | ||
2333 | } | ||
2334 | |||
2335 | |||
2336 | //Texture Draw functions | ||
2337 | |||
2338 | public string osMovePen(string drawList, int x, int y) | ||
2339 | { | ||
2340 | return m_OSSL_Functions.osMovePen(drawList, x, y); | ||
2341 | } | ||
2342 | |||
2343 | public string osDrawLine(string drawList, int startX, int startY, int endX, int endY) | ||
2344 | { | ||
2345 | return m_OSSL_Functions.osDrawLine(drawList, startX, startY, endX, endY); | ||
2346 | } | ||
2347 | |||
2348 | public string osDrawLine(string drawList, int endX, int endY) | ||
2349 | { | ||
2350 | return m_OSSL_Functions.osDrawLine(drawList, endX, endY); | ||
2351 | } | ||
2352 | |||
2353 | public string osDrawText(string drawList, string text) | ||
2354 | { | ||
2355 | return m_OSSL_Functions.osDrawText(drawList, text); | ||
2356 | } | ||
2357 | |||
2358 | public string osDrawEllipse(string drawList, int width, int height) | ||
2359 | { | ||
2360 | return m_OSSL_Functions.osDrawEllipse(drawList, width, height); | ||
2361 | } | ||
2362 | |||
2363 | public string osDrawRectangle(string drawList, int width, int height) | ||
2364 | { | ||
2365 | return m_OSSL_Functions.osDrawRectangle(drawList, width, height); | ||
2366 | } | ||
2367 | |||
2368 | public string osDrawFilledRectangle(string drawList, int width, int height) | ||
2369 | { | ||
2370 | return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height); | ||
2371 | } | ||
2372 | |||
2373 | public string osSetFontSize(string drawList, int fontSize) | ||
2374 | { | ||
2375 | return m_OSSL_Functions.osSetFontSize(drawList, fontSize); | ||
2376 | } | ||
2377 | |||
2378 | public string osSetPenSize(string drawList, int penSize) | ||
2379 | { | ||
2380 | return m_OSSL_Functions.osSetPenSize(drawList, penSize); | ||
2381 | } | ||
2382 | |||
2383 | public string osSetPenColour(string drawList, string colour) | ||
2384 | { | ||
2385 | return m_OSSL_Functions.osSetPenColour(drawList, colour); | ||
2386 | } | ||
2387 | |||
2388 | public string osDrawImage(string drawList, int width, int height, string imageUrl) | ||
2389 | { | ||
2390 | return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl); | ||
2391 | } | ||
2392 | public void osSetStateEvents(int events) | ||
2393 | { | ||
2394 | m_OSSL_Functions.osSetStateEvents(events); | ||
2395 | } | ||
2396 | } | 1731 | } |
2397 | } | 1732 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs new file mode 100644 index 0000000..168804d --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -0,0 +1,199 @@ | |||
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 | |||
28 | using System; | ||
29 | using System.Runtime.Remoting.Lifetime; | ||
30 | using System.Threading; | ||
31 | using System.Reflection; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | using OpenSim.Region.Environment.Interfaces; | ||
35 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
36 | using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; | ||
37 | using integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; | ||
38 | using key = System.String; | ||
39 | using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; | ||
40 | using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; | ||
41 | |||
42 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | ||
43 | { | ||
44 | public partial class ScriptBaseClass : MarshalByRefObject | ||
45 | { | ||
46 | public IOSSL_Api m_OSSL_Functions; | ||
47 | |||
48 | public void ApiTypeOSSL(IScriptApi api) | ||
49 | { | ||
50 | if(!(api is IOSSL_Api)) | ||
51 | return; | ||
52 | |||
53 | m_OSSL_Functions = (IOSSL_Api)api; | ||
54 | } | ||
55 | |||
56 | public void osSetRegionWaterHeight(double height) | ||
57 | { | ||
58 | m_OSSL_Functions.osSetRegionWaterHeight(height); | ||
59 | } | ||
60 | |||
61 | public double osList2Double(LSL_Types.list src, int index) | ||
62 | { | ||
63 | return m_OSSL_Functions.osList2Double(src, index); | ||
64 | } | ||
65 | |||
66 | public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, | ||
67 | int timer) | ||
68 | { | ||
69 | return m_OSSL_Functions.osSetDynamicTextureURL(dynamicID, contentType, url, extraParams, timer); | ||
70 | } | ||
71 | |||
72 | public string osSetDynamicTextureData(string dynamicID, string contentType, string data, string extraParams, | ||
73 | int timer) | ||
74 | { | ||
75 | return m_OSSL_Functions.osSetDynamicTextureData(dynamicID, contentType, data, extraParams, timer); | ||
76 | } | ||
77 | |||
78 | public string osSetDynamicTextureURLBlend(string dynamicID, string contentType, string url, string extraParams, | ||
79 | int timer, int alpha) | ||
80 | { | ||
81 | return m_OSSL_Functions.osSetDynamicTextureURLBlend(dynamicID, contentType, url, extraParams, timer, alpha); | ||
82 | } | ||
83 | |||
84 | public string osSetDynamicTextureDataBlend(string dynamicID, string contentType, string data, string extraParams, | ||
85 | int timer, int alpha) | ||
86 | { | ||
87 | return m_OSSL_Functions.osSetDynamicTextureDataBlend(dynamicID, contentType, data, extraParams, timer, alpha); | ||
88 | } | ||
89 | |||
90 | public double osTerrainGetHeight(int x, int y) | ||
91 | { | ||
92 | return m_OSSL_Functions.osTerrainGetHeight(x, y); | ||
93 | } | ||
94 | |||
95 | public int osTerrainSetHeight(int x, int y, double val) | ||
96 | { | ||
97 | return m_OSSL_Functions.osTerrainSetHeight(x, y, val); | ||
98 | } | ||
99 | |||
100 | public int osRegionRestart(double seconds) | ||
101 | { | ||
102 | return m_OSSL_Functions.osRegionRestart(seconds); | ||
103 | } | ||
104 | |||
105 | public void osRegionNotice(string msg) | ||
106 | { | ||
107 | m_OSSL_Functions.osRegionNotice(msg); | ||
108 | } | ||
109 | |||
110 | public bool osConsoleCommand(string Command) | ||
111 | { | ||
112 | return m_OSSL_Functions.osConsoleCommand(Command); | ||
113 | } | ||
114 | |||
115 | public void osSetParcelMediaURL(string url) | ||
116 | { | ||
117 | m_OSSL_Functions.osSetParcelMediaURL(url); | ||
118 | } | ||
119 | |||
120 | public void osSetPrimFloatOnWater(int floatYN) | ||
121 | { | ||
122 | m_OSSL_Functions.osSetPrimFloatOnWater(floatYN); | ||
123 | } | ||
124 | |||
125 | // Animation Functions | ||
126 | |||
127 | public void osAvatarPlayAnimation(string avatar, string animation) | ||
128 | { | ||
129 | m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation); | ||
130 | } | ||
131 | |||
132 | public void osAvatarStopAnimation(string avatar, string animation) | ||
133 | { | ||
134 | m_OSSL_Functions.osAvatarStopAnimation(avatar, animation); | ||
135 | } | ||
136 | |||
137 | |||
138 | //Texture Draw functions | ||
139 | |||
140 | public string osMovePen(string drawList, int x, int y) | ||
141 | { | ||
142 | return m_OSSL_Functions.osMovePen(drawList, x, y); | ||
143 | } | ||
144 | |||
145 | public string osDrawLine(string drawList, int startX, int startY, int endX, int endY) | ||
146 | { | ||
147 | return m_OSSL_Functions.osDrawLine(drawList, startX, startY, endX, endY); | ||
148 | } | ||
149 | |||
150 | public string osDrawLine(string drawList, int endX, int endY) | ||
151 | { | ||
152 | return m_OSSL_Functions.osDrawLine(drawList, endX, endY); | ||
153 | } | ||
154 | |||
155 | public string osDrawText(string drawList, string text) | ||
156 | { | ||
157 | return m_OSSL_Functions.osDrawText(drawList, text); | ||
158 | } | ||
159 | |||
160 | public string osDrawEllipse(string drawList, int width, int height) | ||
161 | { | ||
162 | return m_OSSL_Functions.osDrawEllipse(drawList, width, height); | ||
163 | } | ||
164 | |||
165 | public string osDrawRectangle(string drawList, int width, int height) | ||
166 | { | ||
167 | return m_OSSL_Functions.osDrawRectangle(drawList, width, height); | ||
168 | } | ||
169 | |||
170 | public string osDrawFilledRectangle(string drawList, int width, int height) | ||
171 | { | ||
172 | return m_OSSL_Functions.osDrawFilledRectangle(drawList, width, height); | ||
173 | } | ||
174 | |||
175 | public string osSetFontSize(string drawList, int fontSize) | ||
176 | { | ||
177 | return m_OSSL_Functions.osSetFontSize(drawList, fontSize); | ||
178 | } | ||
179 | |||
180 | public string osSetPenSize(string drawList, int penSize) | ||
181 | { | ||
182 | return m_OSSL_Functions.osSetPenSize(drawList, penSize); | ||
183 | } | ||
184 | |||
185 | public string osSetPenColour(string drawList, string colour) | ||
186 | { | ||
187 | return m_OSSL_Functions.osSetPenColour(drawList, colour); | ||
188 | } | ||
189 | |||
190 | public string osDrawImage(string drawList, int width, int height, string imageUrl) | ||
191 | { | ||
192 | return m_OSSL_Functions.osDrawImage(drawList, width, height, imageUrl); | ||
193 | } | ||
194 | public void osSetStateEvents(int events) | ||
195 | { | ||
196 | m_OSSL_Functions.osSetStateEvents(events); | ||
197 | } | ||
198 | } | ||
199 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj new file mode 100644 index 0000000..870da9f --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj | |||
@@ -0,0 +1,161 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> | ||
2 | <PropertyGroup> | ||
3 | <ProjectType>Local</ProjectType> | ||
4 | <ProductVersion>9.0.21022</ProductVersion> | ||
5 | <SchemaVersion>2.0</SchemaVersion> | ||
6 | <ProjectGuid>{21BC44EA-0000-0000-0000-000000000000}</ProjectGuid> | ||
7 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
8 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
9 | <ApplicationIcon></ApplicationIcon> | ||
10 | <AssemblyKeyContainerName> | ||
11 | </AssemblyKeyContainerName> | ||
12 | <AssemblyName>OpenSim.Region.ScriptEngine.Shared.Api.Runtime</AssemblyName> | ||
13 | <DefaultClientScript>JScript</DefaultClientScript> | ||
14 | <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout> | ||
15 | <DefaultTargetSchema>IE50</DefaultTargetSchema> | ||
16 | <DelaySign>false</DelaySign> | ||
17 | <OutputType>Library</OutputType> | ||
18 | <AppDesignerFolder></AppDesignerFolder> | ||
19 | <RootNamespace>OpenSim.Region.ScriptEngine.Shared.Api.Runtime</RootNamespace> | ||
20 | <StartupObject></StartupObject> | ||
21 | <FileUpgradeFlags> | ||
22 | </FileUpgradeFlags> | ||
23 | </PropertyGroup> | ||
24 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
25 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
26 | <BaseAddress>285212672</BaseAddress> | ||
27 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
28 | <ConfigurationOverrideFile> | ||
29 | </ConfigurationOverrideFile> | ||
30 | <DefineConstants>TRACE;DEBUG</DefineConstants> | ||
31 | <DocumentationFile></DocumentationFile> | ||
32 | <DebugSymbols>True</DebugSymbols> | ||
33 | <FileAlignment>4096</FileAlignment> | ||
34 | <Optimize>False</Optimize> | ||
35 | <OutputPath>..\..\..\..\..\..\bin\</OutputPath> | ||
36 | <RegisterForComInterop>False</RegisterForComInterop> | ||
37 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
38 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
39 | <WarningLevel>4</WarningLevel> | ||
40 | <NoWarn></NoWarn> | ||
41 | </PropertyGroup> | ||
42 | <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
43 | <AllowUnsafeBlocks>False</AllowUnsafeBlocks> | ||
44 | <BaseAddress>285212672</BaseAddress> | ||
45 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
46 | <ConfigurationOverrideFile> | ||
47 | </ConfigurationOverrideFile> | ||
48 | <DefineConstants>TRACE</DefineConstants> | ||
49 | <DocumentationFile></DocumentationFile> | ||
50 | <DebugSymbols>False</DebugSymbols> | ||
51 | <FileAlignment>4096</FileAlignment> | ||
52 | <Optimize>True</Optimize> | ||
53 | <OutputPath>..\..\..\..\..\..\bin\</OutputPath> | ||
54 | <RegisterForComInterop>False</RegisterForComInterop> | ||
55 | <RemoveIntegerChecks>False</RemoveIntegerChecks> | ||
56 | <TreatWarningsAsErrors>False</TreatWarningsAsErrors> | ||
57 | <WarningLevel>4</WarningLevel> | ||
58 | <NoWarn></NoWarn> | ||
59 | </PropertyGroup> | ||
60 | <ItemGroup> | ||
61 | <Reference Include="Axiom.MathLib.dll" > | ||
62 | <HintPath>..\..\..\..\..\..\bin\Axiom.MathLib.dll</HintPath> | ||
63 | <Private>False</Private> | ||
64 | </Reference> | ||
65 | <Reference Include="libsecondlife.dll" > | ||
66 | <HintPath>..\..\..\..\..\..\bin\libsecondlife.dll</HintPath> | ||
67 | <Private>False</Private> | ||
68 | </Reference> | ||
69 | <Reference Include="log4net.dll" > | ||
70 | <HintPath>..\..\..\..\..\..\bin\log4net.dll</HintPath> | ||
71 | <Private>False</Private> | ||
72 | </Reference> | ||
73 | <Reference Include="Nini.dll" > | ||
74 | <HintPath>..\..\..\..\..\..\bin\Nini.dll</HintPath> | ||
75 | <Private>False</Private> | ||
76 | </Reference> | ||
77 | <Reference Include="Nini.dll" > | ||
78 | <HintPath>..\..\..\..\..\..\bin\Nini.dll</HintPath> | ||
79 | <Private>False</Private> | ||
80 | </Reference> | ||
81 | <Reference Include="RAIL.dll" > | ||
82 | <HintPath>..\..\..\..\..\..\bin\RAIL.dll</HintPath> | ||
83 | <Private>False</Private> | ||
84 | </Reference> | ||
85 | <Reference Include="System" > | ||
86 | <HintPath>System.dll</HintPath> | ||
87 | <Private>False</Private> | ||
88 | </Reference> | ||
89 | <Reference Include="System.Data" > | ||
90 | <HintPath>System.Data.dll</HintPath> | ||
91 | <Private>False</Private> | ||
92 | </Reference> | ||
93 | <Reference Include="System.Web" > | ||
94 | <HintPath>System.Web.dll</HintPath> | ||
95 | <Private>False</Private> | ||
96 | </Reference> | ||
97 | <Reference Include="System.Xml" > | ||
98 | <HintPath>System.Xml.dll</HintPath> | ||
99 | <Private>False</Private> | ||
100 | </Reference> | ||
101 | </ItemGroup> | ||
102 | <ItemGroup> | ||
103 | <ProjectReference Include="..\..\..\..\Application\OpenSim.csproj"> | ||
104 | <Name>OpenSim</Name> | ||
105 | <Project>{438A9556-0000-0000-0000-000000000000}</Project> | ||
106 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
107 | <Private>False</Private> | ||
108 | </ProjectReference> | ||
109 | <ProjectReference Include="..\..\..\..\..\Framework\OpenSim.Framework.csproj"> | ||
110 | <Name>OpenSim.Framework</Name> | ||
111 | <Project>{8ACA2445-0000-0000-0000-000000000000}</Project> | ||
112 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
113 | <Private>False</Private> | ||
114 | </ProjectReference> | ||
115 | <ProjectReference Include="..\..\..\..\..\Framework\Communications\OpenSim.Framework.Communications.csproj"> | ||
116 | <Name>OpenSim.Framework.Communications</Name> | ||
117 | <Project>{CB52B7E7-0000-0000-0000-000000000000}</Project> | ||
118 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
119 | <Private>False</Private> | ||
120 | </ProjectReference> | ||
121 | <ProjectReference Include="..\..\..\..\..\Framework\Console\OpenSim.Framework.Console.csproj"> | ||
122 | <Name>OpenSim.Framework.Console</Name> | ||
123 | <Project>{A7CD0630-0000-0000-0000-000000000000}</Project> | ||
124 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
125 | <Private>False</Private> | ||
126 | </ProjectReference> | ||
127 | <ProjectReference Include="..\..\..\..\Environment\OpenSim.Region.Environment.csproj"> | ||
128 | <Name>OpenSim.Region.Environment</Name> | ||
129 | <Project>{DCBA491C-0000-0000-0000-000000000000}</Project> | ||
130 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
131 | <Private>False</Private> | ||
132 | </ProjectReference> | ||
133 | <ProjectReference Include="..\..\OpenSim.Region.ScriptEngine.Shared.csproj"> | ||
134 | <Name>OpenSim.Region.ScriptEngine.Shared</Name> | ||
135 | <Project>{D9F1B557-0000-0000-0000-000000000000}</Project> | ||
136 | <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> | ||
137 | <Private>False</Private> | ||
138 | </ProjectReference> | ||
139 | </ItemGroup> | ||
140 | <ItemGroup> | ||
141 | <Compile Include="LSL_Constants.cs"> | ||
142 | <SubType>Code</SubType> | ||
143 | </Compile> | ||
144 | <Compile Include="LSL_Stub.cs"> | ||
145 | <SubType>Code</SubType> | ||
146 | </Compile> | ||
147 | <Compile Include="OSSL_Stub.cs"> | ||
148 | <SubType>Code</SubType> | ||
149 | </Compile> | ||
150 | <Compile Include="ScriptBase.cs"> | ||
151 | <SubType>Code</SubType> | ||
152 | </Compile> | ||
153 | </ItemGroup> | ||
154 | <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> | ||
155 | <PropertyGroup> | ||
156 | <PreBuildEvent> | ||
157 | </PreBuildEvent> | ||
158 | <PostBuildEvent> | ||
159 | </PostBuildEvent> | ||
160 | </PropertyGroup> | ||
161 | </Project> | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj.user b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj.user new file mode 100644 index 0000000..c28f556 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.csproj.user | |||
@@ -0,0 +1,12 @@ | |||
1 | <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
4 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
5 | <ReferencePath>C:\Data\OpenSim\bin\</ReferencePath> | ||
6 | <LastOpenVersion>9.0.21022</LastOpenVersion> | ||
7 | <ProjectView>ProjectFiles</ProjectView> | ||
8 | <ProjectTrust>0</ProjectTrust> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> | ||
11 | <PropertyGroup Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> | ||
12 | </Project> | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll.build b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll.build new file mode 100644 index 0000000..c3af05c --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll.build | |||
@@ -0,0 +1,62 @@ | |||
1 | <?xml version="1.0" ?> | ||
2 | <project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" default="build"> | ||
3 | <target name="build"> | ||
4 | <echo message="Build Directory is ${project::get-base-directory()}/${build.dir}" /> | ||
5 | <mkdir dir="${project::get-base-directory()}/${build.dir}" /> | ||
6 | <copy todir="${project::get-base-directory()}/${build.dir}" flatten="true"> | ||
7 | <fileset basedir="${project::get-base-directory()}"> | ||
8 | </fileset> | ||
9 | </copy> | ||
10 | <copy todir="${project::get-base-directory()}/${build.dir}"> | ||
11 | <fileset basedir="."> | ||
12 | </fileset> | ||
13 | </copy> | ||
14 | <csc target="library" debug="${build.debug}" unsafe="False" warnaserror="False" define="TRACE;DEBUG" main="" output="${project::get-base-directory()}/${build.dir}/${project::get-name()}.dll"> | ||
15 | <resources prefix="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" dynamicprefix="true" > | ||
16 | </resources> | ||
17 | <sources failonempty="true"> | ||
18 | <include name="LSL_Constants.cs" /> | ||
19 | <include name="LSL_Stub.cs" /> | ||
20 | <include name="OSSL_Stub.cs" /> | ||
21 | <include name="ScriptBase.cs" /> | ||
22 | </sources> | ||
23 | <references basedir="${project::get-base-directory()}"> | ||
24 | <lib> | ||
25 | <include name="${project::get-base-directory()}" /> | ||
26 | <include name="${project::get-base-directory()}/${build.dir}" /> | ||
27 | </lib> | ||
28 | <include name="../../../../../../bin/Axiom.MathLib.dll" /> | ||
29 | <include name="../../../../../../bin/libsecondlife.dll" /> | ||
30 | <include name="../../../../../../bin/log4net.dll" /> | ||
31 | <include name="../../../../../../bin/Nini.dll" /> | ||
32 | <include name="../../../../../../bin/Nini.dll" /> | ||
33 | <include name="../../../../../../bin/OpenSim.exe" /> | ||
34 | <include name="../../../../../../bin/OpenSim.Framework.dll" /> | ||
35 | <include name="../../../../../../bin/OpenSim.Framework.Communications.dll" /> | ||
36 | <include name="../../../../../../bin/OpenSim.Framework.Console.dll" /> | ||
37 | <include name="../../../../../../bin/OpenSim.Region.Environment.dll" /> | ||
38 | <include name="../../../../../../bin/OpenSim.Region.ScriptEngine.Shared.dll" /> | ||
39 | <include name="../../../../../../bin/RAIL.dll" /> | ||
40 | <include name="System.dll" /> | ||
41 | <include name="System.Data.dll" /> | ||
42 | <include name="System.Web.dll" /> | ||
43 | <include name="System.Xml.dll" /> | ||
44 | </references> | ||
45 | </csc> | ||
46 | <echo message="Copying from [${project::get-base-directory()}/${build.dir}/] to [${project::get-base-directory()}/../../../../../../bin/" /> | ||
47 | <mkdir dir="${project::get-base-directory()}/../../../../../../bin/"/> | ||
48 | <copy todir="${project::get-base-directory()}/../../../../../../bin/"> | ||
49 | <fileset basedir="${project::get-base-directory()}/${build.dir}/" > | ||
50 | <include name="*.dll"/> | ||
51 | <include name="*.exe"/> | ||
52 | <include name="*.mdb"/> | ||
53 | </fileset> | ||
54 | </copy> | ||
55 | </target> | ||
56 | <target name="clean"> | ||
57 | <delete dir="${obj.dir}" failonerror="false" /> | ||
58 | <delete dir="${bin.dir}" failonerror="false" /> | ||
59 | </target> | ||
60 | <target name="doc" description="Creates documentation."> | ||
61 | </target> | ||
62 | </project> | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp new file mode 100644 index 0000000..37bedfc --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OpenSim.Region.ScriptEngine.Shared.Api.Runtime.mdp | |||
@@ -0,0 +1,43 @@ | |||
1 | <Project name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" description="" standardNamespace="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" newfilesearch="None" enableviewstate="True" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject"> | ||
2 | <Configurations active="Debug"> | ||
3 | <Configuration name="Debug" ctype="DotNetProjectConfiguration"> | ||
4 | <Output directory="./../../../../../../bin/" assembly="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" /> | ||
5 | <Build debugmode="True" target="Library" /> | ||
6 | <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" /> | ||
7 | <CodeGeneration compiler="Csc" warninglevel="4" nowarn="" includedebuginformation="True" optimize="False" unsafecodeallowed="False" generateoverflowchecks="False" mainclass="" target="Library" definesymbols="TRACE;DEBUG" generatexmldocumentation="False" win32Icon="" ctype="CSharpCompilerParameters" /> | ||
8 | </Configuration> | ||
9 | <Configuration name="Release" ctype="DotNetProjectConfiguration"> | ||
10 | <Output directory="./../../../../../../bin/" assembly="OpenSim.Region.ScriptEngine.Shared.Api.Runtime" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" /> | ||
11 | <Build debugmode="True" target="Library" /> | ||
12 | <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" /> | ||
13 | <CodeGeneration compiler="Csc" warninglevel="4" nowarn="" includedebuginformation="False" optimize="True" unsafecodeallowed="False" generateoverflowchecks="False" mainclass="" target="Library" definesymbols="TRACE" generatexmldocumentation="False" win32Icon="" ctype="CSharpCompilerParameters" /> | ||
14 | </Configuration> | ||
15 | </Configurations> | ||
16 | <DeploymentInformation target="" script="" strategy="File"> | ||
17 | <excludeFiles /> | ||
18 | </DeploymentInformation> | ||
19 | <Contents> | ||
20 | <File name="./LSL_Constants.cs" subtype="Code" buildaction="Compile" dependson="" data="" /> | ||
21 | <File name="./LSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" /> | ||
22 | <File name="./OSSL_Stub.cs" subtype="Code" buildaction="Compile" dependson="" data="" /> | ||
23 | <File name="./ScriptBase.cs" subtype="Code" buildaction="Compile" dependson="" data="" /> | ||
24 | </Contents> | ||
25 | <References> | ||
26 | <ProjectReference type="Assembly" refto="../../../../../../bin/Axiom.MathLib.dll" localcopy="False" /> | ||
27 | <ProjectReference type="Assembly" refto="../../../../../../bin/libsecondlife.dll" localcopy="False" /> | ||
28 | <ProjectReference type="Assembly" refto="../../../../../../bin/log4net.dll" localcopy="False" /> | ||
29 | <ProjectReference type="Assembly" refto="../../../../../../bin/Nini.dll" localcopy="False" /> | ||
30 | <ProjectReference type="Assembly" refto="../../../../../../bin/Nini.dll" localcopy="False" /> | ||
31 | <ProjectReference type="Project" localcopy="False" refto="OpenSim" /> | ||
32 | <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework" /> | ||
33 | <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework.Communications" /> | ||
34 | <ProjectReference type="Project" localcopy="False" refto="OpenSim.Framework.Console" /> | ||
35 | <ProjectReference type="Project" localcopy="False" refto="OpenSim.Region.Environment" /> | ||
36 | <ProjectReference type="Project" localcopy="False" refto="OpenSim.Region.ScriptEngine.Shared" /> | ||
37 | <ProjectReference type="Assembly" refto="../../../../../../bin/RAIL.dll" localcopy="False" /> | ||
38 | <ProjectReference type="Gac" localcopy="False" refto="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||
39 | <ProjectReference type="Gac" localcopy="False" refto="System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||
40 | <ProjectReference type="Gac" localcopy="False" refto="System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> | ||
41 | <ProjectReference type="Gac" localcopy="False" refto="System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> | ||
42 | </References> | ||
43 | </Project> | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs new file mode 100644 index 0000000..aa2c9c2 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/ScriptBase.cs | |||
@@ -0,0 +1,124 @@ | |||
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 | |||
28 | using System; | ||
29 | using System.Runtime.Remoting.Lifetime; | ||
30 | using System.Threading; | ||
31 | using System.Reflection; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
35 | using OpenSim.Region.ScriptEngine.Shared; | ||
36 | |||
37 | namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | ||
38 | { | ||
39 | public partial class ScriptBaseClass : MarshalByRefObject, IScript | ||
40 | { | ||
41 | private Dictionary<string,MethodInfo> inits = new Dictionary<string,MethodInfo>(); | ||
42 | |||
43 | public ScriptBaseClass() | ||
44 | { | ||
45 | MethodInfo[] myArrayMethodInfo = GetType().GetMethods(BindingFlags.Public|BindingFlags.Instance); | ||
46 | |||
47 | foreach(MethodInfo mi in myArrayMethodInfo) | ||
48 | { | ||
49 | if(mi.Name.Length > 7 && mi.Name.Substring(0, 7) == "ApiType") | ||
50 | { | ||
51 | string type=mi.Name.Substring(7); | ||
52 | inits[type]=mi; | ||
53 | } | ||
54 | } | ||
55 | } | ||
56 | |||
57 | public string[] GetApis() | ||
58 | { | ||
59 | string[] apis = new string[inits.Count]; | ||
60 | inits.Keys.CopyTo(apis, 0); | ||
61 | return apis; | ||
62 | } | ||
63 | |||
64 | public void InitApi(string api, IScriptApi data) | ||
65 | { | ||
66 | if(!inits.ContainsKey(api)) | ||
67 | return; | ||
68 | |||
69 | MethodInfo mi = inits[api]; | ||
70 | |||
71 | Object[] args = new Object[1]; | ||
72 | args[0] = data; | ||
73 | |||
74 | mi.Invoke(this, args); | ||
75 | } | ||
76 | |||
77 | private Dictionary<string, object> m_InitialValues = | ||
78 | new Dictionary<string, object>(); | ||
79 | private Dictionary<string, FieldInfo> m_Fields = | ||
80 | new Dictionary<string, FieldInfo>(); | ||
81 | |||
82 | public Dictionary<string, object> GetVars() | ||
83 | { | ||
84 | Dictionary<string, object> vars = new Dictionary<string, object>(); | ||
85 | |||
86 | if (m_Fields == null) | ||
87 | return vars; | ||
88 | |||
89 | m_Fields.Clear(); | ||
90 | |||
91 | Type t = GetType(); | ||
92 | |||
93 | FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | | ||
94 | BindingFlags.Public | | ||
95 | BindingFlags.Instance | | ||
96 | BindingFlags.DeclaredOnly); | ||
97 | |||
98 | foreach (FieldInfo field in fields) | ||
99 | { | ||
100 | m_Fields[field.Name]=field; | ||
101 | |||
102 | vars[field.Name]=field.GetValue(this); | ||
103 | } | ||
104 | |||
105 | return vars; | ||
106 | } | ||
107 | |||
108 | public void SetVars(Dictionary<string, object> vars) | ||
109 | { | ||
110 | foreach (KeyValuePair<string, object> var in vars) | ||
111 | { | ||
112 | if (m_Fields.ContainsKey(var.Key)) | ||
113 | { | ||
114 | m_Fields[var.Key].SetValue(this, var.Value); | ||
115 | } | ||
116 | } | ||
117 | } | ||
118 | |||
119 | public void ResetVars() | ||
120 | { | ||
121 | SetVars(m_InitialValues); | ||
122 | } | ||
123 | } | ||
124 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs new file mode 100644 index 0000000..27ab04e --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Atom.cs | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | using System.Text; | ||
34 | |||
35 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
36 | { | ||
37 | public class Atom : IUnifiable | ||
38 | { | ||
39 | private static Dictionary<string, Atom> _atomStore = new Dictionary<string, Atom>(); | ||
40 | public readonly string _name; | ||
41 | public readonly Atom _module; | ||
42 | |||
43 | /// <summary> | ||
44 | /// You should not call this constructor, but use Atom.a instead. | ||
45 | /// </summary> | ||
46 | /// <param name="name"></param> | ||
47 | /// <param name="module"></param> | ||
48 | private Atom(string name, Atom module) | ||
49 | { | ||
50 | _name = name; | ||
51 | _module = module; | ||
52 | } | ||
53 | |||
54 | /// <summary> | ||
55 | /// Return the unique Atom object for name where module is null. You should use this to create | ||
56 | /// an Atom instead of calling the Atom constructor. | ||
57 | /// </summary> | ||
58 | /// <param name="name"></param> | ||
59 | /// <returns></returns> | ||
60 | public static Atom a(string name) | ||
61 | { | ||
62 | Atom atom; | ||
63 | if (!_atomStore.TryGetValue(name, out atom)) | ||
64 | { | ||
65 | atom = new Atom(name, null); | ||
66 | _atomStore[name] = atom; | ||
67 | } | ||
68 | return atom; | ||
69 | } | ||
70 | |||
71 | /// <summary> | ||
72 | /// Return an Atom object with the name and module. If module is null or Atom.NIL, | ||
73 | /// this behaves like Atom.a(name) and returns the unique object where the module is null. | ||
74 | /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom | ||
75 | /// with the same name and module. | ||
76 | /// </summary> | ||
77 | /// <param name="name"></param> | ||
78 | /// <param name="module"></param> | ||
79 | /// <returns></returns> | ||
80 | public static Atom a(string name, Atom module) | ||
81 | { | ||
82 | if (module == null || module == Atom.NIL) | ||
83 | return a(name); | ||
84 | return new Atom(name, module); | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL. | ||
89 | /// </summary> | ||
90 | /// <param name="Atom"></param> | ||
91 | /// <param name="Module"></param> | ||
92 | /// <returns></returns> | ||
93 | public static IEnumerable<bool> module(object Obj, object Module) | ||
94 | { | ||
95 | Obj = YP.getValue(Obj); | ||
96 | if (Obj is Atom) | ||
97 | { | ||
98 | if (((Atom)Obj)._module == null) | ||
99 | return YP.unify(Module, Atom.NIL); | ||
100 | else | ||
101 | return YP.unify(Module, ((Atom)Obj)._module); | ||
102 | } | ||
103 | return YP.fail(); | ||
104 | } | ||
105 | |||
106 | public static readonly Atom NIL = Atom.a("[]"); | ||
107 | public static readonly Atom DOT = Atom.a("."); | ||
108 | public static readonly Atom F = Atom.a("f"); | ||
109 | public static readonly Atom SLASH = Atom.a("/"); | ||
110 | public static readonly Atom HAT = Atom.a("^"); | ||
111 | public static readonly Atom RULE = Atom.a(":-"); | ||
112 | |||
113 | public IEnumerable<bool> unify(object arg) | ||
114 | { | ||
115 | arg = YP.getValue(arg); | ||
116 | if (arg is Atom) | ||
117 | return Equals(arg) ? YP.succeed() : YP.fail(); | ||
118 | else if (arg is Variable) | ||
119 | return ((Variable)arg).unify(this); | ||
120 | else | ||
121 | return YP.fail(); | ||
122 | } | ||
123 | |||
124 | public void addUniqueVariables(List<Variable> variableSet) | ||
125 | { | ||
126 | // Atom does not contain variables. | ||
127 | } | ||
128 | |||
129 | public object makeCopy(Variable.CopyStore copyStore) | ||
130 | { | ||
131 | // Atom does not contain variables that need to be copied. | ||
132 | return this; | ||
133 | } | ||
134 | |||
135 | public bool termEqual(object term) | ||
136 | { | ||
137 | return Equals(YP.getValue(term)); | ||
138 | } | ||
139 | |||
140 | public bool ground() | ||
141 | { | ||
142 | // Atom is always ground. | ||
143 | return true; | ||
144 | } | ||
145 | |||
146 | public override bool Equals(object obj) | ||
147 | { | ||
148 | if (obj is Atom) | ||
149 | { | ||
150 | if (_module == null && ((Atom)obj)._module == null) | ||
151 | // When _declaringClass is null, we always use an identical object from _atomStore. | ||
152 | return this == obj; | ||
153 | // Otherwise, ignore _declaringClass and do a normal string compare on the _name. | ||
154 | return _name == ((Atom)obj)._name; | ||
155 | } | ||
156 | return false; | ||
157 | } | ||
158 | |||
159 | public override string ToString() | ||
160 | { | ||
161 | return _name; | ||
162 | } | ||
163 | |||
164 | public override int GetHashCode() | ||
165 | { | ||
166 | // Debug: need to check _declaringClass. | ||
167 | return _name.GetHashCode(); | ||
168 | } | ||
169 | |||
170 | public string toQuotedString() | ||
171 | { | ||
172 | if (_name.Length == 0) | ||
173 | return "''"; | ||
174 | else if (this == Atom.NIL) | ||
175 | return "[]"; | ||
176 | |||
177 | StringBuilder result = new StringBuilder(_name.Length); | ||
178 | bool useQuotes = false; | ||
179 | foreach (char c in _name) | ||
180 | { | ||
181 | int cInt = (int)c; | ||
182 | if (c == '\'') | ||
183 | { | ||
184 | result.Append("''"); | ||
185 | useQuotes = true; | ||
186 | } | ||
187 | else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' || | ||
188 | cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9') | ||
189 | result.Append(c); | ||
190 | else | ||
191 | { | ||
192 | // Debug: Need to handle non-printable chars. | ||
193 | result.Append(c); | ||
194 | useQuotes = true; | ||
195 | } | ||
196 | } | ||
197 | |||
198 | if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z') | ||
199 | return result.ToString(); | ||
200 | else | ||
201 | { | ||
202 | // Surround in single quotes. | ||
203 | result.Append('\''); | ||
204 | return "'" + result; | ||
205 | } | ||
206 | } | ||
207 | |||
208 | /// <summary> | ||
209 | /// Return true if _name is lexicographically less than atom._name. | ||
210 | /// </summary> | ||
211 | /// <param name="atom"></param> | ||
212 | /// <returns></returns> | ||
213 | public bool lessThan(Atom atom) | ||
214 | { | ||
215 | return _name.CompareTo(atom._name) < 0; | ||
216 | } | ||
217 | } | ||
218 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs new file mode 100644 index 0000000..70c1b5a --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/BagofAnswers.cs | |||
@@ -0,0 +1,234 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | |||
35 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// A BagofAnswers holds answers for bagof and setof. | ||
39 | /// </summary> | ||
40 | public class BagofAnswers | ||
41 | { | ||
42 | private object _template; | ||
43 | private Variable[] _freeVariables; | ||
44 | private Dictionary<object[], List<object>> _bagForFreeVariables; | ||
45 | private List<object> _findallBagArray; | ||
46 | private static TermArrayEqualityComparer _termArrayEqualityComparer = | ||
47 | new TermArrayEqualityComparer(); | ||
48 | |||
49 | /// <summary> | ||
50 | /// To get the free variables, split off any existential qualifiers from Goal such as the X in | ||
51 | /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove | ||
52 | /// the unbound variables that are qualifiers as well as the unbound variables in Template. | ||
53 | /// </summary> | ||
54 | /// <param name="Template"></param> | ||
55 | /// <param name="Goal"></param> | ||
56 | public BagofAnswers(object Template, object Goal) | ||
57 | { | ||
58 | _template = Template; | ||
59 | |||
60 | // First get the set of variables that are not free variables. | ||
61 | List<Variable> variableSet = new List<Variable>(); | ||
62 | YP.addUniqueVariables(Template, variableSet); | ||
63 | object UnqualifiedGoal = YP.getValue(Goal); | ||
64 | while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT) | ||
65 | { | ||
66 | YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet); | ||
67 | UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2); | ||
68 | } | ||
69 | |||
70 | // Remember how many non-free variables there are so we can find the unique free variables | ||
71 | // that are added. | ||
72 | int nNonFreeVariables = variableSet.Count; | ||
73 | YP.addUniqueVariables(UnqualifiedGoal, variableSet); | ||
74 | int nFreeVariables = variableSet.Count - nNonFreeVariables; | ||
75 | if (nFreeVariables == 0) | ||
76 | { | ||
77 | // There were no free variables added, so we won't waste time with _bagForFreeVariables. | ||
78 | _freeVariables = null; | ||
79 | _findallBagArray = new List<object>(); | ||
80 | } | ||
81 | else | ||
82 | { | ||
83 | // Copy the free variables. | ||
84 | _freeVariables = new Variable[nFreeVariables]; | ||
85 | for (int i = 0; i < nFreeVariables; ++i) | ||
86 | _freeVariables[i] = variableSet[i + nNonFreeVariables]; | ||
87 | |||
88 | _bagForFreeVariables = new Dictionary<object[], List<object>>(_termArrayEqualityComparer); | ||
89 | } | ||
90 | } | ||
91 | |||
92 | public void add() | ||
93 | { | ||
94 | if (_freeVariables == null) | ||
95 | // The goal has bound the values in _template but we don't bother with _freeVariables. | ||
96 | _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); | ||
97 | else | ||
98 | { | ||
99 | // The goal has bound the values in _template and _freeVariables. | ||
100 | // Find the entry for this set of _freeVariables values. | ||
101 | object[] freeVariableValues = new object[_freeVariables.Length]; | ||
102 | for (int i = 0; i < _freeVariables.Length; ++i) | ||
103 | freeVariableValues[i] = YP.getValue(_freeVariables[i]); | ||
104 | List<object> bagArray; | ||
105 | if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray)) | ||
106 | { | ||
107 | bagArray = new List<object>(); | ||
108 | _bagForFreeVariables[freeVariableValues] = bagArray; | ||
109 | } | ||
110 | |||
111 | // Now copy the template and add to the bag for the freeVariables values. | ||
112 | bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); | ||
113 | } | ||
114 | } | ||
115 | |||
116 | /// <summary> | ||
117 | /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag. | ||
118 | /// </summary> | ||
119 | /// <param name="bagArrayVariable">this is unified with the List<object> of matches for template that | ||
120 | /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog | ||
121 | /// list.</param> | ||
122 | /// <returns></returns> | ||
123 | public IEnumerable<bool> resultArray(Variable bagArrayVariable) | ||
124 | { | ||
125 | if (_freeVariables == null) | ||
126 | { | ||
127 | // No unbound free variables, so we only filled one bag. If empty, bagof fails. | ||
128 | if (_findallBagArray.Count > 0) | ||
129 | { | ||
130 | foreach (bool l1 in bagArrayVariable.unify(_findallBagArray)) | ||
131 | yield return false; | ||
132 | } | ||
133 | } | ||
134 | else | ||
135 | { | ||
136 | foreach (KeyValuePair<object[], List<object>> valuesAndBag in _bagForFreeVariables) | ||
137 | { | ||
138 | foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key)) | ||
139 | { | ||
140 | foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value)) | ||
141 | yield return false; | ||
142 | } | ||
143 | // Debug: Should we free memory of the answers already returned? | ||
144 | } | ||
145 | } | ||
146 | } | ||
147 | |||
148 | /// <summary> | ||
149 | /// For each result, unify the _freeVariables and unify Bag with the associated bag. | ||
150 | /// </summary> | ||
151 | /// <param name="Bag"></param> | ||
152 | /// <returns></returns> | ||
153 | public IEnumerable<bool> result(object Bag) | ||
154 | { | ||
155 | Variable bagArrayVariable = new Variable(); | ||
156 | foreach (bool l1 in resultArray(bagArrayVariable)) | ||
157 | { | ||
158 | foreach (bool l2 in YP.unify(Bag, ListPair.make((List<object>)bagArrayVariable.getValue()))) | ||
159 | yield return false; | ||
160 | } | ||
161 | } | ||
162 | |||
163 | /// <summary> | ||
164 | /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted | ||
165 | /// with duplicates removed, as in setof. | ||
166 | /// </summary> | ||
167 | /// <param name="Bag"></param> | ||
168 | /// <returns></returns> | ||
169 | public IEnumerable<bool> resultSet(object Bag) | ||
170 | { | ||
171 | Variable bagArrayVariable = new Variable(); | ||
172 | foreach (bool l1 in resultArray(bagArrayVariable)) | ||
173 | { | ||
174 | List<object> bagArray = (List<object>)bagArrayVariable.getValue(); | ||
175 | YP.sortArray(bagArray); | ||
176 | foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray))) | ||
177 | yield return false; | ||
178 | } | ||
179 | } | ||
180 | |||
181 | public static IEnumerable<bool> bagofArray | ||
182 | (object Template, object Goal, IEnumerable<bool> goalIterator, Variable bagArrayVariable) | ||
183 | { | ||
184 | BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); | ||
185 | foreach (bool l1 in goalIterator) | ||
186 | bagOfAnswers.add(); | ||
187 | return bagOfAnswers.resultArray(bagArrayVariable); | ||
188 | } | ||
189 | |||
190 | public static IEnumerable<bool> bagof | ||
191 | (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag) | ||
192 | { | ||
193 | BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); | ||
194 | foreach (bool l1 in goalIterator) | ||
195 | bagOfAnswers.add(); | ||
196 | return bagOfAnswers.result(Bag); | ||
197 | } | ||
198 | |||
199 | public static IEnumerable<bool> setof | ||
200 | (object Template, object Goal, IEnumerable<bool> goalIterator, object Bag) | ||
201 | { | ||
202 | BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); | ||
203 | foreach (bool l1 in goalIterator) | ||
204 | bagOfAnswers.add(); | ||
205 | return bagOfAnswers.resultSet(Bag); | ||
206 | } | ||
207 | |||
208 | /// <summary> | ||
209 | /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual. | ||
210 | /// </summary> | ||
211 | private class TermArrayEqualityComparer : IEqualityComparer<object[]> | ||
212 | { | ||
213 | public bool Equals(object[] array1, object[] array2) | ||
214 | { | ||
215 | if (array1.Length != array2.Length) | ||
216 | return false; | ||
217 | for (int i = 0; i < array1.Length; ++i) | ||
218 | { | ||
219 | if (!YP.termEqual(array1[i], array2[i])) | ||
220 | return false; | ||
221 | } | ||
222 | return true; | ||
223 | } | ||
224 | |||
225 | public int GetHashCode(object[] array) | ||
226 | { | ||
227 | int hashCode = 0; | ||
228 | for (int i = 0; i < array.Length; ++i) | ||
229 | hashCode ^= array[i].GetHashCode(); | ||
230 | return hashCode; | ||
231 | } | ||
232 | } | ||
233 | } | ||
234 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs new file mode 100644 index 0000000..28709e1 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/FindallAnswers.cs | |||
@@ -0,0 +1,103 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | |||
35 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// A FindallAnswers holds answers for findall. | ||
39 | /// </summary> | ||
40 | public class FindallAnswers | ||
41 | { | ||
42 | private object _template; | ||
43 | private List<object> _bagArray; | ||
44 | |||
45 | public FindallAnswers(object Template) | ||
46 | { | ||
47 | _template = Template; | ||
48 | _bagArray = new List<object>(); | ||
49 | } | ||
50 | |||
51 | public void add() | ||
52 | { | ||
53 | _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); | ||
54 | } | ||
55 | |||
56 | public List<object> resultArray() | ||
57 | { | ||
58 | return _bagArray; | ||
59 | } | ||
60 | |||
61 | /// <summary> | ||
62 | /// Unify Bag with the result. This frees the internal answers, so you can only call this once. | ||
63 | /// </summary> | ||
64 | /// <param name="Bag"></param> | ||
65 | /// <returns></returns> | ||
66 | public IEnumerable<bool> result(object Bag) | ||
67 | { | ||
68 | object result = ListPair.make(_bagArray); | ||
69 | // Try to free the memory. | ||
70 | _bagArray = null; | ||
71 | return YP.unify(Bag, result); | ||
72 | } | ||
73 | |||
74 | /// <summary> | ||
75 | /// This is a simplified findall when the goal is a single call. | ||
76 | /// </summary> | ||
77 | /// <param name="Template"></param> | ||
78 | /// <param name="goal"></param> | ||
79 | /// <param name="Bag"></param> | ||
80 | /// <returns></returns> | ||
81 | public static IEnumerable<bool> findall(object Template, IEnumerable<bool> goal, object Bag) | ||
82 | { | ||
83 | FindallAnswers findallAnswers = new FindallAnswers(Template); | ||
84 | foreach (bool l1 in goal) | ||
85 | findallAnswers.add(); | ||
86 | return findallAnswers.result(Bag); | ||
87 | } | ||
88 | |||
89 | /// <summary> | ||
90 | /// Like findall, except return an array of the results. | ||
91 | /// </summary> | ||
92 | /// <param name="template"></param> | ||
93 | /// <param name="goal"></param> | ||
94 | /// <returns></returns> | ||
95 | public static List<object> findallArray(object Template, IEnumerable<bool> goal) | ||
96 | { | ||
97 | FindallAnswers findallAnswers = new FindallAnswers(Template); | ||
98 | foreach (bool l1 in goal) | ||
99 | findallAnswers.add(); | ||
100 | return findallAnswers.resultArray(); | ||
101 | } | ||
102 | } | ||
103 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs new file mode 100644 index 0000000..8ef8de0 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor.cs | |||
@@ -0,0 +1,188 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class Functor : IUnifiable | ||
37 | { | ||
38 | public readonly Atom _name; | ||
39 | public readonly object[] _args; | ||
40 | |||
41 | public Functor(Atom name, object[] args) | ||
42 | { | ||
43 | if (args.Length <= 3) | ||
44 | { | ||
45 | if (args.Length == 0) | ||
46 | throw new Exception("For arity 0 functor, just use name as an Atom"); | ||
47 | else if (args.Length == 1) | ||
48 | throw new Exception("For arity 1 functor, use Functor1"); | ||
49 | else if (args.Length == 2) | ||
50 | throw new Exception("For arity 2 functor, use Functor2"); | ||
51 | else if (args.Length == 3) | ||
52 | throw new Exception("For arity 3 functor, use Functor3"); | ||
53 | else | ||
54 | // (This shouldn't happen, but include it for completeness. | ||
55 | throw new Exception("Cannot create a Functor of arity " + args.Length); | ||
56 | } | ||
57 | |||
58 | _name = name; | ||
59 | _args = args; | ||
60 | } | ||
61 | |||
62 | public Functor(string name, object[] args) | ||
63 | : this(Atom.a(name), args) | ||
64 | { | ||
65 | } | ||
66 | |||
67 | /// <summary> | ||
68 | /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the | ||
69 | /// length of args. | ||
70 | /// Note that this is different than the Functor constructor which requires | ||
71 | /// the length of args to be greater than 3. | ||
72 | /// </summary> | ||
73 | /// <param name="name"></param> | ||
74 | /// <param name="args"></param> | ||
75 | /// <returns></returns> | ||
76 | public static object make(Atom name, object[] args) | ||
77 | { | ||
78 | if (args.Length <= 0) | ||
79 | return name; | ||
80 | else if (args.Length == 1) | ||
81 | return new Functor1(name, args[0]); | ||
82 | else if (args.Length == 2) | ||
83 | return new Functor2(name, args[0], args[1]); | ||
84 | else if (args.Length == 3) | ||
85 | return new Functor3(name, args[0], args[1], args[2]); | ||
86 | else | ||
87 | return new Functor(name, args); | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// Call the main make, first converting name to an Atom. | ||
92 | /// </summary> | ||
93 | /// <param name="name"></param> | ||
94 | /// <param name="args"></param> | ||
95 | /// <returns></returns> | ||
96 | public static object make(string name, object[] args) | ||
97 | { | ||
98 | return make(Atom.a(name), args); | ||
99 | } | ||
100 | |||
101 | public IEnumerable<bool> unify(object arg) | ||
102 | { | ||
103 | arg = YP.getValue(arg); | ||
104 | if (arg is Functor) | ||
105 | { | ||
106 | Functor argFunctor = (Functor)arg; | ||
107 | if (_name.Equals(argFunctor._name)) | ||
108 | return YP.unifyArrays(_args, argFunctor._args); | ||
109 | else | ||
110 | return YP.fail(); | ||
111 | } | ||
112 | else if (arg is Variable) | ||
113 | return ((Variable)arg).unify(this); | ||
114 | else | ||
115 | return YP.fail(); | ||
116 | } | ||
117 | |||
118 | public override string ToString() | ||
119 | { | ||
120 | string result = _name + "(" + YP.getValue(_args[0]); | ||
121 | for (int i = 1; i < _args.Length; ++i) | ||
122 | result += ", " + YP.getValue(_args[i]); | ||
123 | result += ")"; | ||
124 | return result; | ||
125 | } | ||
126 | |||
127 | public bool termEqual(object term) | ||
128 | { | ||
129 | term = YP.getValue(term); | ||
130 | if (term is Functor) | ||
131 | { | ||
132 | Functor termFunctor = (Functor)term; | ||
133 | if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length) | ||
134 | { | ||
135 | for (int i = 0; i < _args.Length; ++i) | ||
136 | { | ||
137 | if (!YP.termEqual(_args[i], termFunctor._args[i])) | ||
138 | return false; | ||
139 | } | ||
140 | return true; | ||
141 | } | ||
142 | } | ||
143 | return false; | ||
144 | } | ||
145 | |||
146 | public bool lessThan(Functor functor) | ||
147 | { | ||
148 | // Do the equal check first since it is faster. | ||
149 | if (!_name.Equals(functor._name)) | ||
150 | return _name.lessThan(functor._name); | ||
151 | |||
152 | if (_args.Length != functor._args.Length) | ||
153 | return _args.Length < functor._args.Length; | ||
154 | |||
155 | for (int i = 0; i < _args.Length; ++i) | ||
156 | { | ||
157 | if (!YP.termEqual(_args[i], functor._args[i])) | ||
158 | return YP.termLessThan(_args[i], functor._args[i]); | ||
159 | } | ||
160 | |||
161 | return false; | ||
162 | } | ||
163 | |||
164 | public bool ground() | ||
165 | { | ||
166 | for (int i = 0; i < _args.Length; ++i) | ||
167 | { | ||
168 | if (!YP.ground(_args[i])) | ||
169 | return false; | ||
170 | } | ||
171 | return true; | ||
172 | } | ||
173 | |||
174 | public void addUniqueVariables(List<Variable> variableSet) | ||
175 | { | ||
176 | for (int i = 0; i < _args.Length; ++i) | ||
177 | YP.addUniqueVariables(_args[i], variableSet); | ||
178 | } | ||
179 | |||
180 | public object makeCopy(Variable.CopyStore copyStore) | ||
181 | { | ||
182 | object[] argsCopy = new object[_args.Length]; | ||
183 | for (int i = 0; i < _args.Length; ++i) | ||
184 | argsCopy[i] = YP.makeCopy(_args[i], copyStore); | ||
185 | return new Functor(_name, argsCopy); | ||
186 | } | ||
187 | } | ||
188 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs new file mode 100644 index 0000000..3c0c1c4 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor1.cs | |||
@@ -0,0 +1,111 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class Functor1 : IUnifiable | ||
37 | { | ||
38 | public readonly Atom _name; | ||
39 | public readonly object _arg1; | ||
40 | |||
41 | public Functor1(Atom name, object arg1) | ||
42 | { | ||
43 | _name = name; | ||
44 | _arg1 = arg1; | ||
45 | } | ||
46 | |||
47 | public Functor1(string name, object arg1) | ||
48 | : this(Atom.a(name), arg1) | ||
49 | { | ||
50 | } | ||
51 | |||
52 | public IEnumerable<bool> unify(object arg) | ||
53 | { | ||
54 | arg = YP.getValue(arg); | ||
55 | if (arg is Functor1) | ||
56 | { | ||
57 | Functor1 argFunctor = (Functor1)arg; | ||
58 | if (_name.Equals(argFunctor._name)) | ||
59 | { | ||
60 | foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) | ||
61 | yield return false; | ||
62 | } | ||
63 | } | ||
64 | else if (arg is Variable) | ||
65 | { | ||
66 | foreach (bool l1 in ((Variable)arg).unify(this)) | ||
67 | yield return false; | ||
68 | } | ||
69 | } | ||
70 | |||
71 | public override string ToString() | ||
72 | { | ||
73 | return _name + "(" + YP.getValue(_arg1) + ")"; | ||
74 | } | ||
75 | |||
76 | public bool termEqual(object term) | ||
77 | { | ||
78 | term = YP.getValue(term); | ||
79 | if (term is Functor1) | ||
80 | { | ||
81 | Functor1 termFunctor = (Functor1)term; | ||
82 | return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1); | ||
83 | } | ||
84 | return false; | ||
85 | } | ||
86 | |||
87 | public bool lessThan(Functor1 functor) | ||
88 | { | ||
89 | // Do the equal check first since it is faster. | ||
90 | if (!_name.Equals(functor._name)) | ||
91 | return _name.lessThan(functor._name); | ||
92 | |||
93 | return YP.termLessThan(_arg1, functor._arg1); | ||
94 | } | ||
95 | |||
96 | public bool ground() | ||
97 | { | ||
98 | return YP.ground(_arg1); | ||
99 | } | ||
100 | |||
101 | public void addUniqueVariables(List<Variable> variableSet) | ||
102 | { | ||
103 | YP.addUniqueVariables(_arg1, variableSet); | ||
104 | } | ||
105 | |||
106 | public object makeCopy(Variable.CopyStore copyStore) | ||
107 | { | ||
108 | return new Functor1(_name, YP.makeCopy(_arg1, copyStore)); | ||
109 | } | ||
110 | } | ||
111 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs new file mode 100644 index 0000000..596b763 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor2.cs | |||
@@ -0,0 +1,154 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class Functor2 : IUnifiable | ||
37 | { | ||
38 | public readonly Atom _name; | ||
39 | public readonly object _arg1; | ||
40 | public readonly object _arg2; | ||
41 | |||
42 | public Functor2(Atom name, object arg1, object arg2) | ||
43 | { | ||
44 | _name = name; | ||
45 | _arg1 = arg1; | ||
46 | _arg2 = arg2; | ||
47 | } | ||
48 | |||
49 | public Functor2(string name, object arg1, object arg2) | ||
50 | : this(Atom.a(name), arg1, arg2) | ||
51 | { | ||
52 | } | ||
53 | |||
54 | public IEnumerable<bool> unify(object arg) | ||
55 | { | ||
56 | arg = YP.getValue(arg); | ||
57 | if (arg is Functor2) | ||
58 | { | ||
59 | Functor2 argFunctor = (Functor2)arg; | ||
60 | if (_name.Equals(argFunctor._name)) | ||
61 | { | ||
62 | foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) | ||
63 | { | ||
64 | foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2)) | ||
65 | yield return false; | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | else if (arg is Variable) | ||
70 | { | ||
71 | foreach (bool l1 in ((Variable)arg).unify(this)) | ||
72 | yield return false; | ||
73 | } | ||
74 | } | ||
75 | |||
76 | public override string ToString() | ||
77 | { | ||
78 | if (_name == Atom.DOT) | ||
79 | return listPairToString(this); | ||
80 | else | ||
81 | return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")"; | ||
82 | } | ||
83 | |||
84 | public bool termEqual(object term) | ||
85 | { | ||
86 | term = YP.getValue(term); | ||
87 | if (term is Functor2) | ||
88 | { | ||
89 | Functor2 termFunctor = (Functor2)term; | ||
90 | return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1) | ||
91 | && YP.termEqual(_arg2, termFunctor._arg2); | ||
92 | } | ||
93 | return false; | ||
94 | } | ||
95 | |||
96 | public bool lessThan(Functor2 functor) | ||
97 | { | ||
98 | // Do the equal check first since it is faster. | ||
99 | if (!_name.Equals(functor._name)) | ||
100 | return _name.lessThan(functor._name); | ||
101 | |||
102 | if (!YP.termEqual(_arg1, functor._arg1)) | ||
103 | return YP.termLessThan(_arg1, functor._arg1); | ||
104 | |||
105 | return YP.termLessThan(_arg2, functor._arg2); | ||
106 | } | ||
107 | |||
108 | public bool ground() | ||
109 | { | ||
110 | return YP.ground(_arg1) && YP.ground(_arg2); | ||
111 | } | ||
112 | |||
113 | public void addUniqueVariables(List<Variable> variableSet) | ||
114 | { | ||
115 | YP.addUniqueVariables(_arg1, variableSet); | ||
116 | YP.addUniqueVariables(_arg2, variableSet); | ||
117 | } | ||
118 | |||
119 | public object makeCopy(Variable.CopyStore copyStore) | ||
120 | { | ||
121 | return new Functor2(_name, YP.makeCopy(_arg1, copyStore), | ||
122 | YP.makeCopy(_arg2, copyStore)); | ||
123 | } | ||
124 | |||
125 | private static string listPairToString(Functor2 listPair) | ||
126 | { | ||
127 | string result = "["; | ||
128 | while (true) | ||
129 | { | ||
130 | object head = YP.getValue(listPair._arg1); | ||
131 | object tail = YP.getValue(listPair._arg2); | ||
132 | if (tail == (object)Atom.NIL) | ||
133 | { | ||
134 | result += head; | ||
135 | break; | ||
136 | } | ||
137 | else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT) | ||
138 | { | ||
139 | result += head + ", "; | ||
140 | listPair = (Functor2)tail; | ||
141 | // Loop again. | ||
142 | } | ||
143 | else | ||
144 | { | ||
145 | // The list is not terminated with NIL. | ||
146 | result += head + "|" + tail; | ||
147 | break; | ||
148 | } | ||
149 | } | ||
150 | result += "]"; | ||
151 | return result; | ||
152 | } | ||
153 | } | ||
154 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs new file mode 100644 index 0000000..041cceb --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Functor3.cs | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class Functor3 : IUnifiable | ||
37 | { | ||
38 | public readonly Atom _name; | ||
39 | public readonly object _arg1; | ||
40 | public readonly object _arg2; | ||
41 | public readonly object _arg3; | ||
42 | |||
43 | public Functor3(Atom name, object arg1, object arg2, object arg3) | ||
44 | { | ||
45 | _name = name; | ||
46 | _arg1 = arg1; | ||
47 | _arg2 = arg2; | ||
48 | _arg3 = arg3; | ||
49 | } | ||
50 | |||
51 | public Functor3(string name, object arg1, object arg2, object arg3) | ||
52 | : this(Atom.a(name), arg1, arg2, arg3) | ||
53 | { | ||
54 | } | ||
55 | |||
56 | public IEnumerable<bool> unify(object arg) | ||
57 | { | ||
58 | arg = YP.getValue(arg); | ||
59 | if (arg is Functor3) | ||
60 | { | ||
61 | Functor3 argFunctor = (Functor3)arg; | ||
62 | if (_name.Equals(argFunctor._name)) | ||
63 | { | ||
64 | foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) | ||
65 | { | ||
66 | foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2)) | ||
67 | { | ||
68 | foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3)) | ||
69 | yield return false; | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | } | ||
74 | else if (arg is Variable) | ||
75 | { | ||
76 | foreach (bool l1 in ((Variable)arg).unify(this)) | ||
77 | yield return false; | ||
78 | } | ||
79 | } | ||
80 | |||
81 | public override string ToString() | ||
82 | { | ||
83 | return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " + | ||
84 | YP.getValue(_arg3) + ")"; | ||
85 | } | ||
86 | |||
87 | public bool termEqual(object term) | ||
88 | { | ||
89 | term = YP.getValue(term); | ||
90 | if (term is Functor3) | ||
91 | { | ||
92 | Functor3 termFunctor = (Functor3)term; | ||
93 | return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1) | ||
94 | && YP.termEqual(_arg2, termFunctor._arg2) | ||
95 | && YP.termEqual(_arg3, termFunctor._arg3); | ||
96 | } | ||
97 | return false; | ||
98 | } | ||
99 | |||
100 | public bool lessThan(Functor3 functor) | ||
101 | { | ||
102 | // Do the equal check first since it is faster. | ||
103 | if (!_name.Equals(functor._name)) | ||
104 | return _name.lessThan(functor._name); | ||
105 | |||
106 | if (!YP.termEqual(_arg1, functor._arg1)) | ||
107 | return YP.termLessThan(_arg1, functor._arg1); | ||
108 | |||
109 | if (!YP.termEqual(_arg2, functor._arg2)) | ||
110 | return YP.termLessThan(_arg2, functor._arg2); | ||
111 | |||
112 | return YP.termLessThan(_arg3, functor._arg3); | ||
113 | } | ||
114 | |||
115 | public bool ground() | ||
116 | { | ||
117 | return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3); | ||
118 | } | ||
119 | |||
120 | public void addUniqueVariables(List<Variable> variableSet) | ||
121 | { | ||
122 | YP.addUniqueVariables(_arg1, variableSet); | ||
123 | YP.addUniqueVariables(_arg2, variableSet); | ||
124 | YP.addUniqueVariables(_arg3, variableSet); | ||
125 | } | ||
126 | |||
127 | public object makeCopy(Variable.CopyStore copyStore) | ||
128 | { | ||
129 | return new Functor3(_name, YP.makeCopy(_arg1, copyStore), | ||
130 | YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore)); | ||
131 | } | ||
132 | } | ||
133 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs new file mode 100644 index 0000000..1be73f7 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/IndexedAnswers.cs | |||
@@ -0,0 +1,288 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | |||
35 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// An IndexedAnswers holds answers to a query based on the values of index arguments. | ||
39 | /// </summary> | ||
40 | public class IndexedAnswers : YP.IClause | ||
41 | { | ||
42 | // addAnswer adds the answer here and indexes it later. | ||
43 | private List<object[]> _allAnswers = new List<object[]>(); | ||
44 | // The key has the arity of answers with non-null values for each indexed arg. The value | ||
45 | // is a list of the matching answers. The signature is implicit in the pattern on non-null index args. | ||
46 | private Dictionary<HashedList, List<object[]>> _indexedAnswers = | ||
47 | new Dictionary<HashedList, List<object[]>>(); | ||
48 | // Keeps track of whether we have started adding entries to _indexedAnswers for the signature. | ||
49 | private Dictionary<int, object> _gotAnswersForSignature = new Dictionary<int, object>(); | ||
50 | private const int MAX_INDEX_ARGS = 31; | ||
51 | |||
52 | public IndexedAnswers() | ||
53 | { | ||
54 | } | ||
55 | |||
56 | /// <summary> | ||
57 | /// Elements of answer must be ground, since arguments with unbound variables make this | ||
58 | /// into a dynamic rule which we don't index. | ||
59 | /// </summary> | ||
60 | /// <param name="answer"></param> | ||
61 | public void addAnswer(object[] answer) | ||
62 | { | ||
63 | // Store a copy of the answer array. | ||
64 | object[] answerCopy = new object[answer.Length]; | ||
65 | Variable.CopyStore copyStore = new Variable.CopyStore(); | ||
66 | for (int i = 0; i < answer.Length; ++i) | ||
67 | answerCopy[i] = YP.makeCopy(answer[i], copyStore); | ||
68 | if (copyStore.getNUniqueVariables() > 0) | ||
69 | throw new InvalidOperationException | ||
70 | ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() + | ||
71 | " unbound variables"); | ||
72 | _allAnswers.Add(answerCopy); | ||
73 | |||
74 | // If match has already indexed answers for a signature, we need to add | ||
75 | // this to the existing indexed answers. | ||
76 | foreach (int signature in _gotAnswersForSignature.Keys) | ||
77 | indexAnswerForSignature(answerCopy, signature); | ||
78 | } | ||
79 | |||
80 | private void indexAnswerForSignature(object[] answer, int signature) | ||
81 | { | ||
82 | // First find out which of the answer values can be used as an index. | ||
83 | object[] indexValues = new object[answer.Length]; | ||
84 | for (int i = 0; i < answer.Length; ++i) | ||
85 | { | ||
86 | // We limit the number of indexed args in a 32-bit signature. | ||
87 | if (i >= MAX_INDEX_ARGS) | ||
88 | indexValues[i] = null; | ||
89 | else | ||
90 | indexValues[i] = getIndexValue(YP.getValue(answer[i])); | ||
91 | } | ||
92 | |||
93 | // We need an entry in indexArgs from indexValues for each 1 bit in signature. | ||
94 | HashedList indexArgs = new HashedList(indexValues.Length); | ||
95 | for (int i = 0; i < indexValues.Length; ++i) | ||
96 | { | ||
97 | if ((signature & (1 << i)) == 0) | ||
98 | indexArgs.Add(null); | ||
99 | else | ||
100 | { | ||
101 | if (indexValues[i] == null) | ||
102 | // The signature wants an index value here, but we don't have one so | ||
103 | // we can't add it as an answer for this signature. | ||
104 | return; | ||
105 | else | ||
106 | indexArgs.Add(indexValues[i]); | ||
107 | } | ||
108 | } | ||
109 | |||
110 | // Add the answer to the answers list for indexArgs, creating the entry if needed. | ||
111 | List<object[]> answers; | ||
112 | if (!_indexedAnswers.TryGetValue(indexArgs, out answers)) | ||
113 | { | ||
114 | answers = new List<object[]>(); | ||
115 | _indexedAnswers[indexArgs] = answers; | ||
116 | } | ||
117 | answers.Add(answer); | ||
118 | } | ||
119 | |||
120 | public IEnumerable<bool> match(object[] arguments) | ||
121 | { | ||
122 | // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for | ||
123 | // each non-null index arg. | ||
124 | HashedList indexArgs = new HashedList(arguments.Length); | ||
125 | bool gotAllIndexArgs = true; | ||
126 | int signature = 0; | ||
127 | for (int i = 0; i < arguments.Length; ++i) | ||
128 | { | ||
129 | object indexValue = null; | ||
130 | if (i < MAX_INDEX_ARGS) | ||
131 | { | ||
132 | // We limit the number of args in a 32-bit signature. | ||
133 | indexValue = getIndexValue(YP.getValue(arguments[i])); | ||
134 | if (indexValue != null) | ||
135 | signature += (1 << i); | ||
136 | } | ||
137 | if (indexValue == null) | ||
138 | gotAllIndexArgs = false; | ||
139 | indexArgs.Add(indexValue); | ||
140 | } | ||
141 | |||
142 | List<object[]> answers; | ||
143 | if (signature == 0) | ||
144 | // No index args, so we have to match from _allAnswers. | ||
145 | answers = _allAnswers; | ||
146 | else | ||
147 | { | ||
148 | if (!_gotAnswersForSignature.ContainsKey(signature)) | ||
149 | { | ||
150 | // We need to create the entry in _indexedAnswers. | ||
151 | foreach (object[] answer in _allAnswers) | ||
152 | indexAnswerForSignature(answer, signature); | ||
153 | // Mark that we did this signature. | ||
154 | _gotAnswersForSignature[signature] = null; | ||
155 | } | ||
156 | if (!_indexedAnswers.TryGetValue(indexArgs, out answers)) | ||
157 | yield break; | ||
158 | } | ||
159 | |||
160 | if (gotAllIndexArgs) | ||
161 | { | ||
162 | // All the arguments were already bound, so we don't need to do bindings. | ||
163 | yield return false; | ||
164 | yield break; | ||
165 | } | ||
166 | |||
167 | // Find matches in answers. | ||
168 | IEnumerator<bool>[] iterators = new IEnumerator<bool>[arguments.Length]; | ||
169 | foreach (object[] answer in answers) | ||
170 | { | ||
171 | bool gotMatch = true; | ||
172 | int nIterators = 0; | ||
173 | // Try to bind all the arguments. | ||
174 | for (int i = 0; i < arguments.Length; ++i) | ||
175 | { | ||
176 | if (indexArgs[i] != null) | ||
177 | // We already matched this argument by looking up _indexedAnswers. | ||
178 | continue; | ||
179 | |||
180 | IEnumerator<bool> iterator = YP.unify(arguments[i], answer[i]).GetEnumerator(); | ||
181 | iterators[nIterators++] = iterator; | ||
182 | // MoveNext() is true if YP.unify succeeds. | ||
183 | if (!iterator.MoveNext()) | ||
184 | { | ||
185 | gotMatch = false; | ||
186 | break; | ||
187 | } | ||
188 | } | ||
189 | |||
190 | try | ||
191 | { | ||
192 | if (gotMatch) | ||
193 | yield return false; | ||
194 | } | ||
195 | finally | ||
196 | { | ||
197 | // Manually finalize all the iterators. | ||
198 | for (int i = 0; i < nIterators; ++i) | ||
199 | iterators[i].Dispose(); | ||
200 | } | ||
201 | } | ||
202 | } | ||
203 | |||
204 | /// <summary> | ||
205 | /// A HashedList extends an ArrayList with methods to get a hash and to check equality | ||
206 | /// based on the elements of the list. | ||
207 | /// </summary> | ||
208 | public class HashedList : ArrayList | ||
209 | { | ||
210 | private bool _gotHashCode = false; | ||
211 | private int _hashCode; | ||
212 | |||
213 | public HashedList() | ||
214 | : base() | ||
215 | { | ||
216 | } | ||
217 | |||
218 | public HashedList(int capacity) | ||
219 | : base(capacity) | ||
220 | { | ||
221 | } | ||
222 | |||
223 | public HashedList(ICollection c) | ||
224 | : base(c) | ||
225 | { | ||
226 | } | ||
227 | |||
228 | // Debug: Should override all the other methods that change this. | ||
229 | public override int Add(object value) | ||
230 | { | ||
231 | _gotHashCode = false; | ||
232 | return base.Add(value); | ||
233 | } | ||
234 | |||
235 | public override int GetHashCode() | ||
236 | { | ||
237 | if (!_gotHashCode) | ||
238 | { | ||
239 | int hashCode = 1; | ||
240 | foreach (object obj in this) | ||
241 | hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode()); | ||
242 | _hashCode = hashCode; | ||
243 | _gotHashCode = true; | ||
244 | } | ||
245 | return _hashCode; | ||
246 | } | ||
247 | |||
248 | public override bool Equals(object obj) | ||
249 | { | ||
250 | if (!(obj is ArrayList)) | ||
251 | return false; | ||
252 | |||
253 | ArrayList objList = (ArrayList)obj; | ||
254 | if (objList.Count != Count) | ||
255 | return false; | ||
256 | |||
257 | for (int i = 0; i < Count; ++i) | ||
258 | { | ||
259 | object value = objList[i]; | ||
260 | if (value == null) | ||
261 | { | ||
262 | if (this[i] != null) | ||
263 | return false; | ||
264 | } | ||
265 | else | ||
266 | { | ||
267 | if (!value.Equals(this[i])) | ||
268 | return false; | ||
269 | } | ||
270 | } | ||
271 | return true; | ||
272 | } | ||
273 | } | ||
274 | |||
275 | /// <summary> | ||
276 | /// If we keep an index on value, return the value, or null if we don't index it. | ||
277 | /// </summary> | ||
278 | /// <param name="value">the term to examine. Assume you already called YP.getValue(value)</param> | ||
279 | /// <returns></returns> | ||
280 | public static object getIndexValue(object value) | ||
281 | { | ||
282 | if (value is Atom || value is string || value is Int32 || value is DateTime) | ||
283 | return value; | ||
284 | else | ||
285 | return null; | ||
286 | } | ||
287 | } | ||
288 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs new file mode 100644 index 0000000..83ace2d --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/ListPair.cs | |||
@@ -0,0 +1,156 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class ListPair : Functor2 | ||
37 | { | ||
38 | public ListPair(object head, object tail) : base(Atom.DOT, head, tail) | ||
39 | { | ||
40 | } | ||
41 | |||
42 | public static object make(List<object> list) | ||
43 | { | ||
44 | if (list.Count <= 0) | ||
45 | return Atom.NIL; | ||
46 | |||
47 | object result = Atom.NIL; | ||
48 | // Start from the end. | ||
49 | for (int i = list.Count - 1; i >= 0; --i) | ||
50 | result = new ListPair(list[i], result); | ||
51 | return result; | ||
52 | } | ||
53 | |||
54 | public static object make(object[] array) | ||
55 | { | ||
56 | if (array.Length <= 0) | ||
57 | return Atom.NIL; | ||
58 | |||
59 | object result = Atom.NIL; | ||
60 | // Start from the end. | ||
61 | for (int i = array.Length - 1; i >= 0; --i) | ||
62 | result = new ListPair(array[i], result); | ||
63 | return result; | ||
64 | } | ||
65 | |||
66 | /// <summary> | ||
67 | /// Return a ListPair version of array, where repeated elements | ||
68 | /// (according to YP.termEqual) are removed. | ||
69 | /// </summary> | ||
70 | /// <param name="array"></param> | ||
71 | /// <returns></returns> | ||
72 | public static object makeWithoutRepeatedTerms(object[] array) | ||
73 | { | ||
74 | if (array.Length <= 0) | ||
75 | return Atom.NIL; | ||
76 | |||
77 | // Start from the end. | ||
78 | object previousTerm = array[array.Length - 1]; | ||
79 | object result = new ListPair(previousTerm, Atom.NIL); | ||
80 | for (int i = array.Length - 2; i >= 0; --i) | ||
81 | { | ||
82 | object term = array[i]; | ||
83 | if (YP.termEqual(term, previousTerm)) | ||
84 | continue; | ||
85 | result = new ListPair(term, result); | ||
86 | previousTerm = term; | ||
87 | } | ||
88 | return result; | ||
89 | } | ||
90 | |||
91 | /// <summary> | ||
92 | /// Return a ListPair version of array, where repeated elements | ||
93 | /// (according to YP.termEqual) are removed. | ||
94 | /// </summary> | ||
95 | /// <param name="array"></param> | ||
96 | /// <returns></returns> | ||
97 | public static object makeWithoutRepeatedTerms(List<object> array) | ||
98 | { | ||
99 | if (array.Count <= 0) | ||
100 | return Atom.NIL; | ||
101 | |||
102 | // Start from the end. | ||
103 | object previousTerm = array[array.Count - 1]; | ||
104 | object result = new ListPair(previousTerm, Atom.NIL); | ||
105 | for (int i = array.Count - 2; i >= 0; --i) | ||
106 | { | ||
107 | object term = array[i]; | ||
108 | if (YP.termEqual(term, previousTerm)) | ||
109 | continue; | ||
110 | result = new ListPair(term, result); | ||
111 | previousTerm = term; | ||
112 | } | ||
113 | return result; | ||
114 | } | ||
115 | |||
116 | public static object make(object element1) | ||
117 | { | ||
118 | return new ListPair(element1, Atom.NIL); | ||
119 | } | ||
120 | |||
121 | public static object make(object element1, object element2) | ||
122 | { | ||
123 | return new ListPair(element1, new ListPair(element2, Atom.NIL)); | ||
124 | } | ||
125 | |||
126 | public static object make(object element1, object element2, object element3) | ||
127 | { | ||
128 | return new ListPair(element1, | ||
129 | new ListPair(element2, new ListPair(element3, Atom.NIL))); | ||
130 | } | ||
131 | |||
132 | /// <summary> | ||
133 | /// Return an array of the elements in list or null if it is not | ||
134 | /// a proper list. If list is Atom.NIL, return an array of zero elements. | ||
135 | /// This does not call YP.getValue on each element. | ||
136 | /// </summary> | ||
137 | /// <param name="list"></param> | ||
138 | /// <returns></returns> | ||
139 | public static object[] toArray(object list) | ||
140 | { | ||
141 | list = YP.getValue(list); | ||
142 | if (list.Equals(Atom.NIL)) | ||
143 | return new object[0]; | ||
144 | |||
145 | List<object> result = new List<object>(); | ||
146 | for (object element = list; | ||
147 | element is Functor2 && ((Functor2)element)._name == Atom.DOT; | ||
148 | element = YP.getValue(((Functor2)element)._arg2)) | ||
149 | result.Add(((Functor2)element)._arg1); | ||
150 | |||
151 | if (result.Count <= 0) | ||
152 | return null; | ||
153 | return result.ToArray(); | ||
154 | } | ||
155 | } | ||
156 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs new file mode 100644 index 0000000..105b556 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Parser.cs | |||
@@ -0,0 +1,4457 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections.Generic; | ||
33 | |||
34 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
35 | { | ||
36 | public class Parser | ||
37 | { | ||
38 | public static IEnumerable<bool> formatError(object Output, object Format, object Arguments) | ||
39 | { | ||
40 | // Debug: Simple implementation for now. | ||
41 | YP.write(Format); | ||
42 | YP.write(Arguments); | ||
43 | YP.nl(); | ||
44 | yield return false; | ||
45 | } | ||
46 | |||
47 | // Debug: Hand-modify this central predicate to do tail recursion. | ||
48 | public static IEnumerable<bool> read_tokens(object arg1, object arg2, object arg3) | ||
49 | { | ||
50 | bool repeat = true; | ||
51 | while (repeat) | ||
52 | { | ||
53 | repeat = false; | ||
54 | { | ||
55 | object C1 = arg1; | ||
56 | object Dict = arg2; | ||
57 | object Tokens = arg3; | ||
58 | Variable C2 = new Variable(); | ||
59 | if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL))) | ||
60 | { | ||
61 | if (YP.greaterThanOrEqual(C1, 0)) | ||
62 | { | ||
63 | foreach (bool l4 in YP.get_code(C2)) | ||
64 | { | ||
65 | #if false | ||
66 | foreach (bool l5 in read_tokens(C2, Dict, Tokens)) | ||
67 | { | ||
68 | yield return false; | ||
69 | } | ||
70 | #endif | ||
71 | arg1 = YP.getValue(C2); | ||
72 | arg2 = YP.getValue(Dict); | ||
73 | arg3 = YP.getValue(Tokens); | ||
74 | repeat = true; | ||
75 | } | ||
76 | } | ||
77 | goto cutIf1; | ||
78 | } | ||
79 | if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL))) | ||
80 | { | ||
81 | if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL))) | ||
82 | { | ||
83 | foreach (bool l4 in read_identifier(C1, Dict, Tokens)) | ||
84 | { | ||
85 | yield return false; | ||
86 | } | ||
87 | goto cutIf2; | ||
88 | } | ||
89 | } | ||
90 | if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL))) | ||
91 | { | ||
92 | if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL))) | ||
93 | { | ||
94 | foreach (bool l4 in read_variable(C1, Dict, Tokens)) | ||
95 | { | ||
96 | yield return false; | ||
97 | } | ||
98 | goto cutIf3; | ||
99 | } | ||
100 | } | ||
101 | if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) | ||
102 | { | ||
103 | if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL))) | ||
104 | { | ||
105 | foreach (bool l4 in read_number(C1, Dict, Tokens)) | ||
106 | { | ||
107 | yield return false; | ||
108 | } | ||
109 | goto cutIf4; | ||
110 | } | ||
111 | } | ||
112 | if (YP.lessThan(C1, 127)) | ||
113 | { | ||
114 | foreach (bool l3 in read_special(C1, Dict, Tokens)) | ||
115 | { | ||
116 | yield return false; | ||
117 | } | ||
118 | goto cutIf5; | ||
119 | } | ||
120 | if (YP.lessThanOrEqual(C1, 160)) | ||
121 | { | ||
122 | foreach (bool l3 in YP.get_code(C2)) | ||
123 | { | ||
124 | #if false | ||
125 | foreach (bool l4 in read_tokens(C2, Dict, Tokens)) | ||
126 | { | ||
127 | yield return false; | ||
128 | } | ||
129 | #endif | ||
130 | arg1 = YP.getValue(C2); | ||
131 | arg2 = YP.getValue(Dict); | ||
132 | arg3 = YP.getValue(Tokens); | ||
133 | repeat = true; | ||
134 | } | ||
135 | goto cutIf6; | ||
136 | } | ||
137 | if (YP.greaterThanOrEqual(C1, 223)) | ||
138 | { | ||
139 | if (YP.notEqual(C1, 247)) | ||
140 | { | ||
141 | foreach (bool l4 in read_identifier(C1, Dict, Tokens)) | ||
142 | { | ||
143 | yield return false; | ||
144 | } | ||
145 | goto cutIf7; | ||
146 | } | ||
147 | } | ||
148 | if (YP.greaterThanOrEqual(C1, 192)) | ||
149 | { | ||
150 | if (YP.notEqual(C1, 215)) | ||
151 | { | ||
152 | foreach (bool l4 in read_variable(C1, Dict, Tokens)) | ||
153 | { | ||
154 | yield return false; | ||
155 | } | ||
156 | goto cutIf8; | ||
157 | } | ||
158 | } | ||
159 | if (YP.notEqual(C1, 170)) | ||
160 | { | ||
161 | if (YP.notEqual(C1, 186)) | ||
162 | { | ||
163 | foreach (bool l4 in read_symbol(C1, Dict, Tokens)) | ||
164 | { | ||
165 | yield return false; | ||
166 | } | ||
167 | goto cutIf9; | ||
168 | } | ||
169 | } | ||
170 | foreach (bool l2 in read_identifier(C1, Dict, Tokens)) | ||
171 | { | ||
172 | yield return false; | ||
173 | } | ||
174 | cutIf9: | ||
175 | cutIf8: | ||
176 | cutIf7: | ||
177 | cutIf6: | ||
178 | cutIf5: | ||
179 | cutIf4: | ||
180 | cutIf3: | ||
181 | cutIf2: | ||
182 | cutIf1: | ||
183 | { } | ||
184 | } | ||
185 | } | ||
186 | } | ||
187 | |||
188 | // Compiler output follows. | ||
189 | |||
190 | class YPInnerClass { } | ||
191 | static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; } | ||
192 | |||
193 | public static IEnumerable<bool> parseInput(object TermList) | ||
194 | { | ||
195 | { | ||
196 | Variable TermAndVariables = new Variable(); | ||
197 | FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables); | ||
198 | foreach (bool l2 in parseInputHelper(TermAndVariables)) | ||
199 | { | ||
200 | findallAnswers1.add(); | ||
201 | } | ||
202 | foreach (bool l2 in findallAnswers1.result(TermList)) | ||
203 | { | ||
204 | yield return false; | ||
205 | } | ||
206 | } | ||
207 | } | ||
208 | |||
209 | public static IEnumerable<bool> parseInputHelper(object arg1) | ||
210 | { | ||
211 | { | ||
212 | Variable Term = new Variable(); | ||
213 | Variable Variables = new Variable(); | ||
214 | Variable Answer = new Variable(); | ||
215 | Variable x4 = new Variable(); | ||
216 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"f", Term, Variables))) | ||
217 | { | ||
218 | foreach (bool l3 in YP.repeat()) | ||
219 | { | ||
220 | foreach (bool l4 in portable_read3(Answer, Variables, x4)) | ||
221 | { | ||
222 | foreach (bool l5 in remove_pos(Answer, Term)) | ||
223 | { | ||
224 | if (YP.termEqual(Term, Atom.a(@"end_of_file"))) | ||
225 | { | ||
226 | yield break; | ||
227 | goto cutIf1; | ||
228 | } | ||
229 | yield return false; | ||
230 | cutIf1: | ||
231 | { } | ||
232 | } | ||
233 | } | ||
234 | } | ||
235 | } | ||
236 | } | ||
237 | } | ||
238 | |||
239 | public static IEnumerable<bool> clear_errors() | ||
240 | { | ||
241 | { | ||
242 | yield return false; | ||
243 | } | ||
244 | } | ||
245 | |||
246 | public static IEnumerable<bool> remove_pos(object arg1, object arg2) | ||
247 | { | ||
248 | { | ||
249 | Variable X = new Variable(); | ||
250 | foreach (bool l2 in YP.unify(arg1, X)) | ||
251 | { | ||
252 | foreach (bool l3 in YP.unify(arg2, X)) | ||
253 | { | ||
254 | if (YP.var(X)) | ||
255 | { | ||
256 | yield return true; | ||
257 | yield break; | ||
258 | } | ||
259 | } | ||
260 | } | ||
261 | } | ||
262 | { | ||
263 | object X = arg2; | ||
264 | Variable _Pos = new Variable(); | ||
265 | Variable _Name = new Variable(); | ||
266 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"$VAR", _Pos, _Name, X))) | ||
267 | { | ||
268 | if (YP.var(X)) | ||
269 | { | ||
270 | yield return true; | ||
271 | yield break; | ||
272 | } | ||
273 | } | ||
274 | } | ||
275 | { | ||
276 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
277 | { | ||
278 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
279 | { | ||
280 | yield return true; | ||
281 | yield break; | ||
282 | } | ||
283 | } | ||
284 | } | ||
285 | { | ||
286 | Variable H = new Variable(); | ||
287 | Variable T = new Variable(); | ||
288 | Variable NH = new Variable(); | ||
289 | Variable NT = new Variable(); | ||
290 | foreach (bool l2 in YP.unify(arg1, new ListPair(H, T))) | ||
291 | { | ||
292 | foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT))) | ||
293 | { | ||
294 | foreach (bool l4 in remove_pos(H, NH)) | ||
295 | { | ||
296 | foreach (bool l5 in remove_pos(T, NT)) | ||
297 | { | ||
298 | yield return false; | ||
299 | } | ||
300 | } | ||
301 | yield break; | ||
302 | } | ||
303 | } | ||
304 | } | ||
305 | { | ||
306 | Variable A = new Variable(); | ||
307 | Variable B = new Variable(); | ||
308 | Variable NA = new Variable(); | ||
309 | Variable NB = new Variable(); | ||
310 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
311 | { | ||
312 | foreach (bool l3 in YP.unify(arg2, new Functor2(@",", NA, NB))) | ||
313 | { | ||
314 | foreach (bool l4 in remove_pos(A, NA)) | ||
315 | { | ||
316 | foreach (bool l5 in remove_pos(B, NB)) | ||
317 | { | ||
318 | yield return false; | ||
319 | } | ||
320 | } | ||
321 | yield break; | ||
322 | } | ||
323 | } | ||
324 | } | ||
325 | { | ||
326 | Variable Atom_1 = new Variable(); | ||
327 | Variable _F = new Variable(); | ||
328 | foreach (bool l2 in YP.unify(arg1, Atom_1)) | ||
329 | { | ||
330 | foreach (bool l3 in YP.unify(arg2, Atom_1)) | ||
331 | { | ||
332 | foreach (bool l4 in YP.functor(Atom_1, _F, 0)) | ||
333 | { | ||
334 | yield return false; | ||
335 | } | ||
336 | } | ||
337 | } | ||
338 | } | ||
339 | { | ||
340 | object Term = arg1; | ||
341 | object NewTerm = arg2; | ||
342 | Variable Func = new Variable(); | ||
343 | Variable _Pos = new Variable(); | ||
344 | Variable Args = new Variable(); | ||
345 | Variable NArgs = new Variable(); | ||
346 | if (YP.nonvar(Term)) | ||
347 | { | ||
348 | foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args)))) | ||
349 | { | ||
350 | foreach (bool l4 in remove_pos(Args, NArgs)) | ||
351 | { | ||
352 | foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs))) | ||
353 | { | ||
354 | yield return false; | ||
355 | } | ||
356 | } | ||
357 | } | ||
358 | } | ||
359 | } | ||
360 | } | ||
361 | |||
362 | public static IEnumerable<bool> portable_read_position(object Term, object PosTerm, object Syntax) | ||
363 | { | ||
364 | { | ||
365 | foreach (bool l2 in portable_read(PosTerm, Syntax)) | ||
366 | { | ||
367 | foreach (bool l3 in remove_pos(PosTerm, Term)) | ||
368 | { | ||
369 | yield return false; | ||
370 | } | ||
371 | } | ||
372 | } | ||
373 | } | ||
374 | |||
375 | public static IEnumerable<bool> portable_read(object Answer, object Syntax) | ||
376 | { | ||
377 | { | ||
378 | Variable Tokens = new Variable(); | ||
379 | Variable ParseTokens = new Variable(); | ||
380 | foreach (bool l2 in read_tokens1(Tokens)) | ||
381 | { | ||
382 | foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax)) | ||
383 | { | ||
384 | foreach (bool l4 in parse2(ParseTokens, Answer)) | ||
385 | { | ||
386 | yield return false; | ||
387 | } | ||
388 | } | ||
389 | } | ||
390 | } | ||
391 | } | ||
392 | |||
393 | public static IEnumerable<bool> portable_read3(object Answer, object Variables, object Syntax) | ||
394 | { | ||
395 | { | ||
396 | Variable Tokens = new Variable(); | ||
397 | Variable ParseTokens = new Variable(); | ||
398 | foreach (bool l2 in read_tokens2(Tokens, Variables)) | ||
399 | { | ||
400 | foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax)) | ||
401 | { | ||
402 | foreach (bool l4 in parse2(ParseTokens, Answer)) | ||
403 | { | ||
404 | yield return false; | ||
405 | } | ||
406 | } | ||
407 | } | ||
408 | } | ||
409 | } | ||
410 | |||
411 | public static IEnumerable<bool> remove_comments(object arg1, object arg2, object arg3) | ||
412 | { | ||
413 | { | ||
414 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
415 | { | ||
416 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
417 | { | ||
418 | foreach (bool l4 in YP.unify(arg3, Atom.NIL)) | ||
419 | { | ||
420 | yield return false; | ||
421 | } | ||
422 | } | ||
423 | } | ||
424 | } | ||
425 | { | ||
426 | object Ys = arg2; | ||
427 | Variable S = new Variable(); | ||
428 | Variable E = new Variable(); | ||
429 | Variable Xs = new Variable(); | ||
430 | Variable Zs = new Variable(); | ||
431 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"comment", S, E), Xs))) | ||
432 | { | ||
433 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", S, E), Zs))) | ||
434 | { | ||
435 | foreach (bool l4 in remove_comments(Xs, Ys, Zs)) | ||
436 | { | ||
437 | yield return false; | ||
438 | } | ||
439 | yield break; | ||
440 | } | ||
441 | } | ||
442 | } | ||
443 | { | ||
444 | Variable Pos = new Variable(); | ||
445 | Variable Xs = new Variable(); | ||
446 | Variable Ys = new Variable(); | ||
447 | Variable Pos2 = new Variable(); | ||
448 | Variable Zs = new Variable(); | ||
449 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Xs))) | ||
450 | { | ||
451 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"["), Ys))) | ||
452 | { | ||
453 | foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs))) | ||
454 | { | ||
455 | foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1))) | ||
456 | { | ||
457 | foreach (bool l6 in remove_comments(Xs, Ys, Zs)) | ||
458 | { | ||
459 | yield return false; | ||
460 | } | ||
461 | } | ||
462 | yield break; | ||
463 | } | ||
464 | } | ||
465 | } | ||
466 | } | ||
467 | { | ||
468 | Variable Pos = new Variable(); | ||
469 | Variable Xs = new Variable(); | ||
470 | Variable Ys = new Variable(); | ||
471 | Variable Pos2 = new Variable(); | ||
472 | Variable Zs = new Variable(); | ||
473 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Xs))) | ||
474 | { | ||
475 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), Ys))) | ||
476 | { | ||
477 | foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2(@"list", Pos, Pos2), Zs))) | ||
478 | { | ||
479 | foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1))) | ||
480 | { | ||
481 | foreach (bool l6 in remove_comments(Xs, Ys, Zs)) | ||
482 | { | ||
483 | yield return false; | ||
484 | } | ||
485 | } | ||
486 | yield break; | ||
487 | } | ||
488 | } | ||
489 | } | ||
490 | } | ||
491 | { | ||
492 | object Zs = arg3; | ||
493 | Variable Token = new Variable(); | ||
494 | Variable Xs = new Variable(); | ||
495 | Variable Ys = new Variable(); | ||
496 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs))) | ||
497 | { | ||
498 | foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys))) | ||
499 | { | ||
500 | foreach (bool l4 in remove_comments(Xs, Ys, Zs)) | ||
501 | { | ||
502 | yield return false; | ||
503 | } | ||
504 | } | ||
505 | } | ||
506 | } | ||
507 | } | ||
508 | |||
509 | public static IEnumerable<bool> expect(object Token, object arg2, object arg3) | ||
510 | { | ||
511 | { | ||
512 | object Rest = arg3; | ||
513 | foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest))) | ||
514 | { | ||
515 | yield return true; | ||
516 | yield break; | ||
517 | } | ||
518 | } | ||
519 | { | ||
520 | object S0 = arg2; | ||
521 | object x3 = arg3; | ||
522 | foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"or"), new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), Atom.NIL)))), S0)) | ||
523 | { | ||
524 | yield return false; | ||
525 | } | ||
526 | } | ||
527 | } | ||
528 | |||
529 | public static IEnumerable<bool> parse2(object Tokens, object Answer) | ||
530 | { | ||
531 | { | ||
532 | Variable Term = new Variable(); | ||
533 | Variable LeftOver = new Variable(); | ||
534 | foreach (bool l2 in clear_errors()) | ||
535 | { | ||
536 | foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver)) | ||
537 | { | ||
538 | foreach (bool l4 in all_read(LeftOver)) | ||
539 | { | ||
540 | foreach (bool l5 in YP.unify(Answer, Term)) | ||
541 | { | ||
542 | yield return false; | ||
543 | } | ||
544 | yield break; | ||
545 | } | ||
546 | } | ||
547 | foreach (bool l3 in syntax_error(Tokens)) | ||
548 | { | ||
549 | yield return false; | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | } | ||
554 | |||
555 | public static IEnumerable<bool> all_read(object arg1) | ||
556 | { | ||
557 | { | ||
558 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
559 | { | ||
560 | yield return false; | ||
561 | } | ||
562 | } | ||
563 | { | ||
564 | Variable Token = new Variable(); | ||
565 | Variable S = new Variable(); | ||
566 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S))) | ||
567 | { | ||
568 | foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"operator"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"after"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(Token, S))) | ||
569 | { | ||
570 | yield return false; | ||
571 | } | ||
572 | } | ||
573 | } | ||
574 | } | ||
575 | |||
576 | public static IEnumerable<bool> parse(object arg1, object arg2, object arg3, object arg4) | ||
577 | { | ||
578 | { | ||
579 | object x1 = arg2; | ||
580 | object x2 = arg3; | ||
581 | object x3 = arg4; | ||
582 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
583 | { | ||
584 | foreach (bool l3 in syntax_error(new ListPair(Atom.a(@"expression"), new ListPair(Atom.a(@"expected"), Atom.NIL)), Atom.NIL)) | ||
585 | { | ||
586 | yield return false; | ||
587 | } | ||
588 | } | ||
589 | } | ||
590 | { | ||
591 | object Precedence = arg2; | ||
592 | object Term = arg3; | ||
593 | object LeftOver = arg4; | ||
594 | Variable Token = new Variable(); | ||
595 | Variable RestTokens = new Variable(); | ||
596 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens))) | ||
597 | { | ||
598 | foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver)) | ||
599 | { | ||
600 | yield return false; | ||
601 | } | ||
602 | } | ||
603 | } | ||
604 | } | ||
605 | |||
606 | public static IEnumerable<bool> parse5(object arg1, object arg2, object arg3, object arg4, object arg5) | ||
607 | { | ||
608 | { | ||
609 | object S0 = arg2; | ||
610 | object x2 = arg3; | ||
611 | object x3 = arg4; | ||
612 | object x4 = arg5; | ||
613 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"}"))) | ||
614 | { | ||
615 | foreach (bool l3 in cannot_start(Atom.a(@"}"), S0)) | ||
616 | { | ||
617 | yield return false; | ||
618 | } | ||
619 | } | ||
620 | } | ||
621 | { | ||
622 | object S0 = arg2; | ||
623 | object x2 = arg3; | ||
624 | object x3 = arg4; | ||
625 | object x4 = arg5; | ||
626 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"]"))) | ||
627 | { | ||
628 | foreach (bool l3 in cannot_start(Atom.a(@"]"), S0)) | ||
629 | { | ||
630 | yield return false; | ||
631 | } | ||
632 | } | ||
633 | } | ||
634 | { | ||
635 | object S0 = arg2; | ||
636 | object x2 = arg3; | ||
637 | object x3 = arg4; | ||
638 | object x4 = arg5; | ||
639 | foreach (bool l2 in YP.unify(arg1, Atom.a(@")"))) | ||
640 | { | ||
641 | foreach (bool l3 in cannot_start(Atom.a(@")"), S0)) | ||
642 | { | ||
643 | yield return false; | ||
644 | } | ||
645 | } | ||
646 | } | ||
647 | { | ||
648 | object S0 = arg2; | ||
649 | object x2 = arg3; | ||
650 | object x3 = arg4; | ||
651 | object x4 = arg5; | ||
652 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
653 | { | ||
654 | foreach (bool l3 in cannot_start(Atom.a(@","), S0)) | ||
655 | { | ||
656 | yield return false; | ||
657 | } | ||
658 | } | ||
659 | } | ||
660 | { | ||
661 | object S0 = arg2; | ||
662 | object x2 = arg3; | ||
663 | object x3 = arg4; | ||
664 | object x4 = arg5; | ||
665 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
666 | { | ||
667 | foreach (bool l3 in cannot_start(Atom.a(@"|"), S0)) | ||
668 | { | ||
669 | yield return false; | ||
670 | } | ||
671 | } | ||
672 | } | ||
673 | { | ||
674 | object S0 = arg2; | ||
675 | object Precedence = arg3; | ||
676 | object Answer = arg4; | ||
677 | object S = arg5; | ||
678 | Variable Chars = new Variable(); | ||
679 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", Chars))) | ||
680 | { | ||
681 | foreach (bool l3 in exprtl0(S0, Chars, Precedence, Answer, S)) | ||
682 | { | ||
683 | yield return false; | ||
684 | } | ||
685 | } | ||
686 | } | ||
687 | { | ||
688 | object S0 = arg2; | ||
689 | object Precedence = arg3; | ||
690 | object Answer = arg4; | ||
691 | object S = arg5; | ||
692 | Variable Number = new Variable(); | ||
693 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", Number))) | ||
694 | { | ||
695 | foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S)) | ||
696 | { | ||
697 | yield return false; | ||
698 | } | ||
699 | } | ||
700 | } | ||
701 | { | ||
702 | object Precedence = arg3; | ||
703 | object Answer = arg4; | ||
704 | object S = arg5; | ||
705 | Variable S1 = new Variable(); | ||
706 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
707 | { | ||
708 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"]"), S1))) | ||
709 | { | ||
710 | foreach (bool l4 in read_atom(new Functor2(@"/", Atom.NIL, 0), S1, Precedence, Answer, S)) | ||
711 | { | ||
712 | yield return false; | ||
713 | } | ||
714 | yield break; | ||
715 | } | ||
716 | } | ||
717 | } | ||
718 | { | ||
719 | object S1 = arg2; | ||
720 | object Precedence = arg3; | ||
721 | object Answer = arg4; | ||
722 | object S = arg5; | ||
723 | Variable Arg1 = new Variable(); | ||
724 | Variable S2 = new Variable(); | ||
725 | Variable RestArgs = new Variable(); | ||
726 | Variable S3 = new Variable(); | ||
727 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
728 | { | ||
729 | foreach (bool l3 in parse(S1, 999, Arg1, S2)) | ||
730 | { | ||
731 | foreach (bool l4 in read_list(S2, RestArgs, S3)) | ||
732 | { | ||
733 | foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S)) | ||
734 | { | ||
735 | yield return false; | ||
736 | } | ||
737 | yield break; | ||
738 | } | ||
739 | } | ||
740 | } | ||
741 | } | ||
742 | { | ||
743 | object S1 = arg2; | ||
744 | object Precedence = arg3; | ||
745 | object Answer = arg4; | ||
746 | object S = arg5; | ||
747 | Variable Term = new Variable(); | ||
748 | Variable S2 = new Variable(); | ||
749 | Variable S3 = new Variable(); | ||
750 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"("))) | ||
751 | { | ||
752 | foreach (bool l3 in parse(S1, 1200, Term, S2)) | ||
753 | { | ||
754 | foreach (bool l4 in expect(Atom.a(@")"), S2, S3)) | ||
755 | { | ||
756 | foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S)) | ||
757 | { | ||
758 | yield return false; | ||
759 | } | ||
760 | yield break; | ||
761 | } | ||
762 | } | ||
763 | } | ||
764 | } | ||
765 | { | ||
766 | object S1 = arg2; | ||
767 | object Precedence = arg3; | ||
768 | object Answer = arg4; | ||
769 | object S = arg5; | ||
770 | Variable Term = new Variable(); | ||
771 | Variable S2 = new Variable(); | ||
772 | Variable S3 = new Variable(); | ||
773 | foreach (bool l2 in YP.unify(arg1, Atom.a(@" ("))) | ||
774 | { | ||
775 | foreach (bool l3 in parse(S1, 1200, Term, S2)) | ||
776 | { | ||
777 | foreach (bool l4 in expect(Atom.a(@")"), S2, S3)) | ||
778 | { | ||
779 | foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S)) | ||
780 | { | ||
781 | yield return false; | ||
782 | } | ||
783 | yield break; | ||
784 | } | ||
785 | } | ||
786 | } | ||
787 | } | ||
788 | { | ||
789 | object Precedence = arg3; | ||
790 | object Answer = arg4; | ||
791 | object S = arg5; | ||
792 | Variable _Pos = new Variable(); | ||
793 | Variable S1 = new Variable(); | ||
794 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), _Pos))) | ||
795 | { | ||
796 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"}"), S1))) | ||
797 | { | ||
798 | foreach (bool l4 in read_atom(Atom.a(@"{}"), S1, Precedence, Answer, S)) | ||
799 | { | ||
800 | yield return false; | ||
801 | } | ||
802 | yield break; | ||
803 | } | ||
804 | } | ||
805 | } | ||
806 | { | ||
807 | object S1 = arg2; | ||
808 | object Precedence = arg3; | ||
809 | object Answer = arg4; | ||
810 | object S = arg5; | ||
811 | Variable Pos = new Variable(); | ||
812 | Variable Term = new Variable(); | ||
813 | Variable S2 = new Variable(); | ||
814 | Variable S3 = new Variable(); | ||
815 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"{"), Pos))) | ||
816 | { | ||
817 | foreach (bool l3 in parse(S1, 1200, Term, S2)) | ||
818 | { | ||
819 | foreach (bool l4 in expect(Atom.a(@"}"), S2, S3)) | ||
820 | { | ||
821 | foreach (bool l5 in exprtl0(S3, new Functor2(@"{}", Pos, Term), Precedence, Answer, S)) | ||
822 | { | ||
823 | yield return false; | ||
824 | } | ||
825 | yield break; | ||
826 | } | ||
827 | } | ||
828 | } | ||
829 | } | ||
830 | { | ||
831 | object Precedence = arg3; | ||
832 | object Answer = arg4; | ||
833 | object S = arg5; | ||
834 | Variable Variable_1 = new Variable(); | ||
835 | Variable Name = new Variable(); | ||
836 | Variable Pos = new Variable(); | ||
837 | Variable S1 = new Variable(); | ||
838 | Variable Arg1 = new Variable(); | ||
839 | Variable S2 = new Variable(); | ||
840 | Variable RestArgs = new Variable(); | ||
841 | Variable S3 = new Variable(); | ||
842 | Variable Term = new Variable(); | ||
843 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos))) | ||
844 | { | ||
845 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1))) | ||
846 | { | ||
847 | foreach (bool l4 in parse(S1, 999, Arg1, S2)) | ||
848 | { | ||
849 | foreach (bool l5 in read_args(S2, RestArgs, S3)) | ||
850 | { | ||
851 | foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a(@"call"), new ListPair(new Functor3(@"$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs))))) | ||
852 | { | ||
853 | foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S)) | ||
854 | { | ||
855 | yield return false; | ||
856 | } | ||
857 | } | ||
858 | yield break; | ||
859 | } | ||
860 | } | ||
861 | yield break; | ||
862 | } | ||
863 | } | ||
864 | } | ||
865 | { | ||
866 | object S0 = arg2; | ||
867 | object Precedence = arg3; | ||
868 | object Answer = arg4; | ||
869 | object S = arg5; | ||
870 | Variable Variable_1 = new Variable(); | ||
871 | Variable Name = new Variable(); | ||
872 | Variable Pos = new Variable(); | ||
873 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", Variable_1, Name, Pos))) | ||
874 | { | ||
875 | foreach (bool l3 in exprtl0(S0, new Functor3(@"$VAR", Pos, Name, Variable_1), Precedence, Answer, S)) | ||
876 | { | ||
877 | yield return false; | ||
878 | } | ||
879 | } | ||
880 | } | ||
881 | { | ||
882 | object S0 = arg2; | ||
883 | object Precedence = arg3; | ||
884 | object Answer = arg4; | ||
885 | object S = arg5; | ||
886 | Variable Atom_1 = new Variable(); | ||
887 | Variable P = new Variable(); | ||
888 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", Atom_1, P))) | ||
889 | { | ||
890 | foreach (bool l3 in read_atom(new Functor2(@"/", Atom_1, P), S0, Precedence, Answer, S)) | ||
891 | { | ||
892 | yield return false; | ||
893 | } | ||
894 | } | ||
895 | } | ||
896 | } | ||
897 | |||
898 | public static IEnumerable<bool> read_atom(object arg1, object arg2, object Precedence, object Answer, object S) | ||
899 | { | ||
900 | { | ||
901 | Variable _Pos = new Variable(); | ||
902 | Variable Number = new Variable(); | ||
903 | Variable S1 = new Variable(); | ||
904 | Variable Negative = new Variable(); | ||
905 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom.a(@"-"), _Pos))) | ||
906 | { | ||
907 | foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1(@"number", Number), S1))) | ||
908 | { | ||
909 | foreach (bool l4 in YP.unify(Negative, YP.negate(Number))) | ||
910 | { | ||
911 | foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S)) | ||
912 | { | ||
913 | yield return false; | ||
914 | } | ||
915 | } | ||
916 | yield break; | ||
917 | } | ||
918 | } | ||
919 | } | ||
920 | { | ||
921 | Variable Functor_1 = new Variable(); | ||
922 | Variable Pos = new Variable(); | ||
923 | Variable S1 = new Variable(); | ||
924 | Variable Arg1 = new Variable(); | ||
925 | Variable S2 = new Variable(); | ||
926 | Variable RestArgs = new Variable(); | ||
927 | Variable S3 = new Variable(); | ||
928 | Variable Term = new Variable(); | ||
929 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Functor_1, Pos))) | ||
930 | { | ||
931 | foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a(@"("), S1))) | ||
932 | { | ||
933 | foreach (bool l4 in parse(S1, 999, Arg1, S2)) | ||
934 | { | ||
935 | foreach (bool l5 in read_args(S2, RestArgs, S3)) | ||
936 | { | ||
937 | foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs))))) | ||
938 | { | ||
939 | foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S)) | ||
940 | { | ||
941 | yield return false; | ||
942 | } | ||
943 | } | ||
944 | yield break; | ||
945 | } | ||
946 | } | ||
947 | yield break; | ||
948 | } | ||
949 | } | ||
950 | } | ||
951 | { | ||
952 | object S0 = arg2; | ||
953 | Variable Op = new Variable(); | ||
954 | Variable Pos = new Variable(); | ||
955 | Variable Oprec = new Variable(); | ||
956 | Variable Aprec = new Variable(); | ||
957 | Variable Flag = new Variable(); | ||
958 | Variable Term = new Variable(); | ||
959 | Variable Arg = new Variable(); | ||
960 | Variable S1 = new Variable(); | ||
961 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Op, Pos))) | ||
962 | { | ||
963 | foreach (bool l3 in prefixop(Op, Oprec, Aprec)) | ||
964 | { | ||
965 | foreach (bool l4 in possible_right_operand(S0, Flag)) | ||
966 | { | ||
967 | if (YP.lessThan(Flag, 0)) | ||
968 | { | ||
969 | foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL)))) | ||
970 | { | ||
971 | foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S)) | ||
972 | { | ||
973 | yield return false; | ||
974 | } | ||
975 | } | ||
976 | goto cutIf1; | ||
977 | } | ||
978 | if (YP.greaterThan(Oprec, Precedence)) | ||
979 | { | ||
980 | foreach (bool l6 in syntax_error(new ListPair(Atom.a(@"prefix"), new ListPair(Atom.a(@"operator"), new ListPair(Op, new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"context"), new ListPair(Atom.a(@"with"), new ListPair(Atom.a(@"precedence"), new ListPair(Precedence, Atom.NIL)))))))), S0)) | ||
981 | { | ||
982 | yield return false; | ||
983 | } | ||
984 | goto cutIf2; | ||
985 | } | ||
986 | if (YP.greaterThan(Flag, 0)) | ||
987 | { | ||
988 | foreach (bool l6 in parse(S0, Aprec, Arg, S1)) | ||
989 | { | ||
990 | foreach (bool l7 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL))))) | ||
991 | { | ||
992 | foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S)) | ||
993 | { | ||
994 | yield return false; | ||
995 | } | ||
996 | } | ||
997 | yield break; | ||
998 | } | ||
999 | goto cutIf3; | ||
1000 | } | ||
1001 | foreach (bool l5 in peepop(S0, S1)) | ||
1002 | { | ||
1003 | foreach (bool l6 in prefix_is_atom(S1, Oprec)) | ||
1004 | { | ||
1005 | foreach (bool l7 in exprtl(S1, Oprec, new Functor2(@"/", Op, Pos), Precedence, Answer, S)) | ||
1006 | { | ||
1007 | yield return false; | ||
1008 | } | ||
1009 | } | ||
1010 | } | ||
1011 | foreach (bool l5 in parse(S0, Aprec, Arg, S1)) | ||
1012 | { | ||
1013 | foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, new ListPair(Arg, Atom.NIL))))) | ||
1014 | { | ||
1015 | foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S)) | ||
1016 | { | ||
1017 | yield return false; | ||
1018 | } | ||
1019 | } | ||
1020 | yield break; | ||
1021 | } | ||
1022 | cutIf3: | ||
1023 | cutIf2: | ||
1024 | cutIf1: | ||
1025 | { } | ||
1026 | } | ||
1027 | yield break; | ||
1028 | } | ||
1029 | } | ||
1030 | } | ||
1031 | { | ||
1032 | object S0 = arg2; | ||
1033 | Variable Atom_1 = new Variable(); | ||
1034 | Variable Pos = new Variable(); | ||
1035 | Variable Term = new Variable(); | ||
1036 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", Atom_1, Pos))) | ||
1037 | { | ||
1038 | foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL)))) | ||
1039 | { | ||
1040 | foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S)) | ||
1041 | { | ||
1042 | yield return false; | ||
1043 | } | ||
1044 | } | ||
1045 | } | ||
1046 | } | ||
1047 | } | ||
1048 | |||
1049 | public static IEnumerable<bool> cannot_start(object Token, object S0) | ||
1050 | { | ||
1051 | { | ||
1052 | foreach (bool l2 in syntax_error(new ListPair(Token, new ListPair(Atom.a(@"cannot"), new ListPair(Atom.a(@"start"), new ListPair(Atom.a(@"an"), new ListPair(Atom.a(@"expression"), Atom.NIL))))), S0)) | ||
1053 | { | ||
1054 | yield return false; | ||
1055 | } | ||
1056 | } | ||
1057 | } | ||
1058 | |||
1059 | public static IEnumerable<bool> read_args(object arg1, object arg2, object arg3) | ||
1060 | { | ||
1061 | { | ||
1062 | object S = arg3; | ||
1063 | Variable S1 = new Variable(); | ||
1064 | Variable Term = new Variable(); | ||
1065 | Variable Rest = new Variable(); | ||
1066 | Variable S2 = new Variable(); | ||
1067 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@","), S1))) | ||
1068 | { | ||
1069 | foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest))) | ||
1070 | { | ||
1071 | foreach (bool l4 in parse(S1, 999, Term, S2)) | ||
1072 | { | ||
1073 | foreach (bool l5 in read_args(S2, Rest, S)) | ||
1074 | { | ||
1075 | yield return false; | ||
1076 | } | ||
1077 | yield break; | ||
1078 | } | ||
1079 | yield break; | ||
1080 | } | ||
1081 | } | ||
1082 | } | ||
1083 | { | ||
1084 | object S = arg3; | ||
1085 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@")"), S))) | ||
1086 | { | ||
1087 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
1088 | { | ||
1089 | yield return true; | ||
1090 | yield break; | ||
1091 | } | ||
1092 | } | ||
1093 | } | ||
1094 | { | ||
1095 | object S = arg1; | ||
1096 | object x2 = arg2; | ||
1097 | object x3 = arg3; | ||
1098 | foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", or )"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"arguments"), Atom.NIL)))), S)) | ||
1099 | { | ||
1100 | yield return false; | ||
1101 | } | ||
1102 | } | ||
1103 | } | ||
1104 | |||
1105 | public static IEnumerable<bool> read_list(object arg1, object arg2, object arg3) | ||
1106 | { | ||
1107 | { | ||
1108 | object x1 = arg2; | ||
1109 | object x2 = arg3; | ||
1110 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1111 | { | ||
1112 | foreach (bool l3 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), Atom.NIL)) | ||
1113 | { | ||
1114 | yield return false; | ||
1115 | } | ||
1116 | } | ||
1117 | } | ||
1118 | { | ||
1119 | object Rest = arg2; | ||
1120 | object S = arg3; | ||
1121 | Variable Token = new Variable(); | ||
1122 | Variable S1 = new Variable(); | ||
1123 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1))) | ||
1124 | { | ||
1125 | foreach (bool l3 in read_list4(Token, S1, Rest, S)) | ||
1126 | { | ||
1127 | yield return false; | ||
1128 | } | ||
1129 | } | ||
1130 | } | ||
1131 | } | ||
1132 | |||
1133 | public static IEnumerable<bool> read_list4(object arg1, object arg2, object arg3, object arg4) | ||
1134 | { | ||
1135 | { | ||
1136 | object S1 = arg2; | ||
1137 | object S = arg4; | ||
1138 | Variable Term = new Variable(); | ||
1139 | Variable Rest = new Variable(); | ||
1140 | Variable S2 = new Variable(); | ||
1141 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
1142 | { | ||
1143 | foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest))) | ||
1144 | { | ||
1145 | foreach (bool l4 in parse(S1, 999, Term, S2)) | ||
1146 | { | ||
1147 | foreach (bool l5 in read_list(S2, Rest, S)) | ||
1148 | { | ||
1149 | yield return false; | ||
1150 | } | ||
1151 | yield break; | ||
1152 | } | ||
1153 | yield break; | ||
1154 | } | ||
1155 | } | ||
1156 | } | ||
1157 | { | ||
1158 | object S1 = arg2; | ||
1159 | object Rest = arg3; | ||
1160 | object S = arg4; | ||
1161 | Variable S2 = new Variable(); | ||
1162 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
1163 | { | ||
1164 | foreach (bool l3 in parse(S1, 999, Rest, S2)) | ||
1165 | { | ||
1166 | foreach (bool l4 in expect(Atom.a(@"]"), S2, S)) | ||
1167 | { | ||
1168 | yield return false; | ||
1169 | } | ||
1170 | yield break; | ||
1171 | } | ||
1172 | yield break; | ||
1173 | } | ||
1174 | } | ||
1175 | { | ||
1176 | Variable S1 = new Variable(); | ||
1177 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"]"))) | ||
1178 | { | ||
1179 | foreach (bool l3 in YP.unify(arg2, S1)) | ||
1180 | { | ||
1181 | foreach (bool l4 in YP.unify(arg3, Atom.NIL)) | ||
1182 | { | ||
1183 | foreach (bool l5 in YP.unify(arg4, S1)) | ||
1184 | { | ||
1185 | yield return true; | ||
1186 | yield break; | ||
1187 | } | ||
1188 | } | ||
1189 | } | ||
1190 | } | ||
1191 | } | ||
1192 | { | ||
1193 | object Token = arg1; | ||
1194 | object S1 = arg2; | ||
1195 | object x3 = arg3; | ||
1196 | object x4 = arg4; | ||
1197 | foreach (bool l2 in syntax_error(new ListPair(Atom.a(@", | or ]"), new ListPair(Atom.a(@"expected"), new ListPair(Atom.a(@"in"), new ListPair(Atom.a(@"list"), Atom.NIL)))), new ListPair(Token, S1))) | ||
1198 | { | ||
1199 | yield return false; | ||
1200 | } | ||
1201 | } | ||
1202 | } | ||
1203 | |||
1204 | public static IEnumerable<bool> possible_right_operand(object arg1, object arg2) | ||
1205 | { | ||
1206 | { | ||
1207 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1208 | { | ||
1209 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1210 | { | ||
1211 | yield return false; | ||
1212 | } | ||
1213 | } | ||
1214 | } | ||
1215 | { | ||
1216 | object Flag = arg2; | ||
1217 | Variable H = new Variable(); | ||
1218 | Variable T = new Variable(); | ||
1219 | foreach (bool l2 in YP.unify(arg1, new ListPair(H, T))) | ||
1220 | { | ||
1221 | foreach (bool l3 in possible_right_operand3(H, Flag, T)) | ||
1222 | { | ||
1223 | yield return false; | ||
1224 | } | ||
1225 | } | ||
1226 | } | ||
1227 | } | ||
1228 | |||
1229 | public static IEnumerable<bool> possible_right_operand3(object arg1, object arg2, object arg3) | ||
1230 | { | ||
1231 | { | ||
1232 | object x4 = arg3; | ||
1233 | Variable x1 = new Variable(); | ||
1234 | Variable x2 = new Variable(); | ||
1235 | Variable x3 = new Variable(); | ||
1236 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", x1, x2, x3))) | ||
1237 | { | ||
1238 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1239 | { | ||
1240 | yield return false; | ||
1241 | } | ||
1242 | } | ||
1243 | } | ||
1244 | { | ||
1245 | object x2 = arg3; | ||
1246 | Variable x1 = new Variable(); | ||
1247 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", x1))) | ||
1248 | { | ||
1249 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1250 | { | ||
1251 | yield return false; | ||
1252 | } | ||
1253 | } | ||
1254 | } | ||
1255 | { | ||
1256 | object x2 = arg3; | ||
1257 | Variable x1 = new Variable(); | ||
1258 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", x1))) | ||
1259 | { | ||
1260 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1261 | { | ||
1262 | yield return false; | ||
1263 | } | ||
1264 | } | ||
1265 | } | ||
1266 | { | ||
1267 | object x1 = arg3; | ||
1268 | foreach (bool l2 in YP.unify(arg1, Atom.a(@" ("))) | ||
1269 | { | ||
1270 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1271 | { | ||
1272 | yield return false; | ||
1273 | } | ||
1274 | } | ||
1275 | } | ||
1276 | { | ||
1277 | object x1 = arg3; | ||
1278 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"("))) | ||
1279 | { | ||
1280 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
1281 | { | ||
1282 | yield return false; | ||
1283 | } | ||
1284 | } | ||
1285 | } | ||
1286 | { | ||
1287 | object x1 = arg3; | ||
1288 | foreach (bool l2 in YP.unify(arg1, Atom.a(@")"))) | ||
1289 | { | ||
1290 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1291 | { | ||
1292 | yield return false; | ||
1293 | } | ||
1294 | } | ||
1295 | } | ||
1296 | { | ||
1297 | Variable x1 = new Variable(); | ||
1298 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
1299 | { | ||
1300 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
1301 | { | ||
1302 | foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"]"), x1))) | ||
1303 | { | ||
1304 | yield return true; | ||
1305 | yield break; | ||
1306 | } | ||
1307 | } | ||
1308 | } | ||
1309 | } | ||
1310 | { | ||
1311 | object x1 = arg3; | ||
1312 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
1313 | { | ||
1314 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1315 | { | ||
1316 | yield return false; | ||
1317 | } | ||
1318 | } | ||
1319 | } | ||
1320 | { | ||
1321 | object x1 = arg3; | ||
1322 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"]"))) | ||
1323 | { | ||
1324 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1325 | { | ||
1326 | yield return false; | ||
1327 | } | ||
1328 | } | ||
1329 | } | ||
1330 | { | ||
1331 | Variable x1 = new Variable(); | ||
1332 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"{"))) | ||
1333 | { | ||
1334 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
1335 | { | ||
1336 | foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a(@"}"), x1))) | ||
1337 | { | ||
1338 | yield return true; | ||
1339 | yield break; | ||
1340 | } | ||
1341 | } | ||
1342 | } | ||
1343 | } | ||
1344 | { | ||
1345 | object x1 = arg3; | ||
1346 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"{"))) | ||
1347 | { | ||
1348 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
1349 | { | ||
1350 | yield return false; | ||
1351 | } | ||
1352 | } | ||
1353 | } | ||
1354 | { | ||
1355 | object x1 = arg3; | ||
1356 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"}"))) | ||
1357 | { | ||
1358 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1359 | { | ||
1360 | yield return false; | ||
1361 | } | ||
1362 | } | ||
1363 | } | ||
1364 | { | ||
1365 | object x1 = arg3; | ||
1366 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
1367 | { | ||
1368 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1369 | { | ||
1370 | yield return false; | ||
1371 | } | ||
1372 | } | ||
1373 | } | ||
1374 | { | ||
1375 | object x1 = arg3; | ||
1376 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
1377 | { | ||
1378 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
1379 | { | ||
1380 | yield return false; | ||
1381 | } | ||
1382 | } | ||
1383 | } | ||
1384 | { | ||
1385 | object x3 = arg3; | ||
1386 | Variable x1 = new Variable(); | ||
1387 | Variable x2 = new Variable(); | ||
1388 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", x1, x2))) | ||
1389 | { | ||
1390 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
1391 | { | ||
1392 | yield return false; | ||
1393 | } | ||
1394 | } | ||
1395 | } | ||
1396 | } | ||
1397 | |||
1398 | public static IEnumerable<bool> peepop(object arg1, object arg2) | ||
1399 | { | ||
1400 | { | ||
1401 | Variable F = new Variable(); | ||
1402 | Variable Pos = new Variable(); | ||
1403 | Variable S1 = new Variable(); | ||
1404 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1)))) | ||
1405 | { | ||
1406 | foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2(@"atom", F, Pos), new ListPair(Atom.a(@"("), S1)))) | ||
1407 | { | ||
1408 | yield return true; | ||
1409 | yield break; | ||
1410 | } | ||
1411 | } | ||
1412 | } | ||
1413 | { | ||
1414 | Variable F = new Variable(); | ||
1415 | Variable Pos = new Variable(); | ||
1416 | Variable S1 = new Variable(); | ||
1417 | Variable L = new Variable(); | ||
1418 | Variable P = new Variable(); | ||
1419 | Variable R = new Variable(); | ||
1420 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1))) | ||
1421 | { | ||
1422 | foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, P, R }), S1))) | ||
1423 | { | ||
1424 | foreach (bool l4 in infixop(F, L, P, R)) | ||
1425 | { | ||
1426 | yield return false; | ||
1427 | } | ||
1428 | } | ||
1429 | } | ||
1430 | } | ||
1431 | { | ||
1432 | Variable F = new Variable(); | ||
1433 | Variable Pos = new Variable(); | ||
1434 | Variable S1 = new Variable(); | ||
1435 | Variable L = new Variable(); | ||
1436 | Variable P = new Variable(); | ||
1437 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", F, Pos), S1))) | ||
1438 | { | ||
1439 | foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, P), S1))) | ||
1440 | { | ||
1441 | foreach (bool l4 in postfixop(F, L, P)) | ||
1442 | { | ||
1443 | yield return false; | ||
1444 | } | ||
1445 | } | ||
1446 | } | ||
1447 | } | ||
1448 | { | ||
1449 | Variable S0 = new Variable(); | ||
1450 | foreach (bool l2 in YP.unify(arg1, S0)) | ||
1451 | { | ||
1452 | foreach (bool l3 in YP.unify(arg2, S0)) | ||
1453 | { | ||
1454 | yield return false; | ||
1455 | } | ||
1456 | } | ||
1457 | } | ||
1458 | } | ||
1459 | |||
1460 | public static IEnumerable<bool> prefix_is_atom(object arg1, object arg2) | ||
1461 | { | ||
1462 | { | ||
1463 | object Precedence = arg2; | ||
1464 | Variable Token = new Variable(); | ||
1465 | Variable x2 = new Variable(); | ||
1466 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2))) | ||
1467 | { | ||
1468 | foreach (bool l3 in prefix_is_atom(Token, Precedence)) | ||
1469 | { | ||
1470 | yield return false; | ||
1471 | } | ||
1472 | } | ||
1473 | } | ||
1474 | { | ||
1475 | object P = arg2; | ||
1476 | Variable x1 = new Variable(); | ||
1477 | Variable L = new Variable(); | ||
1478 | Variable x3 = new Variable(); | ||
1479 | Variable x4 = new Variable(); | ||
1480 | foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { x1, L, x3, x4 }))) | ||
1481 | { | ||
1482 | if (YP.greaterThanOrEqual(L, P)) | ||
1483 | { | ||
1484 | yield return false; | ||
1485 | } | ||
1486 | } | ||
1487 | } | ||
1488 | { | ||
1489 | object P = arg2; | ||
1490 | Variable x1 = new Variable(); | ||
1491 | Variable L = new Variable(); | ||
1492 | Variable x3 = new Variable(); | ||
1493 | foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), x1, L, x3))) | ||
1494 | { | ||
1495 | if (YP.greaterThanOrEqual(L, P)) | ||
1496 | { | ||
1497 | yield return false; | ||
1498 | } | ||
1499 | } | ||
1500 | } | ||
1501 | { | ||
1502 | object x1 = arg2; | ||
1503 | foreach (bool l2 in YP.unify(arg1, Atom.a(@")"))) | ||
1504 | { | ||
1505 | yield return false; | ||
1506 | } | ||
1507 | } | ||
1508 | { | ||
1509 | object x1 = arg2; | ||
1510 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"]"))) | ||
1511 | { | ||
1512 | yield return false; | ||
1513 | } | ||
1514 | } | ||
1515 | { | ||
1516 | object x1 = arg2; | ||
1517 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"}"))) | ||
1518 | { | ||
1519 | yield return false; | ||
1520 | } | ||
1521 | } | ||
1522 | { | ||
1523 | object P = arg2; | ||
1524 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
1525 | { | ||
1526 | if (YP.greaterThanOrEqual(1100, P)) | ||
1527 | { | ||
1528 | yield return false; | ||
1529 | } | ||
1530 | } | ||
1531 | } | ||
1532 | { | ||
1533 | object P = arg2; | ||
1534 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
1535 | { | ||
1536 | if (YP.greaterThanOrEqual(1000, P)) | ||
1537 | { | ||
1538 | yield return false; | ||
1539 | } | ||
1540 | } | ||
1541 | } | ||
1542 | { | ||
1543 | object x1 = arg2; | ||
1544 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1545 | { | ||
1546 | yield return false; | ||
1547 | } | ||
1548 | } | ||
1549 | } | ||
1550 | |||
1551 | public static IEnumerable<bool> exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5) | ||
1552 | { | ||
1553 | { | ||
1554 | object x2 = arg3; | ||
1555 | Variable Term = new Variable(); | ||
1556 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1557 | { | ||
1558 | foreach (bool l3 in YP.unify(arg2, Term)) | ||
1559 | { | ||
1560 | foreach (bool l4 in YP.unify(arg4, Term)) | ||
1561 | { | ||
1562 | foreach (bool l5 in YP.unify(arg5, Atom.NIL)) | ||
1563 | { | ||
1564 | yield return false; | ||
1565 | } | ||
1566 | } | ||
1567 | } | ||
1568 | } | ||
1569 | } | ||
1570 | { | ||
1571 | object Term = arg2; | ||
1572 | object Precedence = arg3; | ||
1573 | object Answer = arg4; | ||
1574 | object S = arg5; | ||
1575 | Variable Token = new Variable(); | ||
1576 | Variable S1 = new Variable(); | ||
1577 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1))) | ||
1578 | { | ||
1579 | foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1)) | ||
1580 | { | ||
1581 | yield return false; | ||
1582 | } | ||
1583 | } | ||
1584 | } | ||
1585 | } | ||
1586 | |||
1587 | public static IEnumerable<bool> exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) | ||
1588 | { | ||
1589 | { | ||
1590 | object x2 = arg3; | ||
1591 | object S1 = arg6; | ||
1592 | Variable Term = new Variable(); | ||
1593 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"}"))) | ||
1594 | { | ||
1595 | foreach (bool l3 in YP.unify(arg2, Term)) | ||
1596 | { | ||
1597 | foreach (bool l4 in YP.unify(arg4, Term)) | ||
1598 | { | ||
1599 | foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"}"), S1))) | ||
1600 | { | ||
1601 | yield return false; | ||
1602 | } | ||
1603 | } | ||
1604 | } | ||
1605 | } | ||
1606 | } | ||
1607 | { | ||
1608 | object x2 = arg3; | ||
1609 | object S1 = arg6; | ||
1610 | Variable Term = new Variable(); | ||
1611 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"]"))) | ||
1612 | { | ||
1613 | foreach (bool l3 in YP.unify(arg2, Term)) | ||
1614 | { | ||
1615 | foreach (bool l4 in YP.unify(arg4, Term)) | ||
1616 | { | ||
1617 | foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@"]"), S1))) | ||
1618 | { | ||
1619 | yield return false; | ||
1620 | } | ||
1621 | } | ||
1622 | } | ||
1623 | } | ||
1624 | } | ||
1625 | { | ||
1626 | object x2 = arg3; | ||
1627 | object S1 = arg6; | ||
1628 | Variable Term = new Variable(); | ||
1629 | foreach (bool l2 in YP.unify(arg1, Atom.a(@")"))) | ||
1630 | { | ||
1631 | foreach (bool l3 in YP.unify(arg2, Term)) | ||
1632 | { | ||
1633 | foreach (bool l4 in YP.unify(arg4, Term)) | ||
1634 | { | ||
1635 | foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(@")"), S1))) | ||
1636 | { | ||
1637 | yield return false; | ||
1638 | } | ||
1639 | } | ||
1640 | } | ||
1641 | } | ||
1642 | } | ||
1643 | { | ||
1644 | object Term = arg2; | ||
1645 | object Precedence = arg3; | ||
1646 | object Answer = arg4; | ||
1647 | object S = arg5; | ||
1648 | object S1 = arg6; | ||
1649 | Variable Next = new Variable(); | ||
1650 | Variable S2 = new Variable(); | ||
1651 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
1652 | { | ||
1653 | if (YP.greaterThanOrEqual(Precedence, 1000)) | ||
1654 | { | ||
1655 | foreach (bool l4 in parse(S1, 1000, Next, S2)) | ||
1656 | { | ||
1657 | foreach (bool l5 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S)) | ||
1658 | { | ||
1659 | yield return false; | ||
1660 | } | ||
1661 | yield break; | ||
1662 | } | ||
1663 | goto cutIf1; | ||
1664 | } | ||
1665 | foreach (bool l3 in YP.unify(Answer, Term)) | ||
1666 | { | ||
1667 | foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@","), S1))) | ||
1668 | { | ||
1669 | yield return false; | ||
1670 | } | ||
1671 | } | ||
1672 | cutIf1: | ||
1673 | { } | ||
1674 | } | ||
1675 | } | ||
1676 | { | ||
1677 | object Term = arg2; | ||
1678 | object Precedence = arg3; | ||
1679 | object Answer = arg4; | ||
1680 | object S = arg5; | ||
1681 | object S1 = arg6; | ||
1682 | Variable Next = new Variable(); | ||
1683 | Variable S2 = new Variable(); | ||
1684 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
1685 | { | ||
1686 | if (YP.greaterThanOrEqual(Precedence, 1100)) | ||
1687 | { | ||
1688 | foreach (bool l4 in parse(S1, 1100, Next, S2)) | ||
1689 | { | ||
1690 | foreach (bool l5 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S)) | ||
1691 | { | ||
1692 | yield return false; | ||
1693 | } | ||
1694 | yield break; | ||
1695 | } | ||
1696 | goto cutIf2; | ||
1697 | } | ||
1698 | foreach (bool l3 in YP.unify(Answer, Term)) | ||
1699 | { | ||
1700 | foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(@"|"), S1))) | ||
1701 | { | ||
1702 | yield return false; | ||
1703 | } | ||
1704 | } | ||
1705 | cutIf2: | ||
1706 | { } | ||
1707 | } | ||
1708 | } | ||
1709 | { | ||
1710 | object x2 = arg2; | ||
1711 | object x3 = arg3; | ||
1712 | object x4 = arg4; | ||
1713 | object x5 = arg5; | ||
1714 | object S1 = arg6; | ||
1715 | Variable S = new Variable(); | ||
1716 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"string", S))) | ||
1717 | { | ||
1718 | foreach (bool l3 in cannot_follow(Atom.a(@"chars"), new Functor1(@"string", S), S1)) | ||
1719 | { | ||
1720 | yield return false; | ||
1721 | } | ||
1722 | } | ||
1723 | } | ||
1724 | { | ||
1725 | object x2 = arg2; | ||
1726 | object x3 = arg3; | ||
1727 | object x4 = arg4; | ||
1728 | object x5 = arg5; | ||
1729 | object S1 = arg6; | ||
1730 | Variable N = new Variable(); | ||
1731 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"number", N))) | ||
1732 | { | ||
1733 | foreach (bool l3 in cannot_follow(Atom.a(@"number"), new Functor1(@"number", N), S1)) | ||
1734 | { | ||
1735 | yield return false; | ||
1736 | } | ||
1737 | } | ||
1738 | } | ||
1739 | { | ||
1740 | object Term = arg2; | ||
1741 | object Precedence = arg3; | ||
1742 | object Answer = arg4; | ||
1743 | object S = arg5; | ||
1744 | Variable S1 = new Variable(); | ||
1745 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"{"))) | ||
1746 | { | ||
1747 | foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"}"), S1))) | ||
1748 | { | ||
1749 | foreach (bool l4 in exprtl0_atom(Atom.a(@"{}"), Term, Precedence, Answer, S, S1)) | ||
1750 | { | ||
1751 | yield return false; | ||
1752 | } | ||
1753 | yield break; | ||
1754 | } | ||
1755 | } | ||
1756 | } | ||
1757 | { | ||
1758 | object x1 = arg2; | ||
1759 | object x2 = arg3; | ||
1760 | object x3 = arg4; | ||
1761 | object x4 = arg5; | ||
1762 | object S1 = arg6; | ||
1763 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"{"))) | ||
1764 | { | ||
1765 | foreach (bool l3 in cannot_follow(Atom.a(@"brace"), Atom.a(@"{"), S1)) | ||
1766 | { | ||
1767 | yield return false; | ||
1768 | } | ||
1769 | } | ||
1770 | } | ||
1771 | { | ||
1772 | object Term = arg2; | ||
1773 | object Precedence = arg3; | ||
1774 | object Answer = arg4; | ||
1775 | object S = arg5; | ||
1776 | Variable S1 = new Variable(); | ||
1777 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
1778 | { | ||
1779 | foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a(@"]"), S1))) | ||
1780 | { | ||
1781 | foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1)) | ||
1782 | { | ||
1783 | yield return false; | ||
1784 | } | ||
1785 | yield break; | ||
1786 | } | ||
1787 | } | ||
1788 | } | ||
1789 | { | ||
1790 | object x1 = arg2; | ||
1791 | object x2 = arg3; | ||
1792 | object x3 = arg4; | ||
1793 | object x4 = arg5; | ||
1794 | object S1 = arg6; | ||
1795 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"["))) | ||
1796 | { | ||
1797 | foreach (bool l3 in cannot_follow(Atom.a(@"bracket"), Atom.a(@"["), S1)) | ||
1798 | { | ||
1799 | yield return false; | ||
1800 | } | ||
1801 | } | ||
1802 | } | ||
1803 | { | ||
1804 | object x1 = arg2; | ||
1805 | object x2 = arg3; | ||
1806 | object x3 = arg4; | ||
1807 | object x4 = arg5; | ||
1808 | object S1 = arg6; | ||
1809 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"("))) | ||
1810 | { | ||
1811 | foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1)) | ||
1812 | { | ||
1813 | yield return false; | ||
1814 | } | ||
1815 | } | ||
1816 | } | ||
1817 | { | ||
1818 | object x1 = arg2; | ||
1819 | object x2 = arg3; | ||
1820 | object x3 = arg4; | ||
1821 | object x4 = arg5; | ||
1822 | object S1 = arg6; | ||
1823 | foreach (bool l2 in YP.unify(arg1, Atom.a(@" ("))) | ||
1824 | { | ||
1825 | foreach (bool l3 in cannot_follow(Atom.a(@"parenthesis"), Atom.a(@"("), S1)) | ||
1826 | { | ||
1827 | yield return false; | ||
1828 | } | ||
1829 | } | ||
1830 | } | ||
1831 | { | ||
1832 | object x4 = arg2; | ||
1833 | object x5 = arg3; | ||
1834 | object x6 = arg4; | ||
1835 | object x7 = arg5; | ||
1836 | object S1 = arg6; | ||
1837 | Variable A = new Variable(); | ||
1838 | Variable B = new Variable(); | ||
1839 | Variable P = new Variable(); | ||
1840 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"var", A, B, P))) | ||
1841 | { | ||
1842 | foreach (bool l3 in cannot_follow(Atom.a(@"variable"), new Functor3(@"var", A, B, P), S1)) | ||
1843 | { | ||
1844 | yield return false; | ||
1845 | } | ||
1846 | } | ||
1847 | } | ||
1848 | { | ||
1849 | object Term = arg2; | ||
1850 | object Precedence = arg3; | ||
1851 | object Answer = arg4; | ||
1852 | object S = arg5; | ||
1853 | object S1 = arg6; | ||
1854 | Variable F = new Variable(); | ||
1855 | Variable P = new Variable(); | ||
1856 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"atom", F, P))) | ||
1857 | { | ||
1858 | foreach (bool l3 in exprtl0_atom(new Functor2(@"/", F, P), Term, Precedence, Answer, S, S1)) | ||
1859 | { | ||
1860 | yield return false; | ||
1861 | } | ||
1862 | } | ||
1863 | } | ||
1864 | } | ||
1865 | |||
1866 | public static IEnumerable<bool> exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1) | ||
1867 | { | ||
1868 | { | ||
1869 | object Term = arg2; | ||
1870 | object Precedence = arg3; | ||
1871 | object Answer = arg4; | ||
1872 | object S = arg5; | ||
1873 | Variable F = new Variable(); | ||
1874 | Variable Pos = new Variable(); | ||
1875 | Variable L1 = new Variable(); | ||
1876 | Variable O1 = new Variable(); | ||
1877 | Variable R1 = new Variable(); | ||
1878 | Variable L2 = new Variable(); | ||
1879 | Variable O2 = new Variable(); | ||
1880 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos))) | ||
1881 | { | ||
1882 | foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2)) | ||
1883 | { | ||
1884 | foreach (bool l4 in prefix_is_atom(S1, Precedence)) | ||
1885 | { | ||
1886 | foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) | ||
1887 | { | ||
1888 | yield return false; | ||
1889 | } | ||
1890 | yield break; | ||
1891 | } | ||
1892 | foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S)) | ||
1893 | { | ||
1894 | yield return false; | ||
1895 | } | ||
1896 | foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) | ||
1897 | { | ||
1898 | yield return false; | ||
1899 | } | ||
1900 | yield break; | ||
1901 | } | ||
1902 | } | ||
1903 | } | ||
1904 | { | ||
1905 | object Term = arg2; | ||
1906 | object Precedence = arg3; | ||
1907 | object Answer = arg4; | ||
1908 | object S = arg5; | ||
1909 | Variable F = new Variable(); | ||
1910 | Variable Pos = new Variable(); | ||
1911 | Variable L1 = new Variable(); | ||
1912 | Variable O1 = new Variable(); | ||
1913 | Variable R1 = new Variable(); | ||
1914 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos))) | ||
1915 | { | ||
1916 | foreach (bool l3 in infixop(F, L1, O1, R1)) | ||
1917 | { | ||
1918 | foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S)) | ||
1919 | { | ||
1920 | yield return false; | ||
1921 | } | ||
1922 | yield break; | ||
1923 | } | ||
1924 | } | ||
1925 | } | ||
1926 | { | ||
1927 | object Term = arg2; | ||
1928 | object Precedence = arg3; | ||
1929 | object Answer = arg4; | ||
1930 | object S = arg5; | ||
1931 | Variable F = new Variable(); | ||
1932 | Variable Pos = new Variable(); | ||
1933 | Variable L2 = new Variable(); | ||
1934 | Variable O2 = new Variable(); | ||
1935 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"/", F, Pos))) | ||
1936 | { | ||
1937 | foreach (bool l3 in postfixop(F, L2, O2)) | ||
1938 | { | ||
1939 | foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) | ||
1940 | { | ||
1941 | yield return false; | ||
1942 | } | ||
1943 | yield break; | ||
1944 | } | ||
1945 | } | ||
1946 | } | ||
1947 | { | ||
1948 | object X = arg1; | ||
1949 | object x2 = arg2; | ||
1950 | object x3 = arg3; | ||
1951 | object x4 = arg4; | ||
1952 | object x5 = arg5; | ||
1953 | Variable x7 = new Variable(); | ||
1954 | foreach (bool l2 in syntax_error(new ListPair(new Functor2(@"-", Atom.a(@"non"), Atom.a(@"operator")), new ListPair(X, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL)))), new ListPair(new Functor2(@"atom", X, x7), S1))) | ||
1955 | { | ||
1956 | yield return false; | ||
1957 | } | ||
1958 | yield break; | ||
1959 | } | ||
1960 | } | ||
1961 | |||
1962 | public static IEnumerable<bool> cannot_follow(object Type, object Token, object Tokens) | ||
1963 | { | ||
1964 | { | ||
1965 | foreach (bool l2 in syntax_error(new ListPair(Type, new ListPair(Atom.a(@"follows"), new ListPair(Atom.a(@"expression"), Atom.NIL))), new ListPair(Token, Tokens))) | ||
1966 | { | ||
1967 | yield return false; | ||
1968 | } | ||
1969 | } | ||
1970 | } | ||
1971 | |||
1972 | public static IEnumerable<bool> exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) | ||
1973 | { | ||
1974 | { | ||
1975 | object x1 = arg2; | ||
1976 | object x3 = arg4; | ||
1977 | Variable Term = new Variable(); | ||
1978 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1979 | { | ||
1980 | foreach (bool l3 in YP.unify(arg3, Term)) | ||
1981 | { | ||
1982 | foreach (bool l4 in YP.unify(arg5, Term)) | ||
1983 | { | ||
1984 | foreach (bool l5 in YP.unify(arg6, Atom.NIL)) | ||
1985 | { | ||
1986 | yield return false; | ||
1987 | } | ||
1988 | } | ||
1989 | } | ||
1990 | } | ||
1991 | } | ||
1992 | { | ||
1993 | object C = arg2; | ||
1994 | object Term = arg3; | ||
1995 | object Precedence = arg4; | ||
1996 | object Answer = arg5; | ||
1997 | object S = arg6; | ||
1998 | Variable Token = new Variable(); | ||
1999 | Variable Tokens = new Variable(); | ||
2000 | foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens))) | ||
2001 | { | ||
2002 | foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens)) | ||
2003 | { | ||
2004 | yield return false; | ||
2005 | } | ||
2006 | } | ||
2007 | } | ||
2008 | } | ||
2009 | |||
2010 | public static IEnumerable<bool> exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7) | ||
2011 | { | ||
2012 | { | ||
2013 | object C = arg2; | ||
2014 | object Term = arg3; | ||
2015 | object Precedence = arg4; | ||
2016 | object Answer = arg5; | ||
2017 | object S = arg6; | ||
2018 | object S1 = arg7; | ||
2019 | Variable F = new Variable(); | ||
2020 | Variable Pos = new Variable(); | ||
2021 | Variable L = new Variable(); | ||
2022 | Variable O = new Variable(); | ||
2023 | Variable R = new Variable(); | ||
2024 | Variable Other = new Variable(); | ||
2025 | Variable S2 = new Variable(); | ||
2026 | Variable Expr = new Variable(); | ||
2027 | foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a(@"infixop", Atom.a(@"")), new object[] { new Functor2(@"/", F, Pos), L, O, R }))) | ||
2028 | { | ||
2029 | if (YP.greaterThanOrEqual(Precedence, O)) | ||
2030 | { | ||
2031 | if (YP.lessThanOrEqual(C, L)) | ||
2032 | { | ||
2033 | foreach (bool l5 in parse(S1, R, Other, S2)) | ||
2034 | { | ||
2035 | foreach (bool l6 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, new ListPair(Other, Atom.NIL)))))) | ||
2036 | { | ||
2037 | foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S)) | ||
2038 | { | ||
2039 | yield return false; | ||
2040 | } | ||
2041 | } | ||
2042 | } | ||
2043 | yield break; | ||
2044 | } | ||
2045 | } | ||
2046 | } | ||
2047 | } | ||
2048 | { | ||
2049 | object C = arg2; | ||
2050 | object Term = arg3; | ||
2051 | object Precedence = arg4; | ||
2052 | object Answer = arg5; | ||
2053 | object S = arg6; | ||
2054 | object S1 = arg7; | ||
2055 | Variable F = new Variable(); | ||
2056 | Variable Pos = new Variable(); | ||
2057 | Variable L = new Variable(); | ||
2058 | Variable O = new Variable(); | ||
2059 | Variable Expr = new Variable(); | ||
2060 | Variable S2 = new Variable(); | ||
2061 | foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a(@"postfixop", Atom.a(@"")), new Functor2(@"/", F, Pos), L, O))) | ||
2062 | { | ||
2063 | if (YP.greaterThanOrEqual(Precedence, O)) | ||
2064 | { | ||
2065 | if (YP.lessThanOrEqual(C, L)) | ||
2066 | { | ||
2067 | foreach (bool l5 in YP.univ(Expr, new ListPair(F, new ListPair(Pos, new ListPair(Term, Atom.NIL))))) | ||
2068 | { | ||
2069 | foreach (bool l6 in peepop(S1, S2)) | ||
2070 | { | ||
2071 | foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S)) | ||
2072 | { | ||
2073 | yield return false; | ||
2074 | } | ||
2075 | } | ||
2076 | } | ||
2077 | yield break; | ||
2078 | } | ||
2079 | } | ||
2080 | } | ||
2081 | } | ||
2082 | { | ||
2083 | object C = arg2; | ||
2084 | object Term = arg3; | ||
2085 | object Precedence = arg4; | ||
2086 | object Answer = arg5; | ||
2087 | object S = arg6; | ||
2088 | object S1 = arg7; | ||
2089 | Variable Next = new Variable(); | ||
2090 | Variable S2 = new Variable(); | ||
2091 | foreach (bool l2 in YP.unify(arg1, Atom.a(@","))) | ||
2092 | { | ||
2093 | if (YP.greaterThanOrEqual(Precedence, 1000)) | ||
2094 | { | ||
2095 | if (YP.lessThan(C, 1000)) | ||
2096 | { | ||
2097 | foreach (bool l5 in parse(S1, 1000, Next, S2)) | ||
2098 | { | ||
2099 | foreach (bool l6 in exprtl(S2, 1000, new Functor2(@",", Term, Next), Precedence, Answer, S)) | ||
2100 | { | ||
2101 | yield return false; | ||
2102 | } | ||
2103 | } | ||
2104 | yield break; | ||
2105 | } | ||
2106 | } | ||
2107 | } | ||
2108 | } | ||
2109 | { | ||
2110 | object C = arg2; | ||
2111 | object Term = arg3; | ||
2112 | object Precedence = arg4; | ||
2113 | object Answer = arg5; | ||
2114 | object S = arg6; | ||
2115 | object S1 = arg7; | ||
2116 | Variable Next = new Variable(); | ||
2117 | Variable S2 = new Variable(); | ||
2118 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"|"))) | ||
2119 | { | ||
2120 | if (YP.greaterThanOrEqual(Precedence, 1100)) | ||
2121 | { | ||
2122 | if (YP.lessThan(C, 1100)) | ||
2123 | { | ||
2124 | foreach (bool l5 in parse(S1, 1100, Next, S2)) | ||
2125 | { | ||
2126 | foreach (bool l6 in exprtl(S2, 1100, new Functor2(@";", Term, Next), Precedence, Answer, S)) | ||
2127 | { | ||
2128 | yield return false; | ||
2129 | } | ||
2130 | } | ||
2131 | yield break; | ||
2132 | } | ||
2133 | } | ||
2134 | } | ||
2135 | } | ||
2136 | { | ||
2137 | object Token = arg1; | ||
2138 | object x2 = arg2; | ||
2139 | object x4 = arg4; | ||
2140 | object Tokens = arg7; | ||
2141 | Variable Term = new Variable(); | ||
2142 | foreach (bool l2 in YP.unify(arg3, Term)) | ||
2143 | { | ||
2144 | foreach (bool l3 in YP.unify(arg5, Term)) | ||
2145 | { | ||
2146 | foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens))) | ||
2147 | { | ||
2148 | yield return false; | ||
2149 | } | ||
2150 | } | ||
2151 | } | ||
2152 | } | ||
2153 | } | ||
2154 | |||
2155 | public static IEnumerable<bool> syntax_error(object _Message, object _List) | ||
2156 | { | ||
2157 | { | ||
2158 | yield break; | ||
2159 | } | ||
2160 | } | ||
2161 | |||
2162 | public static IEnumerable<bool> syntax_error(object _List) | ||
2163 | { | ||
2164 | { | ||
2165 | yield break; | ||
2166 | } | ||
2167 | } | ||
2168 | |||
2169 | public static IEnumerable<bool> prefixop(object F, object O, object Q) | ||
2170 | { | ||
2171 | { | ||
2172 | foreach (bool l2 in YP.current_op(O, Atom.a(@"fx"), F)) | ||
2173 | { | ||
2174 | foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1))) | ||
2175 | { | ||
2176 | yield return false; | ||
2177 | } | ||
2178 | goto cutIf1; | ||
2179 | } | ||
2180 | foreach (bool l2 in YP.current_op(O, Atom.a(@"fy"), F)) | ||
2181 | { | ||
2182 | foreach (bool l3 in YP.unify(Q, O)) | ||
2183 | { | ||
2184 | yield return false; | ||
2185 | } | ||
2186 | goto cutIf2; | ||
2187 | } | ||
2188 | cutIf2: | ||
2189 | cutIf1: | ||
2190 | { } | ||
2191 | } | ||
2192 | } | ||
2193 | |||
2194 | public static IEnumerable<bool> postfixop(object F, object P, object O) | ||
2195 | { | ||
2196 | { | ||
2197 | foreach (bool l2 in YP.current_op(O, Atom.a(@"xf"), F)) | ||
2198 | { | ||
2199 | foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) | ||
2200 | { | ||
2201 | yield return false; | ||
2202 | } | ||
2203 | goto cutIf1; | ||
2204 | } | ||
2205 | foreach (bool l2 in YP.current_op(O, Atom.a(@"yf"), F)) | ||
2206 | { | ||
2207 | foreach (bool l3 in YP.unify(P, O)) | ||
2208 | { | ||
2209 | yield return false; | ||
2210 | } | ||
2211 | goto cutIf2; | ||
2212 | } | ||
2213 | cutIf2: | ||
2214 | cutIf1: | ||
2215 | { } | ||
2216 | } | ||
2217 | } | ||
2218 | |||
2219 | public static IEnumerable<bool> infixop(object F, object P, object O, object Q) | ||
2220 | { | ||
2221 | { | ||
2222 | foreach (bool l2 in YP.current_op(O, Atom.a(@"xfy"), F)) | ||
2223 | { | ||
2224 | foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) | ||
2225 | { | ||
2226 | foreach (bool l4 in YP.unify(Q, O)) | ||
2227 | { | ||
2228 | yield return false; | ||
2229 | } | ||
2230 | } | ||
2231 | goto cutIf1; | ||
2232 | } | ||
2233 | foreach (bool l2 in YP.current_op(O, Atom.a(@"xfx"), F)) | ||
2234 | { | ||
2235 | foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) | ||
2236 | { | ||
2237 | foreach (bool l4 in YP.unify(Q, P)) | ||
2238 | { | ||
2239 | yield return false; | ||
2240 | } | ||
2241 | } | ||
2242 | goto cutIf2; | ||
2243 | } | ||
2244 | foreach (bool l2 in YP.current_op(O, Atom.a(@"yfx"), F)) | ||
2245 | { | ||
2246 | foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1))) | ||
2247 | { | ||
2248 | foreach (bool l4 in YP.unify(P, O)) | ||
2249 | { | ||
2250 | yield return false; | ||
2251 | } | ||
2252 | } | ||
2253 | goto cutIf3; | ||
2254 | } | ||
2255 | cutIf3: | ||
2256 | cutIf2: | ||
2257 | cutIf1: | ||
2258 | { } | ||
2259 | } | ||
2260 | } | ||
2261 | |||
2262 | public static IEnumerable<bool> ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2) | ||
2263 | { | ||
2264 | { | ||
2265 | foreach (bool l2 in postfixop(F, L2, O2)) | ||
2266 | { | ||
2267 | if (YP.lessThanOrEqual(O2, Precedence)) | ||
2268 | { | ||
2269 | foreach (bool l4 in infixop(F, L1, O1, R1)) | ||
2270 | { | ||
2271 | if (YP.lessThanOrEqual(O1, Precedence)) | ||
2272 | { | ||
2273 | yield return false; | ||
2274 | } | ||
2275 | } | ||
2276 | } | ||
2277 | } | ||
2278 | } | ||
2279 | } | ||
2280 | |||
2281 | public static IEnumerable<bool> read_tokens1(object arg1) | ||
2282 | { | ||
2283 | { | ||
2284 | object TokenList = arg1; | ||
2285 | Variable C1 = new Variable(); | ||
2286 | Variable _X = new Variable(); | ||
2287 | Variable ListOfTokens = new Variable(); | ||
2288 | foreach (bool l2 in YP.get_code(C1)) | ||
2289 | { | ||
2290 | foreach (bool l3 in read_tokens(C1, _X, ListOfTokens)) | ||
2291 | { | ||
2292 | foreach (bool l4 in YP.unify(TokenList, ListOfTokens)) | ||
2293 | { | ||
2294 | yield return false; | ||
2295 | } | ||
2296 | yield break; | ||
2297 | } | ||
2298 | } | ||
2299 | } | ||
2300 | { | ||
2301 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL))) | ||
2302 | { | ||
2303 | yield return false; | ||
2304 | } | ||
2305 | } | ||
2306 | } | ||
2307 | |||
2308 | public static IEnumerable<bool> read_tokens2(object arg1, object arg2) | ||
2309 | { | ||
2310 | { | ||
2311 | object TokenList = arg1; | ||
2312 | object Dictionary = arg2; | ||
2313 | Variable C1 = new Variable(); | ||
2314 | Variable Dict = new Variable(); | ||
2315 | Variable ListOfTokens = new Variable(); | ||
2316 | foreach (bool l2 in YP.get_code(C1)) | ||
2317 | { | ||
2318 | foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens)) | ||
2319 | { | ||
2320 | foreach (bool l4 in terminate_list(Dict)) | ||
2321 | { | ||
2322 | foreach (bool l5 in YP.unify(Dictionary, Dict)) | ||
2323 | { | ||
2324 | foreach (bool l6 in YP.unify(TokenList, ListOfTokens)) | ||
2325 | { | ||
2326 | yield return false; | ||
2327 | } | ||
2328 | } | ||
2329 | yield break; | ||
2330 | } | ||
2331 | } | ||
2332 | } | ||
2333 | } | ||
2334 | { | ||
2335 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"atom", Atom.a(@"end_of_file"), 0), Atom.NIL))) | ||
2336 | { | ||
2337 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
2338 | { | ||
2339 | yield return false; | ||
2340 | } | ||
2341 | } | ||
2342 | } | ||
2343 | } | ||
2344 | |||
2345 | public static IEnumerable<bool> terminate_list(object arg1) | ||
2346 | { | ||
2347 | { | ||
2348 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
2349 | { | ||
2350 | yield return false; | ||
2351 | } | ||
2352 | } | ||
2353 | { | ||
2354 | Variable x1 = new Variable(); | ||
2355 | Variable Tail = new Variable(); | ||
2356 | foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail))) | ||
2357 | { | ||
2358 | foreach (bool l3 in terminate_list(Tail)) | ||
2359 | { | ||
2360 | yield return false; | ||
2361 | } | ||
2362 | } | ||
2363 | } | ||
2364 | } | ||
2365 | |||
2366 | public static IEnumerable<bool> read_special(object arg1, object Dict, object arg3) | ||
2367 | { | ||
2368 | { | ||
2369 | object Tokens = arg3; | ||
2370 | foreach (bool l2 in YP.unify(arg1, 95)) | ||
2371 | { | ||
2372 | foreach (bool l3 in read_variable(95, Dict, Tokens)) | ||
2373 | { | ||
2374 | yield return false; | ||
2375 | } | ||
2376 | } | ||
2377 | } | ||
2378 | { | ||
2379 | object Tokens = arg3; | ||
2380 | foreach (bool l2 in YP.unify(arg1, 247)) | ||
2381 | { | ||
2382 | foreach (bool l3 in read_symbol(247, Dict, Tokens)) | ||
2383 | { | ||
2384 | yield return false; | ||
2385 | } | ||
2386 | } | ||
2387 | } | ||
2388 | { | ||
2389 | object Tokens = arg3; | ||
2390 | foreach (bool l2 in YP.unify(arg1, 215)) | ||
2391 | { | ||
2392 | foreach (bool l3 in read_symbol(215, Dict, Tokens)) | ||
2393 | { | ||
2394 | yield return false; | ||
2395 | } | ||
2396 | } | ||
2397 | } | ||
2398 | { | ||
2399 | Variable StartPos = new Variable(); | ||
2400 | Variable EndPos = new Variable(); | ||
2401 | Variable Tokens = new Variable(); | ||
2402 | Variable Ch = new Variable(); | ||
2403 | Variable NextCh = new Variable(); | ||
2404 | foreach (bool l2 in YP.unify(arg1, 37)) | ||
2405 | { | ||
2406 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens))) | ||
2407 | { | ||
2408 | foreach (bool l4 in get_current_position(StartPos)) | ||
2409 | { | ||
2410 | foreach (bool l5 in YP.repeat()) | ||
2411 | { | ||
2412 | foreach (bool l6 in YP.get_code(Ch)) | ||
2413 | { | ||
2414 | if (YP.lessThan(Ch, new ListPair(32, Atom.NIL))) | ||
2415 | { | ||
2416 | if (YP.notEqual(Ch, 9)) | ||
2417 | { | ||
2418 | if (YP.termNotEqual(Ch, -1)) | ||
2419 | { | ||
2420 | foreach (bool l10 in get_current_position(EndPos)) | ||
2421 | { | ||
2422 | foreach (bool l11 in YP.get_code(NextCh)) | ||
2423 | { | ||
2424 | foreach (bool l12 in read_tokens(NextCh, Dict, Tokens)) | ||
2425 | { | ||
2426 | yield return false; | ||
2427 | } | ||
2428 | } | ||
2429 | } | ||
2430 | } | ||
2431 | yield break; | ||
2432 | } | ||
2433 | } | ||
2434 | } | ||
2435 | } | ||
2436 | } | ||
2437 | } | ||
2438 | } | ||
2439 | } | ||
2440 | { | ||
2441 | object T = arg3; | ||
2442 | Variable C2 = new Variable(); | ||
2443 | Variable StartPos = new Variable(); | ||
2444 | Variable EndPos = new Variable(); | ||
2445 | Variable Tokens = new Variable(); | ||
2446 | Variable StartPos1 = new Variable(); | ||
2447 | Variable NextCh = new Variable(); | ||
2448 | Variable Chars = new Variable(); | ||
2449 | foreach (bool l2 in YP.unify(arg1, 47)) | ||
2450 | { | ||
2451 | foreach (bool l3 in YP.get_code(C2)) | ||
2452 | { | ||
2453 | if (YP.equal(C2, new ListPair(42, Atom.NIL))) | ||
2454 | { | ||
2455 | foreach (bool l5 in YP.unify(T, new ListPair(new Functor2(@"comment", StartPos, EndPos), Tokens))) | ||
2456 | { | ||
2457 | foreach (bool l6 in get_current_position(StartPos1)) | ||
2458 | { | ||
2459 | foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1))) | ||
2460 | { | ||
2461 | foreach (bool l8 in read_solidus(32, NextCh)) | ||
2462 | { | ||
2463 | foreach (bool l9 in get_current_position(EndPos)) | ||
2464 | { | ||
2465 | foreach (bool l10 in read_tokens(NextCh, Dict, Tokens)) | ||
2466 | { | ||
2467 | yield return false; | ||
2468 | } | ||
2469 | } | ||
2470 | } | ||
2471 | } | ||
2472 | } | ||
2473 | } | ||
2474 | goto cutIf1; | ||
2475 | } | ||
2476 | foreach (bool l4 in YP.unify(T, Tokens)) | ||
2477 | { | ||
2478 | foreach (bool l5 in rest_symbol(C2, Chars, NextCh)) | ||
2479 | { | ||
2480 | foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars))) | ||
2481 | { | ||
2482 | yield return false; | ||
2483 | } | ||
2484 | } | ||
2485 | } | ||
2486 | cutIf1: | ||
2487 | { } | ||
2488 | } | ||
2489 | } | ||
2490 | } | ||
2491 | { | ||
2492 | Variable Pos = new Variable(); | ||
2493 | Variable Tokens = new Variable(); | ||
2494 | Variable NextCh = new Variable(); | ||
2495 | foreach (bool l2 in YP.unify(arg1, 33)) | ||
2496 | { | ||
2497 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@"!"), Pos), Tokens))) | ||
2498 | { | ||
2499 | foreach (bool l4 in get_current_position(Pos)) | ||
2500 | { | ||
2501 | foreach (bool l5 in YP.get_code(NextCh)) | ||
2502 | { | ||
2503 | foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) | ||
2504 | { | ||
2505 | yield return false; | ||
2506 | } | ||
2507 | } | ||
2508 | } | ||
2509 | } | ||
2510 | } | ||
2511 | } | ||
2512 | { | ||
2513 | Variable Tokens = new Variable(); | ||
2514 | Variable NextCh = new Variable(); | ||
2515 | foreach (bool l2 in YP.unify(arg1, 40)) | ||
2516 | { | ||
2517 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@" ("), Tokens))) | ||
2518 | { | ||
2519 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2520 | { | ||
2521 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
2522 | { | ||
2523 | yield return false; | ||
2524 | } | ||
2525 | } | ||
2526 | } | ||
2527 | } | ||
2528 | } | ||
2529 | { | ||
2530 | Variable Tokens = new Variable(); | ||
2531 | Variable NextCh = new Variable(); | ||
2532 | foreach (bool l2 in YP.unify(arg1, 41)) | ||
2533 | { | ||
2534 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@")"), Tokens))) | ||
2535 | { | ||
2536 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2537 | { | ||
2538 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
2539 | { | ||
2540 | yield return false; | ||
2541 | } | ||
2542 | } | ||
2543 | } | ||
2544 | } | ||
2545 | } | ||
2546 | { | ||
2547 | Variable Tokens = new Variable(); | ||
2548 | Variable NextCh = new Variable(); | ||
2549 | foreach (bool l2 in YP.unify(arg1, 44)) | ||
2550 | { | ||
2551 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@","), Tokens))) | ||
2552 | { | ||
2553 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2554 | { | ||
2555 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
2556 | { | ||
2557 | yield return false; | ||
2558 | } | ||
2559 | } | ||
2560 | } | ||
2561 | } | ||
2562 | } | ||
2563 | { | ||
2564 | Variable Pos = new Variable(); | ||
2565 | Variable Tokens = new Variable(); | ||
2566 | Variable NextCh = new Variable(); | ||
2567 | foreach (bool l2 in YP.unify(arg1, 59)) | ||
2568 | { | ||
2569 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom.a(@";"), Pos), Tokens))) | ||
2570 | { | ||
2571 | foreach (bool l4 in get_current_position(Pos)) | ||
2572 | { | ||
2573 | foreach (bool l5 in YP.get_code(NextCh)) | ||
2574 | { | ||
2575 | foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) | ||
2576 | { | ||
2577 | yield return false; | ||
2578 | } | ||
2579 | } | ||
2580 | } | ||
2581 | } | ||
2582 | } | ||
2583 | } | ||
2584 | { | ||
2585 | Variable Pos = new Variable(); | ||
2586 | Variable Tokens = new Variable(); | ||
2587 | Variable NextCh = new Variable(); | ||
2588 | foreach (bool l2 in YP.unify(arg1, 91)) | ||
2589 | { | ||
2590 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"["), Pos), Tokens))) | ||
2591 | { | ||
2592 | foreach (bool l4 in get_current_position(Pos)) | ||
2593 | { | ||
2594 | foreach (bool l5 in YP.get_code(NextCh)) | ||
2595 | { | ||
2596 | foreach (bool l6 in read_tokens(NextCh, Dict, Tokens)) | ||
2597 | { | ||
2598 | yield return false; | ||
2599 | } | ||
2600 | } | ||
2601 | } | ||
2602 | } | ||
2603 | } | ||
2604 | } | ||
2605 | { | ||
2606 | Variable Pos = new Variable(); | ||
2607 | Variable Tokens = new Variable(); | ||
2608 | Variable NextCh = new Variable(); | ||
2609 | foreach (bool l2 in YP.unify(arg1, 93)) | ||
2610 | { | ||
2611 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"]"), Pos), Tokens))) | ||
2612 | { | ||
2613 | foreach (bool l4 in get_current_position(Pos)) | ||
2614 | { | ||
2615 | foreach (bool l5 in YP.get_code(NextCh)) | ||
2616 | { | ||
2617 | foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) | ||
2618 | { | ||
2619 | yield return false; | ||
2620 | } | ||
2621 | } | ||
2622 | } | ||
2623 | } | ||
2624 | } | ||
2625 | } | ||
2626 | { | ||
2627 | Variable Pos = new Variable(); | ||
2628 | Variable Tokens = new Variable(); | ||
2629 | Variable NextCh = new Variable(); | ||
2630 | foreach (bool l2 in YP.unify(arg1, 123)) | ||
2631 | { | ||
2632 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"/", Atom.a(@"{"), Pos), Tokens))) | ||
2633 | { | ||
2634 | foreach (bool l4 in get_current_position(Pos)) | ||
2635 | { | ||
2636 | foreach (bool l5 in YP.get_code(NextCh)) | ||
2637 | { | ||
2638 | foreach (bool l6 in read_tokens(NextCh, Dict, Tokens)) | ||
2639 | { | ||
2640 | yield return false; | ||
2641 | } | ||
2642 | } | ||
2643 | } | ||
2644 | } | ||
2645 | } | ||
2646 | } | ||
2647 | { | ||
2648 | Variable Tokens = new Variable(); | ||
2649 | Variable NextCh = new Variable(); | ||
2650 | foreach (bool l2 in YP.unify(arg1, 124)) | ||
2651 | { | ||
2652 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"|"), Tokens))) | ||
2653 | { | ||
2654 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2655 | { | ||
2656 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
2657 | { | ||
2658 | yield return false; | ||
2659 | } | ||
2660 | } | ||
2661 | } | ||
2662 | } | ||
2663 | } | ||
2664 | { | ||
2665 | Variable Tokens = new Variable(); | ||
2666 | Variable NextCh = new Variable(); | ||
2667 | foreach (bool l2 in YP.unify(arg1, 125)) | ||
2668 | { | ||
2669 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"}"), Tokens))) | ||
2670 | { | ||
2671 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2672 | { | ||
2673 | foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens)) | ||
2674 | { | ||
2675 | yield return false; | ||
2676 | } | ||
2677 | } | ||
2678 | } | ||
2679 | } | ||
2680 | } | ||
2681 | { | ||
2682 | object Tokens = arg3; | ||
2683 | Variable NextCh = new Variable(); | ||
2684 | foreach (bool l2 in YP.unify(arg1, 46)) | ||
2685 | { | ||
2686 | foreach (bool l3 in YP.get_code(NextCh)) | ||
2687 | { | ||
2688 | foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens)) | ||
2689 | { | ||
2690 | yield return false; | ||
2691 | } | ||
2692 | } | ||
2693 | } | ||
2694 | } | ||
2695 | { | ||
2696 | Variable Chars = new Variable(); | ||
2697 | Variable Tokens = new Variable(); | ||
2698 | Variable NextCh = new Variable(); | ||
2699 | foreach (bool l2 in YP.unify(arg1, 34)) | ||
2700 | { | ||
2701 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1(@"string", Chars), Tokens))) | ||
2702 | { | ||
2703 | foreach (bool l4 in read_string(Chars, 34, NextCh)) | ||
2704 | { | ||
2705 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
2706 | { | ||
2707 | yield return false; | ||
2708 | } | ||
2709 | } | ||
2710 | } | ||
2711 | } | ||
2712 | } | ||
2713 | { | ||
2714 | object Tokens = arg3; | ||
2715 | Variable Chars = new Variable(); | ||
2716 | Variable NextCh = new Variable(); | ||
2717 | foreach (bool l2 in YP.unify(arg1, 39)) | ||
2718 | { | ||
2719 | foreach (bool l3 in read_string(Chars, 39, NextCh)) | ||
2720 | { | ||
2721 | foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars)) | ||
2722 | { | ||
2723 | yield return false; | ||
2724 | } | ||
2725 | } | ||
2726 | } | ||
2727 | } | ||
2728 | { | ||
2729 | object Tokens = arg3; | ||
2730 | foreach (bool l2 in YP.unify(arg1, 35)) | ||
2731 | { | ||
2732 | foreach (bool l3 in read_symbol(35, Dict, Tokens)) | ||
2733 | { | ||
2734 | yield return false; | ||
2735 | } | ||
2736 | } | ||
2737 | } | ||
2738 | { | ||
2739 | object Tokens = arg3; | ||
2740 | foreach (bool l2 in YP.unify(arg1, 36)) | ||
2741 | { | ||
2742 | foreach (bool l3 in read_symbol(36, Dict, Tokens)) | ||
2743 | { | ||
2744 | yield return false; | ||
2745 | } | ||
2746 | } | ||
2747 | } | ||
2748 | { | ||
2749 | object Tokens = arg3; | ||
2750 | foreach (bool l2 in YP.unify(arg1, 38)) | ||
2751 | { | ||
2752 | foreach (bool l3 in read_symbol(38, Dict, Tokens)) | ||
2753 | { | ||
2754 | yield return false; | ||
2755 | } | ||
2756 | } | ||
2757 | } | ||
2758 | { | ||
2759 | object Tokens = arg3; | ||
2760 | foreach (bool l2 in YP.unify(arg1, 42)) | ||
2761 | { | ||
2762 | foreach (bool l3 in read_symbol(42, Dict, Tokens)) | ||
2763 | { | ||
2764 | yield return false; | ||
2765 | } | ||
2766 | } | ||
2767 | } | ||
2768 | { | ||
2769 | object Tokens = arg3; | ||
2770 | foreach (bool l2 in YP.unify(arg1, 43)) | ||
2771 | { | ||
2772 | foreach (bool l3 in read_symbol(43, Dict, Tokens)) | ||
2773 | { | ||
2774 | yield return false; | ||
2775 | } | ||
2776 | } | ||
2777 | } | ||
2778 | { | ||
2779 | object Tokens = arg3; | ||
2780 | foreach (bool l2 in YP.unify(arg1, 45)) | ||
2781 | { | ||
2782 | foreach (bool l3 in read_symbol(45, Dict, Tokens)) | ||
2783 | { | ||
2784 | yield return false; | ||
2785 | } | ||
2786 | } | ||
2787 | } | ||
2788 | { | ||
2789 | object Tokens = arg3; | ||
2790 | foreach (bool l2 in YP.unify(arg1, 58)) | ||
2791 | { | ||
2792 | foreach (bool l3 in read_symbol(58, Dict, Tokens)) | ||
2793 | { | ||
2794 | yield return false; | ||
2795 | } | ||
2796 | } | ||
2797 | } | ||
2798 | { | ||
2799 | object Tokens = arg3; | ||
2800 | foreach (bool l2 in YP.unify(arg1, 60)) | ||
2801 | { | ||
2802 | foreach (bool l3 in read_symbol(60, Dict, Tokens)) | ||
2803 | { | ||
2804 | yield return false; | ||
2805 | } | ||
2806 | } | ||
2807 | } | ||
2808 | { | ||
2809 | object Tokens = arg3; | ||
2810 | foreach (bool l2 in YP.unify(arg1, 61)) | ||
2811 | { | ||
2812 | foreach (bool l3 in read_symbol(61, Dict, Tokens)) | ||
2813 | { | ||
2814 | yield return false; | ||
2815 | } | ||
2816 | } | ||
2817 | } | ||
2818 | { | ||
2819 | object Tokens = arg3; | ||
2820 | foreach (bool l2 in YP.unify(arg1, 62)) | ||
2821 | { | ||
2822 | foreach (bool l3 in read_symbol(62, Dict, Tokens)) | ||
2823 | { | ||
2824 | yield return false; | ||
2825 | } | ||
2826 | } | ||
2827 | } | ||
2828 | { | ||
2829 | object Tokens = arg3; | ||
2830 | foreach (bool l2 in YP.unify(arg1, 63)) | ||
2831 | { | ||
2832 | foreach (bool l3 in read_symbol(63, Dict, Tokens)) | ||
2833 | { | ||
2834 | yield return false; | ||
2835 | } | ||
2836 | } | ||
2837 | } | ||
2838 | { | ||
2839 | object Tokens = arg3; | ||
2840 | foreach (bool l2 in YP.unify(arg1, 64)) | ||
2841 | { | ||
2842 | foreach (bool l3 in read_symbol(64, Dict, Tokens)) | ||
2843 | { | ||
2844 | yield return false; | ||
2845 | } | ||
2846 | } | ||
2847 | } | ||
2848 | { | ||
2849 | object Tokens = arg3; | ||
2850 | foreach (bool l2 in YP.unify(arg1, 92)) | ||
2851 | { | ||
2852 | foreach (bool l3 in read_symbol(92, Dict, Tokens)) | ||
2853 | { | ||
2854 | yield return false; | ||
2855 | } | ||
2856 | } | ||
2857 | } | ||
2858 | { | ||
2859 | object Tokens = arg3; | ||
2860 | foreach (bool l2 in YP.unify(arg1, 94)) | ||
2861 | { | ||
2862 | foreach (bool l3 in read_symbol(94, Dict, Tokens)) | ||
2863 | { | ||
2864 | yield return false; | ||
2865 | } | ||
2866 | } | ||
2867 | } | ||
2868 | { | ||
2869 | object Tokens = arg3; | ||
2870 | foreach (bool l2 in YP.unify(arg1, 96)) | ||
2871 | { | ||
2872 | foreach (bool l3 in read_symbol(96, Dict, Tokens)) | ||
2873 | { | ||
2874 | yield return false; | ||
2875 | } | ||
2876 | } | ||
2877 | } | ||
2878 | { | ||
2879 | object Tokens = arg3; | ||
2880 | foreach (bool l2 in YP.unify(arg1, 126)) | ||
2881 | { | ||
2882 | foreach (bool l3 in read_symbol(126, Dict, Tokens)) | ||
2883 | { | ||
2884 | yield return false; | ||
2885 | } | ||
2886 | } | ||
2887 | } | ||
2888 | } | ||
2889 | |||
2890 | public static IEnumerable<bool> read_symbol(object C1, object Dict, object Tokens) | ||
2891 | { | ||
2892 | { | ||
2893 | Variable C2 = new Variable(); | ||
2894 | Variable Chars = new Variable(); | ||
2895 | Variable NextCh = new Variable(); | ||
2896 | foreach (bool l2 in YP.get_code(C2)) | ||
2897 | { | ||
2898 | foreach (bool l3 in rest_symbol(C2, Chars, NextCh)) | ||
2899 | { | ||
2900 | foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars))) | ||
2901 | { | ||
2902 | yield return false; | ||
2903 | } | ||
2904 | } | ||
2905 | } | ||
2906 | } | ||
2907 | } | ||
2908 | |||
2909 | public static IEnumerable<bool> rest_symbol(object arg1, object arg2, object arg3) | ||
2910 | { | ||
2911 | { | ||
2912 | object C2 = arg1; | ||
2913 | object LastCh = arg3; | ||
2914 | Variable Chars = new Variable(); | ||
2915 | Variable NextCh = new Variable(); | ||
2916 | foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars))) | ||
2917 | { | ||
2918 | if (YP.greaterThan(C2, 160)) | ||
2919 | { | ||
2920 | if (YP.lessThan(C2, 192)) | ||
2921 | { | ||
2922 | if (YP.notEqual(C2, 186)) | ||
2923 | { | ||
2924 | if (YP.notEqual(C2, 170)) | ||
2925 | { | ||
2926 | foreach (bool l7 in YP.get_code(NextCh)) | ||
2927 | { | ||
2928 | foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh)) | ||
2929 | { | ||
2930 | yield return false; | ||
2931 | } | ||
2932 | } | ||
2933 | yield break; | ||
2934 | } | ||
2935 | } | ||
2936 | } | ||
2937 | goto cutIf1; | ||
2938 | } | ||
2939 | foreach (bool l3 in symbol_char(C2)) | ||
2940 | { | ||
2941 | foreach (bool l4 in YP.get_code(NextCh)) | ||
2942 | { | ||
2943 | foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh)) | ||
2944 | { | ||
2945 | yield return false; | ||
2946 | } | ||
2947 | } | ||
2948 | yield break; | ||
2949 | } | ||
2950 | cutIf1: | ||
2951 | { } | ||
2952 | } | ||
2953 | } | ||
2954 | { | ||
2955 | Variable C2 = new Variable(); | ||
2956 | foreach (bool l2 in YP.unify(arg1, C2)) | ||
2957 | { | ||
2958 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
2959 | { | ||
2960 | foreach (bool l4 in YP.unify(arg3, C2)) | ||
2961 | { | ||
2962 | yield return false; | ||
2963 | } | ||
2964 | } | ||
2965 | } | ||
2966 | } | ||
2967 | } | ||
2968 | |||
2969 | public static IEnumerable<bool> symbol_char(object arg1) | ||
2970 | { | ||
2971 | { | ||
2972 | foreach (bool l2 in YP.unify(arg1, 35)) | ||
2973 | { | ||
2974 | yield return false; | ||
2975 | } | ||
2976 | } | ||
2977 | { | ||
2978 | foreach (bool l2 in YP.unify(arg1, 36)) | ||
2979 | { | ||
2980 | yield return false; | ||
2981 | } | ||
2982 | } | ||
2983 | { | ||
2984 | foreach (bool l2 in YP.unify(arg1, 38)) | ||
2985 | { | ||
2986 | yield return false; | ||
2987 | } | ||
2988 | } | ||
2989 | { | ||
2990 | foreach (bool l2 in YP.unify(arg1, 42)) | ||
2991 | { | ||
2992 | yield return false; | ||
2993 | } | ||
2994 | } | ||
2995 | { | ||
2996 | foreach (bool l2 in YP.unify(arg1, 43)) | ||
2997 | { | ||
2998 | yield return false; | ||
2999 | } | ||
3000 | } | ||
3001 | { | ||
3002 | foreach (bool l2 in YP.unify(arg1, 45)) | ||
3003 | { | ||
3004 | yield return false; | ||
3005 | } | ||
3006 | } | ||
3007 | { | ||
3008 | foreach (bool l2 in YP.unify(arg1, 46)) | ||
3009 | { | ||
3010 | yield return false; | ||
3011 | } | ||
3012 | } | ||
3013 | { | ||
3014 | foreach (bool l2 in YP.unify(arg1, 47)) | ||
3015 | { | ||
3016 | yield return false; | ||
3017 | } | ||
3018 | } | ||
3019 | { | ||
3020 | foreach (bool l2 in YP.unify(arg1, 58)) | ||
3021 | { | ||
3022 | yield return false; | ||
3023 | } | ||
3024 | } | ||
3025 | { | ||
3026 | foreach (bool l2 in YP.unify(arg1, 60)) | ||
3027 | { | ||
3028 | yield return false; | ||
3029 | } | ||
3030 | } | ||
3031 | { | ||
3032 | foreach (bool l2 in YP.unify(arg1, 61)) | ||
3033 | { | ||
3034 | yield return false; | ||
3035 | } | ||
3036 | } | ||
3037 | { | ||
3038 | foreach (bool l2 in YP.unify(arg1, 62)) | ||
3039 | { | ||
3040 | yield return false; | ||
3041 | } | ||
3042 | } | ||
3043 | { | ||
3044 | foreach (bool l2 in YP.unify(arg1, 63)) | ||
3045 | { | ||
3046 | yield return false; | ||
3047 | } | ||
3048 | } | ||
3049 | { | ||
3050 | foreach (bool l2 in YP.unify(arg1, 64)) | ||
3051 | { | ||
3052 | yield return false; | ||
3053 | } | ||
3054 | } | ||
3055 | { | ||
3056 | foreach (bool l2 in YP.unify(arg1, 92)) | ||
3057 | { | ||
3058 | yield return false; | ||
3059 | } | ||
3060 | } | ||
3061 | { | ||
3062 | foreach (bool l2 in YP.unify(arg1, 94)) | ||
3063 | { | ||
3064 | yield return false; | ||
3065 | } | ||
3066 | } | ||
3067 | { | ||
3068 | foreach (bool l2 in YP.unify(arg1, 96)) | ||
3069 | { | ||
3070 | yield return false; | ||
3071 | } | ||
3072 | } | ||
3073 | { | ||
3074 | foreach (bool l2 in YP.unify(arg1, 126)) | ||
3075 | { | ||
3076 | yield return false; | ||
3077 | } | ||
3078 | } | ||
3079 | } | ||
3080 | |||
3081 | public static IEnumerable<bool> get_current_position(object Pos) | ||
3082 | { | ||
3083 | { | ||
3084 | foreach (bool l2 in YP.unify(Pos, 0)) | ||
3085 | { | ||
3086 | yield return false; | ||
3087 | } | ||
3088 | } | ||
3089 | } | ||
3090 | |||
3091 | public static IEnumerable<bool> read_after_atom4(object Ch, object Dict, object arg3, object Chars) | ||
3092 | { | ||
3093 | { | ||
3094 | Variable Atom_1 = new Variable(); | ||
3095 | Variable Pos = new Variable(); | ||
3096 | Variable Tokens = new Variable(); | ||
3097 | foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2(@"atom", Atom_1, Pos), Tokens))) | ||
3098 | { | ||
3099 | foreach (bool l3 in YP.unify(Pos, 0)) | ||
3100 | { | ||
3101 | foreach (bool l4 in YP.atom_codes(Atom_1, Chars)) | ||
3102 | { | ||
3103 | foreach (bool l5 in read_after_atom(Ch, Dict, Tokens)) | ||
3104 | { | ||
3105 | yield return false; | ||
3106 | } | ||
3107 | } | ||
3108 | } | ||
3109 | } | ||
3110 | } | ||
3111 | } | ||
3112 | |||
3113 | public static IEnumerable<bool> read_after_atom(object arg1, object Dict, object arg3) | ||
3114 | { | ||
3115 | { | ||
3116 | Variable Tokens = new Variable(); | ||
3117 | Variable NextCh = new Variable(); | ||
3118 | foreach (bool l2 in YP.unify(arg1, 40)) | ||
3119 | { | ||
3120 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"("), Tokens))) | ||
3121 | { | ||
3122 | foreach (bool l4 in YP.get_code(NextCh)) | ||
3123 | { | ||
3124 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
3125 | { | ||
3126 | yield return false; | ||
3127 | } | ||
3128 | } | ||
3129 | yield break; | ||
3130 | } | ||
3131 | } | ||
3132 | } | ||
3133 | { | ||
3134 | object Ch = arg1; | ||
3135 | object Tokens = arg3; | ||
3136 | foreach (bool l2 in read_tokens(Ch, Dict, Tokens)) | ||
3137 | { | ||
3138 | yield return false; | ||
3139 | } | ||
3140 | } | ||
3141 | } | ||
3142 | |||
3143 | public static IEnumerable<bool> read_string(object Chars, object Quote, object NextCh) | ||
3144 | { | ||
3145 | { | ||
3146 | Variable Ch = new Variable(); | ||
3147 | Variable Char = new Variable(); | ||
3148 | Variable Next = new Variable(); | ||
3149 | foreach (bool l2 in YP.get_code(Ch)) | ||
3150 | { | ||
3151 | foreach (bool l3 in read_char(Ch, Quote, Char, Next)) | ||
3152 | { | ||
3153 | foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh)) | ||
3154 | { | ||
3155 | yield return false; | ||
3156 | } | ||
3157 | } | ||
3158 | } | ||
3159 | } | ||
3160 | } | ||
3161 | |||
3162 | public static IEnumerable<bool> rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5) | ||
3163 | { | ||
3164 | { | ||
3165 | object _X = arg4; | ||
3166 | Variable NextCh = new Variable(); | ||
3167 | foreach (bool l2 in YP.unify(arg1, -1)) | ||
3168 | { | ||
3169 | foreach (bool l3 in YP.unify(arg2, NextCh)) | ||
3170 | { | ||
3171 | foreach (bool l4 in YP.unify(arg3, Atom.NIL)) | ||
3172 | { | ||
3173 | foreach (bool l5 in YP.unify(arg5, NextCh)) | ||
3174 | { | ||
3175 | yield return true; | ||
3176 | yield break; | ||
3177 | } | ||
3178 | } | ||
3179 | } | ||
3180 | } | ||
3181 | } | ||
3182 | { | ||
3183 | object Char = arg1; | ||
3184 | object Next = arg2; | ||
3185 | object Quote = arg4; | ||
3186 | object NextCh = arg5; | ||
3187 | Variable Chars = new Variable(); | ||
3188 | Variable Char2 = new Variable(); | ||
3189 | Variable Next2 = new Variable(); | ||
3190 | foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars))) | ||
3191 | { | ||
3192 | foreach (bool l3 in read_char(Next, Quote, Char2, Next2)) | ||
3193 | { | ||
3194 | foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh)) | ||
3195 | { | ||
3196 | yield return false; | ||
3197 | } | ||
3198 | } | ||
3199 | } | ||
3200 | } | ||
3201 | } | ||
3202 | |||
3203 | public static IEnumerable<bool> escape_char(object arg1, object arg2) | ||
3204 | { | ||
3205 | { | ||
3206 | foreach (bool l2 in YP.unify(arg1, 110)) | ||
3207 | { | ||
3208 | foreach (bool l3 in YP.unify(arg2, 10)) | ||
3209 | { | ||
3210 | yield return false; | ||
3211 | } | ||
3212 | } | ||
3213 | } | ||
3214 | { | ||
3215 | foreach (bool l2 in YP.unify(arg1, 78)) | ||
3216 | { | ||
3217 | foreach (bool l3 in YP.unify(arg2, 10)) | ||
3218 | { | ||
3219 | yield return false; | ||
3220 | } | ||
3221 | } | ||
3222 | } | ||
3223 | { | ||
3224 | foreach (bool l2 in YP.unify(arg1, 116)) | ||
3225 | { | ||
3226 | foreach (bool l3 in YP.unify(arg2, 9)) | ||
3227 | { | ||
3228 | yield return false; | ||
3229 | } | ||
3230 | } | ||
3231 | } | ||
3232 | { | ||
3233 | foreach (bool l2 in YP.unify(arg1, 84)) | ||
3234 | { | ||
3235 | foreach (bool l3 in YP.unify(arg2, 9)) | ||
3236 | { | ||
3237 | yield return false; | ||
3238 | } | ||
3239 | } | ||
3240 | } | ||
3241 | { | ||
3242 | foreach (bool l2 in YP.unify(arg1, 114)) | ||
3243 | { | ||
3244 | foreach (bool l3 in YP.unify(arg2, 13)) | ||
3245 | { | ||
3246 | yield return false; | ||
3247 | } | ||
3248 | } | ||
3249 | } | ||
3250 | { | ||
3251 | foreach (bool l2 in YP.unify(arg1, 82)) | ||
3252 | { | ||
3253 | foreach (bool l3 in YP.unify(arg2, 13)) | ||
3254 | { | ||
3255 | yield return false; | ||
3256 | } | ||
3257 | } | ||
3258 | } | ||
3259 | { | ||
3260 | foreach (bool l2 in YP.unify(arg1, 118)) | ||
3261 | { | ||
3262 | foreach (bool l3 in YP.unify(arg2, 11)) | ||
3263 | { | ||
3264 | yield return false; | ||
3265 | } | ||
3266 | } | ||
3267 | } | ||
3268 | { | ||
3269 | foreach (bool l2 in YP.unify(arg1, 86)) | ||
3270 | { | ||
3271 | foreach (bool l3 in YP.unify(arg2, 11)) | ||
3272 | { | ||
3273 | yield return false; | ||
3274 | } | ||
3275 | } | ||
3276 | } | ||
3277 | { | ||
3278 | foreach (bool l2 in YP.unify(arg1, 98)) | ||
3279 | { | ||
3280 | foreach (bool l3 in YP.unify(arg2, 8)) | ||
3281 | { | ||
3282 | yield return false; | ||
3283 | } | ||
3284 | } | ||
3285 | } | ||
3286 | { | ||
3287 | foreach (bool l2 in YP.unify(arg1, 66)) | ||
3288 | { | ||
3289 | foreach (bool l3 in YP.unify(arg2, 8)) | ||
3290 | { | ||
3291 | yield return false; | ||
3292 | } | ||
3293 | } | ||
3294 | } | ||
3295 | { | ||
3296 | foreach (bool l2 in YP.unify(arg1, 102)) | ||
3297 | { | ||
3298 | foreach (bool l3 in YP.unify(arg2, 12)) | ||
3299 | { | ||
3300 | yield return false; | ||
3301 | } | ||
3302 | } | ||
3303 | } | ||
3304 | { | ||
3305 | foreach (bool l2 in YP.unify(arg1, 70)) | ||
3306 | { | ||
3307 | foreach (bool l3 in YP.unify(arg2, 12)) | ||
3308 | { | ||
3309 | yield return false; | ||
3310 | } | ||
3311 | } | ||
3312 | } | ||
3313 | { | ||
3314 | foreach (bool l2 in YP.unify(arg1, 101)) | ||
3315 | { | ||
3316 | foreach (bool l3 in YP.unify(arg2, 27)) | ||
3317 | { | ||
3318 | yield return false; | ||
3319 | } | ||
3320 | } | ||
3321 | } | ||
3322 | { | ||
3323 | foreach (bool l2 in YP.unify(arg1, 69)) | ||
3324 | { | ||
3325 | foreach (bool l3 in YP.unify(arg2, 27)) | ||
3326 | { | ||
3327 | yield return false; | ||
3328 | } | ||
3329 | } | ||
3330 | } | ||
3331 | { | ||
3332 | foreach (bool l2 in YP.unify(arg1, 100)) | ||
3333 | { | ||
3334 | foreach (bool l3 in YP.unify(arg2, 127)) | ||
3335 | { | ||
3336 | yield return false; | ||
3337 | } | ||
3338 | } | ||
3339 | } | ||
3340 | { | ||
3341 | foreach (bool l2 in YP.unify(arg1, 68)) | ||
3342 | { | ||
3343 | foreach (bool l3 in YP.unify(arg2, 127)) | ||
3344 | { | ||
3345 | yield return false; | ||
3346 | } | ||
3347 | } | ||
3348 | } | ||
3349 | { | ||
3350 | foreach (bool l2 in YP.unify(arg1, 115)) | ||
3351 | { | ||
3352 | foreach (bool l3 in YP.unify(arg2, 32)) | ||
3353 | { | ||
3354 | yield return false; | ||
3355 | } | ||
3356 | } | ||
3357 | } | ||
3358 | { | ||
3359 | foreach (bool l2 in YP.unify(arg1, 83)) | ||
3360 | { | ||
3361 | foreach (bool l3 in YP.unify(arg2, 32)) | ||
3362 | { | ||
3363 | yield return false; | ||
3364 | } | ||
3365 | } | ||
3366 | } | ||
3367 | { | ||
3368 | foreach (bool l2 in YP.unify(arg1, 122)) | ||
3369 | { | ||
3370 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
3371 | { | ||
3372 | yield return false; | ||
3373 | } | ||
3374 | } | ||
3375 | } | ||
3376 | { | ||
3377 | foreach (bool l2 in YP.unify(arg1, 90)) | ||
3378 | { | ||
3379 | foreach (bool l3 in YP.unify(arg2, -1)) | ||
3380 | { | ||
3381 | yield return false; | ||
3382 | } | ||
3383 | } | ||
3384 | } | ||
3385 | } | ||
3386 | |||
3387 | public static IEnumerable<bool> read_variable(object C1, object Dict, object arg3) | ||
3388 | { | ||
3389 | { | ||
3390 | Variable Var = new Variable(); | ||
3391 | Variable Name = new Variable(); | ||
3392 | Variable StartPos = new Variable(); | ||
3393 | Variable Tokens = new Variable(); | ||
3394 | Variable Chars = new Variable(); | ||
3395 | Variable NextCh = new Variable(); | ||
3396 | foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3(@"var", Var, Name, StartPos), Tokens))) | ||
3397 | { | ||
3398 | foreach (bool l3 in get_current_position(StartPos)) | ||
3399 | { | ||
3400 | foreach (bool l4 in read_name(C1, Chars, NextCh)) | ||
3401 | { | ||
3402 | foreach (bool l5 in YP.atom_codes(Name, Chars)) | ||
3403 | { | ||
3404 | if (YP.termEqual(Name, Atom.a(@"_"))) | ||
3405 | { | ||
3406 | foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens)) | ||
3407 | { | ||
3408 | yield return false; | ||
3409 | } | ||
3410 | goto cutIf1; | ||
3411 | } | ||
3412 | foreach (bool l6 in read_lookup(Dict, Name, Var)) | ||
3413 | { | ||
3414 | foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens)) | ||
3415 | { | ||
3416 | yield return false; | ||
3417 | } | ||
3418 | } | ||
3419 | cutIf1: | ||
3420 | { } | ||
3421 | } | ||
3422 | } | ||
3423 | } | ||
3424 | } | ||
3425 | } | ||
3426 | } | ||
3427 | |||
3428 | public static IEnumerable<bool> read_lookup(object arg1, object Name, object Var) | ||
3429 | { | ||
3430 | { | ||
3431 | Variable N = new Variable(); | ||
3432 | Variable V = new Variable(); | ||
3433 | Variable L = new Variable(); | ||
3434 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"=", N, V), L))) | ||
3435 | { | ||
3436 | foreach (bool l3 in YP.unify(N, Name)) | ||
3437 | { | ||
3438 | foreach (bool l4 in YP.unify(V, Var)) | ||
3439 | { | ||
3440 | yield return false; | ||
3441 | } | ||
3442 | goto cutIf1; | ||
3443 | } | ||
3444 | foreach (bool l3 in read_lookup(L, Name, Var)) | ||
3445 | { | ||
3446 | yield return false; | ||
3447 | } | ||
3448 | cutIf1: | ||
3449 | { } | ||
3450 | } | ||
3451 | } | ||
3452 | } | ||
3453 | |||
3454 | public static IEnumerable<bool> read_solidus(object Ch, object LastCh) | ||
3455 | { | ||
3456 | { | ||
3457 | Variable NextCh = new Variable(); | ||
3458 | if (YP.equal(Ch, 42)) | ||
3459 | { | ||
3460 | foreach (bool l3 in YP.get_code(NextCh)) | ||
3461 | { | ||
3462 | if (YP.equal(NextCh, 47)) | ||
3463 | { | ||
3464 | foreach (bool l5 in YP.get_code(LastCh)) | ||
3465 | { | ||
3466 | yield return false; | ||
3467 | } | ||
3468 | goto cutIf2; | ||
3469 | } | ||
3470 | foreach (bool l4 in read_solidus(NextCh, LastCh)) | ||
3471 | { | ||
3472 | yield return false; | ||
3473 | } | ||
3474 | cutIf2: | ||
3475 | { } | ||
3476 | } | ||
3477 | goto cutIf1; | ||
3478 | } | ||
3479 | if (YP.notEqual(Ch, -1)) | ||
3480 | { | ||
3481 | foreach (bool l3 in YP.get_code(NextCh)) | ||
3482 | { | ||
3483 | foreach (bool l4 in read_solidus(NextCh, LastCh)) | ||
3484 | { | ||
3485 | yield return false; | ||
3486 | } | ||
3487 | } | ||
3488 | goto cutIf3; | ||
3489 | } | ||
3490 | foreach (bool l2 in YP.unify(LastCh, Ch)) | ||
3491 | { | ||
3492 | foreach (bool l3 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in /*comment~n"), Atom.NIL)) | ||
3493 | { | ||
3494 | yield return false; | ||
3495 | } | ||
3496 | } | ||
3497 | cutIf3: | ||
3498 | cutIf1: | ||
3499 | { } | ||
3500 | } | ||
3501 | } | ||
3502 | |||
3503 | public static IEnumerable<bool> read_identifier(object C1, object Dict, object Tokens) | ||
3504 | { | ||
3505 | { | ||
3506 | Variable Chars = new Variable(); | ||
3507 | Variable NextCh = new Variable(); | ||
3508 | foreach (bool l2 in read_name(C1, Chars, NextCh)) | ||
3509 | { | ||
3510 | foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars)) | ||
3511 | { | ||
3512 | yield return false; | ||
3513 | } | ||
3514 | } | ||
3515 | } | ||
3516 | } | ||
3517 | |||
3518 | public static IEnumerable<bool> read_name(object C1, object arg2, object LastCh) | ||
3519 | { | ||
3520 | { | ||
3521 | Variable Chars = new Variable(); | ||
3522 | Variable C2 = new Variable(); | ||
3523 | foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) | ||
3524 | { | ||
3525 | foreach (bool l3 in YP.get_code(C2)) | ||
3526 | { | ||
3527 | if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL))) | ||
3528 | { | ||
3529 | if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL))) | ||
3530 | { | ||
3531 | foreach (bool l6 in read_name(C2, Chars, LastCh)) | ||
3532 | { | ||
3533 | yield return false; | ||
3534 | } | ||
3535 | goto cutIf2; | ||
3536 | } | ||
3537 | if (YP.lessThan(C2, 192)) | ||
3538 | { | ||
3539 | if (YP.notEqual(YP.bitwiseOr(C2, 16), 186)) | ||
3540 | { | ||
3541 | foreach (bool l7 in YP.unify(Chars, Atom.NIL)) | ||
3542 | { | ||
3543 | foreach (bool l8 in YP.unify(LastCh, C2)) | ||
3544 | { | ||
3545 | yield return false; | ||
3546 | } | ||
3547 | } | ||
3548 | goto cutIf3; | ||
3549 | } | ||
3550 | } | ||
3551 | if (YP.equal(YP.bitwiseOr(C2, 32), 247)) | ||
3552 | { | ||
3553 | foreach (bool l6 in YP.unify(Chars, Atom.NIL)) | ||
3554 | { | ||
3555 | foreach (bool l7 in YP.unify(LastCh, C2)) | ||
3556 | { | ||
3557 | yield return false; | ||
3558 | } | ||
3559 | } | ||
3560 | goto cutIf4; | ||
3561 | } | ||
3562 | foreach (bool l5 in read_name(C2, Chars, LastCh)) | ||
3563 | { | ||
3564 | yield return false; | ||
3565 | } | ||
3566 | cutIf4: | ||
3567 | cutIf3: | ||
3568 | cutIf2: | ||
3569 | goto cutIf1; | ||
3570 | } | ||
3571 | if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL))) | ||
3572 | { | ||
3573 | if (YP.greaterThan(C2, new ListPair(90, Atom.NIL))) | ||
3574 | { | ||
3575 | if (YP.notEqual(C2, new ListPair(95, Atom.NIL))) | ||
3576 | { | ||
3577 | foreach (bool l7 in YP.unify(Chars, Atom.NIL)) | ||
3578 | { | ||
3579 | foreach (bool l8 in YP.unify(LastCh, C2)) | ||
3580 | { | ||
3581 | yield return false; | ||
3582 | } | ||
3583 | } | ||
3584 | goto cutIf6; | ||
3585 | } | ||
3586 | } | ||
3587 | foreach (bool l5 in read_name(C2, Chars, LastCh)) | ||
3588 | { | ||
3589 | yield return false; | ||
3590 | } | ||
3591 | cutIf6: | ||
3592 | goto cutIf5; | ||
3593 | } | ||
3594 | if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) | ||
3595 | { | ||
3596 | if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) | ||
3597 | { | ||
3598 | foreach (bool l6 in read_name(C2, Chars, LastCh)) | ||
3599 | { | ||
3600 | yield return false; | ||
3601 | } | ||
3602 | goto cutIf7; | ||
3603 | } | ||
3604 | } | ||
3605 | foreach (bool l4 in YP.unify(Chars, Atom.NIL)) | ||
3606 | { | ||
3607 | foreach (bool l5 in YP.unify(LastCh, C2)) | ||
3608 | { | ||
3609 | yield return false; | ||
3610 | } | ||
3611 | } | ||
3612 | cutIf7: | ||
3613 | cutIf5: | ||
3614 | cutIf1: | ||
3615 | { } | ||
3616 | } | ||
3617 | } | ||
3618 | } | ||
3619 | } | ||
3620 | |||
3621 | public static IEnumerable<bool> read_fullstop(object Ch, object Dict, object Tokens) | ||
3622 | { | ||
3623 | { | ||
3624 | Variable Number = new Variable(); | ||
3625 | Variable Tokens1 = new Variable(); | ||
3626 | Variable Chars = new Variable(); | ||
3627 | Variable NextCh = new Variable(); | ||
3628 | if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL))) | ||
3629 | { | ||
3630 | if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL))) | ||
3631 | { | ||
3632 | foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1(@"number", Number), Tokens1))) | ||
3633 | { | ||
3634 | foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch)) | ||
3635 | { | ||
3636 | yield return false; | ||
3637 | } | ||
3638 | } | ||
3639 | goto cutIf1; | ||
3640 | } | ||
3641 | } | ||
3642 | if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL))) | ||
3643 | { | ||
3644 | foreach (bool l3 in rest_symbol(Ch, Chars, NextCh)) | ||
3645 | { | ||
3646 | foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars))) | ||
3647 | { | ||
3648 | yield return false; | ||
3649 | } | ||
3650 | } | ||
3651 | goto cutIf2; | ||
3652 | } | ||
3653 | if (YP.greaterThanOrEqual(Ch, 0)) | ||
3654 | { | ||
3655 | foreach (bool l3 in YP.unify(Tokens, Atom.NIL)) | ||
3656 | { | ||
3657 | yield return false; | ||
3658 | } | ||
3659 | goto cutIf3; | ||
3660 | } | ||
3661 | foreach (bool l2 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file just after full stop~n"), Atom.NIL)) | ||
3662 | { | ||
3663 | } | ||
3664 | cutIf3: | ||
3665 | cutIf2: | ||
3666 | cutIf1: | ||
3667 | { } | ||
3668 | } | ||
3669 | } | ||
3670 | |||
3671 | public static IEnumerable<bool> read_float(object Number, object Dict, object Tokens, object Digits, object Digit) | ||
3672 | { | ||
3673 | { | ||
3674 | Variable Chars = new Variable(); | ||
3675 | Variable Rest = new Variable(); | ||
3676 | Variable NextCh = new Variable(); | ||
3677 | foreach (bool l2 in prepend(Digits, Chars, Rest)) | ||
3678 | { | ||
3679 | foreach (bool l3 in read_float(Digit, Rest, NextCh, Chars)) | ||
3680 | { | ||
3681 | foreach (bool l4 in YP.number_codes(Number, Chars)) | ||
3682 | { | ||
3683 | foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) | ||
3684 | { | ||
3685 | yield return false; | ||
3686 | } | ||
3687 | } | ||
3688 | } | ||
3689 | } | ||
3690 | } | ||
3691 | } | ||
3692 | |||
3693 | public static IEnumerable<bool> prepend(object arg1, object arg2, object arg3) | ||
3694 | { | ||
3695 | { | ||
3696 | object X = arg3; | ||
3697 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
3698 | { | ||
3699 | foreach (bool l3 in YP.unify(arg2, new ListPair(46, X))) | ||
3700 | { | ||
3701 | yield return false; | ||
3702 | } | ||
3703 | } | ||
3704 | } | ||
3705 | { | ||
3706 | object Y = arg3; | ||
3707 | Variable C = new Variable(); | ||
3708 | Variable Cs = new Variable(); | ||
3709 | Variable X = new Variable(); | ||
3710 | foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs))) | ||
3711 | { | ||
3712 | foreach (bool l3 in YP.unify(arg2, new ListPair(C, X))) | ||
3713 | { | ||
3714 | foreach (bool l4 in prepend(Cs, X, Y)) | ||
3715 | { | ||
3716 | yield return false; | ||
3717 | } | ||
3718 | } | ||
3719 | } | ||
3720 | } | ||
3721 | } | ||
3722 | |||
3723 | public static IEnumerable<bool> read_float(object C1, object arg2, object NextCh, object Total) | ||
3724 | { | ||
3725 | { | ||
3726 | Variable Chars = new Variable(); | ||
3727 | Variable C2 = new Variable(); | ||
3728 | Variable C3 = new Variable(); | ||
3729 | Variable C4 = new Variable(); | ||
3730 | Variable More = new Variable(); | ||
3731 | foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) | ||
3732 | { | ||
3733 | foreach (bool l3 in YP.get_code(C2)) | ||
3734 | { | ||
3735 | if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) | ||
3736 | { | ||
3737 | if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) | ||
3738 | { | ||
3739 | foreach (bool l6 in read_float(C2, Chars, NextCh, Total)) | ||
3740 | { | ||
3741 | yield return false; | ||
3742 | } | ||
3743 | goto cutIf1; | ||
3744 | } | ||
3745 | } | ||
3746 | if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL))) | ||
3747 | { | ||
3748 | foreach (bool l5 in YP.get_code(C3)) | ||
3749 | { | ||
3750 | if (YP.equal(C3, new ListPair(45, Atom.NIL))) | ||
3751 | { | ||
3752 | foreach (bool l7 in YP.get_code(C4)) | ||
3753 | { | ||
3754 | foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More)))) | ||
3755 | { | ||
3756 | if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) | ||
3757 | { | ||
3758 | if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) | ||
3759 | { | ||
3760 | foreach (bool l11 in read_exponent(C4, More, NextCh)) | ||
3761 | { | ||
3762 | yield return false; | ||
3763 | } | ||
3764 | goto cutIf4; | ||
3765 | } | ||
3766 | } | ||
3767 | foreach (bool l9 in YP.unify(More, Atom.NIL)) | ||
3768 | { | ||
3769 | foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) | ||
3770 | { | ||
3771 | } | ||
3772 | } | ||
3773 | foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL))) | ||
3774 | { | ||
3775 | foreach (bool l10 in YP.unify(NextCh, C4)) | ||
3776 | { | ||
3777 | yield return false; | ||
3778 | } | ||
3779 | } | ||
3780 | cutIf4: | ||
3781 | { } | ||
3782 | } | ||
3783 | } | ||
3784 | goto cutIf3; | ||
3785 | } | ||
3786 | if (YP.equal(C3, new ListPair(43, Atom.NIL))) | ||
3787 | { | ||
3788 | foreach (bool l7 in YP.get_code(C4)) | ||
3789 | { | ||
3790 | foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More))) | ||
3791 | { | ||
3792 | if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) | ||
3793 | { | ||
3794 | if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) | ||
3795 | { | ||
3796 | foreach (bool l11 in read_exponent(C4, More, NextCh)) | ||
3797 | { | ||
3798 | yield return false; | ||
3799 | } | ||
3800 | goto cutIf6; | ||
3801 | } | ||
3802 | } | ||
3803 | foreach (bool l9 in YP.unify(More, Atom.NIL)) | ||
3804 | { | ||
3805 | foreach (bool l10 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) | ||
3806 | { | ||
3807 | } | ||
3808 | } | ||
3809 | foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL))) | ||
3810 | { | ||
3811 | foreach (bool l10 in YP.unify(NextCh, C4)) | ||
3812 | { | ||
3813 | yield return false; | ||
3814 | } | ||
3815 | } | ||
3816 | cutIf6: | ||
3817 | { } | ||
3818 | } | ||
3819 | } | ||
3820 | goto cutIf5; | ||
3821 | } | ||
3822 | foreach (bool l6 in YP.unify(C4, C3)) | ||
3823 | { | ||
3824 | foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More))) | ||
3825 | { | ||
3826 | if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) | ||
3827 | { | ||
3828 | if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) | ||
3829 | { | ||
3830 | foreach (bool l10 in read_exponent(C4, More, NextCh)) | ||
3831 | { | ||
3832 | yield return false; | ||
3833 | } | ||
3834 | goto cutIf7; | ||
3835 | } | ||
3836 | } | ||
3837 | foreach (bool l8 in YP.unify(More, Atom.NIL)) | ||
3838 | { | ||
3839 | foreach (bool l9 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) | ||
3840 | { | ||
3841 | } | ||
3842 | } | ||
3843 | foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL))) | ||
3844 | { | ||
3845 | foreach (bool l9 in YP.unify(NextCh, C4)) | ||
3846 | { | ||
3847 | yield return false; | ||
3848 | } | ||
3849 | } | ||
3850 | cutIf7: | ||
3851 | { } | ||
3852 | } | ||
3853 | } | ||
3854 | cutIf5: | ||
3855 | cutIf3: | ||
3856 | { } | ||
3857 | } | ||
3858 | goto cutIf2; | ||
3859 | } | ||
3860 | foreach (bool l4 in YP.unify(Chars, Atom.NIL)) | ||
3861 | { | ||
3862 | foreach (bool l5 in YP.unify(NextCh, C2)) | ||
3863 | { | ||
3864 | yield return false; | ||
3865 | } | ||
3866 | } | ||
3867 | cutIf2: | ||
3868 | cutIf1: | ||
3869 | { } | ||
3870 | } | ||
3871 | } | ||
3872 | } | ||
3873 | } | ||
3874 | |||
3875 | public static IEnumerable<bool> read_exponent(object C1, object arg2, object NextCh) | ||
3876 | { | ||
3877 | { | ||
3878 | Variable Chars = new Variable(); | ||
3879 | Variable C2 = new Variable(); | ||
3880 | foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) | ||
3881 | { | ||
3882 | foreach (bool l3 in YP.get_code(C2)) | ||
3883 | { | ||
3884 | if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) | ||
3885 | { | ||
3886 | if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) | ||
3887 | { | ||
3888 | foreach (bool l6 in read_exponent(C2, Chars, NextCh)) | ||
3889 | { | ||
3890 | yield return false; | ||
3891 | } | ||
3892 | goto cutIf1; | ||
3893 | } | ||
3894 | } | ||
3895 | foreach (bool l4 in YP.unify(Chars, Atom.NIL)) | ||
3896 | { | ||
3897 | foreach (bool l5 in YP.unify(NextCh, C2)) | ||
3898 | { | ||
3899 | yield return false; | ||
3900 | } | ||
3901 | } | ||
3902 | cutIf1: | ||
3903 | { } | ||
3904 | } | ||
3905 | } | ||
3906 | } | ||
3907 | } | ||
3908 | |||
3909 | public static IEnumerable<bool> read_number(object C1, object Dict, object arg3) | ||
3910 | { | ||
3911 | { | ||
3912 | Variable Number = new Variable(); | ||
3913 | Variable Tokens = new Variable(); | ||
3914 | Variable C2 = new Variable(); | ||
3915 | Variable N = new Variable(); | ||
3916 | Variable C = new Variable(); | ||
3917 | Variable C3 = new Variable(); | ||
3918 | Variable Digits = new Variable(); | ||
3919 | foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1(@"number", Number), Tokens))) | ||
3920 | { | ||
3921 | foreach (bool l3 in read_number4(C1, C2, 0, N)) | ||
3922 | { | ||
3923 | if (YP.equal(C2, 39)) | ||
3924 | { | ||
3925 | if (YP.greaterThanOrEqual(N, 2)) | ||
3926 | { | ||
3927 | if (YP.lessThanOrEqual(N, 36)) | ||
3928 | { | ||
3929 | foreach (bool l7 in read_based(N, 0, Number, C)) | ||
3930 | { | ||
3931 | foreach (bool l8 in read_tokens(C, Dict, Tokens)) | ||
3932 | { | ||
3933 | yield return false; | ||
3934 | } | ||
3935 | } | ||
3936 | goto cutIf2; | ||
3937 | } | ||
3938 | } | ||
3939 | if (YP.equal(N, 0)) | ||
3940 | { | ||
3941 | foreach (bool l6 in YP.get_code(C3)) | ||
3942 | { | ||
3943 | foreach (bool l7 in read_char(C3, -1, Number, C)) | ||
3944 | { | ||
3945 | foreach (bool l8 in read_tokens(C, Dict, Tokens)) | ||
3946 | { | ||
3947 | yield return false; | ||
3948 | } | ||
3949 | } | ||
3950 | } | ||
3951 | goto cutIf3; | ||
3952 | } | ||
3953 | foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL)))) | ||
3954 | { | ||
3955 | foreach (bool l6 in YP.unify(Number, N)) | ||
3956 | { | ||
3957 | foreach (bool l7 in YP.unify(C, C2)) | ||
3958 | { | ||
3959 | foreach (bool l8 in read_tokens(C, Dict, Tokens)) | ||
3960 | { | ||
3961 | yield return false; | ||
3962 | } | ||
3963 | } | ||
3964 | } | ||
3965 | } | ||
3966 | cutIf3: | ||
3967 | cutIf2: | ||
3968 | goto cutIf1; | ||
3969 | } | ||
3970 | if (YP.equal(C2, 46)) | ||
3971 | { | ||
3972 | foreach (bool l5 in YP.get_code(C3)) | ||
3973 | { | ||
3974 | if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL))) | ||
3975 | { | ||
3976 | if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL))) | ||
3977 | { | ||
3978 | foreach (bool l8 in YP.number_codes(N, Digits)) | ||
3979 | { | ||
3980 | foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3)) | ||
3981 | { | ||
3982 | yield return false; | ||
3983 | } | ||
3984 | } | ||
3985 | goto cutIf5; | ||
3986 | } | ||
3987 | } | ||
3988 | foreach (bool l6 in YP.unify(Number, N)) | ||
3989 | { | ||
3990 | foreach (bool l7 in read_fullstop(C3, Dict, Tokens)) | ||
3991 | { | ||
3992 | yield return false; | ||
3993 | } | ||
3994 | } | ||
3995 | cutIf5: | ||
3996 | { } | ||
3997 | } | ||
3998 | goto cutIf4; | ||
3999 | } | ||
4000 | foreach (bool l4 in YP.unify(Number, N)) | ||
4001 | { | ||
4002 | foreach (bool l5 in read_tokens(C2, Dict, Tokens)) | ||
4003 | { | ||
4004 | yield return false; | ||
4005 | } | ||
4006 | } | ||
4007 | cutIf4: | ||
4008 | cutIf1: | ||
4009 | { } | ||
4010 | } | ||
4011 | } | ||
4012 | } | ||
4013 | } | ||
4014 | |||
4015 | public static IEnumerable<bool> read_number4(object C0, object C, object N0, object N) | ||
4016 | { | ||
4017 | { | ||
4018 | Variable N1 = new Variable(); | ||
4019 | Variable C1 = new Variable(); | ||
4020 | if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL))) | ||
4021 | { | ||
4022 | if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL))) | ||
4023 | { | ||
4024 | foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0))) | ||
4025 | { | ||
4026 | foreach (bool l5 in YP.get_code(C1)) | ||
4027 | { | ||
4028 | foreach (bool l6 in read_number4(C1, C, N1, N)) | ||
4029 | { | ||
4030 | yield return false; | ||
4031 | } | ||
4032 | } | ||
4033 | } | ||
4034 | goto cutIf1; | ||
4035 | } | ||
4036 | } | ||
4037 | if (YP.equal(C0, 95)) | ||
4038 | { | ||
4039 | foreach (bool l3 in YP.get_code(C1)) | ||
4040 | { | ||
4041 | foreach (bool l4 in read_number4(C1, C, N0, N)) | ||
4042 | { | ||
4043 | yield return false; | ||
4044 | } | ||
4045 | } | ||
4046 | goto cutIf2; | ||
4047 | } | ||
4048 | foreach (bool l2 in YP.unify(C, C0)) | ||
4049 | { | ||
4050 | foreach (bool l3 in YP.unify(N, N0)) | ||
4051 | { | ||
4052 | yield return false; | ||
4053 | } | ||
4054 | } | ||
4055 | cutIf2: | ||
4056 | cutIf1: | ||
4057 | { } | ||
4058 | } | ||
4059 | } | ||
4060 | |||
4061 | public static IEnumerable<bool> read_based(object Base, object N0, object N, object C) | ||
4062 | { | ||
4063 | { | ||
4064 | Variable C1 = new Variable(); | ||
4065 | Variable Digit = new Variable(); | ||
4066 | Variable N1 = new Variable(); | ||
4067 | foreach (bool l2 in YP.get_code(C1)) | ||
4068 | { | ||
4069 | if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) | ||
4070 | { | ||
4071 | if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL))) | ||
4072 | { | ||
4073 | foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL)))) | ||
4074 | { | ||
4075 | if (YP.lessThan(Digit, Base)) | ||
4076 | { | ||
4077 | foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) | ||
4078 | { | ||
4079 | foreach (bool l8 in read_based(Base, N1, N, C)) | ||
4080 | { | ||
4081 | yield return false; | ||
4082 | } | ||
4083 | } | ||
4084 | goto cutIf2; | ||
4085 | } | ||
4086 | if (YP.equal(C1, new ListPair(95, Atom.NIL))) | ||
4087 | { | ||
4088 | foreach (bool l7 in read_based(Base, N0, N, C)) | ||
4089 | { | ||
4090 | yield return false; | ||
4091 | } | ||
4092 | goto cutIf3; | ||
4093 | } | ||
4094 | foreach (bool l6 in YP.unify(N, N0)) | ||
4095 | { | ||
4096 | foreach (bool l7 in YP.unify(C, C1)) | ||
4097 | { | ||
4098 | yield return false; | ||
4099 | } | ||
4100 | } | ||
4101 | cutIf3: | ||
4102 | cutIf2: | ||
4103 | { } | ||
4104 | } | ||
4105 | goto cutIf1; | ||
4106 | } | ||
4107 | } | ||
4108 | if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL))) | ||
4109 | { | ||
4110 | if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL))) | ||
4111 | { | ||
4112 | foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10)))) | ||
4113 | { | ||
4114 | if (YP.lessThan(Digit, Base)) | ||
4115 | { | ||
4116 | foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) | ||
4117 | { | ||
4118 | foreach (bool l8 in read_based(Base, N1, N, C)) | ||
4119 | { | ||
4120 | yield return false; | ||
4121 | } | ||
4122 | } | ||
4123 | goto cutIf5; | ||
4124 | } | ||
4125 | if (YP.equal(C1, new ListPair(95, Atom.NIL))) | ||
4126 | { | ||
4127 | foreach (bool l7 in read_based(Base, N0, N, C)) | ||
4128 | { | ||
4129 | yield return false; | ||
4130 | } | ||
4131 | goto cutIf6; | ||
4132 | } | ||
4133 | foreach (bool l6 in YP.unify(N, N0)) | ||
4134 | { | ||
4135 | foreach (bool l7 in YP.unify(C, C1)) | ||
4136 | { | ||
4137 | yield return false; | ||
4138 | } | ||
4139 | } | ||
4140 | cutIf6: | ||
4141 | cutIf5: | ||
4142 | { } | ||
4143 | } | ||
4144 | goto cutIf4; | ||
4145 | } | ||
4146 | } | ||
4147 | if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL))) | ||
4148 | { | ||
4149 | if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL))) | ||
4150 | { | ||
4151 | foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10)))) | ||
4152 | { | ||
4153 | if (YP.lessThan(Digit, Base)) | ||
4154 | { | ||
4155 | foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) | ||
4156 | { | ||
4157 | foreach (bool l8 in read_based(Base, N1, N, C)) | ||
4158 | { | ||
4159 | yield return false; | ||
4160 | } | ||
4161 | } | ||
4162 | goto cutIf8; | ||
4163 | } | ||
4164 | if (YP.equal(C1, new ListPair(95, Atom.NIL))) | ||
4165 | { | ||
4166 | foreach (bool l7 in read_based(Base, N0, N, C)) | ||
4167 | { | ||
4168 | yield return false; | ||
4169 | } | ||
4170 | goto cutIf9; | ||
4171 | } | ||
4172 | foreach (bool l6 in YP.unify(N, N0)) | ||
4173 | { | ||
4174 | foreach (bool l7 in YP.unify(C, C1)) | ||
4175 | { | ||
4176 | yield return false; | ||
4177 | } | ||
4178 | } | ||
4179 | cutIf9: | ||
4180 | cutIf8: | ||
4181 | { } | ||
4182 | } | ||
4183 | goto cutIf7; | ||
4184 | } | ||
4185 | } | ||
4186 | foreach (bool l3 in YP.unify(Digit, 99)) | ||
4187 | { | ||
4188 | if (YP.lessThan(Digit, Base)) | ||
4189 | { | ||
4190 | foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) | ||
4191 | { | ||
4192 | foreach (bool l6 in read_based(Base, N1, N, C)) | ||
4193 | { | ||
4194 | yield return false; | ||
4195 | } | ||
4196 | } | ||
4197 | goto cutIf10; | ||
4198 | } | ||
4199 | if (YP.equal(C1, new ListPair(95, Atom.NIL))) | ||
4200 | { | ||
4201 | foreach (bool l5 in read_based(Base, N0, N, C)) | ||
4202 | { | ||
4203 | yield return false; | ||
4204 | } | ||
4205 | goto cutIf11; | ||
4206 | } | ||
4207 | foreach (bool l4 in YP.unify(N, N0)) | ||
4208 | { | ||
4209 | foreach (bool l5 in YP.unify(C, C1)) | ||
4210 | { | ||
4211 | yield return false; | ||
4212 | } | ||
4213 | } | ||
4214 | cutIf11: | ||
4215 | cutIf10: | ||
4216 | { } | ||
4217 | } | ||
4218 | cutIf7: | ||
4219 | cutIf4: | ||
4220 | cutIf1: | ||
4221 | { } | ||
4222 | } | ||
4223 | } | ||
4224 | } | ||
4225 | |||
4226 | public static IEnumerable<bool> read_char(object Char, object Quote, object Result, object Next) | ||
4227 | { | ||
4228 | { | ||
4229 | Variable C1 = new Variable(); | ||
4230 | Variable C2 = new Variable(); | ||
4231 | Variable C3 = new Variable(); | ||
4232 | Variable Ch = new Variable(); | ||
4233 | if (YP.equal(Char, 92)) | ||
4234 | { | ||
4235 | foreach (bool l3 in YP.get_code(C1)) | ||
4236 | { | ||
4237 | if (YP.lessThan(C1, 0)) | ||
4238 | { | ||
4239 | foreach (bool l5 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL)))) | ||
4240 | { | ||
4241 | foreach (bool l6 in YP.unify(Result, -1)) | ||
4242 | { | ||
4243 | foreach (bool l7 in YP.unify(Next, C1)) | ||
4244 | { | ||
4245 | yield return false; | ||
4246 | } | ||
4247 | } | ||
4248 | } | ||
4249 | goto cutIf2; | ||
4250 | } | ||
4251 | if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL))) | ||
4252 | { | ||
4253 | foreach (bool l5 in YP.get_code(C2)) | ||
4254 | { | ||
4255 | foreach (bool l6 in read_char(C2, Quote, Result, Next)) | ||
4256 | { | ||
4257 | yield return false; | ||
4258 | } | ||
4259 | } | ||
4260 | goto cutIf3; | ||
4261 | } | ||
4262 | if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL))) | ||
4263 | { | ||
4264 | foreach (bool l5 in YP.get_code(C2)) | ||
4265 | { | ||
4266 | foreach (bool l6 in read_char(C2, Quote, Result, Next)) | ||
4267 | { | ||
4268 | yield return false; | ||
4269 | } | ||
4270 | } | ||
4271 | goto cutIf4; | ||
4272 | } | ||
4273 | if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL))) | ||
4274 | { | ||
4275 | if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) | ||
4276 | { | ||
4277 | foreach (bool l6 in YP.get_code(C2)) | ||
4278 | { | ||
4279 | if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL))) | ||
4280 | { | ||
4281 | if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) | ||
4282 | { | ||
4283 | foreach (bool l9 in YP.get_code(C3)) | ||
4284 | { | ||
4285 | if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL))) | ||
4286 | { | ||
4287 | if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL))) | ||
4288 | { | ||
4289 | foreach (bool l12 in YP.get_code(Next)) | ||
4290 | { | ||
4291 | foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL))))) | ||
4292 | { | ||
4293 | yield return false; | ||
4294 | } | ||
4295 | } | ||
4296 | goto cutIf7; | ||
4297 | } | ||
4298 | } | ||
4299 | foreach (bool l10 in YP.unify(Next, C3)) | ||
4300 | { | ||
4301 | foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL))))) | ||
4302 | { | ||
4303 | yield return false; | ||
4304 | } | ||
4305 | } | ||
4306 | cutIf7: | ||
4307 | { } | ||
4308 | } | ||
4309 | goto cutIf6; | ||
4310 | } | ||
4311 | } | ||
4312 | foreach (bool l7 in YP.unify(Next, C2)) | ||
4313 | { | ||
4314 | foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL)))) | ||
4315 | { | ||
4316 | yield return false; | ||
4317 | } | ||
4318 | } | ||
4319 | cutIf6: | ||
4320 | { } | ||
4321 | } | ||
4322 | goto cutIf5; | ||
4323 | } | ||
4324 | } | ||
4325 | if (YP.equal(C1, new ListPair(94, Atom.NIL))) | ||
4326 | { | ||
4327 | foreach (bool l5 in YP.get_code(C2)) | ||
4328 | { | ||
4329 | if (YP.lessThan(C2, 0)) | ||
4330 | { | ||
4331 | foreach (bool l7 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** end of file in ~c..~c^..~c~n"), new ListPair(Quote, new ListPair(92, new ListPair(Quote, Atom.NIL))))) | ||
4332 | { | ||
4333 | foreach (bool l8 in YP.unify(Result, -1)) | ||
4334 | { | ||
4335 | foreach (bool l9 in YP.unify(Next, C2)) | ||
4336 | { | ||
4337 | yield return false; | ||
4338 | } | ||
4339 | } | ||
4340 | } | ||
4341 | goto cutIf9; | ||
4342 | } | ||
4343 | if (YP.equal(C2, new ListPair(63, Atom.NIL))) | ||
4344 | { | ||
4345 | foreach (bool l7 in YP.unify(Result, 127)) | ||
4346 | { | ||
4347 | foreach (bool l8 in YP.get_code(Next)) | ||
4348 | { | ||
4349 | yield return false; | ||
4350 | } | ||
4351 | } | ||
4352 | goto cutIf10; | ||
4353 | } | ||
4354 | foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31))) | ||
4355 | { | ||
4356 | foreach (bool l7 in YP.get_code(Next)) | ||
4357 | { | ||
4358 | yield return false; | ||
4359 | } | ||
4360 | } | ||
4361 | cutIf10: | ||
4362 | cutIf9: | ||
4363 | { } | ||
4364 | } | ||
4365 | goto cutIf8; | ||
4366 | } | ||
4367 | foreach (bool l4 in escape_char(C1, Result)) | ||
4368 | { | ||
4369 | foreach (bool l5 in YP.get_code(Next)) | ||
4370 | { | ||
4371 | yield return false; | ||
4372 | } | ||
4373 | goto cutIf11; | ||
4374 | } | ||
4375 | foreach (bool l4 in YP.unify(Result, C1)) | ||
4376 | { | ||
4377 | foreach (bool l5 in YP.get_code(Next)) | ||
4378 | { | ||
4379 | yield return false; | ||
4380 | } | ||
4381 | } | ||
4382 | cutIf11: | ||
4383 | cutIf8: | ||
4384 | cutIf5: | ||
4385 | cutIf4: | ||
4386 | cutIf3: | ||
4387 | cutIf2: | ||
4388 | { } | ||
4389 | } | ||
4390 | goto cutIf1; | ||
4391 | } | ||
4392 | if (YP.equal(Char, Quote)) | ||
4393 | { | ||
4394 | foreach (bool l3 in YP.get_code(Ch)) | ||
4395 | { | ||
4396 | if (YP.equal(Ch, Quote)) | ||
4397 | { | ||
4398 | foreach (bool l5 in YP.unify(Result, Quote)) | ||
4399 | { | ||
4400 | foreach (bool l6 in YP.get_code(Next)) | ||
4401 | { | ||
4402 | yield return false; | ||
4403 | } | ||
4404 | } | ||
4405 | goto cutIf13; | ||
4406 | } | ||
4407 | foreach (bool l4 in YP.unify(Result, -1)) | ||
4408 | { | ||
4409 | foreach (bool l5 in YP.unify(Next, Ch)) | ||
4410 | { | ||
4411 | yield return false; | ||
4412 | } | ||
4413 | } | ||
4414 | cutIf13: | ||
4415 | { } | ||
4416 | } | ||
4417 | goto cutIf12; | ||
4418 | } | ||
4419 | if (YP.lessThan(Char, new ListPair(32, Atom.NIL))) | ||
4420 | { | ||
4421 | if (YP.notEqual(Char, 9)) | ||
4422 | { | ||
4423 | if (YP.notEqual(Char, 10)) | ||
4424 | { | ||
4425 | if (YP.notEqual(Char, 13)) | ||
4426 | { | ||
4427 | foreach (bool l6 in YP.unify(Result, -1)) | ||
4428 | { | ||
4429 | foreach (bool l7 in YP.unify(Next, Char)) | ||
4430 | { | ||
4431 | foreach (bool l8 in formatError(Atom.a(@"user_error"), Atom.a(@"~N** Strange character ~d ends ~ctoken~c~n"), new ListPair(Char, new ListPair(Quote, new ListPair(Quote, Atom.NIL))))) | ||
4432 | { | ||
4433 | yield return false; | ||
4434 | } | ||
4435 | } | ||
4436 | } | ||
4437 | goto cutIf14; | ||
4438 | } | ||
4439 | } | ||
4440 | } | ||
4441 | } | ||
4442 | foreach (bool l2 in YP.unify(Result, Char)) | ||
4443 | { | ||
4444 | foreach (bool l3 in YP.get_code(Next)) | ||
4445 | { | ||
4446 | yield return false; | ||
4447 | } | ||
4448 | } | ||
4449 | cutIf14: | ||
4450 | cutIf12: | ||
4451 | cutIf1: | ||
4452 | { } | ||
4453 | } | ||
4454 | } | ||
4455 | |||
4456 | } | ||
4457 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs new file mode 100644 index 0000000..f29c751 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/PrologException.cs | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | |||
33 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// A PrologException is used as the exception thrown by YP.throw(Term). | ||
37 | /// </summary> | ||
38 | public class PrologException : Exception | ||
39 | { | ||
40 | public readonly object _term; | ||
41 | |||
42 | /// <summary> | ||
43 | /// Create a PrologException with the given Term. The printable exception message is the full Term. | ||
44 | /// </summary> | ||
45 | /// <param name="Term">the term of the exception</param> | ||
46 | /// </param> | ||
47 | public PrologException(object Term) | ||
48 | : base(YP.getValue(Term).ToString()) | ||
49 | { | ||
50 | _term = YP.makeCopy(Term, new Variable.CopyStore()); | ||
51 | } | ||
52 | |||
53 | /// <summary> | ||
54 | /// Create a PrologException where the Term is error(ErrorTerm, Message). | ||
55 | /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding. | ||
56 | /// </summary> | ||
57 | /// <param name="ErrorTerm">the term of the exception</param> | ||
58 | /// <param name="Messsage">the message, converted to a string, to use as the printable exception message | ||
59 | /// </param> | ||
60 | public PrologException(object ErrorTerm, object Message) | ||
61 | : base(YP.getValue(Message).ToString()) | ||
62 | { | ||
63 | _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore()); | ||
64 | } | ||
65 | |||
66 | public object Term | ||
67 | { | ||
68 | get { return _term; } | ||
69 | } | ||
70 | } | ||
71 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs new file mode 100644 index 0000000..4b6112f --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/UndefinedPredicateException.cs | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | |||
33 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
34 | { | ||
35 | /// <summary> | ||
36 | /// An UndefinedPredicateException extends PrologException to create an existence_error exception. | ||
37 | /// </summary> | ||
38 | public class UndefinedPredicateException : PrologException | ||
39 | { | ||
40 | private Atom _predicateName; | ||
41 | private int _arity; | ||
42 | |||
43 | public UndefinedPredicateException(object message, Atom predicateName, int arity) | ||
44 | : base(new Functor2 | ||
45 | (Atom.a("existence_error"), Atom.a("procedure"), new Functor2(Atom.a("/"), predicateName, arity)), | ||
46 | message) | ||
47 | { | ||
48 | _predicateName = predicateName; | ||
49 | _arity = arity; | ||
50 | } | ||
51 | |||
52 | public Atom PredicateName | ||
53 | { | ||
54 | get { return _predicateName; } | ||
55 | } | ||
56 | |||
57 | public int Arity | ||
58 | { | ||
59 | get { return _arity; } | ||
60 | } | ||
61 | } | ||
62 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs new file mode 100644 index 0000000..2b5b0f1 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/Variable.cs | |||
@@ -0,0 +1,196 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | |||
35 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
36 | { | ||
37 | public interface IUnifiable | ||
38 | { | ||
39 | IEnumerable<bool> unify(object arg); | ||
40 | void addUniqueVariables(List<Variable> variableSet); | ||
41 | object makeCopy(Variable.CopyStore copyStore); | ||
42 | bool termEqual(object term); | ||
43 | bool ground(); | ||
44 | } | ||
45 | |||
46 | public class Variable : IUnifiable | ||
47 | { | ||
48 | // Use _isBound separate from _value so that it can be bound to any value, | ||
49 | // including null. | ||
50 | private bool _isBound = false; | ||
51 | private object _value; | ||
52 | |||
53 | public object getValue() | ||
54 | { | ||
55 | if (!_isBound) | ||
56 | return this; | ||
57 | |||
58 | object result = _value; | ||
59 | while (result is Variable) | ||
60 | { | ||
61 | if (!((Variable)result)._isBound) | ||
62 | return result; | ||
63 | |||
64 | // Keep following the Variable chain. | ||
65 | result = ((Variable)result)._value; | ||
66 | } | ||
67 | |||
68 | return result; | ||
69 | } | ||
70 | |||
71 | public IEnumerable<bool> unify(object arg) | ||
72 | { | ||
73 | if (!_isBound) | ||
74 | { | ||
75 | _value = YP.getValue(arg); | ||
76 | if (_value == this) | ||
77 | // We are unifying this unbound variable with itself, so leave it unbound. | ||
78 | yield return false; | ||
79 | else | ||
80 | { | ||
81 | _isBound = true; | ||
82 | try | ||
83 | { | ||
84 | yield return false; | ||
85 | } | ||
86 | finally | ||
87 | { | ||
88 | // Remove the binding. | ||
89 | _isBound = false; | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | else | ||
94 | { | ||
95 | foreach (bool l1 in YP.unify(this, arg)) | ||
96 | yield return false; | ||
97 | } | ||
98 | } | ||
99 | |||
100 | public override string ToString() | ||
101 | { | ||
102 | object value = getValue(); | ||
103 | if (value == this) | ||
104 | return "Variable"; | ||
105 | else | ||
106 | return getValue().ToString(); | ||
107 | } | ||
108 | |||
109 | /// <summary> | ||
110 | /// If bound, call YP.addUniqueVariables on the value. Otherwise, if this unbound | ||
111 | /// variable is not already in variableSet, add it. | ||
112 | /// </summary> | ||
113 | /// <param name="variableSet"></param> | ||
114 | public void addUniqueVariables(List<Variable> variableSet) | ||
115 | { | ||
116 | if (_isBound) | ||
117 | YP.addUniqueVariables(getValue(), variableSet); | ||
118 | else | ||
119 | { | ||
120 | if (variableSet.IndexOf(this) < 0) | ||
121 | variableSet.Add(this); | ||
122 | } | ||
123 | } | ||
124 | |||
125 | /// <summary> | ||
126 | /// If bound, return YP.makeCopy for the value, else return copyStore.getCopy(this). | ||
127 | /// However, if copyStore is null, just return this. | ||
128 | /// </summary> | ||
129 | /// <param name="copyStore"></param> | ||
130 | /// <returns></returns> | ||
131 | public object makeCopy(Variable.CopyStore copyStore) | ||
132 | { | ||
133 | if (_isBound) | ||
134 | return YP.makeCopy(getValue(), copyStore); | ||
135 | else | ||
136 | return copyStore == null ? this : copyStore.getCopy(this); | ||
137 | } | ||
138 | |||
139 | public bool termEqual(object term) | ||
140 | { | ||
141 | if (_isBound) | ||
142 | return YP.termEqual(getValue(), term); | ||
143 | else | ||
144 | return this == YP.getValue(term); | ||
145 | } | ||
146 | |||
147 | public bool ground() | ||
148 | { | ||
149 | if (_isBound) | ||
150 | // This is usually called by YP.ground which already did getValue, so this | ||
151 | // should never be reached, but check anyway. | ||
152 | return YP.ground(getValue()); | ||
153 | else | ||
154 | return false; | ||
155 | } | ||
156 | |||
157 | /// <summary> | ||
158 | /// A CopyStore is used by makeCopy to track which Variable objects have | ||
159 | /// been copied. | ||
160 | /// </summary> | ||
161 | public class CopyStore | ||
162 | { | ||
163 | private List<Variable> _inVariableSet = new List<Variable>(); | ||
164 | private List<Variable> _outVariableSet = new List<Variable>(); | ||
165 | |||
166 | /// <summary> | ||
167 | /// If inVariable has already been copied, return its copy. Otherwise, | ||
168 | /// return a fresh Variable associated with inVariable. | ||
169 | /// </summary> | ||
170 | /// <param name="inVariable"></param> | ||
171 | /// <returns></returns> | ||
172 | public Variable getCopy(Variable inVariable) | ||
173 | { | ||
174 | int index = _inVariableSet.IndexOf(inVariable); | ||
175 | if (index >= 0) | ||
176 | return _outVariableSet[index]; | ||
177 | else | ||
178 | { | ||
179 | Variable outVariable = new Variable(); | ||
180 | _inVariableSet.Add(inVariable); | ||
181 | _outVariableSet.Add(outVariable); | ||
182 | return outVariable; | ||
183 | } | ||
184 | } | ||
185 | |||
186 | /// <summary> | ||
187 | /// Return the number of unique variables that have been copied. | ||
188 | /// </summary> | ||
189 | /// <returns></returns> | ||
190 | public int getNUniqueVariables() | ||
191 | { | ||
192 | return _inVariableSet.Count; | ||
193 | } | ||
194 | } | ||
195 | } | ||
196 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs new file mode 100644 index 0000000..74704aa --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YP.cs | |||
@@ -0,0 +1,1644 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.Collections; | ||
33 | using System.Collections.Generic; | ||
34 | using System.IO; | ||
35 | using System.Reflection; | ||
36 | |||
37 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
38 | { | ||
39 | /// <summary> | ||
40 | /// YP has static methods for general functions in Yield Prolog such as <see cref="getValue"/> | ||
41 | /// and <see cref="unify"/>. | ||
42 | /// </summary> | ||
43 | public class YP | ||
44 | { | ||
45 | private static Fail _fail = new Fail(); | ||
46 | private static Repeat _repeat = new Repeat(); | ||
47 | private static Dictionary<NameArity, List<IClause>> _predicatesStore = | ||
48 | new Dictionary<NameArity, List<IClause>>(); | ||
49 | private static TextWriter _outputStream = System.Console.Out; | ||
50 | private static TextReader _inputStream = System.Console.In; | ||
51 | private static List<object[]> _operatorTable = null; | ||
52 | |||
53 | /// <summary> | ||
54 | /// An IClause is used so that dynamic predicates can call match. | ||
55 | /// </summary> | ||
56 | public interface IClause | ||
57 | { | ||
58 | IEnumerable<bool> match(object[] args); | ||
59 | } | ||
60 | |||
61 | public static object getValue(object value) | ||
62 | { | ||
63 | if (value is Variable) | ||
64 | return ((Variable)value).getValue(); | ||
65 | else | ||
66 | return value; | ||
67 | } | ||
68 | |||
69 | public static IEnumerable<bool> unify(object arg1, object arg2) | ||
70 | { | ||
71 | arg1 = getValue(arg1); | ||
72 | arg2 = getValue(arg2); | ||
73 | if (arg1 is IUnifiable) | ||
74 | return ((IUnifiable)arg1).unify(arg2); | ||
75 | else if (arg2 is IUnifiable) | ||
76 | return ((IUnifiable)arg2).unify(arg1); | ||
77 | else | ||
78 | { | ||
79 | // Arguments are "normal" types. | ||
80 | if (arg1.Equals(arg2)) | ||
81 | return new Succeed(); | ||
82 | else | ||
83 | return _fail; | ||
84 | } | ||
85 | } | ||
86 | |||
87 | /// <summary> | ||
88 | /// This is used for the lookup key in _factStore. | ||
89 | /// </summary> | ||
90 | public struct NameArity | ||
91 | { | ||
92 | public readonly Atom _name; | ||
93 | public readonly int _arity; | ||
94 | |||
95 | public NameArity(Atom name, int arity) | ||
96 | { | ||
97 | _name = name; | ||
98 | _arity = arity; | ||
99 | } | ||
100 | |||
101 | public override bool Equals(object obj) | ||
102 | { | ||
103 | if (obj is NameArity) | ||
104 | { | ||
105 | NameArity nameArity = (NameArity)obj; | ||
106 | return nameArity._name.Equals(_name) && nameArity._arity.Equals(_arity); | ||
107 | } | ||
108 | else | ||
109 | { | ||
110 | return false; | ||
111 | } | ||
112 | } | ||
113 | |||
114 | public override int GetHashCode() | ||
115 | { | ||
116 | return _name.GetHashCode() ^ _arity.GetHashCode(); | ||
117 | } | ||
118 | } | ||
119 | |||
120 | /// <summary> | ||
121 | /// Convert term to an int. | ||
122 | /// If term is a single-element List, use its first element | ||
123 | /// (to handle the char types like "a"). If can't convert, throw an exception. | ||
124 | /// </summary> | ||
125 | /// <param name="term"></param> | ||
126 | /// <returns></returns> | ||
127 | public static int convertInt(object term) | ||
128 | { | ||
129 | term = YP.getValue(term); | ||
130 | if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && | ||
131 | YP.getValue(((Functor2)term)._arg2) == Atom.NIL) | ||
132 | // Assume it is a char type like "a". | ||
133 | term = YP.getValue(((Functor2)term)._arg1); | ||
134 | |||
135 | return (int)term; | ||
136 | } | ||
137 | |||
138 | /// <summary> | ||
139 | /// Convert term to a double. This may convert an int to a double, etc. | ||
140 | /// If term is a single-element List, use its first element | ||
141 | /// (to handle the char types like "a"). If can't convert, throw an exception. | ||
142 | /// </summary> | ||
143 | /// <param name="term"></param> | ||
144 | /// <returns></returns> | ||
145 | public static double convertDouble(object term) | ||
146 | { | ||
147 | term = YP.getValue(term); | ||
148 | if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && | ||
149 | YP.getValue(((Functor2)term)._arg2) == Atom.NIL) | ||
150 | // Assume it is a char type like "a". | ||
151 | term = YP.getValue(((Functor2)term)._arg1); | ||
152 | if (term is Variable) | ||
153 | throw new PrologException(Atom.a("instantiation_error"), | ||
154 | "Expected a number but the argument is an unbound variable"); | ||
155 | |||
156 | return Convert.ToDouble(term); | ||
157 | } | ||
158 | |||
159 | /// <summary> | ||
160 | /// If term is an integer, set intTerm. | ||
161 | /// If term is a single-element List, use its first element | ||
162 | /// (to handle the char types like "a"). Return true for success, false if can't convert. | ||
163 | /// We use a success return value because throwing an exception is inefficient. | ||
164 | /// </summary> | ||
165 | /// <param name="term"></param> | ||
166 | /// <returns></returns> | ||
167 | public static bool getInt(object term, out int intTerm) | ||
168 | { | ||
169 | term = YP.getValue(term); | ||
170 | if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && | ||
171 | YP.getValue(((Functor2)term)._arg2) == Atom.NIL) | ||
172 | // Assume it is a char type like "a". | ||
173 | term = YP.getValue(((Functor2)term)._arg1); | ||
174 | |||
175 | if (term is int) | ||
176 | { | ||
177 | intTerm = (int)term; | ||
178 | return true; | ||
179 | } | ||
180 | |||
181 | intTerm = 0; | ||
182 | return false; | ||
183 | } | ||
184 | |||
185 | public static bool equal(object x, object y) | ||
186 | { | ||
187 | x = YP.getValue(x); | ||
188 | if (x is DateTime) | ||
189 | return (DateTime)x == (DateTime)YP.getValue(y); | ||
190 | // Assume convertDouble converts an int to a double perfectly. | ||
191 | return YP.convertDouble(x) == YP.convertDouble(y); | ||
192 | } | ||
193 | |||
194 | public static bool notEqual(object x, object y) | ||
195 | { | ||
196 | x = YP.getValue(x); | ||
197 | if (x is DateTime) | ||
198 | return (DateTime)x != (DateTime)YP.getValue(y); | ||
199 | // Assume convertDouble converts an int to a double perfectly. | ||
200 | return YP.convertDouble(x) != YP.convertDouble(y); | ||
201 | } | ||
202 | |||
203 | public static bool greaterThan(object x, object y) | ||
204 | { | ||
205 | x = YP.getValue(x); | ||
206 | if (x is DateTime) | ||
207 | return (DateTime)x > (DateTime)YP.getValue(y); | ||
208 | // Assume convertDouble converts an int to a double perfectly. | ||
209 | return YP.convertDouble(x) > YP.convertDouble(y); | ||
210 | } | ||
211 | |||
212 | public static bool lessThan(object x, object y) | ||
213 | { | ||
214 | x = YP.getValue(x); | ||
215 | if (x is DateTime) | ||
216 | return (DateTime)x < (DateTime)YP.getValue(y); | ||
217 | // Assume convertDouble converts an int to a double perfectly. | ||
218 | return YP.convertDouble(x) < YP.convertDouble(y); | ||
219 | } | ||
220 | |||
221 | public static bool greaterThanOrEqual(object x, object y) | ||
222 | { | ||
223 | x = YP.getValue(x); | ||
224 | if (x is DateTime) | ||
225 | return (DateTime)x >= (DateTime)YP.getValue(y); | ||
226 | // Assume convertDouble converts an int to a double perfectly. | ||
227 | return YP.convertDouble(x) >= YP.convertDouble(y); | ||
228 | } | ||
229 | |||
230 | public static bool lessThanOrEqual(object x, object y) | ||
231 | { | ||
232 | x = YP.getValue(x); | ||
233 | if (x is DateTime) | ||
234 | return (DateTime)x <= (DateTime)YP.getValue(y); | ||
235 | // Assume convertDouble converts an int to a double perfectly. | ||
236 | return YP.convertDouble(x) <= YP.convertDouble(y); | ||
237 | } | ||
238 | |||
239 | public static object negate(object x) | ||
240 | { | ||
241 | int intX; | ||
242 | if (getInt(x, out intX)) | ||
243 | return -intX; | ||
244 | return -convertDouble(x); | ||
245 | } | ||
246 | |||
247 | public static object abs(object x) | ||
248 | { | ||
249 | int intX; | ||
250 | if (getInt(x, out intX)) | ||
251 | return Math.Abs(intX); | ||
252 | return Math.Abs(convertDouble(x)); | ||
253 | } | ||
254 | |||
255 | public static object sign(object x) | ||
256 | { | ||
257 | int intX; | ||
258 | if (getInt(x, out intX)) | ||
259 | return Math.Sign(intX); | ||
260 | return Math.Sign(convertDouble(x)); | ||
261 | } | ||
262 | |||
263 | /// <summary> | ||
264 | /// The ISO standard returns an int. | ||
265 | /// </summary> | ||
266 | /// <param name="x"></param> | ||
267 | /// <returns></returns> | ||
268 | public static object floor(object x) | ||
269 | { | ||
270 | return (int)Math.Floor(convertDouble(x)); | ||
271 | } | ||
272 | |||
273 | /// <summary> | ||
274 | /// The ISO standard returns an int. | ||
275 | /// </summary> | ||
276 | /// <param name="x"></param> | ||
277 | /// <returns></returns> | ||
278 | public static object truncate(object x) | ||
279 | { | ||
280 | return (int)Math.Truncate(convertDouble(x)); | ||
281 | } | ||
282 | |||
283 | /// <summary> | ||
284 | /// The ISO standard returns an int. | ||
285 | /// </summary> | ||
286 | /// <param name="x"></param> | ||
287 | /// <returns></returns> | ||
288 | public static object round(object x) | ||
289 | { | ||
290 | return (int)Math.Round(convertDouble(x)); | ||
291 | } | ||
292 | |||
293 | /// <summary> | ||
294 | /// The ISO standard returns an int. | ||
295 | /// </summary> | ||
296 | /// <param name="x"></param> | ||
297 | /// <returns></returns> | ||
298 | public static object ceiling(object x) | ||
299 | { | ||
300 | return (int)Math.Ceiling(convertDouble(x)); | ||
301 | } | ||
302 | |||
303 | public static object sin(object x) | ||
304 | { | ||
305 | return Math.Sin(YP.convertDouble(x)); | ||
306 | } | ||
307 | |||
308 | public static object cos(object x) | ||
309 | { | ||
310 | return Math.Cos(YP.convertDouble(x)); | ||
311 | } | ||
312 | |||
313 | public static object atan(object x) | ||
314 | { | ||
315 | return Math.Atan(YP.convertDouble(x)); | ||
316 | } | ||
317 | |||
318 | public static object exp(object x) | ||
319 | { | ||
320 | return Math.Exp(YP.convertDouble(x)); | ||
321 | } | ||
322 | |||
323 | public static object log(object x) | ||
324 | { | ||
325 | return Math.Log(YP.convertDouble(x)); | ||
326 | } | ||
327 | |||
328 | public static object sqrt(object x) | ||
329 | { | ||
330 | return Math.Sqrt(convertDouble(x)); | ||
331 | } | ||
332 | |||
333 | public static object bitwiseComplement(object x) | ||
334 | { | ||
335 | return ~YP.convertInt(x); | ||
336 | } | ||
337 | |||
338 | public static object add(object x, object y) | ||
339 | { | ||
340 | int intX, intY; | ||
341 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
342 | return intX + intY; | ||
343 | return convertDouble(x) + convertDouble(y); | ||
344 | } | ||
345 | |||
346 | public static object subtract(object x, object y) | ||
347 | { | ||
348 | int intX, intY; | ||
349 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
350 | return intX - intY; | ||
351 | return convertDouble(x) - convertDouble(y); | ||
352 | } | ||
353 | |||
354 | public static object multiply(object x, object y) | ||
355 | { | ||
356 | int intX, intY; | ||
357 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
358 | return intX * intY; | ||
359 | return convertDouble(x) * convertDouble(y); | ||
360 | } | ||
361 | |||
362 | /// <summary> | ||
363 | /// Return floating point, even if both arguments are integer. | ||
364 | /// </summary> | ||
365 | /// <param name="x"></param> | ||
366 | /// <param name="y"></param> | ||
367 | /// <returns></returns> | ||
368 | public static object divide(object x, object y) | ||
369 | { | ||
370 | return convertDouble(x) / convertDouble(y); | ||
371 | } | ||
372 | |||
373 | public static object intDivide(object x, object y) | ||
374 | { | ||
375 | int intX, intY; | ||
376 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
377 | return intX / intY; | ||
378 | // Still allow passing a double, but treat as an int. | ||
379 | return (int)convertDouble(x) / (int)convertDouble(y); | ||
380 | } | ||
381 | |||
382 | public static object mod(object x, object y) | ||
383 | { | ||
384 | int intX, intY; | ||
385 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
386 | return intX % intY; | ||
387 | // Still allow passing a double, but treat as an int. | ||
388 | return (int)convertDouble(x) % (int)convertDouble(y); | ||
389 | } | ||
390 | |||
391 | public static object pow(object x, object y) | ||
392 | { | ||
393 | return Math.Pow(YP.convertDouble(x), YP.convertDouble(y)); | ||
394 | } | ||
395 | |||
396 | public static object bitwiseShiftRight(object x, object y) | ||
397 | { | ||
398 | return YP.convertInt(x) >> YP.convertInt(y); | ||
399 | } | ||
400 | |||
401 | public static object bitwiseShiftLeft(object x, object y) | ||
402 | { | ||
403 | return YP.convertInt(x) << YP.convertInt(y); | ||
404 | } | ||
405 | |||
406 | public static object bitwiseAnd(object x, object y) | ||
407 | { | ||
408 | return YP.convertInt(x) & YP.convertInt(y); | ||
409 | } | ||
410 | |||
411 | public static object bitwiseOr(object x, object y) | ||
412 | { | ||
413 | return YP.convertInt(x) | YP.convertInt(y); | ||
414 | } | ||
415 | |||
416 | public static object min(object x, object y) | ||
417 | { | ||
418 | int intX, intY; | ||
419 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
420 | return Math.Min(intX, intY); | ||
421 | return Math.Min(convertDouble(x), convertDouble(y)); | ||
422 | } | ||
423 | |||
424 | public static object max(object x, object y) | ||
425 | { | ||
426 | int intX, intY; | ||
427 | if (getInt(x, out intX) && getInt(y, out intY)) | ||
428 | return Math.Max(intX, intY); | ||
429 | return Math.Max(convertDouble(x), convertDouble(y)); | ||
430 | } | ||
431 | |||
432 | public static IEnumerable<bool> copy_term(object inTerm, object outTerm) | ||
433 | { | ||
434 | return YP.unify(outTerm, YP.makeCopy(inTerm, new Variable.CopyStore())); | ||
435 | } | ||
436 | |||
437 | public static void addUniqueVariables(object term, List<Variable> variableSet) | ||
438 | { | ||
439 | term = YP.getValue(term); | ||
440 | if (term is IUnifiable) | ||
441 | ((IUnifiable)term).addUniqueVariables(variableSet); | ||
442 | } | ||
443 | |||
444 | public static object makeCopy(object term, Variable.CopyStore copyStore) | ||
445 | { | ||
446 | term = YP.getValue(term); | ||
447 | if (term is IUnifiable) | ||
448 | return ((IUnifiable)term).makeCopy(copyStore); | ||
449 | else | ||
450 | // term is a "normal" type. Assume it is ground. | ||
451 | return term; | ||
452 | } | ||
453 | |||
454 | /// <summary> | ||
455 | /// Sort the array in place according to termLessThan. This does not remove duplicates | ||
456 | /// </summary> | ||
457 | /// <param name="array"></param> | ||
458 | public static void sortArray(object[] array) | ||
459 | { | ||
460 | Array.Sort(array, YP.compareTerms); | ||
461 | } | ||
462 | |||
463 | /// <summary> | ||
464 | /// Sort the array in place according to termLessThan. This does not remove duplicates | ||
465 | /// </summary> | ||
466 | /// <param name="array"></param> | ||
467 | public static void sortArray(List<object> array) | ||
468 | { | ||
469 | array.Sort(YP.compareTerms); | ||
470 | } | ||
471 | |||
472 | /// <summary> | ||
473 | /// Sort List according to termLessThan, remove duplicates and unify with Sorted. | ||
474 | /// </summary> | ||
475 | /// <param name="List"></param> | ||
476 | /// <param name="Sorted"></param> | ||
477 | /// <returns></returns> | ||
478 | public static IEnumerable<bool> sort(object List, object Sorted) | ||
479 | { | ||
480 | object[] array = ListPair.toArray(List); | ||
481 | if (array == null) | ||
482 | return YP.fail(); | ||
483 | if (array.Length > 1) | ||
484 | sortArray(array); | ||
485 | return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array)); | ||
486 | } | ||
487 | |||
488 | |||
489 | |||
490 | /// <summary> | ||
491 | /// Use YP.unify to unify each of the elements of the two arrays, and yield | ||
492 | /// once if they all unify. | ||
493 | /// </summary> | ||
494 | /// <param name="array1"></param> | ||
495 | /// <param name="array2"></param> | ||
496 | /// <returns></returns> | ||
497 | public static IEnumerable<bool> unifyArrays(object[] array1, object[] array2) | ||
498 | { | ||
499 | if (array1.Length != array2.Length) | ||
500 | yield break; | ||
501 | |||
502 | IEnumerator<bool>[] iterators = new IEnumerator<bool>[array1.Length]; | ||
503 | bool gotMatch = true; | ||
504 | int nIterators = 0; | ||
505 | // Try to bind all the arguments. | ||
506 | for (int i = 0; i < array1.Length; ++i) | ||
507 | { | ||
508 | IEnumerator<bool> iterator = YP.unify(array1[i], array2[i]).GetEnumerator(); | ||
509 | iterators[nIterators++] = iterator; | ||
510 | // MoveNext() is true if YP.unify succeeds. | ||
511 | if (!iterator.MoveNext()) | ||
512 | { | ||
513 | gotMatch = false; | ||
514 | break; | ||
515 | } | ||
516 | } | ||
517 | |||
518 | try | ||
519 | { | ||
520 | if (gotMatch) | ||
521 | yield return false; | ||
522 | } | ||
523 | finally | ||
524 | { | ||
525 | // Manually finalize all the iterators. | ||
526 | for (int i = 0; i < nIterators; ++i) | ||
527 | iterators[i].Dispose(); | ||
528 | } | ||
529 | } | ||
530 | |||
531 | /// <summary> | ||
532 | /// Return an iterator (which you can use in a for-in loop) which does | ||
533 | /// zero iterations. This returns a pre-existing iterator which is | ||
534 | /// more efficient than letting the compiler generate a new one. | ||
535 | /// </summary> | ||
536 | /// <returns></returns> | ||
537 | public static IEnumerable<bool> fail() | ||
538 | { | ||
539 | return _fail; | ||
540 | } | ||
541 | |||
542 | /// <summary> | ||
543 | /// Return an iterator (which you can use in a for-in loop) which does | ||
544 | /// one iteration. This returns a pre-existing iterator which is | ||
545 | /// more efficient than letting the compiler generate a new one. | ||
546 | /// </summary> | ||
547 | /// <returns></returns> | ||
548 | public static IEnumerable<bool> succeed() | ||
549 | { | ||
550 | return new Succeed(); | ||
551 | } | ||
552 | |||
553 | /// <summary> | ||
554 | /// Return an iterator (which you can use in a for-in loop) which repeats | ||
555 | /// indefinitely. This returns a pre-existing iterator which is | ||
556 | /// more efficient than letting the compiler generate a new one. | ||
557 | /// </summary> | ||
558 | /// <returns></returns> | ||
559 | public static IEnumerable<bool> repeat() | ||
560 | { | ||
561 | return _repeat; | ||
562 | } | ||
563 | |||
564 | public static IEnumerable<bool> univ(object Term, object List) | ||
565 | { | ||
566 | Term = YP.getValue(Term); | ||
567 | List = YP.getValue(List); | ||
568 | |||
569 | if (nonvar(Term)) | ||
570 | return YP.unify(new ListPair | ||
571 | (getFunctorName(Term), ListPair.make(getFunctorArgs(Term))), List); | ||
572 | |||
573 | Variable Name = new Variable(); | ||
574 | Variable ArgList = new Variable(); | ||
575 | foreach (bool l1 in new ListPair(Name, ArgList).unify(List)) | ||
576 | { | ||
577 | object[] args = ListPair.toArray(ArgList); | ||
578 | if (args == null) | ||
579 | throw new Exception("Expected a list. Got: " + ArgList.getValue()); | ||
580 | if (args.Length == 0) | ||
581 | // Return the Name, even if it is not an Atom. | ||
582 | return YP.unify(Term, Name); | ||
583 | if (!atom(Name)) | ||
584 | throw new Exception("Expected an atom. Got: " + Name.getValue()); | ||
585 | |||
586 | return YP.unify(Term, Functor.make((Atom)YP.getValue(Name), args)); | ||
587 | } | ||
588 | |||
589 | return YP.fail(); | ||
590 | } | ||
591 | |||
592 | public static IEnumerable<bool> functor(object Term, object FunctorName, object Arity) | ||
593 | { | ||
594 | Term = YP.getValue(Term); | ||
595 | FunctorName = YP.getValue(FunctorName); | ||
596 | Arity = YP.getValue(Arity); | ||
597 | |||
598 | if (!(Term is Variable)) | ||
599 | { | ||
600 | foreach (bool l1 in YP.unify(FunctorName, getFunctorName(Term))) | ||
601 | { | ||
602 | foreach (bool l2 in YP.unify(Arity, getFunctorArgs(Term).Length)) | ||
603 | yield return false; | ||
604 | } | ||
605 | } | ||
606 | else | ||
607 | throw new NotImplementedException("Debug: must finish functor/3"); | ||
608 | } | ||
609 | |||
610 | public static IEnumerable<bool> arg(object ArgNumber, object Term, object Value) | ||
611 | { | ||
612 | if (YP.var(ArgNumber)) | ||
613 | throw new NotImplementedException("Debug: must finish arg/3"); | ||
614 | else | ||
615 | { | ||
616 | int argNumberInt = convertInt(ArgNumber); | ||
617 | if (argNumberInt < 0) | ||
618 | throw new Exception("ArgNumber must be non-negative"); | ||
619 | object[] termArgs = YP.getFunctorArgs(Term); | ||
620 | // Silently fail if argNumberInt is out of range. | ||
621 | if (argNumberInt >= 1 && argNumberInt <= termArgs.Length) | ||
622 | { | ||
623 | // The first ArgNumber is at 1, not 0. | ||
624 | foreach (bool l1 in YP.unify(Value, termArgs[argNumberInt - 1])) | ||
625 | yield return false; | ||
626 | } | ||
627 | } | ||
628 | } | ||
629 | |||
630 | public static bool termEqual(object Term1, object Term2) | ||
631 | { | ||
632 | Term1 = YP.getValue(Term1); | ||
633 | if (Term1 is IUnifiable) | ||
634 | return ((IUnifiable)Term1).termEqual(Term2); | ||
635 | return Term1.Equals(YP.getValue(Term2)); | ||
636 | } | ||
637 | |||
638 | public static bool termNotEqual(object Term1, object Term2) | ||
639 | { | ||
640 | return !termEqual(Term1, Term2); | ||
641 | } | ||
642 | |||
643 | public static bool termLessThan(object Term1, object Term2) | ||
644 | { | ||
645 | Term1 = YP.getValue(Term1); | ||
646 | Term2 = YP.getValue(Term2); | ||
647 | int term1TypeCode = getTypeCode(Term1); | ||
648 | int term2TypeCode = getTypeCode(Term2); | ||
649 | if (term1TypeCode != term2TypeCode) | ||
650 | return term1TypeCode < term2TypeCode; | ||
651 | |||
652 | // The terms are the same type code. | ||
653 | if (term1TypeCode == -2) | ||
654 | { | ||
655 | // Variable. | ||
656 | // We always check for equality first because we want to be sure | ||
657 | // that less than returns false if the terms are equal, in | ||
658 | // case that the less than check really behaves like less than or equal. | ||
659 | if ((Variable)Term1 != (Variable)Term2) | ||
660 | // The hash code should be unique to a Variable object. | ||
661 | return Term1.GetHashCode() < Term2.GetHashCode(); | ||
662 | return false; | ||
663 | } | ||
664 | if (term1TypeCode == 0) | ||
665 | return ((Atom)Term1)._name.CompareTo(((Atom)Term2)._name) < 0; | ||
666 | if (term1TypeCode == 1) | ||
667 | return ((Functor1)Term1).lessThan((Functor1)Term2); | ||
668 | if (term1TypeCode == 2) | ||
669 | return ((Functor2)Term1).lessThan((Functor2)Term2); | ||
670 | if (term1TypeCode == 3) | ||
671 | return ((Functor3)Term1).lessThan((Functor3)Term2); | ||
672 | if (term1TypeCode == 4) | ||
673 | return ((Functor)Term1).lessThan((Functor)Term2); | ||
674 | |||
675 | // Type code is -1 for general objects. First compare their type names. | ||
676 | // Note that this puts Double before Int32 as required by ISO Prolog. | ||
677 | string term1TypeName = Term1.GetType().ToString(); | ||
678 | string term2TypeName = Term2.GetType().ToString(); | ||
679 | if (term1TypeName != term2TypeName) | ||
680 | return term1TypeName.CompareTo(term2TypeName) < 0; | ||
681 | |||
682 | // The terms are the same type name. | ||
683 | if (Term1 is int) | ||
684 | return (int)Term1 < (int)Term2; | ||
685 | else if (Term1 is double) | ||
686 | return (double)Term1 < (double)Term2; | ||
687 | else if (Term1 is DateTime) | ||
688 | return (DateTime)Term1 < (DateTime)Term2; | ||
689 | else if (Term1 is String) | ||
690 | return ((String)Term1).CompareTo((String)Term2) < 0; | ||
691 | // Debug: Should we try arrays, etc.? | ||
692 | |||
693 | if (!Term1.Equals(Term2)) | ||
694 | // Could be equal or greater than. | ||
695 | return Term1.GetHashCode() < Term2.GetHashCode(); | ||
696 | return false; | ||
697 | } | ||
698 | |||
699 | /// <summary> | ||
700 | /// Type code is -2 if term is a Variable, 0 if it is an Atom, | ||
701 | /// 1 if it is a Functor1, 2 if it is a Functor2, 3 if it is a Functor3, | ||
702 | /// 4 if it is Functor. | ||
703 | /// Otherwise, type code is -1. | ||
704 | /// This does not call YP.getValue(term). | ||
705 | /// </summary> | ||
706 | /// <param name="term"></param> | ||
707 | /// <returns></returns> | ||
708 | private static int getTypeCode(object term) | ||
709 | { | ||
710 | if (term is Variable) | ||
711 | return -2; | ||
712 | else if (term is Atom) | ||
713 | return 0; | ||
714 | else if (term is Functor1) | ||
715 | return 1; | ||
716 | else if (term is Functor2) | ||
717 | return 2; | ||
718 | else if (term is Functor3) | ||
719 | return 3; | ||
720 | else if (term is Functor) | ||
721 | return 4; | ||
722 | else | ||
723 | return -1; | ||
724 | } | ||
725 | |||
726 | public static bool termLessThanOrEqual(object Term1, object Term2) | ||
727 | { | ||
728 | if (YP.termEqual(Term1, Term2)) | ||
729 | return true; | ||
730 | return YP.termLessThan(Term1, Term2); | ||
731 | } | ||
732 | |||
733 | public static bool termGreaterThan(object Term1, object Term2) | ||
734 | { | ||
735 | return !YP.termLessThanOrEqual(Term1, Term2); | ||
736 | } | ||
737 | |||
738 | public static bool termGreaterThanOrEqual(object Term1, object Term2) | ||
739 | { | ||
740 | // termLessThan should ensure that it returns false if terms are equal, | ||
741 | // so that this would return true. | ||
742 | return !YP.termLessThan(Term1, Term2); | ||
743 | } | ||
744 | |||
745 | public static int compareTerms(object Term1, object Term2) | ||
746 | { | ||
747 | if (YP.termEqual(Term1, Term2)) | ||
748 | return 0; | ||
749 | else if (YP.termLessThan(Term1, Term2)) | ||
750 | return -1; | ||
751 | else | ||
752 | return 1; | ||
753 | } | ||
754 | |||
755 | public static bool ground(object Term) | ||
756 | { | ||
757 | Term = YP.getValue(Term); | ||
758 | if (Term is IUnifiable) | ||
759 | return ((IUnifiable)Term).ground(); | ||
760 | return true; | ||
761 | } | ||
762 | |||
763 | public static IEnumerable<bool> current_op | ||
764 | (object Priority, object Specifier, object Operator) | ||
765 | { | ||
766 | if (_operatorTable == null) | ||
767 | { | ||
768 | // Initialize. | ||
769 | _operatorTable = new List<object[]>(); | ||
770 | _operatorTable.Add(new object[] { 1200, Atom.a("xfx"), Atom.a(":-") }); | ||
771 | _operatorTable.Add(new object[] { 1200, Atom.a("xfx"), Atom.a("-->") }); | ||
772 | _operatorTable.Add(new object[] { 1200, Atom.a("fx"), Atom.a(":-") }); | ||
773 | _operatorTable.Add(new object[] { 1200, Atom.a("fx"), Atom.a("?-") }); | ||
774 | _operatorTable.Add(new object[] { 1100, Atom.a("xfy"), Atom.a(";") }); | ||
775 | _operatorTable.Add(new object[] { 1050, Atom.a("xfy"), Atom.a("->") }); | ||
776 | _operatorTable.Add(new object[] { 1000, Atom.a("xfy"), Atom.a(",") }); | ||
777 | _operatorTable.Add(new object[] { 900, Atom.a("fy"), Atom.a("\\+") }); | ||
778 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("=") }); | ||
779 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("\\=") }); | ||
780 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("==") }); | ||
781 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("\\==") }); | ||
782 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("@<") }); | ||
783 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("@=<") }); | ||
784 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("@>") }); | ||
785 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("@>=") }); | ||
786 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("=..") }); | ||
787 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("is") }); | ||
788 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("=:=") }); | ||
789 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("=\\=") }); | ||
790 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("<") }); | ||
791 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a("=<") }); | ||
792 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a(">") }); | ||
793 | _operatorTable.Add(new object[] { 700, Atom.a("xfx"), Atom.a(">=") }); | ||
794 | _operatorTable.Add(new object[] { 600, Atom.a("xfy"), Atom.a(":") }); | ||
795 | _operatorTable.Add(new object[] { 500, Atom.a("yfx"), Atom.a("+") }); | ||
796 | _operatorTable.Add(new object[] { 500, Atom.a("yfx"), Atom.a("-") }); | ||
797 | _operatorTable.Add(new object[] { 500, Atom.a("yfx"), Atom.a("/\\") }); | ||
798 | _operatorTable.Add(new object[] { 500, Atom.a("yfx"), Atom.a("\\/") }); | ||
799 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("*") }); | ||
800 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("/") }); | ||
801 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("//") }); | ||
802 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("rem") }); | ||
803 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("mod") }); | ||
804 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a("<<") }); | ||
805 | _operatorTable.Add(new object[] { 400, Atom.a("yfx"), Atom.a(">>") }); | ||
806 | _operatorTable.Add(new object[] { 200, Atom.a("xfx"), Atom.a("**") }); | ||
807 | _operatorTable.Add(new object[] { 200, Atom.a("xfy"), Atom.a("^") }); | ||
808 | _operatorTable.Add(new object[] { 200, Atom.a("fy"), Atom.a("-") }); | ||
809 | _operatorTable.Add(new object[] { 200, Atom.a("fy"), Atom.a("\\") }); | ||
810 | // Debug: This is hacked in to run the Prolog test suite until we implement op/3. | ||
811 | _operatorTable.Add(new object[] { 20, Atom.a("xfx"), Atom.a("<--") }); | ||
812 | } | ||
813 | |||
814 | object[] args = new object[] { Priority, Specifier, Operator }; | ||
815 | foreach (object[] answer in _operatorTable) | ||
816 | { | ||
817 | foreach (bool l1 in YP.unifyArrays(args, answer)) | ||
818 | yield return false; | ||
819 | } | ||
820 | } | ||
821 | |||
822 | public static IEnumerable<bool> atom_length(object atom, object Length) | ||
823 | { | ||
824 | return YP.unify(Length, ((Atom)YP.getValue(atom))._name.Length); | ||
825 | } | ||
826 | |||
827 | public static IEnumerable<bool> atom_concat(object Start, object End, object Whole) | ||
828 | { | ||
829 | // Debug: Should implement for var(Start) which is a kind of search. | ||
830 | // Debug: Should we try to preserve the _declaringClass? | ||
831 | return YP.unify(Whole, Atom.a(((Atom)YP.getValue(Start))._name + | ||
832 | ((Atom)YP.getValue(End))._name)); | ||
833 | } | ||
834 | |||
835 | public static IEnumerable<bool> sub_atom | ||
836 | (object atom, object Before, object Length, object After, object Sub_atom) | ||
837 | { | ||
838 | // Debug: Should implement for var(atom) which is a kind of search. | ||
839 | // Debug: Should we try to preserve the _declaringClass? | ||
840 | Atom atomAtom = (Atom)YP.getValue(atom); | ||
841 | int beforeInt = YP.convertInt(Before); | ||
842 | int lengthInt = YP.convertInt(Length); | ||
843 | if (beforeInt < 0) | ||
844 | throw new Exception("Before must be non-negative"); | ||
845 | if (lengthInt < 0) | ||
846 | throw new Exception("Length must be non-negative"); | ||
847 | int afterInt = atomAtom._name.Length - (beforeInt + lengthInt); | ||
848 | if (afterInt >= 0) | ||
849 | { | ||
850 | foreach (bool l1 in YP.unify(After, afterInt)) | ||
851 | { | ||
852 | foreach (bool l2 in YP.unify | ||
853 | (Sub_atom, Atom.a(atomAtom._name.Substring(beforeInt, lengthInt)))) | ||
854 | yield return false; | ||
855 | } | ||
856 | } | ||
857 | } | ||
858 | |||
859 | public static IEnumerable<bool> atom_codes(object atom, object List) | ||
860 | { | ||
861 | atom = YP.getValue(atom); | ||
862 | List = YP.getValue(List); | ||
863 | |||
864 | if (nonvar(atom)) | ||
865 | { | ||
866 | string name = ((Atom)atom)._name; | ||
867 | object codeList = Atom.NIL; | ||
868 | // Start from the back to make the list. | ||
869 | for (int i = name.Length - 1; i >= 0; --i) | ||
870 | codeList = new ListPair((int)name[i], codeList); | ||
871 | return YP.unify(List, codeList); | ||
872 | } | ||
873 | { | ||
874 | object[] codeArray = ListPair.toArray(List); | ||
875 | char[] charArray = new char[codeArray.Length]; | ||
876 | for (int i = 0; i < codeArray.Length; ++i) | ||
877 | charArray[i] = (char)YP.convertInt(codeArray[i]); | ||
878 | return YP.unify(atom, Atom.a(new String(charArray))); | ||
879 | } | ||
880 | } | ||
881 | |||
882 | public static IEnumerable<bool> number_codes(object number, object List) | ||
883 | { | ||
884 | number = YP.getValue(number); | ||
885 | List = YP.getValue(List); | ||
886 | |||
887 | if (nonvar(number)) | ||
888 | { | ||
889 | string numberString = null; | ||
890 | // Try converting to an int first. | ||
891 | int intNumber; | ||
892 | if (YP.getInt(number, out intNumber)) | ||
893 | numberString = intNumber.ToString(); | ||
894 | else | ||
895 | numberString = YP.doubleToString(YP.convertDouble(number)); | ||
896 | |||
897 | object codeList = Atom.NIL; | ||
898 | // Start from the back to make the list. | ||
899 | for (int i = numberString.Length - 1; i >= 0; --i) | ||
900 | codeList = new ListPair((int)numberString[i], codeList); | ||
901 | return YP.unify(List, codeList); | ||
902 | } | ||
903 | { | ||
904 | object[] codeArray = ListPair.toArray(List); | ||
905 | char[] charArray = new char[codeArray.Length]; | ||
906 | for (int i = 0; i < codeArray.Length; ++i) | ||
907 | charArray[i] = (char)YP.convertInt(codeArray[i]); | ||
908 | String numberString = new String(charArray); | ||
909 | // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception? | ||
910 | try | ||
911 | { | ||
912 | // Try an int first. | ||
913 | return YP.unify(number, Convert.ToInt32(numberString)); | ||
914 | } | ||
915 | catch (FormatException) { } | ||
916 | return YP.unify(number, Convert.ToDouble(numberString)); | ||
917 | } | ||
918 | } | ||
919 | |||
920 | /// <summary> | ||
921 | /// If term is an Atom or functor type, return its name. | ||
922 | /// Otherwise, return term. | ||
923 | /// </summary> | ||
924 | /// <param name="term"></param> | ||
925 | /// <returns></returns> | ||
926 | public static object getFunctorName(object term) | ||
927 | { | ||
928 | term = YP.getValue(term); | ||
929 | if (term is Functor1) | ||
930 | return ((Functor1)term)._name; | ||
931 | else if (term is Functor2) | ||
932 | return ((Functor2)term)._name; | ||
933 | else if (term is Functor3) | ||
934 | return ((Functor3)term)._name; | ||
935 | else if (term is Functor) | ||
936 | return ((Functor)term)._name; | ||
937 | else | ||
938 | return term; | ||
939 | } | ||
940 | |||
941 | /// <summary> | ||
942 | /// If term is an Atom or functor type, return an array of its args. | ||
943 | /// Otherwise, return an empty array. | ||
944 | /// </summary> | ||
945 | /// <param name="term"></param> | ||
946 | /// <returns></returns> | ||
947 | public static object[] getFunctorArgs(object term) | ||
948 | { | ||
949 | term = YP.getValue(term); | ||
950 | if (term is Functor1) | ||
951 | { | ||
952 | Functor1 functor = (Functor1)term; | ||
953 | return new object[] { functor._arg1 }; | ||
954 | } | ||
955 | else if (term is Functor2) | ||
956 | { | ||
957 | Functor2 functor = (Functor2)term; | ||
958 | return new object[] { functor._arg1, functor._arg2 }; | ||
959 | } | ||
960 | else if (term is Functor3) | ||
961 | { | ||
962 | Functor3 functor = (Functor3)term; | ||
963 | return new object[] { functor._arg1, functor._arg2, functor._arg3 }; | ||
964 | } | ||
965 | else if (term is Functor) { | ||
966 | Functor functor = (Functor)term; | ||
967 | return functor._args; | ||
968 | } | ||
969 | else | ||
970 | return new object[0]; | ||
971 | } | ||
972 | |||
973 | public static bool var(object Term) | ||
974 | { | ||
975 | return YP.getValue(Term) is Variable; | ||
976 | } | ||
977 | |||
978 | public static bool nonvar(object Term) | ||
979 | { | ||
980 | return !YP.var(Term); | ||
981 | } | ||
982 | |||
983 | public static bool atom(object Term) | ||
984 | { | ||
985 | return YP.getValue(Term) is Atom; | ||
986 | } | ||
987 | |||
988 | public static bool integer(object Term) | ||
989 | { | ||
990 | // Debug: Should exhaustively check for all integer types. | ||
991 | return getValue(Term) is int; | ||
992 | } | ||
993 | |||
994 | // Use isFloat instead of float because it is a reserved keyword. | ||
995 | public static bool isFloat(object Term) | ||
996 | { | ||
997 | // Debug: Should exhaustively check for all float types. | ||
998 | return getValue(Term) is double; | ||
999 | } | ||
1000 | |||
1001 | public static bool number(object Term) | ||
1002 | { | ||
1003 | return YP.integer(Term) || YP.isFloat(Term); | ||
1004 | } | ||
1005 | |||
1006 | public static bool atomic(object Term) | ||
1007 | { | ||
1008 | return YP.atom(Term) || YP.number(Term); | ||
1009 | } | ||
1010 | |||
1011 | public static bool compound(object Term) | ||
1012 | { | ||
1013 | Term = getValue(Term); | ||
1014 | return Term is Functor1 || Term is Functor2 || Term is Functor3 || Term is Functor; | ||
1015 | } | ||
1016 | |||
1017 | public static void see(object input) | ||
1018 | { | ||
1019 | input = YP.getValue(input); | ||
1020 | if (input is TextReader) | ||
1021 | { | ||
1022 | _inputStream = (TextReader)input; | ||
1023 | return; | ||
1024 | } | ||
1025 | else if (input is Atom) | ||
1026 | { | ||
1027 | _inputStream = new StreamReader(((Atom)input)._name); | ||
1028 | return; | ||
1029 | } | ||
1030 | else if (input is String) | ||
1031 | { | ||
1032 | _inputStream = new StreamReader((String)input); | ||
1033 | return; | ||
1034 | } | ||
1035 | else | ||
1036 | throw new InvalidOperationException("Can't open stream for " + input); | ||
1037 | } | ||
1038 | |||
1039 | public static void seen() | ||
1040 | { | ||
1041 | if (_inputStream == Console.In) | ||
1042 | return; | ||
1043 | _inputStream.Close(); | ||
1044 | _inputStream = Console.In; | ||
1045 | } | ||
1046 | |||
1047 | public static void tell(object output) | ||
1048 | { | ||
1049 | output = YP.getValue(output); | ||
1050 | if (output is TextWriter) | ||
1051 | { | ||
1052 | _outputStream = (TextWriter)output; | ||
1053 | return; | ||
1054 | } | ||
1055 | else if (output is Atom) | ||
1056 | { | ||
1057 | _outputStream = new StreamWriter(((Atom)output)._name); | ||
1058 | return; | ||
1059 | } | ||
1060 | else if (output is String) | ||
1061 | { | ||
1062 | _outputStream = new StreamWriter((String)output); | ||
1063 | return; | ||
1064 | } | ||
1065 | else | ||
1066 | throw new InvalidOperationException("Can't open stream for " + output); | ||
1067 | } | ||
1068 | |||
1069 | public static void told() | ||
1070 | { | ||
1071 | if (_outputStream == Console.Out) | ||
1072 | return; | ||
1073 | _outputStream.Close(); | ||
1074 | _outputStream = Console.Out; | ||
1075 | } | ||
1076 | |||
1077 | public static IEnumerable<bool> current_output(object Stream) | ||
1078 | { | ||
1079 | return YP.unify(Stream, _outputStream); | ||
1080 | } | ||
1081 | |||
1082 | public static void write(object x) | ||
1083 | { | ||
1084 | x = YP.getValue(x); | ||
1085 | if (x is double) | ||
1086 | _outputStream.Write(doubleToString((double)x)); | ||
1087 | else | ||
1088 | _outputStream.Write(x.ToString()); | ||
1089 | } | ||
1090 | |||
1091 | /// <summary> | ||
1092 | /// Format x as a string, making sure that it will parse as an int later. I.e., for 1.0, don't just | ||
1093 | /// use "1" which will parse as an int. | ||
1094 | /// </summary> | ||
1095 | /// <param name="x"></param> | ||
1096 | /// <returns></returns> | ||
1097 | private static string doubleToString(double x) | ||
1098 | { | ||
1099 | string xString = x.ToString(); | ||
1100 | // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception? | ||
1101 | try | ||
1102 | { | ||
1103 | Convert.ToInt32(xString); | ||
1104 | // The string will parse as an int, not a double, so re-format so that it does. | ||
1105 | // Use float if possible, else exponential if it would be too big. | ||
1106 | return x.ToString(x >= 100000.0 ? "E1" : "f1"); | ||
1107 | } | ||
1108 | catch (FormatException) | ||
1109 | { | ||
1110 | // Assume it will parse as a double. | ||
1111 | } | ||
1112 | return xString; | ||
1113 | } | ||
1114 | |||
1115 | public static void put_code(object x) | ||
1116 | { | ||
1117 | _outputStream.Write((char)YP.convertInt(x)); | ||
1118 | } | ||
1119 | |||
1120 | public static void nl() | ||
1121 | { | ||
1122 | _outputStream.WriteLine(); | ||
1123 | } | ||
1124 | |||
1125 | public static IEnumerable<bool> get_code(object code) | ||
1126 | { | ||
1127 | return YP.unify(code, _inputStream.Read()); | ||
1128 | } | ||
1129 | |||
1130 | public static void asserta(object Term, Type declaringClass) | ||
1131 | { | ||
1132 | assertDynamic(Term, declaringClass, true); | ||
1133 | } | ||
1134 | |||
1135 | public static void assertz(object Term, Type declaringClass) | ||
1136 | { | ||
1137 | assertDynamic(Term, declaringClass, false); | ||
1138 | } | ||
1139 | |||
1140 | public static void assertDynamic(object Term, Type declaringClass, bool prepend) | ||
1141 | { | ||
1142 | Term = getValue(Term); | ||
1143 | if (Term is Variable) | ||
1144 | throw new PrologException("instantiation_error", "Term to assert is an unbound variable"); | ||
1145 | |||
1146 | Variable.CopyStore copyStore = new Variable.CopyStore(); | ||
1147 | object TermCopy = makeCopy(Term, copyStore); | ||
1148 | object Head, Body; | ||
1149 | if (TermCopy is Functor2 && ((Functor2)TermCopy)._name == Atom.RULE) | ||
1150 | { | ||
1151 | Head = YP.getValue(((Functor2)TermCopy)._arg1); | ||
1152 | Body = YP.getValue(((Functor2)TermCopy)._arg2); | ||
1153 | } | ||
1154 | else | ||
1155 | { | ||
1156 | Head = TermCopy; | ||
1157 | Body = Atom.a("true"); | ||
1158 | } | ||
1159 | |||
1160 | Atom name = getFunctorName(Head) as Atom; | ||
1161 | if (name == null) | ||
1162 | // name is a non-Atom, such as a number. | ||
1163 | throw new PrologException | ||
1164 | (new Functor2("type_error", Atom.a("callable"), Head), "Term to assert is not callable"); | ||
1165 | object[] args = getFunctorArgs(Head); | ||
1166 | if (!isDynamic(name, args.Length)) | ||
1167 | throw new PrologException | ||
1168 | (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"), | ||
1169 | new Functor2(Atom.SLASH, name, args.Length)), | ||
1170 | "Assert cannot modify static predicate " + name + "/" + args.Length); | ||
1171 | |||
1172 | if (copyStore.getNUniqueVariables() == 0 && Body == Atom.a("true")) | ||
1173 | { | ||
1174 | // Debug: Until IndexedAnswers supports prepend, compile the fact so we can prepend it below. | ||
1175 | if (!prepend) | ||
1176 | { | ||
1177 | // This is a fact with no unbound variables | ||
1178 | // assertFact uses IndexedAnswers, so don't we don't need to compile. | ||
1179 | assertFact(name, args); | ||
1180 | return; | ||
1181 | } | ||
1182 | } | ||
1183 | |||
1184 | IClause clause = YPCompiler.compileAnonymousClause(Head, Body, declaringClass); | ||
1185 | |||
1186 | // Add the clause to the entry in _predicatesStore. | ||
1187 | NameArity nameArity = new NameArity(name, args.Length); | ||
1188 | List<IClause> clauses; | ||
1189 | if (!_predicatesStore.TryGetValue(nameArity, out clauses)) | ||
1190 | // Create an entry for the nameArity. | ||
1191 | _predicatesStore[nameArity] = (clauses = new List<IClause>()); | ||
1192 | |||
1193 | if (prepend) | ||
1194 | clauses.Insert(0, clause); | ||
1195 | else | ||
1196 | clauses.Add(clause); | ||
1197 | } | ||
1198 | |||
1199 | private static bool isDynamic(Atom name, int arity) | ||
1200 | { | ||
1201 | if (arity == 2 && (name == Atom.a(",") || name == Atom.a(";") || name == Atom.DOT)) | ||
1202 | return false; | ||
1203 | // Use the same mapping to static predicates in YP as the compiler. | ||
1204 | foreach (bool l1 in YPCompiler.functorCallYPFunctionName(name, arity, new Variable())) | ||
1205 | return false; | ||
1206 | // Debug: Do we need to check if name._module is null? | ||
1207 | return true; | ||
1208 | } | ||
1209 | |||
1210 | /// <summary> | ||
1211 | /// Assert values at the end of the set of facts for the predicate with the | ||
1212 | /// name and with arity values.Length. | ||
1213 | /// </summary> | ||
1214 | /// <param name="name">must be an Atom</param> | ||
1215 | /// <param name="values">the array of arguments to the fact predicate. | ||
1216 | /// It is an error if an value has an unbound variable.</param> | ||
1217 | public static void assertFact(Atom name, object[] values) | ||
1218 | { | ||
1219 | NameArity nameArity = new NameArity(name, values.Length); | ||
1220 | List<IClause> clauses; | ||
1221 | IndexedAnswers indexedAnswers; | ||
1222 | if (!_predicatesStore.TryGetValue(nameArity, out clauses)) | ||
1223 | { | ||
1224 | // Create an IndexedAnswers as the first clause of the predicate. | ||
1225 | _predicatesStore[nameArity] = (clauses = new List<IClause>()); | ||
1226 | clauses.Add(indexedAnswers = new IndexedAnswers()); | ||
1227 | } | ||
1228 | else | ||
1229 | { | ||
1230 | indexedAnswers = clauses[clauses.Count - 1] as IndexedAnswers; | ||
1231 | if (indexedAnswers == null) | ||
1232 | // The latest clause is not an IndexedAnswers, so add one. | ||
1233 | clauses.Add(indexedAnswers = new IndexedAnswers()); | ||
1234 | } | ||
1235 | |||
1236 | indexedAnswers.addAnswer(values); | ||
1237 | } | ||
1238 | |||
1239 | /// <summary> | ||
1240 | /// Match all clauses of the dynamic predicate with the name and with arity | ||
1241 | /// arguments.Length. | ||
1242 | /// It is an error if the predicate is not defined. | ||
1243 | /// </summary> | ||
1244 | /// <param name="name">must be an Atom</param> | ||
1245 | /// <param name="arguments">an array of arity number of arguments</param> | ||
1246 | /// <returns>an iterator which you can use in foreach</returns> | ||
1247 | public static IEnumerable<bool> matchDynamic(Atom name, object[] arguments) | ||
1248 | { | ||
1249 | List<IClause> clauses; | ||
1250 | if (!_predicatesStore.TryGetValue(new NameArity(name, arguments.Length), out clauses)) | ||
1251 | throw new UndefinedPredicateException | ||
1252 | ("Undefined fact: " + name + "/" + arguments.Length, name, | ||
1253 | arguments.Length); | ||
1254 | |||
1255 | if (clauses.Count == 1) | ||
1256 | // Usually there is only one clause, so return it without needing to wrap it in an iterator. | ||
1257 | return clauses[0].match(arguments); | ||
1258 | else | ||
1259 | return matchAllClauses(clauses, arguments); | ||
1260 | } | ||
1261 | |||
1262 | /// <summary> | ||
1263 | /// Call match(arguments) for each IClause in clauses. We make this a separate | ||
1264 | /// function so that matchDynamic itself does not need to be an iterator object. | ||
1265 | /// </summary> | ||
1266 | /// <param name="clauses"></param> | ||
1267 | /// <param name="arguments"></param> | ||
1268 | /// <returns></returns> | ||
1269 | private static IEnumerable<bool> matchAllClauses(List<IClause> clauses, object[] arguments) | ||
1270 | { | ||
1271 | // Debug: If the clause asserts another clause into this same predicate, the iterator | ||
1272 | // over clauses will be corrupted. Should we take the time to copy clauses? | ||
1273 | foreach (IClause clause in clauses) | ||
1274 | { | ||
1275 | foreach (bool lastCall in clause.match(arguments)) | ||
1276 | { | ||
1277 | yield return false; | ||
1278 | if (lastCall) | ||
1279 | // This happens after a cut in a clause. | ||
1280 | yield break; | ||
1281 | } | ||
1282 | } | ||
1283 | } | ||
1284 | |||
1285 | /// <summary> | ||
1286 | /// This is deprecated and just calls matchDynamic. This matches all clauses, | ||
1287 | /// not just the ones defined with assertFact. | ||
1288 | /// </summary> | ||
1289 | /// <param name="name"></param> | ||
1290 | /// <param name="arguments"></param> | ||
1291 | /// <returns></returns> | ||
1292 | public static IEnumerable<bool> matchFact(Atom name, object[] arguments) | ||
1293 | { | ||
1294 | return matchDynamic(name, arguments); | ||
1295 | } | ||
1296 | |||
1297 | /// <summary> | ||
1298 | /// This actually searches all clauses, not just | ||
1299 | /// the ones defined with assertFact, but we keep the name for | ||
1300 | /// backwards compatibility. | ||
1301 | /// </summary> | ||
1302 | /// <param name="name">must be an Atom</param> | ||
1303 | /// <param name="arguments">an array of arity number of arguments</param> | ||
1304 | public static void retractFact(Atom name, object[] arguments) | ||
1305 | { | ||
1306 | NameArity nameArity = new NameArity(name, arguments.Length); | ||
1307 | List<IClause> clauses; | ||
1308 | if (!_predicatesStore.TryGetValue(nameArity, out clauses)) | ||
1309 | // Can't find, so ignore. | ||
1310 | return; | ||
1311 | |||
1312 | foreach (object arg in arguments) | ||
1313 | { | ||
1314 | if (!YP.var(arg)) | ||
1315 | throw new InvalidOperationException("All arguments must be unbound"); | ||
1316 | } | ||
1317 | // Set to a fresh empty IndexedAnswers. | ||
1318 | _predicatesStore[nameArity] = (clauses = new List<IClause>()); | ||
1319 | clauses.Add(new IndexedAnswers()); | ||
1320 | } | ||
1321 | |||
1322 | public static IEnumerable<bool> current_predicate(object NameSlashArity) | ||
1323 | { | ||
1324 | NameSlashArity = YP.getValue(NameSlashArity); | ||
1325 | // First check if Name and Arity are nonvar so we can do a direct lookup. | ||
1326 | if (YP.ground(NameSlashArity)) | ||
1327 | { | ||
1328 | if (NameSlashArity is Functor2) | ||
1329 | { | ||
1330 | Functor2 NameArityFunctor = (Functor2)NameSlashArity; | ||
1331 | if (NameArityFunctor._name == Atom.SLASH) | ||
1332 | { | ||
1333 | if (_predicatesStore.ContainsKey(new NameArity | ||
1334 | ((Atom)YP.getValue(NameArityFunctor._arg1), | ||
1335 | (int)YP.getValue(NameArityFunctor._arg2)))) | ||
1336 | // The predicate is defined. | ||
1337 | yield return false; | ||
1338 | } | ||
1339 | } | ||
1340 | yield break; | ||
1341 | } | ||
1342 | |||
1343 | foreach (NameArity key in _predicatesStore.Keys) | ||
1344 | { | ||
1345 | foreach (bool l1 in YP.unify | ||
1346 | (new Functor2(Atom.SLASH, key._name, key._arity), NameSlashArity)) | ||
1347 | yield return false; | ||
1348 | } | ||
1349 | } | ||
1350 | |||
1351 | /// <summary> | ||
1352 | /// Use YP.getFunctorName(Goal) and invoke the static method of this name in the | ||
1353 | /// declaringClass, using arguments from YP.getFunctorArgs(Goal). | ||
1354 | /// Note that Goal must be a simple functor, not a complex expression. | ||
1355 | /// If not found, this throws UndefinedPredicateException. | ||
1356 | /// </summary> | ||
1357 | /// <param name="Goal"></param> | ||
1358 | /// <param name="contextClass">the class for looking up default function references</param> | ||
1359 | /// <returns></returns> | ||
1360 | public static IEnumerable<bool> getIterator(object Goal, Type declaringClass) | ||
1361 | { | ||
1362 | Goal = YP.getValue(Goal); | ||
1363 | if (Goal is Variable) | ||
1364 | throw new PrologException("instantiation_error", "Goal to call is an unbound variable"); | ||
1365 | #if true | ||
1366 | List<Variable> variableSetList = new List<Variable>(); | ||
1367 | addUniqueVariables(Goal, variableSetList); | ||
1368 | Variable[] variableSet = variableSetList.ToArray(); | ||
1369 | |||
1370 | // Use Atom.F since it is ignored. | ||
1371 | return YPCompiler.compileAnonymousClause | ||
1372 | (Functor.make(Atom.F, variableSet), Goal, declaringClass).match(variableSet); | ||
1373 | #else | ||
1374 | Atom name; | ||
1375 | object[] args; | ||
1376 | while (true) | ||
1377 | { | ||
1378 | name = (Atom)YP.getFunctorName(Goal); | ||
1379 | args = YP.getFunctorArgs(Goal); | ||
1380 | if (name == Atom.HAT && args.Length == 2) | ||
1381 | // Assume this is called from a bagof operation. Skip the leading qualifiers. | ||
1382 | Goal = YP.getValue(((Functor2)Goal)._arg2); | ||
1383 | else | ||
1384 | break; | ||
1385 | } | ||
1386 | try | ||
1387 | { | ||
1388 | return (IEnumerable<bool>)declaringClass.InvokeMember | ||
1389 | (name._name, BindingFlags.InvokeMethod, null, null, args); | ||
1390 | } | ||
1391 | catch (TargetInvocationException exception) | ||
1392 | { | ||
1393 | throw exception.InnerException; | ||
1394 | } | ||
1395 | catch (MissingMethodException) | ||
1396 | { | ||
1397 | throw new UndefinedPredicateException | ||
1398 | ("Cannot find predicate function: " + name + "/" + args.Length + " in " + | ||
1399 | declaringClass.FullName, name, args.Length); | ||
1400 | } | ||
1401 | #endif | ||
1402 | } | ||
1403 | |||
1404 | public static void throwException(object Term) | ||
1405 | { | ||
1406 | throw new PrologException(Term); | ||
1407 | } | ||
1408 | |||
1409 | /// <summary> | ||
1410 | /// script_event calls hosting script with events as a callback method. | ||
1411 | /// </summary> | ||
1412 | /// <param name="script_event"></param> | ||
1413 | /// <param name="script_params"></param> | ||
1414 | /// <returns></returns> | ||
1415 | public static void script_event(object script_event, object script_params) | ||
1416 | { | ||
1417 | string function = ((Atom)YP.getValue(script_event))._name; | ||
1418 | object[] array = ListPair.toArray(script_params); | ||
1419 | if (array == null) | ||
1420 | return; // YP.fail(); | ||
1421 | if (array.Length > 1) | ||
1422 | { | ||
1423 | //m_CmdManager.m_ScriptEngine.m_EventQueManager.AddToScriptQueue | ||
1424 | //(localID, itemID, function, array); | ||
1425 | // sortArray(array); | ||
1426 | } | ||
1427 | //return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array)); | ||
1428 | } | ||
1429 | |||
1430 | /// <summary> | ||
1431 | /// An enumerator that does zero loops. | ||
1432 | /// </summary> | ||
1433 | private class Fail : IEnumerator<bool>, IEnumerable<bool> | ||
1434 | { | ||
1435 | public bool MoveNext() | ||
1436 | { | ||
1437 | return false; | ||
1438 | } | ||
1439 | |||
1440 | public IEnumerator<bool> GetEnumerator() | ||
1441 | { | ||
1442 | return (IEnumerator<bool>)this; | ||
1443 | } | ||
1444 | |||
1445 | IEnumerator IEnumerable.GetEnumerator() | ||
1446 | { | ||
1447 | return GetEnumerator(); | ||
1448 | } | ||
1449 | |||
1450 | public bool Current | ||
1451 | { | ||
1452 | get { return true; } | ||
1453 | } | ||
1454 | |||
1455 | object IEnumerator.Current | ||
1456 | { | ||
1457 | get { return true; } | ||
1458 | } | ||
1459 | |||
1460 | public void Dispose() | ||
1461 | { | ||
1462 | } | ||
1463 | |||
1464 | public void Reset() | ||
1465 | { | ||
1466 | throw new NotImplementedException(); | ||
1467 | } | ||
1468 | } | ||
1469 | |||
1470 | /// <summary> | ||
1471 | /// An enumerator that does one iteration. | ||
1472 | /// </summary> | ||
1473 | private class Succeed : IEnumerator<bool>, IEnumerable<bool> | ||
1474 | { | ||
1475 | private bool _didIteration = false; | ||
1476 | |||
1477 | public bool MoveNext() | ||
1478 | { | ||
1479 | if (!_didIteration) | ||
1480 | { | ||
1481 | _didIteration = true; | ||
1482 | return true; | ||
1483 | } | ||
1484 | else | ||
1485 | return false; | ||
1486 | } | ||
1487 | |||
1488 | public IEnumerator<bool> GetEnumerator() | ||
1489 | { | ||
1490 | return (IEnumerator<bool>)this; | ||
1491 | } | ||
1492 | |||
1493 | IEnumerator IEnumerable.GetEnumerator() | ||
1494 | { | ||
1495 | return GetEnumerator(); | ||
1496 | } | ||
1497 | |||
1498 | public bool Current | ||
1499 | { | ||
1500 | get { return false; } | ||
1501 | } | ||
1502 | |||
1503 | object IEnumerator.Current | ||
1504 | { | ||
1505 | get { return false; } | ||
1506 | } | ||
1507 | |||
1508 | public void Dispose() | ||
1509 | { | ||
1510 | } | ||
1511 | |||
1512 | public void Reset() | ||
1513 | { | ||
1514 | throw new NotImplementedException(); | ||
1515 | } | ||
1516 | } | ||
1517 | |||
1518 | /// <summary> | ||
1519 | /// An enumerator that repeats forever. | ||
1520 | /// </summary> | ||
1521 | private class Repeat : IEnumerator<bool>, IEnumerable<bool> | ||
1522 | { | ||
1523 | public bool MoveNext() | ||
1524 | { | ||
1525 | return true; | ||
1526 | } | ||
1527 | |||
1528 | public IEnumerator<bool> GetEnumerator() | ||
1529 | { | ||
1530 | return (IEnumerator<bool>)this; | ||
1531 | } | ||
1532 | |||
1533 | IEnumerator IEnumerable.GetEnumerator() | ||
1534 | { | ||
1535 | return GetEnumerator(); | ||
1536 | } | ||
1537 | |||
1538 | public bool Current | ||
1539 | { | ||
1540 | get { return false; } | ||
1541 | } | ||
1542 | |||
1543 | object IEnumerator.Current | ||
1544 | { | ||
1545 | get { return false; } | ||
1546 | } | ||
1547 | |||
1548 | public void Dispose() | ||
1549 | { | ||
1550 | } | ||
1551 | |||
1552 | public void Reset() | ||
1553 | { | ||
1554 | throw new NotImplementedException(); | ||
1555 | } | ||
1556 | } | ||
1557 | |||
1558 | /// <summary> | ||
1559 | /// An enumerator that wraps another enumerator in order to catch a PrologException. | ||
1560 | /// </summary> | ||
1561 | public class Catch : IEnumerator<bool>, IEnumerable<bool> | ||
1562 | { | ||
1563 | private IEnumerator<bool> _enumerator; | ||
1564 | private PrologException _exception = null; | ||
1565 | |||
1566 | public Catch(IEnumerable<bool> iterator) | ||
1567 | { | ||
1568 | _enumerator = iterator.GetEnumerator(); | ||
1569 | } | ||
1570 | |||
1571 | /// <summary> | ||
1572 | /// Call _enumerator.MoveNext(). If it throws a PrologException, set _exception | ||
1573 | /// and return false. After this returns false, call unifyExceptionOrThrow. | ||
1574 | /// Assume that, after this returns false, it will not be called again. | ||
1575 | /// </summary> | ||
1576 | /// <returns></returns> | ||
1577 | public bool MoveNext() | ||
1578 | { | ||
1579 | try | ||
1580 | { | ||
1581 | return _enumerator.MoveNext(); | ||
1582 | } | ||
1583 | catch (PrologException exception) | ||
1584 | { | ||
1585 | _exception = exception; | ||
1586 | return false; | ||
1587 | } | ||
1588 | } | ||
1589 | |||
1590 | /// <summary> | ||
1591 | /// Call this after MoveNext() returns false to check for an exception. If | ||
1592 | /// MoveNext did not get a PrologException, don't yield. | ||
1593 | /// Otherwise, unify the exception with Catcher and yield so the caller can | ||
1594 | /// do the handler code. However, if can't unify with Catcher then throw the exception. | ||
1595 | /// </summary> | ||
1596 | /// <param name="Catcher"></param> | ||
1597 | /// <returns></returns> | ||
1598 | public IEnumerable<bool> unifyExceptionOrThrow(object Catcher) | ||
1599 | { | ||
1600 | if (_exception != null) | ||
1601 | { | ||
1602 | bool didUnify = false; | ||
1603 | foreach (bool l1 in YP.unify(_exception._term, Catcher)) | ||
1604 | { | ||
1605 | didUnify = true; | ||
1606 | yield return false; | ||
1607 | } | ||
1608 | if (!didUnify) | ||
1609 | throw _exception; | ||
1610 | } | ||
1611 | } | ||
1612 | |||
1613 | public IEnumerator<bool> GetEnumerator() | ||
1614 | { | ||
1615 | return (IEnumerator<bool>)this; | ||
1616 | } | ||
1617 | |||
1618 | IEnumerator IEnumerable.GetEnumerator() | ||
1619 | { | ||
1620 | return GetEnumerator(); | ||
1621 | } | ||
1622 | |||
1623 | public bool Current | ||
1624 | { | ||
1625 | get { return _enumerator.Current; } | ||
1626 | } | ||
1627 | |||
1628 | object IEnumerator.Current | ||
1629 | { | ||
1630 | get { return _enumerator.Current; } | ||
1631 | } | ||
1632 | |||
1633 | public void Dispose() | ||
1634 | { | ||
1635 | _enumerator.Dispose(); | ||
1636 | } | ||
1637 | |||
1638 | public void Reset() | ||
1639 | { | ||
1640 | throw new NotImplementedException(); | ||
1641 | } | ||
1642 | } | ||
1643 | } | ||
1644 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs new file mode 100644 index 0000000..f2f8145 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/YieldProlog/YPCompiler.cs | |||
@@ -0,0 +1,5651 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007-2008, Jeff Thompson | ||
3 | * | ||
4 | * All rights reserved. | ||
5 | * | ||
6 | * Redistribution and use in source and binary forms, with or without | ||
7 | * modification, are permitted provided that the following conditions are met: | ||
8 | * | ||
9 | * * Redistributions of source code must retain the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer. | ||
11 | * * Redistributions in binary form must reproduce the above copyright | ||
12 | * notice, this list of conditions and the following disclaimer in the | ||
13 | * documentation and/or other materials provided with the distribution. | ||
14 | * * Neither the name of the copyright holder nor the names of its contributors | ||
15 | * may be used to endorse or promote products derived from this software | ||
16 | * without specific prior written permission. | ||
17 | * | ||
18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
19 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
20 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
21 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | ||
22 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
23 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
24 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | ||
25 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | ||
26 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||
27 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
28 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
29 | */ | ||
30 | |||
31 | using System; | ||
32 | using System.IO; | ||
33 | using System.Collections; | ||
34 | using System.Collections.Generic; | ||
35 | using System.Text; | ||
36 | using System.CodeDom.Compiler; | ||
37 | |||
38 | namespace OpenSim.Region.ScriptEngine.Shared.YieldProlog | ||
39 | { | ||
40 | public class YPCompiler | ||
41 | { | ||
42 | private class CompilerState | ||
43 | { | ||
44 | public IndexedAnswers _pred = new IndexedAnswers(); | ||
45 | public Dictionary<YP.NameArity, Atom> _moduleForNameArity = new Dictionary<YP.NameArity, Atom>(); | ||
46 | public int _gensymCounter; | ||
47 | public bool _useFinalCutCode; | ||
48 | public Variable _finalCutCode; | ||
49 | public bool _codeUsesYield; | ||
50 | public Atom _determinism; | ||
51 | // a list of '='(Name, Variable) | ||
52 | public List<object> _variableNames; | ||
53 | |||
54 | // Make these static functions that explicitly take the State so Prolog can call it. | ||
55 | |||
56 | /// <summary> | ||
57 | /// Make a new CompilerState and bind it to State. | ||
58 | /// </summary> | ||
59 | /// <param name="State"></param> | ||
60 | /// <returns></returns> | ||
61 | public static IEnumerable<bool> make(object State) | ||
62 | { | ||
63 | return YP.unify(State, new CompilerState()); | ||
64 | } | ||
65 | |||
66 | public static void assertPred(object State, object Pred, object Determinism) | ||
67 | { | ||
68 | State = YP.getValue(State); | ||
69 | object functorName = YP.getFunctorName(Pred); | ||
70 | object[] functorArgs = YP.getFunctorArgs(Pred); | ||
71 | // Debug: Should check if it's already asserted and is the same. | ||
72 | ((CompilerState)State)._pred.addAnswer | ||
73 | (new object[] { functorName, functorArgs.Length, Pred, YP.getValue(Determinism) }); | ||
74 | } | ||
75 | |||
76 | public static void assertModuleForNameArity(object State, object Name, object Arity, object Module) | ||
77 | { | ||
78 | State = YP.getValue(State); | ||
79 | Name = YP.getValue(Name); | ||
80 | Arity = YP.getValue(Arity); | ||
81 | Module = YP.getValue(Module); | ||
82 | // If the Module Atom comes from the parser, it always has null _declaringClass. | ||
83 | if (Module is Atom && ((Atom)Module)._module == null && Name is Atom && Arity is int) | ||
84 | { | ||
85 | // Replace a previous entry if it exists. | ||
86 | ((CompilerState)State)._moduleForNameArity[new YP.NameArity((Atom)Name, (int)Arity)] = | ||
87 | (Atom)Module; | ||
88 | } | ||
89 | } | ||
90 | |||
91 | public static void startFunction(object State, object Head) | ||
92 | { | ||
93 | State = YP.getValue(State); | ||
94 | ((CompilerState)State)._gensymCounter = 0; | ||
95 | ((CompilerState)State)._useFinalCutCode = false; | ||
96 | ((CompilerState)State)._finalCutCode = new Variable(); | ||
97 | ((CompilerState)State)._codeUsesYield = false; | ||
98 | if (CompilerState.isDetNoneOut(State, Head)) | ||
99 | ((CompilerState)State)._determinism = Atom.a("detNoneOut"); | ||
100 | else if (CompilerState.isSemidetNoneOut(State, Head)) | ||
101 | ((CompilerState)State)._determinism = Atom.a("semidetNoneOut"); | ||
102 | else | ||
103 | ((CompilerState)State)._determinism = Atom.a("nondet"); | ||
104 | } | ||
105 | |||
106 | public static void setCodeUsesYield(object State) | ||
107 | { | ||
108 | State = YP.getValue(State); | ||
109 | ((CompilerState)State)._codeUsesYield = true; | ||
110 | } | ||
111 | |||
112 | public static bool codeUsesYield(object State) | ||
113 | { | ||
114 | State = YP.getValue(State); | ||
115 | return ((CompilerState)State)._codeUsesYield; | ||
116 | } | ||
117 | |||
118 | public static bool determinismEquals(object State, object Term) | ||
119 | { | ||
120 | State = YP.getValue(State); | ||
121 | return YP.termEqual(((CompilerState)State)._determinism, Term); | ||
122 | } | ||
123 | |||
124 | /// <summary> | ||
125 | /// Set _variableNames to a new list of (Name = Variable) for each unique variable in rule. | ||
126 | /// If the variable is in variableNameSuggestions, use it, otherwise use x1, x2, etc. | ||
127 | /// </summary> | ||
128 | /// <param name="State"></param> | ||
129 | /// <param name="rule"></param> | ||
130 | /// <param name="variableNameSuggestions"></param> | ||
131 | public static void newVariableNames(object State, object Rule, object VariableNameSuggestions) | ||
132 | { | ||
133 | State = YP.getValue(State); | ||
134 | List<Variable> variablesSet = new List<Variable>(); | ||
135 | YP.addUniqueVariables(Rule, variablesSet); | ||
136 | |||
137 | ((CompilerState)State)._variableNames = new List<object>(); | ||
138 | int xCounter = 0; | ||
139 | foreach (Variable variable in variablesSet) | ||
140 | ((CompilerState)State)._variableNames.Add | ||
141 | (new Functor2(Atom.a("="), makeVariableName(variable, VariableNameSuggestions, ++xCounter), | ||
142 | variable)); | ||
143 | } | ||
144 | |||
145 | private static object makeVariableName(object variable, object variableNameSuggestions, int xCounter) | ||
146 | { | ||
147 | // Debug: should require named variables to start with _ or capital. Should | ||
148 | // check for duplicates and clashes with keywords. | ||
149 | for (object element = YP.getValue(variableNameSuggestions); | ||
150 | element is Functor2 && ((Functor2)element)._name == Atom.DOT; | ||
151 | element = YP.getValue(((Functor2)element)._arg2)) | ||
152 | { | ||
153 | object suggestionPair = YP.getValue(((Functor2)element)._arg1); | ||
154 | if (sameVariable(variable, ((Functor2)suggestionPair)._arg2)) | ||
155 | { | ||
156 | Atom suggestion = (Atom)YP.getValue(((Functor2)suggestionPair)._arg1); | ||
157 | if (suggestion.Equals(Atom.a("Atom"))) | ||
158 | suggestion = Atom.a("Atom_1"); | ||
159 | if (suggestion.Equals(Atom.a("Variable"))) | ||
160 | suggestion = Atom.a("Variable_1"); | ||
161 | if (suggestion.Equals(Atom.a("Functor"))) | ||
162 | suggestion = Atom.a("Functor_1"); | ||
163 | return suggestion; | ||
164 | } | ||
165 | } | ||
166 | |||
167 | return Atom.a("x" + xCounter); | ||
168 | } | ||
169 | |||
170 | /// <summary> | ||
171 | /// Unify Result with the name assigned by CompilerState.newVariableNames in State._variableNames | ||
172 | /// for variable. | ||
173 | /// </summary> | ||
174 | /// <param name="variable">a Variable</param> | ||
175 | /// <param name="State"></param> | ||
176 | /// <param name="Result">the assigned Name</param> | ||
177 | public static IEnumerable<bool> getVariableName(object State, object variable, object Result) | ||
178 | { | ||
179 | State = YP.getValue(State); | ||
180 | foreach (object variableInfo in ((CompilerState)State)._variableNames) | ||
181 | { | ||
182 | if (variableInfo is Functor2 && ((Functor2)variableInfo)._name.Equals(Atom.a("="))) | ||
183 | { | ||
184 | if (sameVariable(variable, ((Functor2)variableInfo)._arg2)) | ||
185 | return YP.unify(Result, ((Functor2)variableInfo)._arg1); | ||
186 | } | ||
187 | } | ||
188 | |||
189 | // We set up names for all unique variables, so this should never happen. | ||
190 | throw new PrologException(Atom.a("Can't find entry in _variableNames")); | ||
191 | } | ||
192 | |||
193 | public static IEnumerable<bool> variableNamesList(object State, object VariableNamesList) | ||
194 | { | ||
195 | State = YP.getValue(State); | ||
196 | return YP.unify(VariableNamesList, ListPair.make(((CompilerState)State)._variableNames)); | ||
197 | } | ||
198 | |||
199 | public static IEnumerable<bool> gensym(object State, object Base, object Symbol) | ||
200 | { | ||
201 | State = YP.getValue(State); | ||
202 | return YP.unify(Symbol, Atom.a(Base.ToString() + ++((CompilerState)State)._gensymCounter)); | ||
203 | } | ||
204 | |||
205 | public static bool isDetNoneOut(object State, object Term) | ||
206 | { | ||
207 | State = YP.getValue(State); | ||
208 | object functorName = YP.getFunctorName(Term); | ||
209 | object[] functorArgs = YP.getFunctorArgs(Term); | ||
210 | |||
211 | Variable pred = new Variable(); | ||
212 | foreach (bool l1 in ((CompilerState)State)._pred.match | ||
213 | (new object[] { functorName, functorArgs.Length, pred, Atom.a("det") })) | ||
214 | { | ||
215 | if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue()))) | ||
216 | { | ||
217 | return true; | ||
218 | } | ||
219 | } | ||
220 | |||
221 | return false; | ||
222 | } | ||
223 | |||
224 | public static bool isSemidetNoneOut(object State, object Term) | ||
225 | { | ||
226 | State = YP.getValue(State); | ||
227 | object functorName = YP.getFunctorName(Term); | ||
228 | object[] functorArgs = YP.getFunctorArgs(Term); | ||
229 | |||
230 | Variable pred = new Variable(); | ||
231 | foreach (bool l1 in ((CompilerState)State)._pred.match | ||
232 | (new object[] { functorName, functorArgs.Length, pred, Atom.a("semidet") })) | ||
233 | { | ||
234 | if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue()))) | ||
235 | { | ||
236 | return true; | ||
237 | } | ||
238 | } | ||
239 | |||
240 | return false; | ||
241 | } | ||
242 | |||
243 | /// <summary> | ||
244 | /// Return false if any of args is out, otherwise true. | ||
245 | /// args is an array of ::(Type,Mode) where Mode is in or out. | ||
246 | /// </summary> | ||
247 | /// <param name="args"></param> | ||
248 | /// <returns></returns> | ||
249 | private static bool isNoneOut(object[] args) | ||
250 | { | ||
251 | foreach (object arg in args) | ||
252 | { | ||
253 | if (arg is Functor2 && ((Functor2)arg)._name == Atom.a("::") && | ||
254 | ((Functor2)arg)._arg2 == Atom.a("out")) | ||
255 | return false; | ||
256 | } | ||
257 | return true; | ||
258 | } | ||
259 | |||
260 | public static bool nameArityHasModule(object State, object Name, object Arity, object Module) | ||
261 | { | ||
262 | State = YP.getValue(State); | ||
263 | Name = YP.getValue(Name); | ||
264 | Arity = YP.getValue(Arity); | ||
265 | Module = YP.getValue(Module); | ||
266 | if (Name is Atom && Arity is int) | ||
267 | { | ||
268 | Atom FoundModule; | ||
269 | if (!((CompilerState)State)._moduleForNameArity.TryGetValue | ||
270 | (new YP.NameArity((Atom)Name, (int)Arity), out FoundModule)) | ||
271 | return false; | ||
272 | return FoundModule == Module; | ||
273 | } | ||
274 | return false; | ||
275 | } | ||
276 | } | ||
277 | |||
278 | /// <summary> | ||
279 | /// Use makeFunctionPseudoCode, convertFunctionCSharp and compileAnonymousFunction | ||
280 | /// to return an anonymous YP.IClause for the Head and Body of a rule clause. | ||
281 | /// </summary> | ||
282 | /// <param name="Head">a prolog term such as new Functor2("test1", X, Y). | ||
283 | /// Note that the name of the head is ignored. | ||
284 | /// </param> | ||
285 | /// <param name="Body">a prolog term such as | ||
286 | /// new Functor2(",", new Functor1(Atom.a("test2", Atom.a("")), X), | ||
287 | /// new Functor2("=", Y, X)). | ||
288 | /// This may not be null. (For a head-only clause, set the Body to Atom.a("true"). | ||
289 | /// </param> | ||
290 | /// <param name="declaringClass">if not null, the code is compiled as a subclass of this class | ||
291 | /// to resolve references to the default module Atom.a("")</param> | ||
292 | /// <returns>a new YP.IClause object on which you can call match(object[] args) where | ||
293 | /// args length is the arity of the Head</returns> | ||
294 | public static YP.IClause compileAnonymousClause(object Head, object Body, Type declaringClass) | ||
295 | { | ||
296 | object[] args = YP.getFunctorArgs(Head); | ||
297 | // compileAnonymousFunction wants "function". | ||
298 | object Rule = new Functor2(Atom.RULE, Functor.make("function", args), Body); | ||
299 | object RuleList = ListPair.make(new Functor2(Atom.F, Rule, Atom.NIL)); | ||
300 | |||
301 | StringWriter functionCode = new StringWriter(); | ||
302 | Variable SaveOutputStream = new Variable(); | ||
303 | foreach (bool l1 in YP.current_output(SaveOutputStream)) | ||
304 | { | ||
305 | try | ||
306 | { | ||
307 | YP.tell(functionCode); | ||
308 | Variable FunctionCode = new Variable(); | ||
309 | foreach (bool l2 in makeFunctionPseudoCode(RuleList, FunctionCode)) | ||
310 | { | ||
311 | if (YP.termEqual(FunctionCode, Atom.a("getDeclaringClass"))) | ||
312 | // Ignore getDeclaringClass since we have access to the one passed in. | ||
313 | continue; | ||
314 | |||
315 | // Debug: should check if FunctionCode is a single call. | ||
316 | convertFunctionCSharp(FunctionCode); | ||
317 | } | ||
318 | YP.told(); | ||
319 | } | ||
320 | finally | ||
321 | { | ||
322 | // Restore after calling tell. | ||
323 | YP.tell(SaveOutputStream.getValue()); | ||
324 | } | ||
325 | } | ||
326 | return YPCompiler.compileAnonymousFunction | ||
327 | (functionCode.ToString(), args.Length, declaringClass); | ||
328 | } | ||
329 | |||
330 | /// <summary> | ||
331 | /// Use CodeDomProvider to compile the functionCode and return a YP.IClause. | ||
332 | /// The function name must be "function" and have nArgs arguments. | ||
333 | /// </summary> | ||
334 | /// <param name="functionCode">the code for the iterator, such as | ||
335 | /// "public static IEnumerable<bool> function() { yield return false; }" | ||
336 | /// </param> | ||
337 | /// <param name="nArgs">the number of args in the function</param> | ||
338 | /// <param name="declaringClass">if not null, then use the functionCode inside a class which | ||
339 | /// inherits from contextClass, so that references in functionCode to methods in declaringClass don't | ||
340 | /// have to be qualified</param> | ||
341 | /// <returns>a new YP.IClause object on which you can call match(object[] args) where | ||
342 | /// args length is nArgs</returns> | ||
343 | public static YP.IClause compileAnonymousFunction(string functionCode, int nArgs, Type declaringClass) | ||
344 | { | ||
345 | CompilerParameters parameters = new CompilerParameters(); | ||
346 | // This gets the location of the System assembly. | ||
347 | parameters.ReferencedAssemblies.Add(typeof(System.Int32).Assembly.Location); | ||
348 | // This gets the location of this assembly which also has YieldProlog.YP, etc. | ||
349 | parameters.ReferencedAssemblies.Add(typeof(YPCompiler).Assembly.Location); | ||
350 | if (declaringClass != null) | ||
351 | parameters.ReferencedAssemblies.Add(declaringClass.Assembly.Location); | ||
352 | parameters.GenerateInMemory = true; | ||
353 | |||
354 | StringBuilder sourceCode = new StringBuilder(); | ||
355 | sourceCode.Append(@" | ||
356 | using System; | ||
357 | using System.Collections.Generic; | ||
358 | using YieldProlog; | ||
359 | |||
360 | namespace Temporary { | ||
361 | public class Temporary : YP.IClause { | ||
362 | public class Inner" + (declaringClass == null ? "" : " : " + declaringClass.FullName) + @" { | ||
363 | "); | ||
364 | sourceCode.Append(functionCode); | ||
365 | // Basically, match applies the args to function. | ||
366 | sourceCode.Append(@" | ||
367 | } | ||
368 | public IEnumerable<bool> match(object[] args) { | ||
369 | return Inner.function("); | ||
370 | if (nArgs >= 1) | ||
371 | sourceCode.Append("args[0]"); | ||
372 | for (int i = 1; i < nArgs; ++i) | ||
373 | sourceCode.Append(", args[" + i + "]"); | ||
374 | sourceCode.Append(@"); | ||
375 | } | ||
376 | } | ||
377 | } | ||
378 | "); | ||
379 | |||
380 | CompilerResults results = CodeDomProvider.CreateProvider | ||
381 | ("CSharp").CompileAssemblyFromSource(parameters, sourceCode.ToString()); | ||
382 | if (results.Errors.Count > 0) | ||
383 | throw new Exception("Error evaluating code: " + results.Errors[0]); | ||
384 | |||
385 | // Return a new Temporary.Temporary object. | ||
386 | return (YP.IClause)results.CompiledAssembly.GetType | ||
387 | ("Temporary.Temporary").GetConstructor(Type.EmptyTypes).Invoke(null); | ||
388 | } | ||
389 | |||
390 | // Compiler output follows. | ||
391 | |||
392 | public class YPInnerClass { } | ||
393 | public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; } | ||
394 | |||
395 | public static void repeatWrite(object arg1, object N) | ||
396 | { | ||
397 | { | ||
398 | object _Value = arg1; | ||
399 | if (YP.termEqual(N, 0)) | ||
400 | { | ||
401 | return; | ||
402 | } | ||
403 | } | ||
404 | { | ||
405 | object Value = arg1; | ||
406 | Variable NextN = new Variable(); | ||
407 | YP.write(Value); | ||
408 | foreach (bool l2 in YP.unify(NextN, YP.subtract(N, 1))) | ||
409 | { | ||
410 | repeatWrite(Value, NextN); | ||
411 | return; | ||
412 | } | ||
413 | } | ||
414 | } | ||
415 | |||
416 | public static bool sameVariable(object Variable1, object Variable2) | ||
417 | { | ||
418 | { | ||
419 | if (YP.var(Variable1)) | ||
420 | { | ||
421 | if (YP.var(Variable2)) | ||
422 | { | ||
423 | if (YP.termEqual(Variable1, Variable2)) | ||
424 | { | ||
425 | return true; | ||
426 | } | ||
427 | } | ||
428 | } | ||
429 | } | ||
430 | return false; | ||
431 | } | ||
432 | |||
433 | public static IEnumerable<bool> makeFunctionPseudoCode(object RuleList, object FunctionCode) | ||
434 | { | ||
435 | { | ||
436 | Variable State = new Variable(); | ||
437 | foreach (bool l2 in CompilerState.make(State)) | ||
438 | { | ||
439 | CompilerState.assertPred(State, Atom.a(@"nl"), Atom.a(@"det")); | ||
440 | CompilerState.assertPred(State, new Functor1(@"write", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"det")); | ||
441 | CompilerState.assertPred(State, new Functor1(@"put_code", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"det")); | ||
442 | CompilerState.assertPred(State, new Functor1(@"throw", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"det")); | ||
443 | CompilerState.assertPred(State, new Functor1(@"var", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
444 | CompilerState.assertPred(State, new Functor1(@"nonvar", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
445 | CompilerState.assertPred(State, new Functor1(@"atom", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
446 | CompilerState.assertPred(State, new Functor1(@"integer", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
447 | CompilerState.assertPred(State, new Functor1(@"float", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
448 | CompilerState.assertPred(State, new Functor1(@"number", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
449 | CompilerState.assertPred(State, new Functor1(@"atomic", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
450 | CompilerState.assertPred(State, new Functor1(@"compound", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
451 | CompilerState.assertPred(State, new Functor2(@"==", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
452 | CompilerState.assertPred(State, new Functor2(@"\==", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
453 | CompilerState.assertPred(State, new Functor2(@"@<", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
454 | CompilerState.assertPred(State, new Functor2(@"@=<", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
455 | CompilerState.assertPred(State, new Functor2(@"@>", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
456 | CompilerState.assertPred(State, new Functor2(@"@>=", new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in")), new Functor2(@"::", Atom.a(@"univ"), Atom.a(@"in"))), Atom.a(@"semidet")); | ||
457 | processCompilerDirectives(RuleList, State); | ||
458 | foreach (bool l3 in YP.unify(FunctionCode, Atom.a(@"getDeclaringClass"))) | ||
459 | { | ||
460 | yield return false; | ||
461 | } | ||
462 | foreach (bool l3 in makeFunctionPseudoCode3(RuleList, State, FunctionCode)) | ||
463 | { | ||
464 | yield return false; | ||
465 | } | ||
466 | } | ||
467 | } | ||
468 | } | ||
469 | |||
470 | public static void processCompilerDirectives(object arg1, object arg2) | ||
471 | { | ||
472 | { | ||
473 | object _State = arg2; | ||
474 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
475 | { | ||
476 | return; | ||
477 | } | ||
478 | } | ||
479 | { | ||
480 | object State = arg2; | ||
481 | Variable Pred = new Variable(); | ||
482 | Variable Determinism = new Variable(); | ||
483 | Variable x3 = new Variable(); | ||
484 | Variable RestRules = new Variable(); | ||
485 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", new Functor1(@":-", new Functor1(@"pred", new Functor2(@"is", Pred, Determinism))), x3), RestRules))) | ||
486 | { | ||
487 | CompilerState.assertPred(State, Pred, Determinism); | ||
488 | processCompilerDirectives(RestRules, State); | ||
489 | return; | ||
490 | } | ||
491 | } | ||
492 | { | ||
493 | object State = arg2; | ||
494 | Variable Module = new Variable(); | ||
495 | Variable PredicateList = new Variable(); | ||
496 | Variable x3 = new Variable(); | ||
497 | Variable RestRules = new Variable(); | ||
498 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", new Functor1(@":-", new Functor2(@"import", Module, PredicateList)), x3), RestRules))) | ||
499 | { | ||
500 | foreach (bool l3 in importPredicateList(State, Module, PredicateList)) | ||
501 | { | ||
502 | processCompilerDirectives(RestRules, State); | ||
503 | return; | ||
504 | } | ||
505 | } | ||
506 | } | ||
507 | { | ||
508 | object State = arg2; | ||
509 | Variable x1 = new Variable(); | ||
510 | Variable x2 = new Variable(); | ||
511 | Variable RestRules = new Variable(); | ||
512 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", new Functor1(@":-", x1), x2), RestRules))) | ||
513 | { | ||
514 | processCompilerDirectives(RestRules, State); | ||
515 | return; | ||
516 | } | ||
517 | } | ||
518 | { | ||
519 | object State = arg2; | ||
520 | Variable Head = new Variable(); | ||
521 | Variable _Body = new Variable(); | ||
522 | Variable x3 = new Variable(); | ||
523 | Variable RestRules = new Variable(); | ||
524 | Variable Name = new Variable(); | ||
525 | Variable Arity = new Variable(); | ||
526 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", new Functor2(@":-", Head, _Body), x3), RestRules))) | ||
527 | { | ||
528 | foreach (bool l3 in YP.functor(Head, Name, Arity)) | ||
529 | { | ||
530 | CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(@"")); | ||
531 | processCompilerDirectives(RestRules, State); | ||
532 | return; | ||
533 | } | ||
534 | } | ||
535 | } | ||
536 | { | ||
537 | object State = arg2; | ||
538 | Variable Fact = new Variable(); | ||
539 | Variable x2 = new Variable(); | ||
540 | Variable RestRules = new Variable(); | ||
541 | Variable Name = new Variable(); | ||
542 | Variable Arity = new Variable(); | ||
543 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", Fact, x2), RestRules))) | ||
544 | { | ||
545 | foreach (bool l3 in YP.functor(Fact, Name, Arity)) | ||
546 | { | ||
547 | CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a(@"")); | ||
548 | processCompilerDirectives(RestRules, State); | ||
549 | return; | ||
550 | } | ||
551 | } | ||
552 | } | ||
553 | { | ||
554 | object State = arg2; | ||
555 | Variable x1 = new Variable(); | ||
556 | Variable RestRules = new Variable(); | ||
557 | foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestRules))) | ||
558 | { | ||
559 | processCompilerDirectives(RestRules, State); | ||
560 | return; | ||
561 | } | ||
562 | } | ||
563 | } | ||
564 | |||
565 | public static IEnumerable<bool> importPredicateList(object arg1, object arg2, object arg3) | ||
566 | { | ||
567 | { | ||
568 | object _State = arg1; | ||
569 | object _Module = arg2; | ||
570 | foreach (bool l2 in YP.unify(arg3, Atom.NIL)) | ||
571 | { | ||
572 | yield return true; | ||
573 | yield break; | ||
574 | } | ||
575 | } | ||
576 | { | ||
577 | object State = arg1; | ||
578 | object Module = arg2; | ||
579 | Variable Name = new Variable(); | ||
580 | Variable Arity = new Variable(); | ||
581 | Variable Rest = new Variable(); | ||
582 | foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2(@"/", Name, Arity), Rest))) | ||
583 | { | ||
584 | CompilerState.assertModuleForNameArity(State, Name, Arity, Module); | ||
585 | foreach (bool l3 in importPredicateList(State, Module, Rest)) | ||
586 | { | ||
587 | yield return true; | ||
588 | yield break; | ||
589 | } | ||
590 | } | ||
591 | } | ||
592 | { | ||
593 | object State = arg1; | ||
594 | object Module = arg2; | ||
595 | Variable x3 = new Variable(); | ||
596 | Variable Rest = new Variable(); | ||
597 | foreach (bool l2 in YP.unify(arg3, new ListPair(x3, Rest))) | ||
598 | { | ||
599 | foreach (bool l3 in importPredicateList(State, Module, Rest)) | ||
600 | { | ||
601 | yield return true; | ||
602 | yield break; | ||
603 | } | ||
604 | } | ||
605 | } | ||
606 | } | ||
607 | |||
608 | public static IEnumerable<bool> makeFunctionPseudoCode3(object RuleList, object State, object FunctionCode) | ||
609 | { | ||
610 | { | ||
611 | Variable SamePredicateRuleList = new Variable(); | ||
612 | Variable RestRules = new Variable(); | ||
613 | foreach (bool l2 in samePredicateRuleList(RuleList, SamePredicateRuleList, RestRules)) | ||
614 | { | ||
615 | if (YP.termNotEqual(SamePredicateRuleList, Atom.NIL)) | ||
616 | { | ||
617 | foreach (bool l4 in compileSamePredicateFunction(SamePredicateRuleList, State, FunctionCode)) | ||
618 | { | ||
619 | yield return false; | ||
620 | } | ||
621 | foreach (bool l4 in makeFunctionPseudoCode3(RestRules, State, FunctionCode)) | ||
622 | { | ||
623 | yield return false; | ||
624 | } | ||
625 | } | ||
626 | } | ||
627 | } | ||
628 | } | ||
629 | |||
630 | public static IEnumerable<bool> compileSamePredicateFunction(object SamePredicateRuleList, object State, object FunctionCode) | ||
631 | { | ||
632 | { | ||
633 | Variable FirstRule = new Variable(); | ||
634 | Variable x5 = new Variable(); | ||
635 | Variable x6 = new Variable(); | ||
636 | Variable x7 = new Variable(); | ||
637 | Variable Head = new Variable(); | ||
638 | Variable x9 = new Variable(); | ||
639 | Variable ArgAssignments = new Variable(); | ||
640 | Variable Calls = new Variable(); | ||
641 | Variable Rule = new Variable(); | ||
642 | Variable VariableNameSuggestions = new Variable(); | ||
643 | Variable ClauseBag = new Variable(); | ||
644 | Variable Name = new Variable(); | ||
645 | Variable ArgsList = new Variable(); | ||
646 | Variable FunctionArgNames = new Variable(); | ||
647 | Variable MergedArgName = new Variable(); | ||
648 | Variable ArgName = new Variable(); | ||
649 | Variable MergedArgNames = new Variable(); | ||
650 | Variable FunctionArgs = new Variable(); | ||
651 | Variable BodyCode = new Variable(); | ||
652 | Variable ReturnType = new Variable(); | ||
653 | Variable BodyWithReturn = new Variable(); | ||
654 | foreach (bool l2 in YP.unify(new ListPair(new Functor2(@"f", FirstRule, x5), x6), SamePredicateRuleList)) | ||
655 | { | ||
656 | foreach (bool l3 in YP.unify(FirstRule, new Functor1(@":-", x7))) | ||
657 | { | ||
658 | goto cutIf1; | ||
659 | } | ||
660 | foreach (bool l3 in YP.unify(new Functor2(@":-", Head, x9), FirstRule)) | ||
661 | { | ||
662 | CompilerState.startFunction(State, Head); | ||
663 | FindallAnswers findallAnswers3 = new FindallAnswers(new Functor2(@"f", ArgAssignments, Calls)); | ||
664 | foreach (bool l4 in member(new Functor2(@"f", Rule, VariableNameSuggestions), SamePredicateRuleList)) | ||
665 | { | ||
666 | foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls)) | ||
667 | { | ||
668 | findallAnswers3.add(); | ||
669 | } | ||
670 | } | ||
671 | foreach (bool l4 in findallAnswers3.result(ClauseBag)) | ||
672 | { | ||
673 | foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList))) | ||
674 | { | ||
675 | foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames)) | ||
676 | { | ||
677 | FindallAnswers findallAnswers4 = new FindallAnswers(MergedArgName); | ||
678 | foreach (bool l7 in member(ArgName, FunctionArgNames)) | ||
679 | { | ||
680 | foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName)) | ||
681 | { | ||
682 | findallAnswers4.add(); | ||
683 | goto cutIf5; | ||
684 | } | ||
685 | foreach (bool l8 in YP.unify(MergedArgName, ArgName)) | ||
686 | { | ||
687 | findallAnswers4.add(); | ||
688 | } | ||
689 | cutIf5: | ||
690 | { } | ||
691 | } | ||
692 | foreach (bool l7 in findallAnswers4.result(MergedArgNames)) | ||
693 | { | ||
694 | foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs)) | ||
695 | { | ||
696 | foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode)) | ||
697 | { | ||
698 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
699 | { | ||
700 | foreach (bool l11 in YP.unify(ReturnType, Atom.a(@"void"))) | ||
701 | { | ||
702 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
703 | { | ||
704 | foreach (bool l13 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
705 | { | ||
706 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
707 | { | ||
708 | yield return false; | ||
709 | } | ||
710 | } | ||
711 | goto cutIf7; | ||
712 | } | ||
713 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
714 | { | ||
715 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
716 | { | ||
717 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
718 | { | ||
719 | yield return false; | ||
720 | } | ||
721 | } | ||
722 | goto cutIf8; | ||
723 | } | ||
724 | if (CompilerState.codeUsesYield(State)) | ||
725 | { | ||
726 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
727 | { | ||
728 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
729 | { | ||
730 | yield return false; | ||
731 | } | ||
732 | } | ||
733 | goto cutIf9; | ||
734 | } | ||
735 | foreach (bool l12 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
736 | { | ||
737 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
738 | { | ||
739 | yield return false; | ||
740 | } | ||
741 | } | ||
742 | cutIf9: | ||
743 | cutIf8: | ||
744 | cutIf7: | ||
745 | { } | ||
746 | } | ||
747 | goto cutIf6; | ||
748 | } | ||
749 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
750 | { | ||
751 | foreach (bool l11 in YP.unify(ReturnType, Atom.a(@"bool"))) | ||
752 | { | ||
753 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
754 | { | ||
755 | foreach (bool l13 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
756 | { | ||
757 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
758 | { | ||
759 | yield return false; | ||
760 | } | ||
761 | } | ||
762 | goto cutIf11; | ||
763 | } | ||
764 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
765 | { | ||
766 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
767 | { | ||
768 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
769 | { | ||
770 | yield return false; | ||
771 | } | ||
772 | } | ||
773 | goto cutIf12; | ||
774 | } | ||
775 | if (CompilerState.codeUsesYield(State)) | ||
776 | { | ||
777 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
778 | { | ||
779 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
780 | { | ||
781 | yield return false; | ||
782 | } | ||
783 | } | ||
784 | goto cutIf13; | ||
785 | } | ||
786 | foreach (bool l12 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
787 | { | ||
788 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
789 | { | ||
790 | yield return false; | ||
791 | } | ||
792 | } | ||
793 | cutIf13: | ||
794 | cutIf12: | ||
795 | cutIf11: | ||
796 | { } | ||
797 | } | ||
798 | goto cutIf10; | ||
799 | } | ||
800 | foreach (bool l10 in YP.unify(ReturnType, Atom.a(@"IEnumerable<bool>"))) | ||
801 | { | ||
802 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
803 | { | ||
804 | foreach (bool l12 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
805 | { | ||
806 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
807 | { | ||
808 | yield return false; | ||
809 | } | ||
810 | } | ||
811 | goto cutIf14; | ||
812 | } | ||
813 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
814 | { | ||
815 | foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) | ||
816 | { | ||
817 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
818 | { | ||
819 | yield return false; | ||
820 | } | ||
821 | } | ||
822 | goto cutIf15; | ||
823 | } | ||
824 | if (CompilerState.codeUsesYield(State)) | ||
825 | { | ||
826 | foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) | ||
827 | { | ||
828 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
829 | { | ||
830 | yield return false; | ||
831 | } | ||
832 | } | ||
833 | goto cutIf16; | ||
834 | } | ||
835 | foreach (bool l11 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
836 | { | ||
837 | foreach (bool l12 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
838 | { | ||
839 | yield return false; | ||
840 | } | ||
841 | } | ||
842 | cutIf16: | ||
843 | cutIf15: | ||
844 | cutIf14: | ||
845 | { } | ||
846 | } | ||
847 | cutIf10: | ||
848 | cutIf6: | ||
849 | { } | ||
850 | } | ||
851 | } | ||
852 | } | ||
853 | } | ||
854 | } | ||
855 | } | ||
856 | goto cutIf2; | ||
857 | } | ||
858 | foreach (bool l3 in YP.unify(Head, FirstRule)) | ||
859 | { | ||
860 | CompilerState.startFunction(State, Head); | ||
861 | FindallAnswers findallAnswers17 = new FindallAnswers(new Functor2(@"f", ArgAssignments, Calls)); | ||
862 | foreach (bool l4 in member(new Functor2(@"f", Rule, VariableNameSuggestions), SamePredicateRuleList)) | ||
863 | { | ||
864 | foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls)) | ||
865 | { | ||
866 | findallAnswers17.add(); | ||
867 | } | ||
868 | } | ||
869 | foreach (bool l4 in findallAnswers17.result(ClauseBag)) | ||
870 | { | ||
871 | foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList))) | ||
872 | { | ||
873 | foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames)) | ||
874 | { | ||
875 | FindallAnswers findallAnswers18 = new FindallAnswers(MergedArgName); | ||
876 | foreach (bool l7 in member(ArgName, FunctionArgNames)) | ||
877 | { | ||
878 | foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName)) | ||
879 | { | ||
880 | findallAnswers18.add(); | ||
881 | goto cutIf19; | ||
882 | } | ||
883 | foreach (bool l8 in YP.unify(MergedArgName, ArgName)) | ||
884 | { | ||
885 | findallAnswers18.add(); | ||
886 | } | ||
887 | cutIf19: | ||
888 | { } | ||
889 | } | ||
890 | foreach (bool l7 in findallAnswers18.result(MergedArgNames)) | ||
891 | { | ||
892 | foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs)) | ||
893 | { | ||
894 | foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode)) | ||
895 | { | ||
896 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
897 | { | ||
898 | foreach (bool l11 in YP.unify(ReturnType, Atom.a(@"void"))) | ||
899 | { | ||
900 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
901 | { | ||
902 | foreach (bool l13 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
903 | { | ||
904 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
905 | { | ||
906 | yield return false; | ||
907 | } | ||
908 | } | ||
909 | goto cutIf21; | ||
910 | } | ||
911 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
912 | { | ||
913 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
914 | { | ||
915 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
916 | { | ||
917 | yield return false; | ||
918 | } | ||
919 | } | ||
920 | goto cutIf22; | ||
921 | } | ||
922 | if (CompilerState.codeUsesYield(State)) | ||
923 | { | ||
924 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
925 | { | ||
926 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
927 | { | ||
928 | yield return false; | ||
929 | } | ||
930 | } | ||
931 | goto cutIf23; | ||
932 | } | ||
933 | foreach (bool l12 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
934 | { | ||
935 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
936 | { | ||
937 | yield return false; | ||
938 | } | ||
939 | } | ||
940 | cutIf23: | ||
941 | cutIf22: | ||
942 | cutIf21: | ||
943 | { } | ||
944 | } | ||
945 | goto cutIf20; | ||
946 | } | ||
947 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
948 | { | ||
949 | foreach (bool l11 in YP.unify(ReturnType, Atom.a(@"bool"))) | ||
950 | { | ||
951 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
952 | { | ||
953 | foreach (bool l13 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
954 | { | ||
955 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
956 | { | ||
957 | yield return false; | ||
958 | } | ||
959 | } | ||
960 | goto cutIf25; | ||
961 | } | ||
962 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
963 | { | ||
964 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
965 | { | ||
966 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
967 | { | ||
968 | yield return false; | ||
969 | } | ||
970 | } | ||
971 | goto cutIf26; | ||
972 | } | ||
973 | if (CompilerState.codeUsesYield(State)) | ||
974 | { | ||
975 | foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) | ||
976 | { | ||
977 | foreach (bool l14 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
978 | { | ||
979 | yield return false; | ||
980 | } | ||
981 | } | ||
982 | goto cutIf27; | ||
983 | } | ||
984 | foreach (bool l12 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
985 | { | ||
986 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
987 | { | ||
988 | yield return false; | ||
989 | } | ||
990 | } | ||
991 | cutIf27: | ||
992 | cutIf26: | ||
993 | cutIf25: | ||
994 | { } | ||
995 | } | ||
996 | goto cutIf24; | ||
997 | } | ||
998 | foreach (bool l10 in YP.unify(ReturnType, Atom.a(@"IEnumerable<bool>"))) | ||
999 | { | ||
1000 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
1001 | { | ||
1002 | foreach (bool l12 in append(BodyCode, new ListPair(Atom.a(@"returnfalse"), Atom.NIL), BodyWithReturn)) | ||
1003 | { | ||
1004 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
1005 | { | ||
1006 | yield return false; | ||
1007 | } | ||
1008 | } | ||
1009 | goto cutIf28; | ||
1010 | } | ||
1011 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
1012 | { | ||
1013 | foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) | ||
1014 | { | ||
1015 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
1016 | { | ||
1017 | yield return false; | ||
1018 | } | ||
1019 | } | ||
1020 | goto cutIf29; | ||
1021 | } | ||
1022 | if (CompilerState.codeUsesYield(State)) | ||
1023 | { | ||
1024 | foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) | ||
1025 | { | ||
1026 | foreach (bool l13 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
1027 | { | ||
1028 | yield return false; | ||
1029 | } | ||
1030 | } | ||
1031 | goto cutIf30; | ||
1032 | } | ||
1033 | foreach (bool l11 in append(BodyCode, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.fail"), Atom.NIL), new ListPair(Atom.a(@"yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) | ||
1034 | { | ||
1035 | foreach (bool l12 in YP.unify(FunctionCode, new Functor(@"function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) | ||
1036 | { | ||
1037 | yield return false; | ||
1038 | } | ||
1039 | } | ||
1040 | cutIf30: | ||
1041 | cutIf29: | ||
1042 | cutIf28: | ||
1043 | { } | ||
1044 | } | ||
1045 | cutIf24: | ||
1046 | cutIf20: | ||
1047 | { } | ||
1048 | } | ||
1049 | } | ||
1050 | } | ||
1051 | } | ||
1052 | } | ||
1053 | } | ||
1054 | } | ||
1055 | cutIf2: | ||
1056 | cutIf1: | ||
1057 | { } | ||
1058 | } | ||
1059 | } | ||
1060 | } | ||
1061 | |||
1062 | public static IEnumerable<bool> samePredicateRuleList(object arg1, object arg2, object arg3) | ||
1063 | { | ||
1064 | { | ||
1065 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1066 | { | ||
1067 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
1068 | { | ||
1069 | foreach (bool l4 in YP.unify(arg3, Atom.NIL)) | ||
1070 | { | ||
1071 | yield return true; | ||
1072 | yield break; | ||
1073 | } | ||
1074 | } | ||
1075 | } | ||
1076 | } | ||
1077 | { | ||
1078 | Variable First = new Variable(); | ||
1079 | foreach (bool l2 in YP.unify(arg1, new ListPair(First, Atom.NIL))) | ||
1080 | { | ||
1081 | foreach (bool l3 in YP.unify(arg2, new ListPair(First, Atom.NIL))) | ||
1082 | { | ||
1083 | foreach (bool l4 in YP.unify(arg3, Atom.NIL)) | ||
1084 | { | ||
1085 | yield return true; | ||
1086 | yield break; | ||
1087 | } | ||
1088 | } | ||
1089 | } | ||
1090 | } | ||
1091 | { | ||
1092 | object SamePredicateRuleList = arg2; | ||
1093 | object RestRules = arg3; | ||
1094 | Variable First = new Variable(); | ||
1095 | Variable Rest = new Variable(); | ||
1096 | Variable FirstRule = new Variable(); | ||
1097 | Variable x6 = new Variable(); | ||
1098 | Variable SecondRule = new Variable(); | ||
1099 | Variable x8 = new Variable(); | ||
1100 | Variable x9 = new Variable(); | ||
1101 | Variable FirstHead = new Variable(); | ||
1102 | Variable x11 = new Variable(); | ||
1103 | Variable SecondHead = new Variable(); | ||
1104 | Variable x13 = new Variable(); | ||
1105 | Variable Name = new Variable(); | ||
1106 | Variable Arity = new Variable(); | ||
1107 | Variable RestSamePredicates = new Variable(); | ||
1108 | foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) | ||
1109 | { | ||
1110 | foreach (bool l3 in YP.unify(new Functor2(@"f", FirstRule, x6), First)) | ||
1111 | { | ||
1112 | foreach (bool l4 in YP.unify(new ListPair(new Functor2(@"f", SecondRule, x8), x9), Rest)) | ||
1113 | { | ||
1114 | foreach (bool l5 in YP.unify(new Functor2(@":-", FirstHead, x11), FirstRule)) | ||
1115 | { | ||
1116 | foreach (bool l6 in YP.unify(new Functor2(@":-", SecondHead, x13), SecondRule)) | ||
1117 | { | ||
1118 | foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) | ||
1119 | { | ||
1120 | foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) | ||
1121 | { | ||
1122 | foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) | ||
1123 | { | ||
1124 | foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) | ||
1125 | { | ||
1126 | yield return true; | ||
1127 | yield break; | ||
1128 | } | ||
1129 | } | ||
1130 | goto cutIf3; | ||
1131 | } | ||
1132 | foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) | ||
1133 | { | ||
1134 | foreach (bool l9 in YP.unify(RestRules, Rest)) | ||
1135 | { | ||
1136 | yield return true; | ||
1137 | yield break; | ||
1138 | } | ||
1139 | } | ||
1140 | cutIf3: | ||
1141 | { } | ||
1142 | } | ||
1143 | goto cutIf2; | ||
1144 | } | ||
1145 | foreach (bool l6 in YP.unify(SecondHead, SecondRule)) | ||
1146 | { | ||
1147 | foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) | ||
1148 | { | ||
1149 | foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) | ||
1150 | { | ||
1151 | foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) | ||
1152 | { | ||
1153 | foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) | ||
1154 | { | ||
1155 | yield return true; | ||
1156 | yield break; | ||
1157 | } | ||
1158 | } | ||
1159 | goto cutIf4; | ||
1160 | } | ||
1161 | foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) | ||
1162 | { | ||
1163 | foreach (bool l9 in YP.unify(RestRules, Rest)) | ||
1164 | { | ||
1165 | yield return true; | ||
1166 | yield break; | ||
1167 | } | ||
1168 | } | ||
1169 | cutIf4: | ||
1170 | { } | ||
1171 | } | ||
1172 | } | ||
1173 | cutIf2: | ||
1174 | goto cutIf1; | ||
1175 | } | ||
1176 | foreach (bool l5 in YP.unify(FirstHead, FirstRule)) | ||
1177 | { | ||
1178 | foreach (bool l6 in YP.unify(new Functor2(@":-", SecondHead, x13), SecondRule)) | ||
1179 | { | ||
1180 | foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) | ||
1181 | { | ||
1182 | foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) | ||
1183 | { | ||
1184 | foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) | ||
1185 | { | ||
1186 | foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) | ||
1187 | { | ||
1188 | yield return true; | ||
1189 | yield break; | ||
1190 | } | ||
1191 | } | ||
1192 | goto cutIf6; | ||
1193 | } | ||
1194 | foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) | ||
1195 | { | ||
1196 | foreach (bool l9 in YP.unify(RestRules, Rest)) | ||
1197 | { | ||
1198 | yield return true; | ||
1199 | yield break; | ||
1200 | } | ||
1201 | } | ||
1202 | cutIf6: | ||
1203 | { } | ||
1204 | } | ||
1205 | goto cutIf5; | ||
1206 | } | ||
1207 | foreach (bool l6 in YP.unify(SecondHead, SecondRule)) | ||
1208 | { | ||
1209 | foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) | ||
1210 | { | ||
1211 | foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) | ||
1212 | { | ||
1213 | foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) | ||
1214 | { | ||
1215 | foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) | ||
1216 | { | ||
1217 | yield return true; | ||
1218 | yield break; | ||
1219 | } | ||
1220 | } | ||
1221 | goto cutIf7; | ||
1222 | } | ||
1223 | foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) | ||
1224 | { | ||
1225 | foreach (bool l9 in YP.unify(RestRules, Rest)) | ||
1226 | { | ||
1227 | yield return true; | ||
1228 | yield break; | ||
1229 | } | ||
1230 | } | ||
1231 | cutIf7: | ||
1232 | { } | ||
1233 | } | ||
1234 | } | ||
1235 | cutIf5: | ||
1236 | { } | ||
1237 | } | ||
1238 | cutIf1: | ||
1239 | { } | ||
1240 | } | ||
1241 | } | ||
1242 | } | ||
1243 | } | ||
1244 | } | ||
1245 | |||
1246 | public static IEnumerable<bool> maplist_compileClause(object arg1, object arg2, object arg3) | ||
1247 | { | ||
1248 | { | ||
1249 | object _MergedArgNames = arg2; | ||
1250 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1251 | { | ||
1252 | foreach (bool l3 in YP.unify(arg3, Atom.NIL)) | ||
1253 | { | ||
1254 | yield return true; | ||
1255 | yield break; | ||
1256 | } | ||
1257 | } | ||
1258 | } | ||
1259 | { | ||
1260 | object MergedArgNames = arg2; | ||
1261 | Variable ArgAssignments = new Variable(); | ||
1262 | Variable Calls = new Variable(); | ||
1263 | Variable Rest = new Variable(); | ||
1264 | Variable ClauseCode = new Variable(); | ||
1265 | Variable RestResults = new Variable(); | ||
1266 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", ArgAssignments, Calls), Rest))) | ||
1267 | { | ||
1268 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1(@"blockScope", ClauseCode), RestResults))) | ||
1269 | { | ||
1270 | foreach (bool l4 in prependArgAssignments(ArgAssignments, Calls, MergedArgNames, ClauseCode)) | ||
1271 | { | ||
1272 | foreach (bool l5 in maplist_compileClause(Rest, MergedArgNames, RestResults)) | ||
1273 | { | ||
1274 | yield return true; | ||
1275 | yield break; | ||
1276 | } | ||
1277 | } | ||
1278 | } | ||
1279 | } | ||
1280 | } | ||
1281 | } | ||
1282 | |||
1283 | public static IEnumerable<bool> prependArgAssignments(object arg1, object arg2, object arg3, object arg4) | ||
1284 | { | ||
1285 | { | ||
1286 | object _MergedArgNames = arg3; | ||
1287 | Variable In = new Variable(); | ||
1288 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1289 | { | ||
1290 | foreach (bool l3 in YP.unify(arg2, In)) | ||
1291 | { | ||
1292 | foreach (bool l4 in YP.unify(arg4, In)) | ||
1293 | { | ||
1294 | yield return true; | ||
1295 | yield break; | ||
1296 | } | ||
1297 | } | ||
1298 | } | ||
1299 | } | ||
1300 | { | ||
1301 | object In = arg2; | ||
1302 | object MergedArgNames = arg3; | ||
1303 | object ClauseCode = arg4; | ||
1304 | Variable VariableName = new Variable(); | ||
1305 | Variable ArgName = new Variable(); | ||
1306 | Variable RestArgAssignments = new Variable(); | ||
1307 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"f", VariableName, ArgName), RestArgAssignments))) | ||
1308 | { | ||
1309 | foreach (bool l3 in member(VariableName, MergedArgNames)) | ||
1310 | { | ||
1311 | foreach (bool l4 in prependArgAssignments(RestArgAssignments, In, MergedArgNames, ClauseCode)) | ||
1312 | { | ||
1313 | yield return true; | ||
1314 | yield break; | ||
1315 | } | ||
1316 | goto cutIf1; | ||
1317 | } | ||
1318 | foreach (bool l3 in prependArgAssignments(RestArgAssignments, new ListPair(new Functor3(@"declare", Atom.a(@"object"), VariableName, new Functor1(@"var", ArgName)), In), MergedArgNames, ClauseCode)) | ||
1319 | { | ||
1320 | yield return true; | ||
1321 | yield break; | ||
1322 | } | ||
1323 | cutIf1: | ||
1324 | { } | ||
1325 | } | ||
1326 | } | ||
1327 | } | ||
1328 | |||
1329 | public static IEnumerable<bool> argAssignedAll(object arg1, object arg2, object VariableName) | ||
1330 | { | ||
1331 | { | ||
1332 | object _ArgName = arg1; | ||
1333 | foreach (bool l2 in YP.unify(arg2, Atom.NIL)) | ||
1334 | { | ||
1335 | if (YP.nonvar(VariableName)) | ||
1336 | { | ||
1337 | yield return true; | ||
1338 | yield break; | ||
1339 | } | ||
1340 | } | ||
1341 | } | ||
1342 | { | ||
1343 | object ArgName = arg1; | ||
1344 | Variable ArgAssignments = new Variable(); | ||
1345 | Variable _Calls = new Variable(); | ||
1346 | Variable RestClauseBag = new Variable(); | ||
1347 | foreach (bool l2 in YP.unify(arg2, new ListPair(new Functor2(@"f", ArgAssignments, _Calls), RestClauseBag))) | ||
1348 | { | ||
1349 | foreach (bool l3 in member(new Functor2(@"f", VariableName, ArgName), ArgAssignments)) | ||
1350 | { | ||
1351 | foreach (bool l4 in argAssignedAll(ArgName, RestClauseBag, VariableName)) | ||
1352 | { | ||
1353 | yield return false; | ||
1354 | } | ||
1355 | } | ||
1356 | } | ||
1357 | } | ||
1358 | } | ||
1359 | |||
1360 | public static IEnumerable<bool> maplist_arg(object arg1, object arg2) | ||
1361 | { | ||
1362 | { | ||
1363 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1364 | { | ||
1365 | foreach (bool l3 in YP.unify(arg2, Atom.NIL)) | ||
1366 | { | ||
1367 | yield return true; | ||
1368 | yield break; | ||
1369 | } | ||
1370 | } | ||
1371 | } | ||
1372 | { | ||
1373 | Variable First = new Variable(); | ||
1374 | Variable Rest = new Variable(); | ||
1375 | Variable RestResults = new Variable(); | ||
1376 | foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) | ||
1377 | { | ||
1378 | foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1(@"arg", First), RestResults))) | ||
1379 | { | ||
1380 | foreach (bool l4 in maplist_arg(Rest, RestResults)) | ||
1381 | { | ||
1382 | yield return true; | ||
1383 | yield break; | ||
1384 | } | ||
1385 | } | ||
1386 | } | ||
1387 | } | ||
1388 | } | ||
1389 | |||
1390 | public static IEnumerable<bool> getFunctionArgNames(object arg1, object arg2, object arg3) | ||
1391 | { | ||
1392 | { | ||
1393 | object _StartArgNumber = arg2; | ||
1394 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1395 | { | ||
1396 | foreach (bool l3 in YP.unify(arg3, Atom.NIL)) | ||
1397 | { | ||
1398 | yield return true; | ||
1399 | yield break; | ||
1400 | } | ||
1401 | } | ||
1402 | } | ||
1403 | { | ||
1404 | object StartArgNumber = arg2; | ||
1405 | Variable x1 = new Variable(); | ||
1406 | Variable Rest = new Variable(); | ||
1407 | Variable ArgName = new Variable(); | ||
1408 | Variable RestFunctionArgs = new Variable(); | ||
1409 | Variable NumberCodes = new Variable(); | ||
1410 | Variable NumberAtom = new Variable(); | ||
1411 | Variable NextArgNumber = new Variable(); | ||
1412 | foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Rest))) | ||
1413 | { | ||
1414 | foreach (bool l3 in YP.unify(arg3, new ListPair(ArgName, RestFunctionArgs))) | ||
1415 | { | ||
1416 | foreach (bool l4 in YP.number_codes(StartArgNumber, NumberCodes)) | ||
1417 | { | ||
1418 | foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes)) | ||
1419 | { | ||
1420 | foreach (bool l6 in YP.atom_concat(Atom.a(@"arg"), NumberAtom, ArgName)) | ||
1421 | { | ||
1422 | foreach (bool l7 in YP.unify(NextArgNumber, YP.add(StartArgNumber, 1))) | ||
1423 | { | ||
1424 | foreach (bool l8 in getFunctionArgNames(Rest, NextArgNumber, RestFunctionArgs)) | ||
1425 | { | ||
1426 | yield return true; | ||
1427 | yield break; | ||
1428 | } | ||
1429 | } | ||
1430 | } | ||
1431 | } | ||
1432 | } | ||
1433 | } | ||
1434 | } | ||
1435 | } | ||
1436 | } | ||
1437 | |||
1438 | public static IEnumerable<bool> compileBodyWithHeadBindings(object Rule, object VariableNameSuggestions, object State, object ArgAssignments, object Calls) | ||
1439 | { | ||
1440 | { | ||
1441 | Variable Head = new Variable(); | ||
1442 | Variable Body = new Variable(); | ||
1443 | Variable x8 = new Variable(); | ||
1444 | Variable HeadArgs = new Variable(); | ||
1445 | Variable CompiledHeadArgs = new Variable(); | ||
1446 | Variable BodyCode = new Variable(); | ||
1447 | Variable VariableNamesList = new Variable(); | ||
1448 | Variable ArgUnifications = new Variable(); | ||
1449 | foreach (bool l2 in YP.unify(new Functor2(@":-", Head, Body), Rule)) | ||
1450 | { | ||
1451 | CompilerState.newVariableNames(State, Rule, VariableNameSuggestions); | ||
1452 | foreach (bool l3 in YP.univ(Head, new ListPair(x8, HeadArgs))) | ||
1453 | { | ||
1454 | foreach (bool l4 in maplist_compileTerm(HeadArgs, State, CompiledHeadArgs)) | ||
1455 | { | ||
1456 | foreach (bool l5 in compileRuleBody(Body, State, BodyCode)) | ||
1457 | { | ||
1458 | foreach (bool l6 in CompilerState.variableNamesList(State, VariableNamesList)) | ||
1459 | { | ||
1460 | foreach (bool l7 in compileArgUnifications(HeadArgs, CompiledHeadArgs, 1, HeadArgs, BodyCode, ArgUnifications)) | ||
1461 | { | ||
1462 | foreach (bool l8 in compileDeclarations(VariableNamesList, HeadArgs, Atom.NIL, ArgAssignments, ArgUnifications, Calls)) | ||
1463 | { | ||
1464 | yield return true; | ||
1465 | yield break; | ||
1466 | } | ||
1467 | } | ||
1468 | } | ||
1469 | } | ||
1470 | } | ||
1471 | } | ||
1472 | } | ||
1473 | } | ||
1474 | { | ||
1475 | foreach (bool l2 in compileBodyWithHeadBindings(new Functor2(@":-", Rule, Atom.a(@"true")), VariableNameSuggestions, State, ArgAssignments, Calls)) | ||
1476 | { | ||
1477 | yield return true; | ||
1478 | yield break; | ||
1479 | } | ||
1480 | } | ||
1481 | } | ||
1482 | |||
1483 | public static IEnumerable<bool> compileArgUnifications(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) | ||
1484 | { | ||
1485 | { | ||
1486 | object x1 = arg2; | ||
1487 | object x2 = arg3; | ||
1488 | object x3 = arg4; | ||
1489 | Variable BodyCode = new Variable(); | ||
1490 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1491 | { | ||
1492 | foreach (bool l3 in YP.unify(arg5, BodyCode)) | ||
1493 | { | ||
1494 | foreach (bool l4 in YP.unify(arg6, BodyCode)) | ||
1495 | { | ||
1496 | yield return true; | ||
1497 | yield break; | ||
1498 | } | ||
1499 | } | ||
1500 | } | ||
1501 | } | ||
1502 | { | ||
1503 | object Index = arg3; | ||
1504 | object AllHeadArgs = arg4; | ||
1505 | object BodyCode = arg5; | ||
1506 | object ArgUnifications = arg6; | ||
1507 | Variable HeadArg = new Variable(); | ||
1508 | Variable RestHeadArgs = new Variable(); | ||
1509 | Variable x3 = new Variable(); | ||
1510 | Variable RestCompiledHeadArgs = new Variable(); | ||
1511 | Variable _ArgIndex1 = new Variable(); | ||
1512 | Variable NextIndex = new Variable(); | ||
1513 | foreach (bool l2 in YP.unify(arg1, new ListPair(HeadArg, RestHeadArgs))) | ||
1514 | { | ||
1515 | foreach (bool l3 in YP.unify(arg2, new ListPair(x3, RestCompiledHeadArgs))) | ||
1516 | { | ||
1517 | foreach (bool l4 in getVariableArgIndex1(HeadArg, AllHeadArgs, _ArgIndex1)) | ||
1518 | { | ||
1519 | foreach (bool l5 in YP.unify(NextIndex, YP.add(Index, 1))) | ||
1520 | { | ||
1521 | foreach (bool l6 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, ArgUnifications)) | ||
1522 | { | ||
1523 | yield return true; | ||
1524 | yield break; | ||
1525 | } | ||
1526 | } | ||
1527 | } | ||
1528 | } | ||
1529 | } | ||
1530 | } | ||
1531 | { | ||
1532 | object Index = arg3; | ||
1533 | object AllHeadArgs = arg4; | ||
1534 | object BodyCode = arg5; | ||
1535 | Variable _HeadArg = new Variable(); | ||
1536 | Variable RestHeadArgs = new Variable(); | ||
1537 | Variable CompiledHeadArg = new Variable(); | ||
1538 | Variable RestCompiledHeadArgs = new Variable(); | ||
1539 | Variable ArgName = new Variable(); | ||
1540 | Variable RestArgUnifications = new Variable(); | ||
1541 | Variable NumberCodes = new Variable(); | ||
1542 | Variable NumberAtom = new Variable(); | ||
1543 | Variable NextIndex = new Variable(); | ||
1544 | foreach (bool l2 in YP.unify(arg1, new ListPair(_HeadArg, RestHeadArgs))) | ||
1545 | { | ||
1546 | foreach (bool l3 in YP.unify(arg2, new ListPair(CompiledHeadArg, RestCompiledHeadArgs))) | ||
1547 | { | ||
1548 | foreach (bool l4 in YP.unify(arg6, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.unify"), new ListPair(new Functor1(@"var", ArgName), new ListPair(CompiledHeadArg, Atom.NIL))), RestArgUnifications), Atom.NIL))) | ||
1549 | { | ||
1550 | foreach (bool l5 in YP.number_codes(Index, NumberCodes)) | ||
1551 | { | ||
1552 | foreach (bool l6 in YP.atom_codes(NumberAtom, NumberCodes)) | ||
1553 | { | ||
1554 | foreach (bool l7 in YP.atom_concat(Atom.a(@"arg"), NumberAtom, ArgName)) | ||
1555 | { | ||
1556 | foreach (bool l8 in YP.unify(NextIndex, YP.add(Index, 1))) | ||
1557 | { | ||
1558 | foreach (bool l9 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, RestArgUnifications)) | ||
1559 | { | ||
1560 | yield return true; | ||
1561 | yield break; | ||
1562 | } | ||
1563 | } | ||
1564 | } | ||
1565 | } | ||
1566 | } | ||
1567 | } | ||
1568 | } | ||
1569 | } | ||
1570 | } | ||
1571 | } | ||
1572 | |||
1573 | public static IEnumerable<bool> compileDeclarations(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) | ||
1574 | { | ||
1575 | { | ||
1576 | object _HeadArgs = arg2; | ||
1577 | Variable ArgAssignmentsIn = new Variable(); | ||
1578 | Variable DeclarationsIn = new Variable(); | ||
1579 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
1580 | { | ||
1581 | foreach (bool l3 in YP.unify(arg3, ArgAssignmentsIn)) | ||
1582 | { | ||
1583 | foreach (bool l4 in YP.unify(arg4, ArgAssignmentsIn)) | ||
1584 | { | ||
1585 | foreach (bool l5 in YP.unify(arg5, DeclarationsIn)) | ||
1586 | { | ||
1587 | foreach (bool l6 in YP.unify(arg6, DeclarationsIn)) | ||
1588 | { | ||
1589 | yield return true; | ||
1590 | yield break; | ||
1591 | } | ||
1592 | } | ||
1593 | } | ||
1594 | } | ||
1595 | } | ||
1596 | } | ||
1597 | { | ||
1598 | object HeadArgs = arg2; | ||
1599 | object ArgAssignmentsIn = arg3; | ||
1600 | object ArgAssignmentsOut = arg4; | ||
1601 | object DeclarationsIn = arg5; | ||
1602 | object DeclarationsOut = arg6; | ||
1603 | Variable VariableName = new Variable(); | ||
1604 | Variable Var = new Variable(); | ||
1605 | Variable RestVariableNames = new Variable(); | ||
1606 | Variable ArgIndex1 = new Variable(); | ||
1607 | Variable NumberCodes = new Variable(); | ||
1608 | Variable NumberAtom = new Variable(); | ||
1609 | Variable ArgName = new Variable(); | ||
1610 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"=", VariableName, Var), RestVariableNames))) | ||
1611 | { | ||
1612 | foreach (bool l3 in getVariableArgIndex1(Var, HeadArgs, ArgIndex1)) | ||
1613 | { | ||
1614 | foreach (bool l4 in YP.number_codes(ArgIndex1, NumberCodes)) | ||
1615 | { | ||
1616 | foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes)) | ||
1617 | { | ||
1618 | foreach (bool l6 in YP.atom_concat(Atom.a(@"arg"), NumberAtom, ArgName)) | ||
1619 | { | ||
1620 | foreach (bool l7 in compileDeclarations(RestVariableNames, HeadArgs, new ListPair(new Functor2(@"f", VariableName, ArgName), ArgAssignmentsIn), ArgAssignmentsOut, DeclarationsIn, DeclarationsOut)) | ||
1621 | { | ||
1622 | yield return true; | ||
1623 | yield break; | ||
1624 | } | ||
1625 | } | ||
1626 | } | ||
1627 | } | ||
1628 | } | ||
1629 | } | ||
1630 | } | ||
1631 | { | ||
1632 | object HeadArgs = arg2; | ||
1633 | object ArgAssignmentsIn = arg3; | ||
1634 | object ArgAssignmentsOut = arg4; | ||
1635 | object DeclarationsIn = arg5; | ||
1636 | Variable VariableName = new Variable(); | ||
1637 | Variable _Var = new Variable(); | ||
1638 | Variable RestVariableNames = new Variable(); | ||
1639 | Variable DeclarationsOut = new Variable(); | ||
1640 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"=", VariableName, _Var), RestVariableNames))) | ||
1641 | { | ||
1642 | foreach (bool l3 in YP.unify(arg6, new ListPair(new Functor3(@"declare", Atom.a(@"Variable"), VariableName, new Functor2(@"new", Atom.a(@"Variable"), Atom.NIL)), DeclarationsOut))) | ||
1643 | { | ||
1644 | foreach (bool l4 in compileDeclarations(RestVariableNames, HeadArgs, ArgAssignmentsIn, ArgAssignmentsOut, DeclarationsIn, DeclarationsOut)) | ||
1645 | { | ||
1646 | yield return true; | ||
1647 | yield break; | ||
1648 | } | ||
1649 | } | ||
1650 | } | ||
1651 | } | ||
1652 | } | ||
1653 | |||
1654 | public static IEnumerable<bool> getVariableArgIndex1(object Var, object arg2, object arg3) | ||
1655 | { | ||
1656 | { | ||
1657 | Variable FirstHeadArgs = new Variable(); | ||
1658 | Variable RestHeadArgs = new Variable(); | ||
1659 | Variable x4 = new Variable(); | ||
1660 | foreach (bool l2 in YP.unify(arg2, new ListPair(FirstHeadArgs, RestHeadArgs))) | ||
1661 | { | ||
1662 | foreach (bool l3 in YP.unify(arg3, 1)) | ||
1663 | { | ||
1664 | if (sameVariable(Var, FirstHeadArgs)) | ||
1665 | { | ||
1666 | foreach (bool l5 in getVariableArgIndex1(Var, RestHeadArgs, x4)) | ||
1667 | { | ||
1668 | goto cutIf1; | ||
1669 | } | ||
1670 | yield return false; | ||
1671 | cutIf1: | ||
1672 | yield break; | ||
1673 | } | ||
1674 | } | ||
1675 | } | ||
1676 | } | ||
1677 | { | ||
1678 | object Index = arg3; | ||
1679 | Variable x2 = new Variable(); | ||
1680 | Variable RestHeadArgs = new Variable(); | ||
1681 | Variable RestIndex = new Variable(); | ||
1682 | foreach (bool l2 in YP.unify(arg2, new ListPair(x2, RestHeadArgs))) | ||
1683 | { | ||
1684 | foreach (bool l3 in getVariableArgIndex1(Var, RestHeadArgs, RestIndex)) | ||
1685 | { | ||
1686 | foreach (bool l4 in YP.unify(Index, YP.add(1, RestIndex))) | ||
1687 | { | ||
1688 | yield return true; | ||
1689 | yield break; | ||
1690 | } | ||
1691 | } | ||
1692 | } | ||
1693 | } | ||
1694 | } | ||
1695 | |||
1696 | public static IEnumerable<bool> compileRuleBody(object arg1, object arg2, object arg3) | ||
1697 | { | ||
1698 | { | ||
1699 | object A = arg1; | ||
1700 | object State = arg2; | ||
1701 | object PseudoCode = arg3; | ||
1702 | if (YP.var(A)) | ||
1703 | { | ||
1704 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor1(@"call", A), Atom.a(@"true")), State, PseudoCode)) | ||
1705 | { | ||
1706 | yield return true; | ||
1707 | yield break; | ||
1708 | } | ||
1709 | } | ||
1710 | } | ||
1711 | { | ||
1712 | object State = arg2; | ||
1713 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"!"))) | ||
1714 | { | ||
1715 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"return"), Atom.NIL))) | ||
1716 | { | ||
1717 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
1718 | { | ||
1719 | yield return true; | ||
1720 | yield break; | ||
1721 | } | ||
1722 | } | ||
1723 | } | ||
1724 | } | ||
1725 | { | ||
1726 | object State = arg2; | ||
1727 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"!"))) | ||
1728 | { | ||
1729 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"returntrue"), Atom.NIL))) | ||
1730 | { | ||
1731 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
1732 | { | ||
1733 | yield return true; | ||
1734 | yield break; | ||
1735 | } | ||
1736 | } | ||
1737 | } | ||
1738 | } | ||
1739 | { | ||
1740 | object State = arg2; | ||
1741 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"!"))) | ||
1742 | { | ||
1743 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"yieldtrue"), new ListPair(Atom.a(@"yieldbreak"), Atom.NIL)))) | ||
1744 | { | ||
1745 | CompilerState.setCodeUsesYield(State); | ||
1746 | yield return true; | ||
1747 | yield break; | ||
1748 | } | ||
1749 | } | ||
1750 | } | ||
1751 | { | ||
1752 | object _State = arg2; | ||
1753 | Variable Name = new Variable(); | ||
1754 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"$CUTIF", Name))) | ||
1755 | { | ||
1756 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1(@"breakBlock", Name), Atom.NIL))) | ||
1757 | { | ||
1758 | yield return true; | ||
1759 | yield break; | ||
1760 | } | ||
1761 | } | ||
1762 | } | ||
1763 | { | ||
1764 | object State = arg2; | ||
1765 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"true"))) | ||
1766 | { | ||
1767 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"return"), Atom.NIL))) | ||
1768 | { | ||
1769 | if (CompilerState.determinismEquals(State, Atom.a(@"detNoneOut"))) | ||
1770 | { | ||
1771 | yield return true; | ||
1772 | yield break; | ||
1773 | } | ||
1774 | } | ||
1775 | } | ||
1776 | } | ||
1777 | { | ||
1778 | object State = arg2; | ||
1779 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"true"))) | ||
1780 | { | ||
1781 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"returntrue"), Atom.NIL))) | ||
1782 | { | ||
1783 | if (CompilerState.determinismEquals(State, Atom.a(@"semidetNoneOut"))) | ||
1784 | { | ||
1785 | yield return true; | ||
1786 | yield break; | ||
1787 | } | ||
1788 | } | ||
1789 | } | ||
1790 | } | ||
1791 | { | ||
1792 | object State = arg2; | ||
1793 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"true"))) | ||
1794 | { | ||
1795 | foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(@"yieldfalse"), Atom.NIL))) | ||
1796 | { | ||
1797 | CompilerState.setCodeUsesYield(State); | ||
1798 | yield return true; | ||
1799 | yield break; | ||
1800 | } | ||
1801 | } | ||
1802 | } | ||
1803 | { | ||
1804 | object State = arg2; | ||
1805 | object PseudoCode = arg3; | ||
1806 | Variable A = new Variable(); | ||
1807 | Variable B = new Variable(); | ||
1808 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
1809 | { | ||
1810 | if (YP.var(A)) | ||
1811 | { | ||
1812 | foreach (bool l4 in compileRuleBody(new Functor2(@",", new Functor1(@"call", A), B), State, PseudoCode)) | ||
1813 | { | ||
1814 | yield return true; | ||
1815 | yield break; | ||
1816 | } | ||
1817 | } | ||
1818 | } | ||
1819 | } | ||
1820 | { | ||
1821 | object State = arg2; | ||
1822 | object PseudoCode = arg3; | ||
1823 | Variable A = new Variable(); | ||
1824 | Variable T = new Variable(); | ||
1825 | Variable B = new Variable(); | ||
1826 | Variable C = new Variable(); | ||
1827 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@";", new Functor2(@"->", A, T), B), C))) | ||
1828 | { | ||
1829 | foreach (bool l3 in compileRuleBody(new Functor2(@";", new Functor2(@"->", A, new Functor2(@",", T, C)), new Functor2(@",", B, C)), State, PseudoCode)) | ||
1830 | { | ||
1831 | yield return true; | ||
1832 | yield break; | ||
1833 | } | ||
1834 | } | ||
1835 | } | ||
1836 | { | ||
1837 | object State = arg2; | ||
1838 | object PseudoCode = arg3; | ||
1839 | Variable A = new Variable(); | ||
1840 | Variable B = new Variable(); | ||
1841 | Variable C = new Variable(); | ||
1842 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@";", A, B), C))) | ||
1843 | { | ||
1844 | foreach (bool l3 in compileRuleBody(new Functor2(@";", new Functor2(@",", A, C), new Functor2(@",", B, C)), State, PseudoCode)) | ||
1845 | { | ||
1846 | yield return true; | ||
1847 | yield break; | ||
1848 | } | ||
1849 | } | ||
1850 | } | ||
1851 | { | ||
1852 | object State = arg2; | ||
1853 | Variable A = new Variable(); | ||
1854 | Variable B = new Variable(); | ||
1855 | Variable ACode = new Variable(); | ||
1856 | Variable BCode = new Variable(); | ||
1857 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"\+", A), B))) | ||
1858 | { | ||
1859 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"if", new Functor1(@"not", ACode), BCode), Atom.NIL))) | ||
1860 | { | ||
1861 | if (CompilerState.isSemidetNoneOut(State, A)) | ||
1862 | { | ||
1863 | foreach (bool l5 in compileFunctorCall(A, State, ACode)) | ||
1864 | { | ||
1865 | foreach (bool l6 in compileRuleBody(B, State, BCode)) | ||
1866 | { | ||
1867 | yield return true; | ||
1868 | yield break; | ||
1869 | } | ||
1870 | } | ||
1871 | } | ||
1872 | } | ||
1873 | } | ||
1874 | } | ||
1875 | { | ||
1876 | object State = arg2; | ||
1877 | object PseudoCode = arg3; | ||
1878 | Variable A = new Variable(); | ||
1879 | Variable B = new Variable(); | ||
1880 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"\+", A), B))) | ||
1881 | { | ||
1882 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor2(@";", new Functor2(@"->", A, Atom.a(@"fail")), Atom.a(@"true")), B), State, PseudoCode)) | ||
1883 | { | ||
1884 | yield return true; | ||
1885 | yield break; | ||
1886 | } | ||
1887 | } | ||
1888 | } | ||
1889 | { | ||
1890 | object State = arg2; | ||
1891 | object PseudoCode = arg3; | ||
1892 | Variable A = new Variable(); | ||
1893 | Variable B = new Variable(); | ||
1894 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"once", A), B))) | ||
1895 | { | ||
1896 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor2(@";", new Functor2(@"->", A, Atom.a(@"true")), Atom.a(@"fail")), B), State, PseudoCode)) | ||
1897 | { | ||
1898 | yield return true; | ||
1899 | yield break; | ||
1900 | } | ||
1901 | } | ||
1902 | } | ||
1903 | { | ||
1904 | object State = arg2; | ||
1905 | object PseudoCode = arg3; | ||
1906 | Variable A = new Variable(); | ||
1907 | Variable T = new Variable(); | ||
1908 | Variable B = new Variable(); | ||
1909 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@"->", A, T), B))) | ||
1910 | { | ||
1911 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor2(@";", new Functor2(@"->", A, T), Atom.a(@"fail")), B), State, PseudoCode)) | ||
1912 | { | ||
1913 | yield return true; | ||
1914 | yield break; | ||
1915 | } | ||
1916 | } | ||
1917 | } | ||
1918 | { | ||
1919 | object State = arg2; | ||
1920 | object PseudoCode = arg3; | ||
1921 | Variable A = new Variable(); | ||
1922 | Variable B = new Variable(); | ||
1923 | Variable C = new Variable(); | ||
1924 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@"\=", A, B), C))) | ||
1925 | { | ||
1926 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor1(@"\+", new Functor2(@"=", A, B)), C), State, PseudoCode)) | ||
1927 | { | ||
1928 | yield return true; | ||
1929 | yield break; | ||
1930 | } | ||
1931 | } | ||
1932 | } | ||
1933 | { | ||
1934 | object State = arg2; | ||
1935 | object PseudoCode = arg3; | ||
1936 | Variable A = new Variable(); | ||
1937 | Variable ACode = new Variable(); | ||
1938 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", Atom.a(@"!"), A))) | ||
1939 | { | ||
1940 | foreach (bool l3 in compileRuleBody(A, State, ACode)) | ||
1941 | { | ||
1942 | foreach (bool l4 in append(ACode, new ListPair(Atom.a(@"yieldbreak"), Atom.NIL), PseudoCode)) | ||
1943 | { | ||
1944 | yield return true; | ||
1945 | yield break; | ||
1946 | } | ||
1947 | } | ||
1948 | } | ||
1949 | } | ||
1950 | { | ||
1951 | object State = arg2; | ||
1952 | object PseudoCode = arg3; | ||
1953 | Variable Name = new Variable(); | ||
1954 | Variable A = new Variable(); | ||
1955 | Variable ACode = new Variable(); | ||
1956 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"$CUTIF", Name), A))) | ||
1957 | { | ||
1958 | foreach (bool l3 in compileRuleBody(A, State, ACode)) | ||
1959 | { | ||
1960 | foreach (bool l4 in append(ACode, new ListPair(new Functor1(@"breakBlock", Name), Atom.NIL), PseudoCode)) | ||
1961 | { | ||
1962 | yield return true; | ||
1963 | yield break; | ||
1964 | } | ||
1965 | } | ||
1966 | } | ||
1967 | } | ||
1968 | { | ||
1969 | object _State = arg2; | ||
1970 | Variable x1 = new Variable(); | ||
1971 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", Atom.a(@"fail"), x1))) | ||
1972 | { | ||
1973 | foreach (bool l3 in YP.unify(arg3, Atom.NIL)) | ||
1974 | { | ||
1975 | yield return true; | ||
1976 | yield break; | ||
1977 | } | ||
1978 | } | ||
1979 | } | ||
1980 | { | ||
1981 | object State = arg2; | ||
1982 | object PseudoCode = arg3; | ||
1983 | Variable A = new Variable(); | ||
1984 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", Atom.a(@"true"), A))) | ||
1985 | { | ||
1986 | foreach (bool l3 in compileRuleBody(A, State, PseudoCode)) | ||
1987 | { | ||
1988 | yield return true; | ||
1989 | yield break; | ||
1990 | } | ||
1991 | } | ||
1992 | } | ||
1993 | { | ||
1994 | object State = arg2; | ||
1995 | Variable A = new Variable(); | ||
1996 | Variable Term = new Variable(); | ||
1997 | Variable B = new Variable(); | ||
1998 | Variable ACode = new Variable(); | ||
1999 | Variable TermCode = new Variable(); | ||
2000 | Variable BCode = new Variable(); | ||
2001 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@"is", A, Term), B))) | ||
2002 | { | ||
2003 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.unify"), new ListPair(ACode, new ListPair(TermCode, Atom.NIL))), BCode), Atom.NIL))) | ||
2004 | { | ||
2005 | foreach (bool l4 in compileTerm(A, State, ACode)) | ||
2006 | { | ||
2007 | foreach (bool l5 in compileExpression(Term, State, TermCode)) | ||
2008 | { | ||
2009 | foreach (bool l6 in compileRuleBody(B, State, BCode)) | ||
2010 | { | ||
2011 | yield return true; | ||
2012 | yield break; | ||
2013 | } | ||
2014 | } | ||
2015 | } | ||
2016 | } | ||
2017 | } | ||
2018 | } | ||
2019 | { | ||
2020 | object State = arg2; | ||
2021 | Variable A = new Variable(); | ||
2022 | Variable B = new Variable(); | ||
2023 | Variable ACode = new Variable(); | ||
2024 | Variable BCode = new Variable(); | ||
2025 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
2026 | { | ||
2027 | foreach (bool l3 in YP.unify(arg3, new ListPair(ACode, BCode))) | ||
2028 | { | ||
2029 | if (CompilerState.isDetNoneOut(State, A)) | ||
2030 | { | ||
2031 | foreach (bool l5 in compileFunctorCall(A, State, ACode)) | ||
2032 | { | ||
2033 | foreach (bool l6 in compileRuleBody(B, State, BCode)) | ||
2034 | { | ||
2035 | yield return true; | ||
2036 | yield break; | ||
2037 | } | ||
2038 | } | ||
2039 | } | ||
2040 | } | ||
2041 | } | ||
2042 | } | ||
2043 | { | ||
2044 | object State = arg2; | ||
2045 | Variable A = new Variable(); | ||
2046 | Variable B = new Variable(); | ||
2047 | Variable ACode = new Variable(); | ||
2048 | Variable BCode = new Variable(); | ||
2049 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
2050 | { | ||
2051 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"if", ACode, BCode), Atom.NIL))) | ||
2052 | { | ||
2053 | if (CompilerState.isSemidetNoneOut(State, A)) | ||
2054 | { | ||
2055 | foreach (bool l5 in compileFunctorCall(A, State, ACode)) | ||
2056 | { | ||
2057 | foreach (bool l6 in compileRuleBody(B, State, BCode)) | ||
2058 | { | ||
2059 | yield return true; | ||
2060 | yield break; | ||
2061 | } | ||
2062 | } | ||
2063 | } | ||
2064 | } | ||
2065 | } | ||
2066 | } | ||
2067 | { | ||
2068 | object State = arg2; | ||
2069 | Variable ACode = new Variable(); | ||
2070 | Variable B = new Variable(); | ||
2071 | Variable BCode = new Variable(); | ||
2072 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"$DET_NONE_OUT", ACode), B))) | ||
2073 | { | ||
2074 | foreach (bool l3 in YP.unify(arg3, new ListPair(ACode, BCode))) | ||
2075 | { | ||
2076 | foreach (bool l4 in compileRuleBody(B, State, BCode)) | ||
2077 | { | ||
2078 | yield return true; | ||
2079 | yield break; | ||
2080 | } | ||
2081 | } | ||
2082 | } | ||
2083 | } | ||
2084 | { | ||
2085 | object State = arg2; | ||
2086 | Variable A = new Variable(); | ||
2087 | Variable B = new Variable(); | ||
2088 | Variable FunctionName = new Variable(); | ||
2089 | Variable X1Code = new Variable(); | ||
2090 | Variable X2Code = new Variable(); | ||
2091 | Variable BCode = new Variable(); | ||
2092 | Variable Name = new Variable(); | ||
2093 | Variable X1 = new Variable(); | ||
2094 | Variable X2 = new Variable(); | ||
2095 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
2096 | { | ||
2097 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"if", new Functor2(@"call", FunctionName, new ListPair(X1Code, new ListPair(X2Code, Atom.NIL))), BCode), Atom.NIL))) | ||
2098 | { | ||
2099 | foreach (bool l4 in YP.univ(A, new ListPair(Name, new ListPair(X1, new ListPair(X2, Atom.NIL))))) | ||
2100 | { | ||
2101 | foreach (bool l5 in binaryExpressionConditional(Name, FunctionName)) | ||
2102 | { | ||
2103 | foreach (bool l6 in compileExpression(X1, State, X1Code)) | ||
2104 | { | ||
2105 | foreach (bool l7 in compileExpression(X2, State, X2Code)) | ||
2106 | { | ||
2107 | foreach (bool l8 in compileRuleBody(B, State, BCode)) | ||
2108 | { | ||
2109 | yield return true; | ||
2110 | yield break; | ||
2111 | } | ||
2112 | } | ||
2113 | } | ||
2114 | } | ||
2115 | } | ||
2116 | } | ||
2117 | } | ||
2118 | } | ||
2119 | { | ||
2120 | object State = arg2; | ||
2121 | object PseudoCode = arg3; | ||
2122 | Variable A = new Variable(); | ||
2123 | Variable B = new Variable(); | ||
2124 | Variable C = new Variable(); | ||
2125 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor2(@",", A, B), C))) | ||
2126 | { | ||
2127 | foreach (bool l3 in compileRuleBody(new Functor2(@",", A, new Functor2(@",", B, C)), State, PseudoCode)) | ||
2128 | { | ||
2129 | yield return true; | ||
2130 | yield break; | ||
2131 | } | ||
2132 | } | ||
2133 | } | ||
2134 | { | ||
2135 | object State = arg2; | ||
2136 | object PseudoCode = arg3; | ||
2137 | Variable Template = new Variable(); | ||
2138 | Variable Goal = new Variable(); | ||
2139 | Variable Bag = new Variable(); | ||
2140 | Variable B = new Variable(); | ||
2141 | Variable TemplateCode = new Variable(); | ||
2142 | Variable FindallAnswers = new Variable(); | ||
2143 | Variable GoalAndAddCode = new Variable(); | ||
2144 | Variable BagCode = new Variable(); | ||
2145 | Variable BCode = new Variable(); | ||
2146 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor3(@"findall", Template, Goal, Bag), B))) | ||
2147 | { | ||
2148 | foreach (bool l3 in compileTerm(Template, State, TemplateCode)) | ||
2149 | { | ||
2150 | foreach (bool l4 in CompilerState.gensym(State, Atom.a(@"findallAnswers"), FindallAnswers)) | ||
2151 | { | ||
2152 | foreach (bool l5 in compileRuleBody(new Functor2(@",", Goal, new Functor2(@",", new Functor1(@"$DET_NONE_OUT", new Functor3(@"callMember", new Functor1(@"var", FindallAnswers), Atom.a(@"add"), Atom.NIL)), Atom.a(@"fail"))), State, GoalAndAddCode)) | ||
2153 | { | ||
2154 | foreach (bool l6 in compileTerm(Bag, State, BagCode)) | ||
2155 | { | ||
2156 | foreach (bool l7 in compileRuleBody(B, State, BCode)) | ||
2157 | { | ||
2158 | foreach (bool l8 in append(new ListPair(new Functor3(@"declare", Atom.a(@"FindallAnswers"), FindallAnswers, new Functor2(@"new", Atom.a(@"FindallAnswers"), new ListPair(TemplateCode, Atom.NIL))), GoalAndAddCode), new ListPair(new Functor2(@"foreach", new Functor3(@"callMember", new Functor1(@"var", FindallAnswers), Atom.a(@"result"), new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode)) | ||
2159 | { | ||
2160 | yield return true; | ||
2161 | yield break; | ||
2162 | } | ||
2163 | } | ||
2164 | } | ||
2165 | } | ||
2166 | } | ||
2167 | } | ||
2168 | } | ||
2169 | } | ||
2170 | { | ||
2171 | object State = arg2; | ||
2172 | object PseudoCode = arg3; | ||
2173 | Variable Template = new Variable(); | ||
2174 | Variable Goal = new Variable(); | ||
2175 | Variable Bag = new Variable(); | ||
2176 | Variable B = new Variable(); | ||
2177 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor3(@"bagof", Template, Goal, Bag), B))) | ||
2178 | { | ||
2179 | foreach (bool l3 in compileBagof(Atom.a(@"result"), Template, Goal, Bag, B, State, PseudoCode)) | ||
2180 | { | ||
2181 | yield return true; | ||
2182 | yield break; | ||
2183 | } | ||
2184 | } | ||
2185 | } | ||
2186 | { | ||
2187 | object State = arg2; | ||
2188 | object PseudoCode = arg3; | ||
2189 | Variable Template = new Variable(); | ||
2190 | Variable Goal = new Variable(); | ||
2191 | Variable Bag = new Variable(); | ||
2192 | Variable B = new Variable(); | ||
2193 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor3(@"setof", Template, Goal, Bag), B))) | ||
2194 | { | ||
2195 | foreach (bool l3 in compileBagof(Atom.a(@"resultSet"), Template, Goal, Bag, B, State, PseudoCode)) | ||
2196 | { | ||
2197 | yield return true; | ||
2198 | yield break; | ||
2199 | } | ||
2200 | } | ||
2201 | } | ||
2202 | { | ||
2203 | object State = arg2; | ||
2204 | Variable A = new Variable(); | ||
2205 | Variable B = new Variable(); | ||
2206 | Variable ATermCode = new Variable(); | ||
2207 | Variable BCode = new Variable(); | ||
2208 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"call", A), B))) | ||
2209 | { | ||
2210 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"foreach", new Functor2(@"call", Atom.a(@"YP.getIterator"), new ListPair(ATermCode, new ListPair(new Functor2(@"call", Atom.a(@"getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL))) | ||
2211 | { | ||
2212 | foreach (bool l4 in compileTerm(A, State, ATermCode)) | ||
2213 | { | ||
2214 | foreach (bool l5 in compileRuleBody(B, State, BCode)) | ||
2215 | { | ||
2216 | yield return true; | ||
2217 | yield break; | ||
2218 | } | ||
2219 | } | ||
2220 | } | ||
2221 | } | ||
2222 | } | ||
2223 | { | ||
2224 | object State = arg2; | ||
2225 | Variable A = new Variable(); | ||
2226 | Variable B = new Variable(); | ||
2227 | Variable ATermCode = new Variable(); | ||
2228 | Variable BCode = new Variable(); | ||
2229 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"asserta", A), B))) | ||
2230 | { | ||
2231 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"call", Atom.a(@"YP.asserta"), new ListPair(ATermCode, new ListPair(new Functor2(@"call", Atom.a(@"getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode))) | ||
2232 | { | ||
2233 | foreach (bool l4 in compileTerm(A, State, ATermCode)) | ||
2234 | { | ||
2235 | foreach (bool l5 in compileRuleBody(B, State, BCode)) | ||
2236 | { | ||
2237 | yield return true; | ||
2238 | yield break; | ||
2239 | } | ||
2240 | } | ||
2241 | } | ||
2242 | } | ||
2243 | } | ||
2244 | { | ||
2245 | object State = arg2; | ||
2246 | Variable A = new Variable(); | ||
2247 | Variable B = new Variable(); | ||
2248 | Variable ATermCode = new Variable(); | ||
2249 | Variable BCode = new Variable(); | ||
2250 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"assertz", A), B))) | ||
2251 | { | ||
2252 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"call", Atom.a(@"YP.assertz"), new ListPair(ATermCode, new ListPair(new Functor2(@"call", Atom.a(@"getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode))) | ||
2253 | { | ||
2254 | foreach (bool l4 in compileTerm(A, State, ATermCode)) | ||
2255 | { | ||
2256 | foreach (bool l5 in compileRuleBody(B, State, BCode)) | ||
2257 | { | ||
2258 | yield return true; | ||
2259 | yield break; | ||
2260 | } | ||
2261 | } | ||
2262 | } | ||
2263 | } | ||
2264 | } | ||
2265 | { | ||
2266 | object State = arg2; | ||
2267 | object PseudoCode = arg3; | ||
2268 | Variable A = new Variable(); | ||
2269 | Variable B = new Variable(); | ||
2270 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor1(@"assert", A), B))) | ||
2271 | { | ||
2272 | foreach (bool l3 in compileRuleBody(new Functor2(@",", new Functor1(@"assertz", A), B), State, PseudoCode)) | ||
2273 | { | ||
2274 | yield return true; | ||
2275 | yield break; | ||
2276 | } | ||
2277 | } | ||
2278 | } | ||
2279 | { | ||
2280 | object State = arg2; | ||
2281 | Variable Goal = new Variable(); | ||
2282 | Variable Catcher = new Variable(); | ||
2283 | Variable Handler = new Variable(); | ||
2284 | Variable B = new Variable(); | ||
2285 | Variable CatchGoal = new Variable(); | ||
2286 | Variable GoalTermCode = new Variable(); | ||
2287 | Variable BCode = new Variable(); | ||
2288 | Variable CatcherTermCode = new Variable(); | ||
2289 | Variable HandlerAndBCode = new Variable(); | ||
2290 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", new Functor3(@"catch", Goal, Catcher, Handler), B))) | ||
2291 | { | ||
2292 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor3(@"declare", Atom.a(@"YP.Catch"), CatchGoal, new Functor2(@"new", Atom.a(@"YP.Catch"), new ListPair(new Functor2(@"call", Atom.a(@"YP.getIterator"), new ListPair(GoalTermCode, new ListPair(new Functor2(@"call", Atom.a(@"getDeclaringClass"), Atom.NIL), Atom.NIL))), Atom.NIL))), new ListPair(new Functor2(@"foreach", new Functor1(@"var", CatchGoal), BCode), new ListPair(new Functor2(@"foreach", new Functor3(@"callMember", new Functor1(@"var", CatchGoal), Atom.a(@"unifyExceptionOrThrow"), new ListPair(CatcherTermCode, Atom.NIL)), HandlerAndBCode), Atom.NIL))))) | ||
2293 | { | ||
2294 | foreach (bool l4 in CompilerState.gensym(State, Atom.a(@"catchGoal"), CatchGoal)) | ||
2295 | { | ||
2296 | foreach (bool l5 in compileTerm(Goal, State, GoalTermCode)) | ||
2297 | { | ||
2298 | foreach (bool l6 in compileTerm(Catcher, State, CatcherTermCode)) | ||
2299 | { | ||
2300 | foreach (bool l7 in compileRuleBody(B, State, BCode)) | ||
2301 | { | ||
2302 | foreach (bool l8 in compileRuleBody(new Functor2(@",", Handler, B), State, HandlerAndBCode)) | ||
2303 | { | ||
2304 | yield return true; | ||
2305 | yield break; | ||
2306 | } | ||
2307 | } | ||
2308 | } | ||
2309 | } | ||
2310 | } | ||
2311 | } | ||
2312 | } | ||
2313 | } | ||
2314 | { | ||
2315 | object State = arg2; | ||
2316 | Variable A = new Variable(); | ||
2317 | Variable B = new Variable(); | ||
2318 | Variable ACode = new Variable(); | ||
2319 | Variable BCode = new Variable(); | ||
2320 | foreach (bool l2 in YP.unify(arg1, new Functor2(@",", A, B))) | ||
2321 | { | ||
2322 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"foreach", ACode, BCode), Atom.NIL))) | ||
2323 | { | ||
2324 | foreach (bool l4 in compileFunctorCall(A, State, ACode)) | ||
2325 | { | ||
2326 | foreach (bool l5 in compileRuleBody(B, State, BCode)) | ||
2327 | { | ||
2328 | yield return true; | ||
2329 | yield break; | ||
2330 | } | ||
2331 | } | ||
2332 | } | ||
2333 | } | ||
2334 | } | ||
2335 | { | ||
2336 | object State = arg2; | ||
2337 | object PseudoCode = arg3; | ||
2338 | Variable A = new Variable(); | ||
2339 | Variable B = new Variable(); | ||
2340 | foreach (bool l2 in YP.unify(arg1, new Functor2(@";", A, B))) | ||
2341 | { | ||
2342 | if (YP.var(A)) | ||
2343 | { | ||
2344 | foreach (bool l4 in compileRuleBody(new Functor2(@";", new Functor1(@"call", A), B), State, PseudoCode)) | ||
2345 | { | ||
2346 | yield return true; | ||
2347 | yield break; | ||
2348 | } | ||
2349 | } | ||
2350 | } | ||
2351 | } | ||
2352 | { | ||
2353 | object State = arg2; | ||
2354 | Variable A = new Variable(); | ||
2355 | Variable T = new Variable(); | ||
2356 | Variable B = new Variable(); | ||
2357 | Variable CutIfLabel = new Variable(); | ||
2358 | Variable Code = new Variable(); | ||
2359 | foreach (bool l2 in YP.unify(arg1, new Functor2(@";", new Functor2(@"->", A, T), B))) | ||
2360 | { | ||
2361 | foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2(@"breakableBlock", CutIfLabel, Code), Atom.NIL))) | ||
2362 | { | ||
2363 | foreach (bool l4 in CompilerState.gensym(State, Atom.a(@"cutIf"), CutIfLabel)) | ||
2364 | { | ||
2365 | foreach (bool l5 in compileRuleBody(new Functor2(@";", new Functor2(@",", A, new Functor2(@",", new Functor1(@"$CUTIF", CutIfLabel), T)), B), State, Code)) | ||
2366 | { | ||
2367 | yield return true; | ||
2368 | yield break; | ||
2369 | } | ||
2370 | } | ||
2371 | } | ||
2372 | } | ||
2373 | } | ||
2374 | { | ||
2375 | object State = arg2; | ||
2376 | object PseudoCode = arg3; | ||
2377 | Variable A = new Variable(); | ||
2378 | Variable B = new Variable(); | ||
2379 | Variable ACode = new Variable(); | ||
2380 | Variable BCode = new Variable(); | ||
2381 | foreach (bool l2 in YP.unify(arg1, new Functor2(@";", A, B))) | ||
2382 | { | ||
2383 | foreach (bool l3 in compileRuleBody(A, State, ACode)) | ||
2384 | { | ||
2385 | foreach (bool l4 in compileRuleBody(B, State, BCode)) | ||
2386 | { | ||
2387 | foreach (bool l5 in append(ACode, BCode, PseudoCode)) | ||
2388 | { | ||
2389 | yield return true; | ||
2390 | yield break; | ||
2391 | } | ||
2392 | } | ||
2393 | } | ||
2394 | } | ||
2395 | } | ||
2396 | { | ||
2397 | object A = arg1; | ||
2398 | object State = arg2; | ||
2399 | object PseudoCode = arg3; | ||
2400 | foreach (bool l2 in compileRuleBody(new Functor2(@",", A, Atom.a(@"true")), State, PseudoCode)) | ||
2401 | { | ||
2402 | yield return true; | ||
2403 | yield break; | ||
2404 | } | ||
2405 | } | ||
2406 | } | ||
2407 | |||
2408 | public static IEnumerable<bool> compileBagof(object ResultMethod, object Template, object Goal, object Bag, object B, object State, object PseudoCode) | ||
2409 | { | ||
2410 | { | ||
2411 | Variable TemplateCode = new Variable(); | ||
2412 | Variable GoalTermCode = new Variable(); | ||
2413 | Variable UnqualifiedGoal = new Variable(); | ||
2414 | Variable BagofAnswers = new Variable(); | ||
2415 | Variable GoalAndAddCode = new Variable(); | ||
2416 | Variable BagCode = new Variable(); | ||
2417 | Variable BCode = new Variable(); | ||
2418 | foreach (bool l2 in compileTerm(Template, State, TemplateCode)) | ||
2419 | { | ||
2420 | foreach (bool l3 in compileTerm(Goal, State, GoalTermCode)) | ||
2421 | { | ||
2422 | foreach (bool l4 in unqualifiedGoal(Goal, UnqualifiedGoal)) | ||
2423 | { | ||
2424 | foreach (bool l5 in CompilerState.gensym(State, Atom.a(@"bagofAnswers"), BagofAnswers)) | ||
2425 | { | ||
2426 | foreach (bool l6 in compileRuleBody(new Functor2(@",", UnqualifiedGoal, new Functor2(@",", new Functor1(@"$DET_NONE_OUT", new Functor3(@"callMember", new Functor1(@"var", BagofAnswers), Atom.a(@"add"), Atom.NIL)), Atom.a(@"fail"))), State, GoalAndAddCode)) | ||
2427 | { | ||
2428 | foreach (bool l7 in compileTerm(Bag, State, BagCode)) | ||
2429 | { | ||
2430 | foreach (bool l8 in compileRuleBody(B, State, BCode)) | ||
2431 | { | ||
2432 | foreach (bool l9 in append(new ListPair(new Functor3(@"declare", Atom.a(@"BagofAnswers"), BagofAnswers, new Functor2(@"new", Atom.a(@"BagofAnswers"), new ListPair(TemplateCode, new ListPair(GoalTermCode, Atom.NIL)))), GoalAndAddCode), new ListPair(new Functor2(@"foreach", new Functor3(@"callMember", new Functor1(@"var", BagofAnswers), ResultMethod, new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode)) | ||
2433 | { | ||
2434 | yield return true; | ||
2435 | yield break; | ||
2436 | } | ||
2437 | } | ||
2438 | } | ||
2439 | } | ||
2440 | } | ||
2441 | } | ||
2442 | } | ||
2443 | } | ||
2444 | } | ||
2445 | } | ||
2446 | |||
2447 | public static IEnumerable<bool> unqualifiedGoal(object arg1, object arg2) | ||
2448 | { | ||
2449 | { | ||
2450 | object Goal = arg1; | ||
2451 | foreach (bool l2 in YP.unify(arg2, new Functor1(@"call", Goal))) | ||
2452 | { | ||
2453 | if (YP.var(Goal)) | ||
2454 | { | ||
2455 | yield return true; | ||
2456 | yield break; | ||
2457 | } | ||
2458 | } | ||
2459 | } | ||
2460 | { | ||
2461 | object UnqualifiedGoal = arg2; | ||
2462 | Variable x1 = new Variable(); | ||
2463 | Variable Goal = new Variable(); | ||
2464 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"^", x1, Goal))) | ||
2465 | { | ||
2466 | foreach (bool l3 in unqualifiedGoal(Goal, UnqualifiedGoal)) | ||
2467 | { | ||
2468 | yield return true; | ||
2469 | yield break; | ||
2470 | } | ||
2471 | } | ||
2472 | } | ||
2473 | { | ||
2474 | Variable UnqualifiedGoal = new Variable(); | ||
2475 | foreach (bool l2 in YP.unify(arg1, UnqualifiedGoal)) | ||
2476 | { | ||
2477 | foreach (bool l3 in YP.unify(arg2, UnqualifiedGoal)) | ||
2478 | { | ||
2479 | yield return true; | ||
2480 | yield break; | ||
2481 | } | ||
2482 | } | ||
2483 | } | ||
2484 | } | ||
2485 | |||
2486 | public static IEnumerable<bool> binaryExpressionConditional(object arg1, object arg2) | ||
2487 | { | ||
2488 | { | ||
2489 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"=:="))) | ||
2490 | { | ||
2491 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.equal"))) | ||
2492 | { | ||
2493 | yield return true; | ||
2494 | yield break; | ||
2495 | } | ||
2496 | } | ||
2497 | } | ||
2498 | { | ||
2499 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"=\="))) | ||
2500 | { | ||
2501 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.notEqual"))) | ||
2502 | { | ||
2503 | yield return true; | ||
2504 | yield break; | ||
2505 | } | ||
2506 | } | ||
2507 | } | ||
2508 | { | ||
2509 | foreach (bool l2 in YP.unify(arg1, Atom.a(@">"))) | ||
2510 | { | ||
2511 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.greaterThan"))) | ||
2512 | { | ||
2513 | yield return true; | ||
2514 | yield break; | ||
2515 | } | ||
2516 | } | ||
2517 | } | ||
2518 | { | ||
2519 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"<"))) | ||
2520 | { | ||
2521 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.lessThan"))) | ||
2522 | { | ||
2523 | yield return true; | ||
2524 | yield break; | ||
2525 | } | ||
2526 | } | ||
2527 | } | ||
2528 | { | ||
2529 | foreach (bool l2 in YP.unify(arg1, Atom.a(@">="))) | ||
2530 | { | ||
2531 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.greaterThanOrEqual"))) | ||
2532 | { | ||
2533 | yield return true; | ||
2534 | yield break; | ||
2535 | } | ||
2536 | } | ||
2537 | } | ||
2538 | { | ||
2539 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"=<"))) | ||
2540 | { | ||
2541 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.lessThanOrEqual"))) | ||
2542 | { | ||
2543 | yield return true; | ||
2544 | yield break; | ||
2545 | } | ||
2546 | } | ||
2547 | } | ||
2548 | } | ||
2549 | |||
2550 | public static IEnumerable<bool> compileFunctorCall(object Functor_1, object State, object PseudoCode) | ||
2551 | { | ||
2552 | { | ||
2553 | Variable FunctorName = new Variable(); | ||
2554 | Variable FunctorArgs = new Variable(); | ||
2555 | Variable x6 = new Variable(); | ||
2556 | Variable Arity = new Variable(); | ||
2557 | Variable CompiledArgs = new Variable(); | ||
2558 | Variable FunctionName = new Variable(); | ||
2559 | foreach (bool l2 in YP.univ(Functor_1, new ListPair(FunctorName, FunctorArgs))) | ||
2560 | { | ||
2561 | foreach (bool l3 in YP.functor(Functor_1, x6, Arity)) | ||
2562 | { | ||
2563 | foreach (bool l4 in maplist_compileTerm(FunctorArgs, State, CompiledArgs)) | ||
2564 | { | ||
2565 | foreach (bool l5 in functorCallFunctionName(State, FunctorName, Arity, FunctionName)) | ||
2566 | { | ||
2567 | if (YP.termEqual(FunctionName, Atom.NIL)) | ||
2568 | { | ||
2569 | foreach (bool l7 in YP.unify(PseudoCode, new Functor2(@"call", Atom.a(@"YP.matchDynamic"), new ListPair(new Functor2(@"call", Atom.a(@"Atom.a"), new ListPair(new Functor1(@"object", FunctorName), Atom.NIL)), new ListPair(new Functor1(@"objectArray", CompiledArgs), Atom.NIL))))) | ||
2570 | { | ||
2571 | yield return true; | ||
2572 | yield break; | ||
2573 | } | ||
2574 | goto cutIf1; | ||
2575 | } | ||
2576 | foreach (bool l6 in YP.unify(PseudoCode, new Functor2(@"call", FunctionName, CompiledArgs))) | ||
2577 | { | ||
2578 | yield return true; | ||
2579 | yield break; | ||
2580 | } | ||
2581 | cutIf1: | ||
2582 | { } | ||
2583 | } | ||
2584 | } | ||
2585 | } | ||
2586 | } | ||
2587 | } | ||
2588 | } | ||
2589 | |||
2590 | public static IEnumerable<bool> functorCallFunctionName(object arg1, object arg2, object arg3, object arg4) | ||
2591 | { | ||
2592 | { | ||
2593 | object x1 = arg1; | ||
2594 | object Name = arg2; | ||
2595 | object Arity = arg3; | ||
2596 | object FunctionName = arg4; | ||
2597 | foreach (bool l2 in functorCallYPFunctionName(Name, Arity, FunctionName)) | ||
2598 | { | ||
2599 | yield return true; | ||
2600 | yield break; | ||
2601 | } | ||
2602 | } | ||
2603 | { | ||
2604 | object State = arg1; | ||
2605 | object Arity = arg3; | ||
2606 | Variable Name = new Variable(); | ||
2607 | foreach (bool l2 in YP.unify(arg2, Name)) | ||
2608 | { | ||
2609 | foreach (bool l3 in YP.unify(arg4, Name)) | ||
2610 | { | ||
2611 | if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a(@""))) | ||
2612 | { | ||
2613 | yield return true; | ||
2614 | yield break; | ||
2615 | } | ||
2616 | } | ||
2617 | } | ||
2618 | } | ||
2619 | { | ||
2620 | object _State = arg1; | ||
2621 | object _Arity = arg3; | ||
2622 | Variable Name = new Variable(); | ||
2623 | foreach (bool l2 in YP.unify(arg2, Name)) | ||
2624 | { | ||
2625 | foreach (bool l3 in YP.unify(arg4, Name)) | ||
2626 | { | ||
2627 | foreach (bool l4 in Atom.module(Name, Atom.a(@""))) | ||
2628 | { | ||
2629 | yield return true; | ||
2630 | yield break; | ||
2631 | } | ||
2632 | } | ||
2633 | } | ||
2634 | } | ||
2635 | { | ||
2636 | object _State = arg1; | ||
2637 | object Name = arg2; | ||
2638 | object Arity = arg3; | ||
2639 | foreach (bool l2 in YP.unify(arg4, Atom.NIL)) | ||
2640 | { | ||
2641 | foreach (bool l3 in Atom.module(Name, Atom.NIL)) | ||
2642 | { | ||
2643 | yield return true; | ||
2644 | yield break; | ||
2645 | } | ||
2646 | } | ||
2647 | } | ||
2648 | { | ||
2649 | object _State = arg1; | ||
2650 | object Name = arg2; | ||
2651 | object Arity = arg3; | ||
2652 | object x4 = arg4; | ||
2653 | Variable Module = new Variable(); | ||
2654 | Variable Message = new Variable(); | ||
2655 | foreach (bool l2 in Atom.module(Name, Module)) | ||
2656 | { | ||
2657 | foreach (bool l3 in YP.atom_concat(Atom.a(@"Not supporting calls to external module: "), Module, Message)) | ||
2658 | { | ||
2659 | YP.throwException(new Functor2(@"error", new Functor2(@"type_error", Atom.a(@"callable"), new Functor2(@"/", Name, Arity)), Message)); | ||
2660 | yield return true; | ||
2661 | yield break; | ||
2662 | } | ||
2663 | } | ||
2664 | } | ||
2665 | { | ||
2666 | object _State = arg1; | ||
2667 | object Name = arg2; | ||
2668 | object _Arity = arg3; | ||
2669 | object x4 = arg4; | ||
2670 | YP.throwException(new Functor2(@"error", new Functor2(@"type_error", Atom.a(@"callable"), Name), Atom.a(@"Term is not callable"))); | ||
2671 | yield return true; | ||
2672 | yield break; | ||
2673 | } | ||
2674 | } | ||
2675 | |||
2676 | public static IEnumerable<bool> functorCallYPFunctionName(object arg1, object arg2, object arg3) | ||
2677 | { | ||
2678 | { | ||
2679 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"="))) | ||
2680 | { | ||
2681 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2682 | { | ||
2683 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.unify"))) | ||
2684 | { | ||
2685 | yield return true; | ||
2686 | yield break; | ||
2687 | } | ||
2688 | } | ||
2689 | } | ||
2690 | } | ||
2691 | { | ||
2692 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"=.."))) | ||
2693 | { | ||
2694 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2695 | { | ||
2696 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.univ"))) | ||
2697 | { | ||
2698 | yield return true; | ||
2699 | yield break; | ||
2700 | } | ||
2701 | } | ||
2702 | } | ||
2703 | } | ||
2704 | { | ||
2705 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"var"))) | ||
2706 | { | ||
2707 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2708 | { | ||
2709 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.var"))) | ||
2710 | { | ||
2711 | yield return true; | ||
2712 | yield break; | ||
2713 | } | ||
2714 | } | ||
2715 | } | ||
2716 | } | ||
2717 | { | ||
2718 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"nonvar"))) | ||
2719 | { | ||
2720 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2721 | { | ||
2722 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.nonvar"))) | ||
2723 | { | ||
2724 | yield return true; | ||
2725 | yield break; | ||
2726 | } | ||
2727 | } | ||
2728 | } | ||
2729 | } | ||
2730 | { | ||
2731 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"arg"))) | ||
2732 | { | ||
2733 | foreach (bool l3 in YP.unify(arg2, 3)) | ||
2734 | { | ||
2735 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.arg"))) | ||
2736 | { | ||
2737 | yield return true; | ||
2738 | yield break; | ||
2739 | } | ||
2740 | } | ||
2741 | } | ||
2742 | } | ||
2743 | { | ||
2744 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"functor"))) | ||
2745 | { | ||
2746 | foreach (bool l3 in YP.unify(arg2, 3)) | ||
2747 | { | ||
2748 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.functor"))) | ||
2749 | { | ||
2750 | yield return true; | ||
2751 | yield break; | ||
2752 | } | ||
2753 | } | ||
2754 | } | ||
2755 | } | ||
2756 | { | ||
2757 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"repeat"))) | ||
2758 | { | ||
2759 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
2760 | { | ||
2761 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.repeat"))) | ||
2762 | { | ||
2763 | yield return true; | ||
2764 | yield break; | ||
2765 | } | ||
2766 | } | ||
2767 | } | ||
2768 | } | ||
2769 | { | ||
2770 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"get_code"))) | ||
2771 | { | ||
2772 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2773 | { | ||
2774 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.get_code"))) | ||
2775 | { | ||
2776 | yield return true; | ||
2777 | yield break; | ||
2778 | } | ||
2779 | } | ||
2780 | } | ||
2781 | } | ||
2782 | { | ||
2783 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"current_op"))) | ||
2784 | { | ||
2785 | foreach (bool l3 in YP.unify(arg2, 3)) | ||
2786 | { | ||
2787 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.current_op"))) | ||
2788 | { | ||
2789 | yield return true; | ||
2790 | yield break; | ||
2791 | } | ||
2792 | } | ||
2793 | } | ||
2794 | } | ||
2795 | { | ||
2796 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atom_length"))) | ||
2797 | { | ||
2798 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2799 | { | ||
2800 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.atom_length"))) | ||
2801 | { | ||
2802 | yield return true; | ||
2803 | yield break; | ||
2804 | } | ||
2805 | } | ||
2806 | } | ||
2807 | } | ||
2808 | { | ||
2809 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atom_concat"))) | ||
2810 | { | ||
2811 | foreach (bool l3 in YP.unify(arg2, 3)) | ||
2812 | { | ||
2813 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.atom_concat"))) | ||
2814 | { | ||
2815 | yield return true; | ||
2816 | yield break; | ||
2817 | } | ||
2818 | } | ||
2819 | } | ||
2820 | } | ||
2821 | { | ||
2822 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"sub_atom"))) | ||
2823 | { | ||
2824 | foreach (bool l3 in YP.unify(arg2, 5)) | ||
2825 | { | ||
2826 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.sub_atom"))) | ||
2827 | { | ||
2828 | yield return true; | ||
2829 | yield break; | ||
2830 | } | ||
2831 | } | ||
2832 | } | ||
2833 | } | ||
2834 | { | ||
2835 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atom_codes"))) | ||
2836 | { | ||
2837 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2838 | { | ||
2839 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.atom_codes"))) | ||
2840 | { | ||
2841 | yield return true; | ||
2842 | yield break; | ||
2843 | } | ||
2844 | } | ||
2845 | } | ||
2846 | } | ||
2847 | { | ||
2848 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"number_codes"))) | ||
2849 | { | ||
2850 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2851 | { | ||
2852 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.number_codes"))) | ||
2853 | { | ||
2854 | yield return true; | ||
2855 | yield break; | ||
2856 | } | ||
2857 | } | ||
2858 | } | ||
2859 | } | ||
2860 | { | ||
2861 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"copy_term"))) | ||
2862 | { | ||
2863 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2864 | { | ||
2865 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.copy_term"))) | ||
2866 | { | ||
2867 | yield return true; | ||
2868 | yield break; | ||
2869 | } | ||
2870 | } | ||
2871 | } | ||
2872 | } | ||
2873 | { | ||
2874 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"sort"))) | ||
2875 | { | ||
2876 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2877 | { | ||
2878 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.sort"))) | ||
2879 | { | ||
2880 | yield return true; | ||
2881 | yield break; | ||
2882 | } | ||
2883 | } | ||
2884 | } | ||
2885 | } | ||
2886 | { | ||
2887 | // Manually included : script_event for callback to LSL/C# | ||
2888 | |||
2889 | //object x1 = arg1; | ||
2890 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"script_event"))) | ||
2891 | { | ||
2892 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
2893 | { | ||
2894 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.script_event"))) | ||
2895 | { | ||
2896 | yield return true; | ||
2897 | yield break; | ||
2898 | } | ||
2899 | } | ||
2900 | } | ||
2901 | } | ||
2902 | { | ||
2903 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"nl"))) | ||
2904 | { | ||
2905 | foreach (bool l3 in YP.unify(arg2, 0)) | ||
2906 | { | ||
2907 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.nl"))) | ||
2908 | { | ||
2909 | yield return true; | ||
2910 | yield break; | ||
2911 | } | ||
2912 | } | ||
2913 | } | ||
2914 | } | ||
2915 | { | ||
2916 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"write"))) | ||
2917 | { | ||
2918 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2919 | { | ||
2920 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.write"))) | ||
2921 | { | ||
2922 | yield return true; | ||
2923 | yield break; | ||
2924 | } | ||
2925 | } | ||
2926 | } | ||
2927 | } | ||
2928 | { | ||
2929 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"put_code"))) | ||
2930 | { | ||
2931 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2932 | { | ||
2933 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.put_code"))) | ||
2934 | { | ||
2935 | yield return true; | ||
2936 | yield break; | ||
2937 | } | ||
2938 | } | ||
2939 | } | ||
2940 | } | ||
2941 | { | ||
2942 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atom"))) | ||
2943 | { | ||
2944 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2945 | { | ||
2946 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.atom"))) | ||
2947 | { | ||
2948 | yield return true; | ||
2949 | yield break; | ||
2950 | } | ||
2951 | } | ||
2952 | } | ||
2953 | } | ||
2954 | { | ||
2955 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"integer"))) | ||
2956 | { | ||
2957 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2958 | { | ||
2959 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.integer"))) | ||
2960 | { | ||
2961 | yield return true; | ||
2962 | yield break; | ||
2963 | } | ||
2964 | } | ||
2965 | } | ||
2966 | } | ||
2967 | { | ||
2968 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"float"))) | ||
2969 | { | ||
2970 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2971 | { | ||
2972 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.isFloat"))) | ||
2973 | { | ||
2974 | yield return true; | ||
2975 | yield break; | ||
2976 | } | ||
2977 | } | ||
2978 | } | ||
2979 | } | ||
2980 | { | ||
2981 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"number"))) | ||
2982 | { | ||
2983 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2984 | { | ||
2985 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.number"))) | ||
2986 | { | ||
2987 | yield return true; | ||
2988 | yield break; | ||
2989 | } | ||
2990 | } | ||
2991 | } | ||
2992 | } | ||
2993 | { | ||
2994 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atomic"))) | ||
2995 | { | ||
2996 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
2997 | { | ||
2998 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.atomic"))) | ||
2999 | { | ||
3000 | yield return true; | ||
3001 | yield break; | ||
3002 | } | ||
3003 | } | ||
3004 | } | ||
3005 | } | ||
3006 | { | ||
3007 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"compound"))) | ||
3008 | { | ||
3009 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
3010 | { | ||
3011 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.compound"))) | ||
3012 | { | ||
3013 | yield return true; | ||
3014 | yield break; | ||
3015 | } | ||
3016 | } | ||
3017 | } | ||
3018 | } | ||
3019 | { | ||
3020 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"=="))) | ||
3021 | { | ||
3022 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3023 | { | ||
3024 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termEqual"))) | ||
3025 | { | ||
3026 | yield return true; | ||
3027 | yield break; | ||
3028 | } | ||
3029 | } | ||
3030 | } | ||
3031 | } | ||
3032 | { | ||
3033 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"\=="))) | ||
3034 | { | ||
3035 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3036 | { | ||
3037 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termNotEqual"))) | ||
3038 | { | ||
3039 | yield return true; | ||
3040 | yield break; | ||
3041 | } | ||
3042 | } | ||
3043 | } | ||
3044 | } | ||
3045 | { | ||
3046 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"@<"))) | ||
3047 | { | ||
3048 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3049 | { | ||
3050 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termLessThan"))) | ||
3051 | { | ||
3052 | yield return true; | ||
3053 | yield break; | ||
3054 | } | ||
3055 | } | ||
3056 | } | ||
3057 | } | ||
3058 | { | ||
3059 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"@=<"))) | ||
3060 | { | ||
3061 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3062 | { | ||
3063 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termLessThanOrEqual"))) | ||
3064 | { | ||
3065 | yield return true; | ||
3066 | yield break; | ||
3067 | } | ||
3068 | } | ||
3069 | } | ||
3070 | } | ||
3071 | { | ||
3072 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"@>"))) | ||
3073 | { | ||
3074 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3075 | { | ||
3076 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termGreaterThan"))) | ||
3077 | { | ||
3078 | yield return true; | ||
3079 | yield break; | ||
3080 | } | ||
3081 | } | ||
3082 | } | ||
3083 | } | ||
3084 | { | ||
3085 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"@>="))) | ||
3086 | { | ||
3087 | foreach (bool l3 in YP.unify(arg2, 2)) | ||
3088 | { | ||
3089 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.termGreaterThanOrEqual"))) | ||
3090 | { | ||
3091 | yield return true; | ||
3092 | yield break; | ||
3093 | } | ||
3094 | } | ||
3095 | } | ||
3096 | } | ||
3097 | { | ||
3098 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"throw"))) | ||
3099 | { | ||
3100 | foreach (bool l3 in YP.unify(arg2, 1)) | ||
3101 | { | ||
3102 | foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.throwException"))) | ||
3103 | { | ||
3104 | yield return true; | ||
3105 | yield break; | ||
3106 | } | ||
3107 | } | ||
3108 | } | ||
3109 | } | ||
3110 | } | ||
3111 | |||
3112 | public static IEnumerable<bool> compileTerm(object arg1, object arg2, object arg3) | ||
3113 | { | ||
3114 | { | ||
3115 | object Term = arg1; | ||
3116 | object State = arg2; | ||
3117 | Variable VariableName = new Variable(); | ||
3118 | foreach (bool l2 in YP.unify(arg3, new Functor1(@"var", VariableName))) | ||
3119 | { | ||
3120 | if (YP.var(Term)) | ||
3121 | { | ||
3122 | foreach (bool l4 in CompilerState.getVariableName(State, Term, VariableName)) | ||
3123 | { | ||
3124 | yield return true; | ||
3125 | yield break; | ||
3126 | } | ||
3127 | } | ||
3128 | } | ||
3129 | } | ||
3130 | { | ||
3131 | object _State = arg2; | ||
3132 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
3133 | { | ||
3134 | foreach (bool l3 in YP.unify(arg3, new Functor1(@"var", Atom.a(@"Atom.NIL")))) | ||
3135 | { | ||
3136 | yield return true; | ||
3137 | yield break; | ||
3138 | } | ||
3139 | } | ||
3140 | } | ||
3141 | { | ||
3142 | object Term = arg1; | ||
3143 | object State = arg2; | ||
3144 | object Code = arg3; | ||
3145 | Variable ModuleCode = new Variable(); | ||
3146 | if (YP.atom(Term)) | ||
3147 | { | ||
3148 | foreach (bool l3 in compileAtomModule(Term, 0, State, ModuleCode)) | ||
3149 | { | ||
3150 | foreach (bool l4 in YP.unify(Code, new Functor2(@"call", Atom.a(@"Atom.a"), new ListPair(new Functor1(@"object", Term), new ListPair(ModuleCode, Atom.NIL))))) | ||
3151 | { | ||
3152 | yield return true; | ||
3153 | yield break; | ||
3154 | } | ||
3155 | goto cutIf1; | ||
3156 | } | ||
3157 | foreach (bool l3 in YP.unify(Code, new Functor2(@"call", Atom.a(@"Atom.a"), new ListPair(new Functor1(@"object", Term), Atom.NIL)))) | ||
3158 | { | ||
3159 | yield return true; | ||
3160 | yield break; | ||
3161 | } | ||
3162 | cutIf1: | ||
3163 | { } | ||
3164 | } | ||
3165 | } | ||
3166 | { | ||
3167 | object State = arg2; | ||
3168 | Variable First = new Variable(); | ||
3169 | Variable Rest = new Variable(); | ||
3170 | Variable Arg1 = new Variable(); | ||
3171 | Variable Arg2 = new Variable(); | ||
3172 | foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) | ||
3173 | { | ||
3174 | foreach (bool l3 in YP.unify(arg3, new Functor2(@"new", Atom.a(@"ListPair"), new ListPair(Arg1, new ListPair(Arg2, Atom.NIL))))) | ||
3175 | { | ||
3176 | foreach (bool l4 in compileTerm(First, State, Arg1)) | ||
3177 | { | ||
3178 | foreach (bool l5 in compileTerm(Rest, State, Arg2)) | ||
3179 | { | ||
3180 | yield return true; | ||
3181 | yield break; | ||
3182 | } | ||
3183 | } | ||
3184 | } | ||
3185 | } | ||
3186 | } | ||
3187 | { | ||
3188 | object Term = arg1; | ||
3189 | object State = arg2; | ||
3190 | object Result = arg3; | ||
3191 | Variable Name = new Variable(); | ||
3192 | Variable TermArgs = new Variable(); | ||
3193 | Variable x6 = new Variable(); | ||
3194 | Variable Arity = new Variable(); | ||
3195 | Variable ModuleCode = new Variable(); | ||
3196 | Variable NameCode = new Variable(); | ||
3197 | Variable X1 = new Variable(); | ||
3198 | Variable Arg1 = new Variable(); | ||
3199 | Variable X2 = new Variable(); | ||
3200 | Variable Arg2 = new Variable(); | ||
3201 | Variable X3 = new Variable(); | ||
3202 | Variable Arg3 = new Variable(); | ||
3203 | Variable Args = new Variable(); | ||
3204 | foreach (bool l2 in YP.univ(Term, new ListPair(Name, TermArgs))) | ||
3205 | { | ||
3206 | if (YP.termEqual(TermArgs, Atom.NIL)) | ||
3207 | { | ||
3208 | foreach (bool l4 in YP.unify(Result, new Functor1(@"object", Name))) | ||
3209 | { | ||
3210 | yield return true; | ||
3211 | yield break; | ||
3212 | } | ||
3213 | goto cutIf2; | ||
3214 | } | ||
3215 | foreach (bool l3 in YP.functor(Term, x6, Arity)) | ||
3216 | { | ||
3217 | foreach (bool l4 in compileAtomModule(Name, Arity, State, ModuleCode)) | ||
3218 | { | ||
3219 | foreach (bool l5 in YP.unify(NameCode, new Functor2(@"call", Atom.a(@"Atom.a"), new ListPair(new Functor1(@"object", Name), new ListPair(ModuleCode, Atom.NIL))))) | ||
3220 | { | ||
3221 | foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) | ||
3222 | { | ||
3223 | foreach (bool l7 in compileTerm(X1, State, Arg1)) | ||
3224 | { | ||
3225 | foreach (bool l8 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL))))) | ||
3226 | { | ||
3227 | yield return true; | ||
3228 | yield break; | ||
3229 | } | ||
3230 | } | ||
3231 | goto cutIf4; | ||
3232 | } | ||
3233 | foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) | ||
3234 | { | ||
3235 | foreach (bool l7 in compileTerm(X1, State, Arg1)) | ||
3236 | { | ||
3237 | foreach (bool l8 in compileTerm(X2, State, Arg2)) | ||
3238 | { | ||
3239 | foreach (bool l9 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor2"), new ListPair(NameCode, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))) | ||
3240 | { | ||
3241 | yield return true; | ||
3242 | yield break; | ||
3243 | } | ||
3244 | } | ||
3245 | } | ||
3246 | goto cutIf5; | ||
3247 | } | ||
3248 | foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, new ListPair(X3, Atom.NIL))))) | ||
3249 | { | ||
3250 | foreach (bool l7 in compileTerm(X1, State, Arg1)) | ||
3251 | { | ||
3252 | foreach (bool l8 in compileTerm(X2, State, Arg2)) | ||
3253 | { | ||
3254 | foreach (bool l9 in compileTerm(X3, State, Arg3)) | ||
3255 | { | ||
3256 | foreach (bool l10 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor3"), new ListPair(NameCode, new ListPair(Arg1, new ListPair(Arg2, new ListPair(Arg3, Atom.NIL))))))) | ||
3257 | { | ||
3258 | yield return true; | ||
3259 | yield break; | ||
3260 | } | ||
3261 | } | ||
3262 | } | ||
3263 | } | ||
3264 | } | ||
3265 | foreach (bool l6 in maplist_compileTerm(TermArgs, State, Args)) | ||
3266 | { | ||
3267 | foreach (bool l7 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor"), new ListPair(NameCode, new ListPair(new Functor1(@"objectArray", Args), Atom.NIL))))) | ||
3268 | { | ||
3269 | yield return true; | ||
3270 | yield break; | ||
3271 | } | ||
3272 | } | ||
3273 | cutIf5: | ||
3274 | cutIf4: | ||
3275 | { } | ||
3276 | } | ||
3277 | goto cutIf3; | ||
3278 | } | ||
3279 | foreach (bool l4 in YP.unify(NameCode, new Functor1(@"object", Name))) | ||
3280 | { | ||
3281 | foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) | ||
3282 | { | ||
3283 | foreach (bool l6 in compileTerm(X1, State, Arg1)) | ||
3284 | { | ||
3285 | foreach (bool l7 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL))))) | ||
3286 | { | ||
3287 | yield return true; | ||
3288 | yield break; | ||
3289 | } | ||
3290 | } | ||
3291 | goto cutIf6; | ||
3292 | } | ||
3293 | foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) | ||
3294 | { | ||
3295 | foreach (bool l6 in compileTerm(X1, State, Arg1)) | ||
3296 | { | ||
3297 | foreach (bool l7 in compileTerm(X2, State, Arg2)) | ||
3298 | { | ||
3299 | foreach (bool l8 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor2"), new ListPair(NameCode, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL)))))) | ||
3300 | { | ||
3301 | yield return true; | ||
3302 | yield break; | ||
3303 | } | ||
3304 | } | ||
3305 | } | ||
3306 | goto cutIf7; | ||
3307 | } | ||
3308 | foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, new ListPair(X3, Atom.NIL))))) | ||
3309 | { | ||
3310 | foreach (bool l6 in compileTerm(X1, State, Arg1)) | ||
3311 | { | ||
3312 | foreach (bool l7 in compileTerm(X2, State, Arg2)) | ||
3313 | { | ||
3314 | foreach (bool l8 in compileTerm(X3, State, Arg3)) | ||
3315 | { | ||
3316 | foreach (bool l9 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor3"), new ListPair(NameCode, new ListPair(Arg1, new ListPair(Arg2, new ListPair(Arg3, Atom.NIL))))))) | ||
3317 | { | ||
3318 | yield return true; | ||
3319 | yield break; | ||
3320 | } | ||
3321 | } | ||
3322 | } | ||
3323 | } | ||
3324 | } | ||
3325 | foreach (bool l5 in maplist_compileTerm(TermArgs, State, Args)) | ||
3326 | { | ||
3327 | foreach (bool l6 in YP.unify(Result, new Functor2(@"new", Atom.a(@"Functor"), new ListPair(NameCode, new ListPair(new Functor1(@"objectArray", Args), Atom.NIL))))) | ||
3328 | { | ||
3329 | yield return true; | ||
3330 | yield break; | ||
3331 | } | ||
3332 | } | ||
3333 | cutIf7: | ||
3334 | cutIf6: | ||
3335 | { } | ||
3336 | } | ||
3337 | cutIf3: | ||
3338 | { } | ||
3339 | } | ||
3340 | cutIf2: | ||
3341 | { } | ||
3342 | } | ||
3343 | } | ||
3344 | } | ||
3345 | |||
3346 | public static IEnumerable<bool> compileAtomModule(object Name, object Arity, object State, object ModuleCode) | ||
3347 | { | ||
3348 | { | ||
3349 | if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a(@""))) | ||
3350 | { | ||
3351 | foreach (bool l3 in YP.unify(ModuleCode, new Functor2(@"call", Atom.a(@"Atom.a"), new ListPair(new Functor1(@"object", Atom.a(@"")), Atom.NIL)))) | ||
3352 | { | ||
3353 | yield return true; | ||
3354 | yield break; | ||
3355 | } | ||
3356 | } | ||
3357 | } | ||
3358 | } | ||
3359 | |||
3360 | public static IEnumerable<bool> maplist_compileTerm(object arg1, object arg2, object arg3) | ||
3361 | { | ||
3362 | { | ||
3363 | object _State = arg2; | ||
3364 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
3365 | { | ||
3366 | foreach (bool l3 in YP.unify(arg3, Atom.NIL)) | ||
3367 | { | ||
3368 | yield return true; | ||
3369 | yield break; | ||
3370 | } | ||
3371 | } | ||
3372 | } | ||
3373 | { | ||
3374 | object State = arg2; | ||
3375 | Variable First = new Variable(); | ||
3376 | Variable Rest = new Variable(); | ||
3377 | Variable FirstResult = new Variable(); | ||
3378 | Variable RestResults = new Variable(); | ||
3379 | foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) | ||
3380 | { | ||
3381 | foreach (bool l3 in YP.unify(arg3, new ListPair(FirstResult, RestResults))) | ||
3382 | { | ||
3383 | foreach (bool l4 in compileTerm(First, State, FirstResult)) | ||
3384 | { | ||
3385 | foreach (bool l5 in maplist_compileTerm(Rest, State, RestResults)) | ||
3386 | { | ||
3387 | yield return true; | ||
3388 | yield break; | ||
3389 | } | ||
3390 | } | ||
3391 | } | ||
3392 | } | ||
3393 | } | ||
3394 | } | ||
3395 | |||
3396 | public static IEnumerable<bool> compileExpression(object Term, object State, object Result) | ||
3397 | { | ||
3398 | { | ||
3399 | Variable Name = new Variable(); | ||
3400 | Variable TermArgs = new Variable(); | ||
3401 | Variable X1 = new Variable(); | ||
3402 | Variable FunctionName = new Variable(); | ||
3403 | Variable Arg1 = new Variable(); | ||
3404 | Variable x9 = new Variable(); | ||
3405 | Variable X2 = new Variable(); | ||
3406 | Variable Arg2 = new Variable(); | ||
3407 | Variable x12 = new Variable(); | ||
3408 | Variable Arity = new Variable(); | ||
3409 | if (YP.nonvar(Term)) | ||
3410 | { | ||
3411 | foreach (bool l3 in YP.univ(Term, new ListPair(Name, TermArgs))) | ||
3412 | { | ||
3413 | if (YP.atom(Name)) | ||
3414 | { | ||
3415 | foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) | ||
3416 | { | ||
3417 | foreach (bool l6 in unaryFunction(Name, FunctionName)) | ||
3418 | { | ||
3419 | foreach (bool l7 in compileExpression(X1, State, Arg1)) | ||
3420 | { | ||
3421 | foreach (bool l8 in YP.unify(Result, new Functor2(@"call", FunctionName, new ListPair(Arg1, Atom.NIL)))) | ||
3422 | { | ||
3423 | yield return true; | ||
3424 | yield break; | ||
3425 | } | ||
3426 | } | ||
3427 | goto cutIf1; | ||
3428 | } | ||
3429 | } | ||
3430 | foreach (bool l5 in YP.unify(Term, new ListPair(x9, Atom.NIL))) | ||
3431 | { | ||
3432 | foreach (bool l6 in compileTerm(Term, State, Result)) | ||
3433 | { | ||
3434 | yield return true; | ||
3435 | yield break; | ||
3436 | } | ||
3437 | goto cutIf2; | ||
3438 | } | ||
3439 | foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) | ||
3440 | { | ||
3441 | foreach (bool l6 in binaryFunction(Name, FunctionName)) | ||
3442 | { | ||
3443 | foreach (bool l7 in compileExpression(X1, State, Arg1)) | ||
3444 | { | ||
3445 | foreach (bool l8 in compileExpression(X2, State, Arg2)) | ||
3446 | { | ||
3447 | foreach (bool l9 in YP.unify(Result, new Functor2(@"call", FunctionName, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL))))) | ||
3448 | { | ||
3449 | yield return true; | ||
3450 | yield break; | ||
3451 | } | ||
3452 | } | ||
3453 | } | ||
3454 | goto cutIf3; | ||
3455 | } | ||
3456 | } | ||
3457 | foreach (bool l5 in YP.functor(Term, x12, Arity)) | ||
3458 | { | ||
3459 | YP.throwException(new Functor2(@"error", new Functor2(@"type_error", Atom.a(@"evaluable"), new Functor2(@"/", Name, Arity)), Atom.a(@"Not an expression function"))); | ||
3460 | yield return false; | ||
3461 | } | ||
3462 | cutIf3: | ||
3463 | cutIf2: | ||
3464 | cutIf1: | ||
3465 | { } | ||
3466 | } | ||
3467 | } | ||
3468 | } | ||
3469 | } | ||
3470 | { | ||
3471 | foreach (bool l2 in compileTerm(Term, State, Result)) | ||
3472 | { | ||
3473 | yield return true; | ||
3474 | yield break; | ||
3475 | } | ||
3476 | } | ||
3477 | } | ||
3478 | |||
3479 | public static IEnumerable<bool> unaryFunction(object arg1, object arg2) | ||
3480 | { | ||
3481 | { | ||
3482 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"-"))) | ||
3483 | { | ||
3484 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.negate"))) | ||
3485 | { | ||
3486 | yield return true; | ||
3487 | yield break; | ||
3488 | } | ||
3489 | } | ||
3490 | } | ||
3491 | { | ||
3492 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"abs"))) | ||
3493 | { | ||
3494 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.abs"))) | ||
3495 | { | ||
3496 | yield return true; | ||
3497 | yield break; | ||
3498 | } | ||
3499 | } | ||
3500 | } | ||
3501 | { | ||
3502 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"sign"))) | ||
3503 | { | ||
3504 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.sign"))) | ||
3505 | { | ||
3506 | yield return true; | ||
3507 | yield break; | ||
3508 | } | ||
3509 | } | ||
3510 | } | ||
3511 | { | ||
3512 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"floor"))) | ||
3513 | { | ||
3514 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.floor"))) | ||
3515 | { | ||
3516 | yield return true; | ||
3517 | yield break; | ||
3518 | } | ||
3519 | } | ||
3520 | } | ||
3521 | { | ||
3522 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"truncate"))) | ||
3523 | { | ||
3524 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.truncate"))) | ||
3525 | { | ||
3526 | yield return true; | ||
3527 | yield break; | ||
3528 | } | ||
3529 | } | ||
3530 | } | ||
3531 | { | ||
3532 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"round"))) | ||
3533 | { | ||
3534 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.round"))) | ||
3535 | { | ||
3536 | yield return true; | ||
3537 | yield break; | ||
3538 | } | ||
3539 | } | ||
3540 | } | ||
3541 | { | ||
3542 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"floor"))) | ||
3543 | { | ||
3544 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.ceiling"))) | ||
3545 | { | ||
3546 | yield return true; | ||
3547 | yield break; | ||
3548 | } | ||
3549 | } | ||
3550 | } | ||
3551 | { | ||
3552 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"sin"))) | ||
3553 | { | ||
3554 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.sin"))) | ||
3555 | { | ||
3556 | yield return true; | ||
3557 | yield break; | ||
3558 | } | ||
3559 | } | ||
3560 | } | ||
3561 | { | ||
3562 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"cos"))) | ||
3563 | { | ||
3564 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.cos"))) | ||
3565 | { | ||
3566 | yield return true; | ||
3567 | yield break; | ||
3568 | } | ||
3569 | } | ||
3570 | } | ||
3571 | { | ||
3572 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"atan"))) | ||
3573 | { | ||
3574 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.atan"))) | ||
3575 | { | ||
3576 | yield return true; | ||
3577 | yield break; | ||
3578 | } | ||
3579 | } | ||
3580 | } | ||
3581 | { | ||
3582 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"exp"))) | ||
3583 | { | ||
3584 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.exp"))) | ||
3585 | { | ||
3586 | yield return true; | ||
3587 | yield break; | ||
3588 | } | ||
3589 | } | ||
3590 | } | ||
3591 | { | ||
3592 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"log"))) | ||
3593 | { | ||
3594 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.log"))) | ||
3595 | { | ||
3596 | yield return true; | ||
3597 | yield break; | ||
3598 | } | ||
3599 | } | ||
3600 | } | ||
3601 | { | ||
3602 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"sqrt"))) | ||
3603 | { | ||
3604 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.sqrt"))) | ||
3605 | { | ||
3606 | yield return true; | ||
3607 | yield break; | ||
3608 | } | ||
3609 | } | ||
3610 | } | ||
3611 | { | ||
3612 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"\"))) | ||
3613 | { | ||
3614 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.bitwiseComplement"))) | ||
3615 | { | ||
3616 | yield return true; | ||
3617 | yield break; | ||
3618 | } | ||
3619 | } | ||
3620 | } | ||
3621 | } | ||
3622 | |||
3623 | public static IEnumerable<bool> binaryFunction(object arg1, object arg2) | ||
3624 | { | ||
3625 | { | ||
3626 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"+"))) | ||
3627 | { | ||
3628 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.add"))) | ||
3629 | { | ||
3630 | yield return true; | ||
3631 | yield break; | ||
3632 | } | ||
3633 | } | ||
3634 | } | ||
3635 | { | ||
3636 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"-"))) | ||
3637 | { | ||
3638 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.subtract"))) | ||
3639 | { | ||
3640 | yield return true; | ||
3641 | yield break; | ||
3642 | } | ||
3643 | } | ||
3644 | } | ||
3645 | { | ||
3646 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"*"))) | ||
3647 | { | ||
3648 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.multiply"))) | ||
3649 | { | ||
3650 | yield return true; | ||
3651 | yield break; | ||
3652 | } | ||
3653 | } | ||
3654 | } | ||
3655 | { | ||
3656 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"/"))) | ||
3657 | { | ||
3658 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.divide"))) | ||
3659 | { | ||
3660 | yield return true; | ||
3661 | yield break; | ||
3662 | } | ||
3663 | } | ||
3664 | } | ||
3665 | { | ||
3666 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"//"))) | ||
3667 | { | ||
3668 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.intDivide"))) | ||
3669 | { | ||
3670 | yield return true; | ||
3671 | yield break; | ||
3672 | } | ||
3673 | } | ||
3674 | } | ||
3675 | { | ||
3676 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"mod"))) | ||
3677 | { | ||
3678 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.mod"))) | ||
3679 | { | ||
3680 | yield return true; | ||
3681 | yield break; | ||
3682 | } | ||
3683 | } | ||
3684 | } | ||
3685 | { | ||
3686 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"**"))) | ||
3687 | { | ||
3688 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.pow"))) | ||
3689 | { | ||
3690 | yield return true; | ||
3691 | yield break; | ||
3692 | } | ||
3693 | } | ||
3694 | } | ||
3695 | { | ||
3696 | foreach (bool l2 in YP.unify(arg1, Atom.a(@">>"))) | ||
3697 | { | ||
3698 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.bitwiseShiftRight"))) | ||
3699 | { | ||
3700 | yield return true; | ||
3701 | yield break; | ||
3702 | } | ||
3703 | } | ||
3704 | } | ||
3705 | { | ||
3706 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"<<"))) | ||
3707 | { | ||
3708 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.bitwiseShiftLeft"))) | ||
3709 | { | ||
3710 | yield return true; | ||
3711 | yield break; | ||
3712 | } | ||
3713 | } | ||
3714 | } | ||
3715 | { | ||
3716 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"/\"))) | ||
3717 | { | ||
3718 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.bitwiseAnd"))) | ||
3719 | { | ||
3720 | yield return true; | ||
3721 | yield break; | ||
3722 | } | ||
3723 | } | ||
3724 | } | ||
3725 | { | ||
3726 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"\/"))) | ||
3727 | { | ||
3728 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.bitwiseOr"))) | ||
3729 | { | ||
3730 | yield return true; | ||
3731 | yield break; | ||
3732 | } | ||
3733 | } | ||
3734 | } | ||
3735 | { | ||
3736 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"min"))) | ||
3737 | { | ||
3738 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.min"))) | ||
3739 | { | ||
3740 | yield return true; | ||
3741 | yield break; | ||
3742 | } | ||
3743 | } | ||
3744 | } | ||
3745 | { | ||
3746 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"max"))) | ||
3747 | { | ||
3748 | foreach (bool l3 in YP.unify(arg2, Atom.a(@"YP.max"))) | ||
3749 | { | ||
3750 | yield return true; | ||
3751 | yield break; | ||
3752 | } | ||
3753 | } | ||
3754 | } | ||
3755 | } | ||
3756 | |||
3757 | public static void convertFunctionCSharp(object arg1) | ||
3758 | { | ||
3759 | { | ||
3760 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"getDeclaringClass"))) | ||
3761 | { | ||
3762 | YP.write(Atom.a(@"public class YPInnerClass {}")); | ||
3763 | YP.nl(); | ||
3764 | YP.write(Atom.a(@"public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }")); | ||
3765 | YP.nl(); | ||
3766 | YP.nl(); | ||
3767 | return; | ||
3768 | } | ||
3769 | } | ||
3770 | { | ||
3771 | Variable ReturnType = new Variable(); | ||
3772 | Variable Name = new Variable(); | ||
3773 | Variable ArgList = new Variable(); | ||
3774 | Variable Body = new Variable(); | ||
3775 | Variable Level = new Variable(); | ||
3776 | foreach (bool l2 in YP.unify(arg1, new Functor(@"function", new object[] { ReturnType, Name, ArgList, Body }))) | ||
3777 | { | ||
3778 | YP.write(Atom.a(@"public static ")); | ||
3779 | YP.write(ReturnType); | ||
3780 | YP.write(Atom.a(@" ")); | ||
3781 | YP.write(Name); | ||
3782 | YP.write(Atom.a(@"(")); | ||
3783 | convertArgListCSharp(ArgList); | ||
3784 | YP.write(Atom.a(@") {")); | ||
3785 | YP.nl(); | ||
3786 | foreach (bool l3 in YP.unify(Level, 1)) | ||
3787 | { | ||
3788 | convertStatementListCSharp(Body, Level); | ||
3789 | YP.write(Atom.a(@"}")); | ||
3790 | YP.nl(); | ||
3791 | YP.nl(); | ||
3792 | return; | ||
3793 | } | ||
3794 | } | ||
3795 | } | ||
3796 | } | ||
3797 | |||
3798 | public static IEnumerable<bool> convertStatementListCSharp(object arg1, object x1, object x2) | ||
3799 | { | ||
3800 | { | ||
3801 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
3802 | { | ||
3803 | yield return true; | ||
3804 | yield break; | ||
3805 | } | ||
3806 | } | ||
3807 | } | ||
3808 | |||
3809 | public static void convertStatementListCSharp(object arg1, object Level) | ||
3810 | { | ||
3811 | { | ||
3812 | Variable Name = new Variable(); | ||
3813 | Variable Body = new Variable(); | ||
3814 | Variable RestStatements = new Variable(); | ||
3815 | Variable NewStatements = new Variable(); | ||
3816 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"breakableBlock", Name, Body), RestStatements))) | ||
3817 | { | ||
3818 | foreach (bool l3 in append(Body, new ListPair(new Functor1(@"label", Name), RestStatements), NewStatements)) | ||
3819 | { | ||
3820 | convertStatementListCSharp(NewStatements, Level); | ||
3821 | return; | ||
3822 | } | ||
3823 | } | ||
3824 | } | ||
3825 | { | ||
3826 | Variable Type = new Variable(); | ||
3827 | Variable Name = new Variable(); | ||
3828 | Variable Expression = new Variable(); | ||
3829 | Variable RestStatements = new Variable(); | ||
3830 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"declare", Type, Name, Expression), RestStatements))) | ||
3831 | { | ||
3832 | convertIndentationCSharp(Level); | ||
3833 | YP.write(Type); | ||
3834 | YP.write(Atom.a(@" ")); | ||
3835 | YP.write(Name); | ||
3836 | YP.write(Atom.a(@" = ")); | ||
3837 | convertExpressionCSharp(Expression); | ||
3838 | YP.write(Atom.a(@";")); | ||
3839 | YP.nl(); | ||
3840 | convertStatementListCSharp(RestStatements, Level); | ||
3841 | return; | ||
3842 | } | ||
3843 | } | ||
3844 | { | ||
3845 | Variable Name = new Variable(); | ||
3846 | Variable Expression = new Variable(); | ||
3847 | Variable RestStatements = new Variable(); | ||
3848 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"assign", Name, Expression), RestStatements))) | ||
3849 | { | ||
3850 | convertIndentationCSharp(Level); | ||
3851 | YP.write(Name); | ||
3852 | YP.write(Atom.a(@" = ")); | ||
3853 | convertExpressionCSharp(Expression); | ||
3854 | YP.write(Atom.a(@";")); | ||
3855 | YP.nl(); | ||
3856 | convertStatementListCSharp(RestStatements, Level); | ||
3857 | return; | ||
3858 | } | ||
3859 | } | ||
3860 | { | ||
3861 | Variable RestStatements = new Variable(); | ||
3862 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldtrue"), RestStatements))) | ||
3863 | { | ||
3864 | convertIndentationCSharp(Level); | ||
3865 | YP.write(Atom.a(@"yield return true;")); | ||
3866 | YP.nl(); | ||
3867 | convertStatementListCSharp(RestStatements, Level); | ||
3868 | return; | ||
3869 | } | ||
3870 | } | ||
3871 | { | ||
3872 | Variable RestStatements = new Variable(); | ||
3873 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldfalse"), RestStatements))) | ||
3874 | { | ||
3875 | convertIndentationCSharp(Level); | ||
3876 | YP.write(Atom.a(@"yield return false;")); | ||
3877 | YP.nl(); | ||
3878 | convertStatementListCSharp(RestStatements, Level); | ||
3879 | return; | ||
3880 | } | ||
3881 | } | ||
3882 | { | ||
3883 | Variable RestStatements = new Variable(); | ||
3884 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldbreak"), RestStatements))) | ||
3885 | { | ||
3886 | convertIndentationCSharp(Level); | ||
3887 | YP.write(Atom.a(@"yield break;")); | ||
3888 | YP.nl(); | ||
3889 | convertStatementListCSharp(RestStatements, Level); | ||
3890 | return; | ||
3891 | } | ||
3892 | } | ||
3893 | { | ||
3894 | Variable RestStatements = new Variable(); | ||
3895 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"return"), RestStatements))) | ||
3896 | { | ||
3897 | convertIndentationCSharp(Level); | ||
3898 | YP.write(Atom.a(@"return;")); | ||
3899 | YP.nl(); | ||
3900 | convertStatementListCSharp(RestStatements, Level); | ||
3901 | return; | ||
3902 | } | ||
3903 | } | ||
3904 | { | ||
3905 | Variable RestStatements = new Variable(); | ||
3906 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returntrue"), RestStatements))) | ||
3907 | { | ||
3908 | convertIndentationCSharp(Level); | ||
3909 | YP.write(Atom.a(@"return true;")); | ||
3910 | YP.nl(); | ||
3911 | convertStatementListCSharp(RestStatements, Level); | ||
3912 | return; | ||
3913 | } | ||
3914 | } | ||
3915 | { | ||
3916 | Variable RestStatements = new Variable(); | ||
3917 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returnfalse"), RestStatements))) | ||
3918 | { | ||
3919 | convertIndentationCSharp(Level); | ||
3920 | YP.write(Atom.a(@"return false;")); | ||
3921 | YP.nl(); | ||
3922 | convertStatementListCSharp(RestStatements, Level); | ||
3923 | return; | ||
3924 | } | ||
3925 | } | ||
3926 | { | ||
3927 | Variable Name = new Variable(); | ||
3928 | Variable RestStatements = new Variable(); | ||
3929 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"label", Name), RestStatements))) | ||
3930 | { | ||
3931 | convertIndentationCSharp(Level); | ||
3932 | YP.write(Name); | ||
3933 | YP.write(Atom.a(@":")); | ||
3934 | YP.nl(); | ||
3935 | if (YP.termEqual(RestStatements, Atom.NIL)) | ||
3936 | { | ||
3937 | convertIndentationCSharp(Level); | ||
3938 | YP.write(Atom.a(@"{}")); | ||
3939 | YP.nl(); | ||
3940 | convertStatementListCSharp(RestStatements, Level); | ||
3941 | return; | ||
3942 | goto cutIf1; | ||
3943 | } | ||
3944 | convertStatementListCSharp(RestStatements, Level); | ||
3945 | return; | ||
3946 | cutIf1: | ||
3947 | { } | ||
3948 | } | ||
3949 | } | ||
3950 | { | ||
3951 | Variable Name = new Variable(); | ||
3952 | Variable RestStatements = new Variable(); | ||
3953 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"breakBlock", Name), RestStatements))) | ||
3954 | { | ||
3955 | convertIndentationCSharp(Level); | ||
3956 | YP.write(Atom.a(@"goto ")); | ||
3957 | YP.write(Name); | ||
3958 | YP.write(Atom.a(@";")); | ||
3959 | YP.nl(); | ||
3960 | convertStatementListCSharp(RestStatements, Level); | ||
3961 | return; | ||
3962 | } | ||
3963 | } | ||
3964 | { | ||
3965 | Variable Name = new Variable(); | ||
3966 | Variable ArgList = new Variable(); | ||
3967 | Variable RestStatements = new Variable(); | ||
3968 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"call", Name, ArgList), RestStatements))) | ||
3969 | { | ||
3970 | convertIndentationCSharp(Level); | ||
3971 | YP.write(Name); | ||
3972 | YP.write(Atom.a(@"(")); | ||
3973 | convertArgListCSharp(ArgList); | ||
3974 | YP.write(Atom.a(@");")); | ||
3975 | YP.nl(); | ||
3976 | convertStatementListCSharp(RestStatements, Level); | ||
3977 | return; | ||
3978 | } | ||
3979 | } | ||
3980 | { | ||
3981 | Variable Obj = new Variable(); | ||
3982 | Variable Name = new Variable(); | ||
3983 | Variable ArgList = new Variable(); | ||
3984 | Variable RestStatements = new Variable(); | ||
3985 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList), RestStatements))) | ||
3986 | { | ||
3987 | convertIndentationCSharp(Level); | ||
3988 | YP.write(Obj); | ||
3989 | YP.write(Atom.a(@".")); | ||
3990 | YP.write(Name); | ||
3991 | YP.write(Atom.a(@"(")); | ||
3992 | convertArgListCSharp(ArgList); | ||
3993 | YP.write(Atom.a(@");")); | ||
3994 | YP.nl(); | ||
3995 | convertStatementListCSharp(RestStatements, Level); | ||
3996 | return; | ||
3997 | } | ||
3998 | } | ||
3999 | { | ||
4000 | Variable Body = new Variable(); | ||
4001 | Variable RestStatements = new Variable(); | ||
4002 | Variable NextLevel = new Variable(); | ||
4003 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"blockScope", Body), RestStatements))) | ||
4004 | { | ||
4005 | convertIndentationCSharp(Level); | ||
4006 | YP.write(Atom.a(@"{")); | ||
4007 | YP.nl(); | ||
4008 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4009 | { | ||
4010 | convertStatementListCSharp(Body, NextLevel); | ||
4011 | convertIndentationCSharp(Level); | ||
4012 | YP.write(Atom.a(@"}")); | ||
4013 | YP.nl(); | ||
4014 | convertStatementListCSharp(RestStatements, Level); | ||
4015 | return; | ||
4016 | } | ||
4017 | } | ||
4018 | } | ||
4019 | { | ||
4020 | Variable Expression = new Variable(); | ||
4021 | Variable Body = new Variable(); | ||
4022 | Variable RestStatements = new Variable(); | ||
4023 | Variable NextLevel = new Variable(); | ||
4024 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"if", Expression, Body), RestStatements))) | ||
4025 | { | ||
4026 | convertIndentationCSharp(Level); | ||
4027 | YP.write(Atom.a(@"if (")); | ||
4028 | convertExpressionCSharp(Expression); | ||
4029 | YP.write(Atom.a(@") {")); | ||
4030 | YP.nl(); | ||
4031 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4032 | { | ||
4033 | convertStatementListCSharp(Body, NextLevel); | ||
4034 | convertIndentationCSharp(Level); | ||
4035 | YP.write(Atom.a(@"}")); | ||
4036 | YP.nl(); | ||
4037 | convertStatementListCSharp(RestStatements, Level); | ||
4038 | return; | ||
4039 | } | ||
4040 | } | ||
4041 | } | ||
4042 | { | ||
4043 | Variable Expression = new Variable(); | ||
4044 | Variable Body = new Variable(); | ||
4045 | Variable RestStatements = new Variable(); | ||
4046 | Variable NextLevel = new Variable(); | ||
4047 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"foreach", Expression, Body), RestStatements))) | ||
4048 | { | ||
4049 | convertIndentationCSharp(Level); | ||
4050 | YP.write(Atom.a(@"foreach (bool l")); | ||
4051 | YP.write(Level); | ||
4052 | YP.write(Atom.a(@" in ")); | ||
4053 | convertExpressionCSharp(Expression); | ||
4054 | YP.write(Atom.a(@") {")); | ||
4055 | YP.nl(); | ||
4056 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4057 | { | ||
4058 | convertStatementListCSharp(Body, NextLevel); | ||
4059 | convertIndentationCSharp(Level); | ||
4060 | YP.write(Atom.a(@"}")); | ||
4061 | YP.nl(); | ||
4062 | convertStatementListCSharp(RestStatements, Level); | ||
4063 | return; | ||
4064 | } | ||
4065 | } | ||
4066 | } | ||
4067 | { | ||
4068 | Variable Expression = new Variable(); | ||
4069 | Variable RestStatements = new Variable(); | ||
4070 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"throw", Expression), RestStatements))) | ||
4071 | { | ||
4072 | convertIndentationCSharp(Level); | ||
4073 | YP.write(Atom.a(@"throw ")); | ||
4074 | convertExpressionCSharp(Expression); | ||
4075 | YP.write(Atom.a(@";")); | ||
4076 | YP.nl(); | ||
4077 | convertStatementListCSharp(RestStatements, Level); | ||
4078 | return; | ||
4079 | } | ||
4080 | } | ||
4081 | } | ||
4082 | |||
4083 | public static void convertIndentationCSharp(object Level) | ||
4084 | { | ||
4085 | { | ||
4086 | Variable N = new Variable(); | ||
4087 | foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) | ||
4088 | { | ||
4089 | repeatWrite(Atom.a(@" "), N); | ||
4090 | return; | ||
4091 | } | ||
4092 | } | ||
4093 | } | ||
4094 | |||
4095 | public static void convertArgListCSharp(object arg1) | ||
4096 | { | ||
4097 | { | ||
4098 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4099 | { | ||
4100 | return; | ||
4101 | } | ||
4102 | } | ||
4103 | { | ||
4104 | Variable Head = new Variable(); | ||
4105 | Variable Tail = new Variable(); | ||
4106 | foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) | ||
4107 | { | ||
4108 | convertExpressionCSharp(Head); | ||
4109 | if (YP.termNotEqual(Tail, Atom.NIL)) | ||
4110 | { | ||
4111 | YP.write(Atom.a(@", ")); | ||
4112 | convertArgListCSharp(Tail); | ||
4113 | return; | ||
4114 | goto cutIf1; | ||
4115 | } | ||
4116 | convertArgListCSharp(Tail); | ||
4117 | return; | ||
4118 | cutIf1: | ||
4119 | { } | ||
4120 | } | ||
4121 | } | ||
4122 | } | ||
4123 | |||
4124 | public static void convertExpressionCSharp(object arg1) | ||
4125 | { | ||
4126 | { | ||
4127 | Variable X = new Variable(); | ||
4128 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"arg", X))) | ||
4129 | { | ||
4130 | YP.write(Atom.a(@"object ")); | ||
4131 | YP.write(X); | ||
4132 | return; | ||
4133 | } | ||
4134 | } | ||
4135 | { | ||
4136 | Variable Name = new Variable(); | ||
4137 | Variable ArgList = new Variable(); | ||
4138 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"call", Name, ArgList))) | ||
4139 | { | ||
4140 | YP.write(Name); | ||
4141 | YP.write(Atom.a(@"(")); | ||
4142 | convertArgListCSharp(ArgList); | ||
4143 | YP.write(Atom.a(@")")); | ||
4144 | return; | ||
4145 | } | ||
4146 | } | ||
4147 | { | ||
4148 | Variable Obj = new Variable(); | ||
4149 | Variable Name = new Variable(); | ||
4150 | Variable ArgList = new Variable(); | ||
4151 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList))) | ||
4152 | { | ||
4153 | YP.write(Obj); | ||
4154 | YP.write(Atom.a(@".")); | ||
4155 | YP.write(Name); | ||
4156 | YP.write(Atom.a(@"(")); | ||
4157 | convertArgListCSharp(ArgList); | ||
4158 | YP.write(Atom.a(@")")); | ||
4159 | return; | ||
4160 | } | ||
4161 | } | ||
4162 | { | ||
4163 | Variable Name = new Variable(); | ||
4164 | Variable ArgList = new Variable(); | ||
4165 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"new", Name, ArgList))) | ||
4166 | { | ||
4167 | YP.write(Atom.a(@"new ")); | ||
4168 | YP.write(Name); | ||
4169 | YP.write(Atom.a(@"(")); | ||
4170 | convertArgListCSharp(ArgList); | ||
4171 | YP.write(Atom.a(@")")); | ||
4172 | return; | ||
4173 | } | ||
4174 | } | ||
4175 | { | ||
4176 | Variable Name = new Variable(); | ||
4177 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"var", Name))) | ||
4178 | { | ||
4179 | YP.write(Name); | ||
4180 | return; | ||
4181 | } | ||
4182 | } | ||
4183 | { | ||
4184 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"null"))) | ||
4185 | { | ||
4186 | YP.write(Atom.a(@"null")); | ||
4187 | return; | ||
4188 | } | ||
4189 | } | ||
4190 | { | ||
4191 | Variable X = new Variable(); | ||
4192 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"not", X))) | ||
4193 | { | ||
4194 | YP.write(Atom.a(@"!(")); | ||
4195 | convertExpressionCSharp(X); | ||
4196 | YP.write(Atom.a(@")")); | ||
4197 | return; | ||
4198 | } | ||
4199 | } | ||
4200 | { | ||
4201 | Variable X = new Variable(); | ||
4202 | Variable Y = new Variable(); | ||
4203 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"and", X, Y))) | ||
4204 | { | ||
4205 | YP.write(Atom.a(@"(")); | ||
4206 | convertExpressionCSharp(X); | ||
4207 | YP.write(Atom.a(@") && (")); | ||
4208 | convertExpressionCSharp(Y); | ||
4209 | YP.write(Atom.a(@")")); | ||
4210 | return; | ||
4211 | } | ||
4212 | } | ||
4213 | { | ||
4214 | Variable ArgList = new Variable(); | ||
4215 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"objectArray", ArgList))) | ||
4216 | { | ||
4217 | YP.write(Atom.a(@"new object[] {")); | ||
4218 | convertArgListCSharp(ArgList); | ||
4219 | YP.write(Atom.a(@"}")); | ||
4220 | return; | ||
4221 | } | ||
4222 | } | ||
4223 | { | ||
4224 | Variable X = new Variable(); | ||
4225 | Variable Codes = new Variable(); | ||
4226 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
4227 | { | ||
4228 | if (YP.atom(X)) | ||
4229 | { | ||
4230 | YP.write(Atom.a(@"@""")); | ||
4231 | foreach (bool l4 in YP.atom_codes(X, Codes)) | ||
4232 | { | ||
4233 | convertStringCodesCSharp(Codes); | ||
4234 | YP.write(Atom.a(@"""")); | ||
4235 | return; | ||
4236 | } | ||
4237 | } | ||
4238 | } | ||
4239 | } | ||
4240 | { | ||
4241 | Variable X = new Variable(); | ||
4242 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
4243 | { | ||
4244 | YP.write(X); | ||
4245 | return; | ||
4246 | } | ||
4247 | } | ||
4248 | } | ||
4249 | |||
4250 | public static void convertStringCodesCSharp(object arg1) | ||
4251 | { | ||
4252 | { | ||
4253 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4254 | { | ||
4255 | return; | ||
4256 | } | ||
4257 | } | ||
4258 | { | ||
4259 | Variable Code = new Variable(); | ||
4260 | Variable RestCodes = new Variable(); | ||
4261 | foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) | ||
4262 | { | ||
4263 | if (YP.termEqual(Code, 34)) | ||
4264 | { | ||
4265 | YP.put_code(34); | ||
4266 | YP.put_code(Code); | ||
4267 | convertStringCodesCSharp(RestCodes); | ||
4268 | return; | ||
4269 | goto cutIf1; | ||
4270 | } | ||
4271 | YP.put_code(Code); | ||
4272 | convertStringCodesCSharp(RestCodes); | ||
4273 | return; | ||
4274 | cutIf1: | ||
4275 | { } | ||
4276 | } | ||
4277 | } | ||
4278 | } | ||
4279 | |||
4280 | public static void convertFunctionJavascript(object arg1) | ||
4281 | { | ||
4282 | { | ||
4283 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"getDeclaringClass"))) | ||
4284 | { | ||
4285 | YP.write(Atom.a(@"function getDeclaringClass() { return null; }")); | ||
4286 | YP.nl(); | ||
4287 | return; | ||
4288 | } | ||
4289 | } | ||
4290 | { | ||
4291 | Variable x1 = new Variable(); | ||
4292 | Variable Name = new Variable(); | ||
4293 | Variable ArgList = new Variable(); | ||
4294 | Variable Body = new Variable(); | ||
4295 | foreach (bool l2 in YP.unify(arg1, new Functor(@"function", new object[] { x1, Name, ArgList, Body }))) | ||
4296 | { | ||
4297 | YP.write(Atom.a(@"function ")); | ||
4298 | YP.write(Name); | ||
4299 | YP.write(Atom.a(@"(")); | ||
4300 | convertArgListJavascript(ArgList); | ||
4301 | YP.write(Atom.a(@") {")); | ||
4302 | YP.nl(); | ||
4303 | convertStatementListJavascript(Body, 1); | ||
4304 | YP.write(Atom.a(@"}")); | ||
4305 | YP.nl(); | ||
4306 | YP.nl(); | ||
4307 | return; | ||
4308 | } | ||
4309 | } | ||
4310 | } | ||
4311 | |||
4312 | public static void convertStatementListJavascript(object arg1, object arg2) | ||
4313 | { | ||
4314 | { | ||
4315 | object x1 = arg2; | ||
4316 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4317 | { | ||
4318 | return; | ||
4319 | } | ||
4320 | } | ||
4321 | { | ||
4322 | object Level = arg2; | ||
4323 | Variable Name = new Variable(); | ||
4324 | Variable Body = new Variable(); | ||
4325 | Variable RestStatements = new Variable(); | ||
4326 | Variable NextLevel = new Variable(); | ||
4327 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"breakableBlock", Name, Body), RestStatements))) | ||
4328 | { | ||
4329 | convertIndentationJavascript(Level); | ||
4330 | YP.write(Name); | ||
4331 | YP.write(Atom.a(@":")); | ||
4332 | YP.nl(); | ||
4333 | convertIndentationJavascript(Level); | ||
4334 | YP.write(Atom.a(@"{")); | ||
4335 | YP.nl(); | ||
4336 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4337 | { | ||
4338 | convertStatementListJavascript(Body, NextLevel); | ||
4339 | convertIndentationJavascript(Level); | ||
4340 | YP.write(Atom.a(@"}")); | ||
4341 | YP.nl(); | ||
4342 | convertStatementListJavascript(RestStatements, Level); | ||
4343 | return; | ||
4344 | } | ||
4345 | } | ||
4346 | } | ||
4347 | { | ||
4348 | object Level = arg2; | ||
4349 | Variable _Type = new Variable(); | ||
4350 | Variable Name = new Variable(); | ||
4351 | Variable Expression = new Variable(); | ||
4352 | Variable RestStatements = new Variable(); | ||
4353 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"declare", _Type, Name, Expression), RestStatements))) | ||
4354 | { | ||
4355 | convertIndentationJavascript(Level); | ||
4356 | YP.write(Atom.a(@"var ")); | ||
4357 | YP.write(Name); | ||
4358 | YP.write(Atom.a(@" = ")); | ||
4359 | convertExpressionJavascript(Expression); | ||
4360 | YP.write(Atom.a(@";")); | ||
4361 | YP.nl(); | ||
4362 | convertStatementListJavascript(RestStatements, Level); | ||
4363 | return; | ||
4364 | } | ||
4365 | } | ||
4366 | { | ||
4367 | object Level = arg2; | ||
4368 | Variable Name = new Variable(); | ||
4369 | Variable Expression = new Variable(); | ||
4370 | Variable RestStatements = new Variable(); | ||
4371 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"assign", Name, Expression), RestStatements))) | ||
4372 | { | ||
4373 | convertIndentationJavascript(Level); | ||
4374 | YP.write(Name); | ||
4375 | YP.write(Atom.a(@" = ")); | ||
4376 | convertExpressionJavascript(Expression); | ||
4377 | YP.write(Atom.a(@";")); | ||
4378 | YP.nl(); | ||
4379 | convertStatementListJavascript(RestStatements, Level); | ||
4380 | return; | ||
4381 | } | ||
4382 | } | ||
4383 | { | ||
4384 | object Level = arg2; | ||
4385 | Variable RestStatements = new Variable(); | ||
4386 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldtrue"), RestStatements))) | ||
4387 | { | ||
4388 | convertIndentationJavascript(Level); | ||
4389 | YP.write(Atom.a(@"yield true;")); | ||
4390 | YP.nl(); | ||
4391 | convertStatementListJavascript(RestStatements, Level); | ||
4392 | return; | ||
4393 | } | ||
4394 | } | ||
4395 | { | ||
4396 | object Level = arg2; | ||
4397 | Variable RestStatements = new Variable(); | ||
4398 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldfalse"), RestStatements))) | ||
4399 | { | ||
4400 | convertIndentationJavascript(Level); | ||
4401 | YP.write(Atom.a(@"yield false;")); | ||
4402 | YP.nl(); | ||
4403 | convertStatementListJavascript(RestStatements, Level); | ||
4404 | return; | ||
4405 | } | ||
4406 | } | ||
4407 | { | ||
4408 | object Level = arg2; | ||
4409 | Variable RestStatements = new Variable(); | ||
4410 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldbreak"), RestStatements))) | ||
4411 | { | ||
4412 | convertIndentationJavascript(Level); | ||
4413 | YP.write(Atom.a(@"return;")); | ||
4414 | YP.nl(); | ||
4415 | convertStatementListJavascript(RestStatements, Level); | ||
4416 | return; | ||
4417 | } | ||
4418 | } | ||
4419 | { | ||
4420 | object Level = arg2; | ||
4421 | Variable RestStatements = new Variable(); | ||
4422 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"return"), RestStatements))) | ||
4423 | { | ||
4424 | convertIndentationJavascript(Level); | ||
4425 | YP.write(Atom.a(@"return;")); | ||
4426 | YP.nl(); | ||
4427 | convertStatementListJavascript(RestStatements, Level); | ||
4428 | return; | ||
4429 | } | ||
4430 | } | ||
4431 | { | ||
4432 | object Level = arg2; | ||
4433 | Variable RestStatements = new Variable(); | ||
4434 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returntrue"), RestStatements))) | ||
4435 | { | ||
4436 | convertIndentationJavascript(Level); | ||
4437 | YP.write(Atom.a(@"return true;")); | ||
4438 | YP.nl(); | ||
4439 | convertStatementListJavascript(RestStatements, Level); | ||
4440 | return; | ||
4441 | } | ||
4442 | } | ||
4443 | { | ||
4444 | object Level = arg2; | ||
4445 | Variable RestStatements = new Variable(); | ||
4446 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returnfalse"), RestStatements))) | ||
4447 | { | ||
4448 | convertIndentationJavascript(Level); | ||
4449 | YP.write(Atom.a(@"return false;")); | ||
4450 | YP.nl(); | ||
4451 | convertStatementListJavascript(RestStatements, Level); | ||
4452 | return; | ||
4453 | } | ||
4454 | } | ||
4455 | { | ||
4456 | object Level = arg2; | ||
4457 | Variable Name = new Variable(); | ||
4458 | Variable RestStatements = new Variable(); | ||
4459 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"breakBlock", Name), RestStatements))) | ||
4460 | { | ||
4461 | convertIndentationJavascript(Level); | ||
4462 | YP.write(Atom.a(@"break ")); | ||
4463 | YP.write(Name); | ||
4464 | YP.write(Atom.a(@";")); | ||
4465 | YP.nl(); | ||
4466 | convertStatementListJavascript(RestStatements, Level); | ||
4467 | return; | ||
4468 | } | ||
4469 | } | ||
4470 | { | ||
4471 | object Level = arg2; | ||
4472 | Variable Name = new Variable(); | ||
4473 | Variable ArgList = new Variable(); | ||
4474 | Variable RestStatements = new Variable(); | ||
4475 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"call", Name, ArgList), RestStatements))) | ||
4476 | { | ||
4477 | convertIndentationJavascript(Level); | ||
4478 | YP.write(Name); | ||
4479 | YP.write(Atom.a(@"(")); | ||
4480 | convertArgListJavascript(ArgList); | ||
4481 | YP.write(Atom.a(@");")); | ||
4482 | YP.nl(); | ||
4483 | convertStatementListJavascript(RestStatements, Level); | ||
4484 | return; | ||
4485 | } | ||
4486 | } | ||
4487 | { | ||
4488 | object Level = arg2; | ||
4489 | Variable Obj = new Variable(); | ||
4490 | Variable Name = new Variable(); | ||
4491 | Variable ArgList = new Variable(); | ||
4492 | Variable RestStatements = new Variable(); | ||
4493 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList), RestStatements))) | ||
4494 | { | ||
4495 | convertIndentationJavascript(Level); | ||
4496 | YP.write(Obj); | ||
4497 | YP.write(Atom.a(@".")); | ||
4498 | YP.write(Name); | ||
4499 | YP.write(Atom.a(@"(")); | ||
4500 | convertArgListJavascript(ArgList); | ||
4501 | YP.write(Atom.a(@");")); | ||
4502 | YP.nl(); | ||
4503 | convertStatementListJavascript(RestStatements, Level); | ||
4504 | return; | ||
4505 | } | ||
4506 | } | ||
4507 | { | ||
4508 | object Level = arg2; | ||
4509 | Variable Body = new Variable(); | ||
4510 | Variable RestStatements = new Variable(); | ||
4511 | Variable NextLevel = new Variable(); | ||
4512 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"blockScope", Body), RestStatements))) | ||
4513 | { | ||
4514 | convertIndentationJavascript(Level); | ||
4515 | YP.write(Atom.a(@"{")); | ||
4516 | YP.nl(); | ||
4517 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4518 | { | ||
4519 | convertStatementListJavascript(Body, NextLevel); | ||
4520 | convertIndentationJavascript(Level); | ||
4521 | YP.write(Atom.a(@"}")); | ||
4522 | YP.nl(); | ||
4523 | convertStatementListJavascript(RestStatements, Level); | ||
4524 | return; | ||
4525 | } | ||
4526 | } | ||
4527 | } | ||
4528 | { | ||
4529 | object Level = arg2; | ||
4530 | Variable Expression = new Variable(); | ||
4531 | Variable Body = new Variable(); | ||
4532 | Variable RestStatements = new Variable(); | ||
4533 | Variable NextLevel = new Variable(); | ||
4534 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"if", Expression, Body), RestStatements))) | ||
4535 | { | ||
4536 | convertIndentationJavascript(Level); | ||
4537 | YP.write(Atom.a(@"if (")); | ||
4538 | convertExpressionJavascript(Expression); | ||
4539 | YP.write(Atom.a(@") {")); | ||
4540 | YP.nl(); | ||
4541 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4542 | { | ||
4543 | convertStatementListJavascript(Body, NextLevel); | ||
4544 | convertIndentationJavascript(Level); | ||
4545 | YP.write(Atom.a(@"}")); | ||
4546 | YP.nl(); | ||
4547 | convertStatementListJavascript(RestStatements, Level); | ||
4548 | return; | ||
4549 | } | ||
4550 | } | ||
4551 | } | ||
4552 | { | ||
4553 | object Level = arg2; | ||
4554 | Variable Expression = new Variable(); | ||
4555 | Variable Body = new Variable(); | ||
4556 | Variable RestStatements = new Variable(); | ||
4557 | Variable NextLevel = new Variable(); | ||
4558 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"foreach", Expression, Body), RestStatements))) | ||
4559 | { | ||
4560 | convertIndentationJavascript(Level); | ||
4561 | YP.write(Atom.a(@"for each (var l")); | ||
4562 | YP.write(Level); | ||
4563 | YP.write(Atom.a(@" in ")); | ||
4564 | convertExpressionJavascript(Expression); | ||
4565 | YP.write(Atom.a(@") {")); | ||
4566 | YP.nl(); | ||
4567 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4568 | { | ||
4569 | convertStatementListJavascript(Body, NextLevel); | ||
4570 | convertIndentationJavascript(Level); | ||
4571 | YP.write(Atom.a(@"}")); | ||
4572 | YP.nl(); | ||
4573 | convertStatementListJavascript(RestStatements, Level); | ||
4574 | return; | ||
4575 | } | ||
4576 | } | ||
4577 | } | ||
4578 | { | ||
4579 | object Level = arg2; | ||
4580 | Variable Expression = new Variable(); | ||
4581 | Variable RestStatements = new Variable(); | ||
4582 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"throw", Expression), RestStatements))) | ||
4583 | { | ||
4584 | convertIndentationJavascript(Level); | ||
4585 | YP.write(Atom.a(@"throw ")); | ||
4586 | convertExpressionJavascript(Expression); | ||
4587 | YP.write(Atom.a(@";")); | ||
4588 | YP.nl(); | ||
4589 | convertStatementListJavascript(RestStatements, Level); | ||
4590 | return; | ||
4591 | } | ||
4592 | } | ||
4593 | } | ||
4594 | |||
4595 | public static void convertIndentationJavascript(object Level) | ||
4596 | { | ||
4597 | { | ||
4598 | Variable N = new Variable(); | ||
4599 | foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) | ||
4600 | { | ||
4601 | repeatWrite(Atom.a(@" "), N); | ||
4602 | return; | ||
4603 | } | ||
4604 | } | ||
4605 | } | ||
4606 | |||
4607 | public static void convertArgListJavascript(object arg1) | ||
4608 | { | ||
4609 | { | ||
4610 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4611 | { | ||
4612 | return; | ||
4613 | } | ||
4614 | } | ||
4615 | { | ||
4616 | Variable Head = new Variable(); | ||
4617 | Variable Tail = new Variable(); | ||
4618 | foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) | ||
4619 | { | ||
4620 | convertExpressionJavascript(Head); | ||
4621 | if (YP.termNotEqual(Tail, Atom.NIL)) | ||
4622 | { | ||
4623 | YP.write(Atom.a(@", ")); | ||
4624 | convertArgListJavascript(Tail); | ||
4625 | return; | ||
4626 | goto cutIf1; | ||
4627 | } | ||
4628 | convertArgListJavascript(Tail); | ||
4629 | return; | ||
4630 | cutIf1: | ||
4631 | { } | ||
4632 | } | ||
4633 | } | ||
4634 | } | ||
4635 | |||
4636 | public static void convertExpressionJavascript(object arg1) | ||
4637 | { | ||
4638 | { | ||
4639 | Variable X = new Variable(); | ||
4640 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"arg", X))) | ||
4641 | { | ||
4642 | YP.write(X); | ||
4643 | return; | ||
4644 | } | ||
4645 | } | ||
4646 | { | ||
4647 | Variable Name = new Variable(); | ||
4648 | Variable ArgList = new Variable(); | ||
4649 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"call", Name, ArgList))) | ||
4650 | { | ||
4651 | YP.write(Name); | ||
4652 | YP.write(Atom.a(@"(")); | ||
4653 | convertArgListJavascript(ArgList); | ||
4654 | YP.write(Atom.a(@")")); | ||
4655 | return; | ||
4656 | } | ||
4657 | } | ||
4658 | { | ||
4659 | Variable Obj = new Variable(); | ||
4660 | Variable Name = new Variable(); | ||
4661 | Variable ArgList = new Variable(); | ||
4662 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList))) | ||
4663 | { | ||
4664 | YP.write(Obj); | ||
4665 | YP.write(Atom.a(@".")); | ||
4666 | YP.write(Name); | ||
4667 | YP.write(Atom.a(@"(")); | ||
4668 | convertArgListJavascript(ArgList); | ||
4669 | YP.write(Atom.a(@")")); | ||
4670 | return; | ||
4671 | } | ||
4672 | } | ||
4673 | { | ||
4674 | Variable Name = new Variable(); | ||
4675 | Variable ArgList = new Variable(); | ||
4676 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"new", Name, ArgList))) | ||
4677 | { | ||
4678 | YP.write(Atom.a(@"new ")); | ||
4679 | YP.write(Name); | ||
4680 | YP.write(Atom.a(@"(")); | ||
4681 | convertArgListJavascript(ArgList); | ||
4682 | YP.write(Atom.a(@")")); | ||
4683 | return; | ||
4684 | } | ||
4685 | } | ||
4686 | { | ||
4687 | Variable Name = new Variable(); | ||
4688 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"var", Name))) | ||
4689 | { | ||
4690 | YP.write(Name); | ||
4691 | return; | ||
4692 | } | ||
4693 | } | ||
4694 | { | ||
4695 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"null"))) | ||
4696 | { | ||
4697 | YP.write(Atom.a(@"null")); | ||
4698 | return; | ||
4699 | } | ||
4700 | } | ||
4701 | { | ||
4702 | Variable X = new Variable(); | ||
4703 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"not", X))) | ||
4704 | { | ||
4705 | YP.write(Atom.a(@"!(")); | ||
4706 | convertExpressionJavascript(X); | ||
4707 | YP.write(Atom.a(@")")); | ||
4708 | return; | ||
4709 | } | ||
4710 | } | ||
4711 | { | ||
4712 | Variable X = new Variable(); | ||
4713 | Variable Y = new Variable(); | ||
4714 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"and", X, Y))) | ||
4715 | { | ||
4716 | YP.write(Atom.a(@"(")); | ||
4717 | convertExpressionJavascript(X); | ||
4718 | YP.write(Atom.a(@") && (")); | ||
4719 | convertExpressionJavascript(Y); | ||
4720 | YP.write(Atom.a(@")")); | ||
4721 | return; | ||
4722 | } | ||
4723 | } | ||
4724 | { | ||
4725 | Variable ArgList = new Variable(); | ||
4726 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"objectArray", ArgList))) | ||
4727 | { | ||
4728 | YP.write(Atom.a(@"[")); | ||
4729 | convertArgListJavascript(ArgList); | ||
4730 | YP.write(Atom.a(@"]")); | ||
4731 | return; | ||
4732 | } | ||
4733 | } | ||
4734 | { | ||
4735 | Variable X = new Variable(); | ||
4736 | Variable Codes = new Variable(); | ||
4737 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
4738 | { | ||
4739 | if (YP.atom(X)) | ||
4740 | { | ||
4741 | YP.write(Atom.a(@"""")); | ||
4742 | foreach (bool l4 in YP.atom_codes(X, Codes)) | ||
4743 | { | ||
4744 | convertStringCodesJavascript(Codes); | ||
4745 | YP.write(Atom.a(@"""")); | ||
4746 | return; | ||
4747 | } | ||
4748 | } | ||
4749 | } | ||
4750 | } | ||
4751 | { | ||
4752 | Variable X = new Variable(); | ||
4753 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
4754 | { | ||
4755 | YP.write(X); | ||
4756 | return; | ||
4757 | } | ||
4758 | } | ||
4759 | } | ||
4760 | |||
4761 | public static void convertStringCodesJavascript(object arg1) | ||
4762 | { | ||
4763 | { | ||
4764 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4765 | { | ||
4766 | return; | ||
4767 | } | ||
4768 | } | ||
4769 | { | ||
4770 | Variable Code = new Variable(); | ||
4771 | Variable RestCodes = new Variable(); | ||
4772 | foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) | ||
4773 | { | ||
4774 | if (YP.termEqual(Code, 34)) | ||
4775 | { | ||
4776 | YP.put_code(92); | ||
4777 | YP.put_code(Code); | ||
4778 | convertStringCodesJavascript(RestCodes); | ||
4779 | return; | ||
4780 | goto cutIf1; | ||
4781 | } | ||
4782 | if (YP.termEqual(Code, 92)) | ||
4783 | { | ||
4784 | YP.put_code(92); | ||
4785 | YP.put_code(Code); | ||
4786 | convertStringCodesJavascript(RestCodes); | ||
4787 | return; | ||
4788 | goto cutIf1; | ||
4789 | } | ||
4790 | YP.put_code(Code); | ||
4791 | convertStringCodesJavascript(RestCodes); | ||
4792 | return; | ||
4793 | cutIf1: | ||
4794 | { } | ||
4795 | } | ||
4796 | } | ||
4797 | } | ||
4798 | |||
4799 | public static void convertFunctionPython(object arg1) | ||
4800 | { | ||
4801 | { | ||
4802 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"getDeclaringClass"))) | ||
4803 | { | ||
4804 | YP.write(Atom.a(@"def getDeclaringClass():")); | ||
4805 | YP.nl(); | ||
4806 | YP.write(Atom.a(@" return None")); | ||
4807 | YP.nl(); | ||
4808 | YP.nl(); | ||
4809 | return; | ||
4810 | } | ||
4811 | } | ||
4812 | { | ||
4813 | Variable x1 = new Variable(); | ||
4814 | Variable Name = new Variable(); | ||
4815 | Variable ArgList = new Variable(); | ||
4816 | Variable Body = new Variable(); | ||
4817 | Variable Level = new Variable(); | ||
4818 | Variable HasBreakableBlock = new Variable(); | ||
4819 | foreach (bool l2 in YP.unify(arg1, new Functor(@"function", new object[] { x1, Name, ArgList, Body }))) | ||
4820 | { | ||
4821 | YP.write(Atom.a(@"def ")); | ||
4822 | YP.write(Name); | ||
4823 | YP.write(Atom.a(@"(")); | ||
4824 | convertArgListPython(ArgList); | ||
4825 | YP.write(Atom.a(@"):")); | ||
4826 | YP.nl(); | ||
4827 | foreach (bool l3 in YP.unify(Level, 1)) | ||
4828 | { | ||
4829 | if (hasBreakableBlockPython(Body)) | ||
4830 | { | ||
4831 | foreach (bool l5 in YP.unify(HasBreakableBlock, 1)) | ||
4832 | { | ||
4833 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
4834 | { | ||
4835 | convertIndentationPython(Level); | ||
4836 | YP.write(Atom.a(@"doBreak = False")); | ||
4837 | YP.nl(); | ||
4838 | foreach (bool l7 in convertStatementListPython(Body, Level, HasBreakableBlock)) | ||
4839 | { | ||
4840 | YP.nl(); | ||
4841 | return; | ||
4842 | } | ||
4843 | goto cutIf2; | ||
4844 | } | ||
4845 | foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock)) | ||
4846 | { | ||
4847 | YP.nl(); | ||
4848 | return; | ||
4849 | } | ||
4850 | cutIf2: | ||
4851 | { } | ||
4852 | } | ||
4853 | goto cutIf1; | ||
4854 | } | ||
4855 | foreach (bool l4 in YP.unify(HasBreakableBlock, 0)) | ||
4856 | { | ||
4857 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
4858 | { | ||
4859 | convertIndentationPython(Level); | ||
4860 | YP.write(Atom.a(@"doBreak = False")); | ||
4861 | YP.nl(); | ||
4862 | foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock)) | ||
4863 | { | ||
4864 | YP.nl(); | ||
4865 | return; | ||
4866 | } | ||
4867 | goto cutIf3; | ||
4868 | } | ||
4869 | foreach (bool l5 in convertStatementListPython(Body, Level, HasBreakableBlock)) | ||
4870 | { | ||
4871 | YP.nl(); | ||
4872 | return; | ||
4873 | } | ||
4874 | cutIf3: | ||
4875 | { } | ||
4876 | } | ||
4877 | cutIf1: | ||
4878 | { } | ||
4879 | } | ||
4880 | } | ||
4881 | } | ||
4882 | } | ||
4883 | |||
4884 | public static bool hasBreakableBlockPython(object arg1) | ||
4885 | { | ||
4886 | { | ||
4887 | Variable _Name = new Variable(); | ||
4888 | Variable _Body = new Variable(); | ||
4889 | Variable _RestStatements = new Variable(); | ||
4890 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"breakableBlock", _Name, _Body), _RestStatements))) | ||
4891 | { | ||
4892 | return true; | ||
4893 | } | ||
4894 | } | ||
4895 | { | ||
4896 | Variable Body = new Variable(); | ||
4897 | Variable _RestStatements = new Variable(); | ||
4898 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"blockScope", Body), _RestStatements))) | ||
4899 | { | ||
4900 | if (hasBreakableBlockPython(Body)) | ||
4901 | { | ||
4902 | return true; | ||
4903 | } | ||
4904 | } | ||
4905 | } | ||
4906 | { | ||
4907 | Variable _Expression = new Variable(); | ||
4908 | Variable Body = new Variable(); | ||
4909 | Variable _RestStatements = new Variable(); | ||
4910 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"if", _Expression, Body), _RestStatements))) | ||
4911 | { | ||
4912 | if (hasBreakableBlockPython(Body)) | ||
4913 | { | ||
4914 | return true; | ||
4915 | } | ||
4916 | } | ||
4917 | } | ||
4918 | { | ||
4919 | Variable _Expression = new Variable(); | ||
4920 | Variable Body = new Variable(); | ||
4921 | Variable _RestStatements = new Variable(); | ||
4922 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"foreach", _Expression, Body), _RestStatements))) | ||
4923 | { | ||
4924 | if (hasBreakableBlockPython(Body)) | ||
4925 | { | ||
4926 | return true; | ||
4927 | } | ||
4928 | } | ||
4929 | } | ||
4930 | { | ||
4931 | Variable x1 = new Variable(); | ||
4932 | Variable RestStatements = new Variable(); | ||
4933 | foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestStatements))) | ||
4934 | { | ||
4935 | if (hasBreakableBlockPython(RestStatements)) | ||
4936 | { | ||
4937 | return true; | ||
4938 | } | ||
4939 | } | ||
4940 | } | ||
4941 | return false; | ||
4942 | } | ||
4943 | |||
4944 | public static IEnumerable<bool> convertStatementListPython(object arg1, object arg2, object arg3) | ||
4945 | { | ||
4946 | { | ||
4947 | object x1 = arg2; | ||
4948 | object x2 = arg3; | ||
4949 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
4950 | { | ||
4951 | yield return true; | ||
4952 | yield break; | ||
4953 | } | ||
4954 | } | ||
4955 | { | ||
4956 | object Level = arg2; | ||
4957 | object HasBreakableBlock = arg3; | ||
4958 | Variable Name = new Variable(); | ||
4959 | Variable Body = new Variable(); | ||
4960 | Variable RestStatements = new Variable(); | ||
4961 | Variable NextLevel = new Variable(); | ||
4962 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"breakableBlock", Name, Body), RestStatements))) | ||
4963 | { | ||
4964 | convertIndentationPython(Level); | ||
4965 | YP.write(Name); | ||
4966 | YP.write(Atom.a(@" = False")); | ||
4967 | YP.nl(); | ||
4968 | convertIndentationPython(Level); | ||
4969 | YP.write(Atom.a(@"for _ in [1]:")); | ||
4970 | YP.nl(); | ||
4971 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
4972 | { | ||
4973 | foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) | ||
4974 | { | ||
4975 | convertIndentationPython(Level); | ||
4976 | YP.write(Atom.a(@"if ")); | ||
4977 | YP.write(Name); | ||
4978 | YP.write(Atom.a(@":")); | ||
4979 | YP.nl(); | ||
4980 | convertIndentationPython(NextLevel); | ||
4981 | YP.write(Atom.a(@"doBreak = False")); | ||
4982 | YP.nl(); | ||
4983 | convertIndentationPython(Level); | ||
4984 | YP.write(Atom.a(@"if doBreak:")); | ||
4985 | YP.nl(); | ||
4986 | convertIndentationPython(NextLevel); | ||
4987 | YP.write(Atom.a(@"break")); | ||
4988 | YP.nl(); | ||
4989 | foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
4990 | { | ||
4991 | yield return true; | ||
4992 | yield break; | ||
4993 | } | ||
4994 | } | ||
4995 | } | ||
4996 | } | ||
4997 | } | ||
4998 | { | ||
4999 | object Level = arg2; | ||
5000 | object HasBreakableBlock = arg3; | ||
5001 | Variable _Type = new Variable(); | ||
5002 | Variable Name = new Variable(); | ||
5003 | Variable Expression = new Variable(); | ||
5004 | Variable RestStatements = new Variable(); | ||
5005 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"declare", _Type, Name, Expression), RestStatements))) | ||
5006 | { | ||
5007 | convertIndentationPython(Level); | ||
5008 | YP.write(Name); | ||
5009 | YP.write(Atom.a(@" = ")); | ||
5010 | convertExpressionPython(Expression); | ||
5011 | YP.nl(); | ||
5012 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5013 | { | ||
5014 | yield return true; | ||
5015 | yield break; | ||
5016 | } | ||
5017 | } | ||
5018 | } | ||
5019 | { | ||
5020 | object Level = arg2; | ||
5021 | object HasBreakableBlock = arg3; | ||
5022 | Variable Name = new Variable(); | ||
5023 | Variable Expression = new Variable(); | ||
5024 | Variable RestStatements = new Variable(); | ||
5025 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"assign", Name, Expression), RestStatements))) | ||
5026 | { | ||
5027 | convertIndentationPython(Level); | ||
5028 | YP.write(Name); | ||
5029 | YP.write(Atom.a(@" = ")); | ||
5030 | convertExpressionPython(Expression); | ||
5031 | YP.nl(); | ||
5032 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5033 | { | ||
5034 | yield return true; | ||
5035 | yield break; | ||
5036 | } | ||
5037 | } | ||
5038 | } | ||
5039 | { | ||
5040 | object Level = arg2; | ||
5041 | object HasBreakableBlock = arg3; | ||
5042 | Variable RestStatements = new Variable(); | ||
5043 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldtrue"), RestStatements))) | ||
5044 | { | ||
5045 | convertIndentationPython(Level); | ||
5046 | YP.write(Atom.a(@"yield True")); | ||
5047 | YP.nl(); | ||
5048 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5049 | { | ||
5050 | yield return true; | ||
5051 | yield break; | ||
5052 | } | ||
5053 | } | ||
5054 | } | ||
5055 | { | ||
5056 | object Level = arg2; | ||
5057 | object HasBreakableBlock = arg3; | ||
5058 | Variable RestStatements = new Variable(); | ||
5059 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldfalse"), RestStatements))) | ||
5060 | { | ||
5061 | convertIndentationPython(Level); | ||
5062 | YP.write(Atom.a(@"yield False")); | ||
5063 | YP.nl(); | ||
5064 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5065 | { | ||
5066 | yield return true; | ||
5067 | yield break; | ||
5068 | } | ||
5069 | } | ||
5070 | } | ||
5071 | { | ||
5072 | object Level = arg2; | ||
5073 | object HasBreakableBlock = arg3; | ||
5074 | Variable RestStatements = new Variable(); | ||
5075 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"yieldbreak"), RestStatements))) | ||
5076 | { | ||
5077 | convertIndentationPython(Level); | ||
5078 | YP.write(Atom.a(@"return")); | ||
5079 | YP.nl(); | ||
5080 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5081 | { | ||
5082 | yield return true; | ||
5083 | yield break; | ||
5084 | } | ||
5085 | } | ||
5086 | } | ||
5087 | { | ||
5088 | object Level = arg2; | ||
5089 | object HasBreakableBlock = arg3; | ||
5090 | Variable RestStatements = new Variable(); | ||
5091 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"return"), RestStatements))) | ||
5092 | { | ||
5093 | convertIndentationPython(Level); | ||
5094 | YP.write(Atom.a(@"return")); | ||
5095 | YP.nl(); | ||
5096 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5097 | { | ||
5098 | yield return true; | ||
5099 | yield break; | ||
5100 | } | ||
5101 | } | ||
5102 | } | ||
5103 | { | ||
5104 | object Level = arg2; | ||
5105 | object HasBreakableBlock = arg3; | ||
5106 | Variable RestStatements = new Variable(); | ||
5107 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returntrue"), RestStatements))) | ||
5108 | { | ||
5109 | convertIndentationPython(Level); | ||
5110 | YP.write(Atom.a(@"return True")); | ||
5111 | YP.nl(); | ||
5112 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5113 | { | ||
5114 | yield return true; | ||
5115 | yield break; | ||
5116 | } | ||
5117 | } | ||
5118 | } | ||
5119 | { | ||
5120 | object Level = arg2; | ||
5121 | object HasBreakableBlock = arg3; | ||
5122 | Variable RestStatements = new Variable(); | ||
5123 | foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(@"returnfalse"), RestStatements))) | ||
5124 | { | ||
5125 | convertIndentationPython(Level); | ||
5126 | YP.write(Atom.a(@"return False")); | ||
5127 | YP.nl(); | ||
5128 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5129 | { | ||
5130 | yield return true; | ||
5131 | yield break; | ||
5132 | } | ||
5133 | } | ||
5134 | } | ||
5135 | { | ||
5136 | object Level = arg2; | ||
5137 | object HasBreakableBlock = arg3; | ||
5138 | Variable Name = new Variable(); | ||
5139 | Variable RestStatements = new Variable(); | ||
5140 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"breakBlock", Name), RestStatements))) | ||
5141 | { | ||
5142 | convertIndentationPython(Level); | ||
5143 | YP.write(Name); | ||
5144 | YP.write(Atom.a(@" = True")); | ||
5145 | YP.nl(); | ||
5146 | convertIndentationPython(Level); | ||
5147 | YP.write(Atom.a(@"doBreak = True")); | ||
5148 | YP.nl(); | ||
5149 | convertIndentationPython(Level); | ||
5150 | YP.write(Atom.a(@"break")); | ||
5151 | YP.nl(); | ||
5152 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5153 | { | ||
5154 | yield return true; | ||
5155 | yield break; | ||
5156 | } | ||
5157 | } | ||
5158 | } | ||
5159 | { | ||
5160 | object Level = arg2; | ||
5161 | object HasBreakableBlock = arg3; | ||
5162 | Variable Name = new Variable(); | ||
5163 | Variable ArgList = new Variable(); | ||
5164 | Variable RestStatements = new Variable(); | ||
5165 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"call", Name, ArgList), RestStatements))) | ||
5166 | { | ||
5167 | convertIndentationPython(Level); | ||
5168 | YP.write(Name); | ||
5169 | YP.write(Atom.a(@"(")); | ||
5170 | convertArgListPython(ArgList); | ||
5171 | YP.write(Atom.a(@")")); | ||
5172 | YP.nl(); | ||
5173 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5174 | { | ||
5175 | yield return true; | ||
5176 | yield break; | ||
5177 | } | ||
5178 | } | ||
5179 | } | ||
5180 | { | ||
5181 | object Level = arg2; | ||
5182 | object HasBreakableBlock = arg3; | ||
5183 | Variable Obj = new Variable(); | ||
5184 | Variable Name = new Variable(); | ||
5185 | Variable ArgList = new Variable(); | ||
5186 | Variable RestStatements = new Variable(); | ||
5187 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList), RestStatements))) | ||
5188 | { | ||
5189 | convertIndentationPython(Level); | ||
5190 | YP.write(Obj); | ||
5191 | YP.write(Atom.a(@".")); | ||
5192 | YP.write(Name); | ||
5193 | YP.write(Atom.a(@"(")); | ||
5194 | convertArgListPython(ArgList); | ||
5195 | YP.write(Atom.a(@")")); | ||
5196 | YP.nl(); | ||
5197 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5198 | { | ||
5199 | yield return true; | ||
5200 | yield break; | ||
5201 | } | ||
5202 | } | ||
5203 | } | ||
5204 | { | ||
5205 | object Level = arg2; | ||
5206 | object HasBreakableBlock = arg3; | ||
5207 | Variable Body = new Variable(); | ||
5208 | Variable RestStatements = new Variable(); | ||
5209 | Variable NextLevel = new Variable(); | ||
5210 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"blockScope", Body), RestStatements))) | ||
5211 | { | ||
5212 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
5213 | { | ||
5214 | convertIndentationPython(Level); | ||
5215 | YP.write(Atom.a(@"for _ in [1]:")); | ||
5216 | YP.nl(); | ||
5217 | foreach (bool l4 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
5218 | { | ||
5219 | foreach (bool l5 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) | ||
5220 | { | ||
5221 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
5222 | { | ||
5223 | if (YP.greaterThan(Level, 1)) | ||
5224 | { | ||
5225 | convertIndentationPython(Level); | ||
5226 | YP.write(Atom.a(@"if doBreak:")); | ||
5227 | YP.nl(); | ||
5228 | convertIndentationPython(NextLevel); | ||
5229 | YP.write(Atom.a(@"break")); | ||
5230 | YP.nl(); | ||
5231 | foreach (bool l8 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5232 | { | ||
5233 | yield return true; | ||
5234 | yield break; | ||
5235 | } | ||
5236 | goto cutIf3; | ||
5237 | } | ||
5238 | foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5239 | { | ||
5240 | yield return true; | ||
5241 | yield break; | ||
5242 | } | ||
5243 | cutIf3: | ||
5244 | goto cutIf2; | ||
5245 | } | ||
5246 | foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5247 | { | ||
5248 | yield return true; | ||
5249 | yield break; | ||
5250 | } | ||
5251 | cutIf2: | ||
5252 | { } | ||
5253 | } | ||
5254 | } | ||
5255 | goto cutIf1; | ||
5256 | } | ||
5257 | foreach (bool l3 in YP.unify(NextLevel, Level)) | ||
5258 | { | ||
5259 | foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) | ||
5260 | { | ||
5261 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
5262 | { | ||
5263 | if (YP.greaterThan(Level, 1)) | ||
5264 | { | ||
5265 | convertIndentationPython(Level); | ||
5266 | YP.write(Atom.a(@"if doBreak:")); | ||
5267 | YP.nl(); | ||
5268 | convertIndentationPython(NextLevel); | ||
5269 | YP.write(Atom.a(@"break")); | ||
5270 | YP.nl(); | ||
5271 | foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5272 | { | ||
5273 | yield return true; | ||
5274 | yield break; | ||
5275 | } | ||
5276 | goto cutIf5; | ||
5277 | } | ||
5278 | foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5279 | { | ||
5280 | yield return true; | ||
5281 | yield break; | ||
5282 | } | ||
5283 | cutIf5: | ||
5284 | goto cutIf4; | ||
5285 | } | ||
5286 | foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5287 | { | ||
5288 | yield return true; | ||
5289 | yield break; | ||
5290 | } | ||
5291 | cutIf4: | ||
5292 | { } | ||
5293 | } | ||
5294 | } | ||
5295 | cutIf1: | ||
5296 | { } | ||
5297 | } | ||
5298 | } | ||
5299 | { | ||
5300 | object Level = arg2; | ||
5301 | object HasBreakableBlock = arg3; | ||
5302 | Variable Expression = new Variable(); | ||
5303 | Variable Body = new Variable(); | ||
5304 | Variable RestStatements = new Variable(); | ||
5305 | Variable NextLevel = new Variable(); | ||
5306 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"if", Expression, Body), RestStatements))) | ||
5307 | { | ||
5308 | convertIndentationPython(Level); | ||
5309 | YP.write(Atom.a(@"if ")); | ||
5310 | convertExpressionPython(Expression); | ||
5311 | YP.write(Atom.a(@":")); | ||
5312 | YP.nl(); | ||
5313 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
5314 | { | ||
5315 | foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) | ||
5316 | { | ||
5317 | foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5318 | { | ||
5319 | yield return true; | ||
5320 | yield break; | ||
5321 | } | ||
5322 | } | ||
5323 | } | ||
5324 | } | ||
5325 | } | ||
5326 | { | ||
5327 | object Level = arg2; | ||
5328 | object HasBreakableBlock = arg3; | ||
5329 | Variable Expression = new Variable(); | ||
5330 | Variable Body = new Variable(); | ||
5331 | Variable RestStatements = new Variable(); | ||
5332 | Variable NextLevel = new Variable(); | ||
5333 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2(@"foreach", Expression, Body), RestStatements))) | ||
5334 | { | ||
5335 | convertIndentationPython(Level); | ||
5336 | YP.write(Atom.a(@"for l")); | ||
5337 | YP.write(Level); | ||
5338 | YP.write(Atom.a(@" in ")); | ||
5339 | convertExpressionPython(Expression); | ||
5340 | YP.write(Atom.a(@":")); | ||
5341 | YP.nl(); | ||
5342 | foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) | ||
5343 | { | ||
5344 | foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) | ||
5345 | { | ||
5346 | if (YP.termEqual(HasBreakableBlock, 1)) | ||
5347 | { | ||
5348 | convertIndentationPython(Level); | ||
5349 | YP.write(Atom.a(@"if doBreak:")); | ||
5350 | YP.nl(); | ||
5351 | convertIndentationPython(NextLevel); | ||
5352 | YP.write(Atom.a(@"break")); | ||
5353 | YP.nl(); | ||
5354 | foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5355 | { | ||
5356 | yield return true; | ||
5357 | yield break; | ||
5358 | } | ||
5359 | goto cutIf6; | ||
5360 | } | ||
5361 | foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5362 | { | ||
5363 | yield return true; | ||
5364 | yield break; | ||
5365 | } | ||
5366 | cutIf6: | ||
5367 | { } | ||
5368 | } | ||
5369 | } | ||
5370 | } | ||
5371 | } | ||
5372 | { | ||
5373 | object Level = arg2; | ||
5374 | object HasBreakableBlock = arg3; | ||
5375 | Variable Expression = new Variable(); | ||
5376 | Variable RestStatements = new Variable(); | ||
5377 | foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1(@"throw", Expression), RestStatements))) | ||
5378 | { | ||
5379 | convertIndentationPython(Level); | ||
5380 | YP.write(Atom.a(@"raise ")); | ||
5381 | convertExpressionPython(Expression); | ||
5382 | YP.nl(); | ||
5383 | foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) | ||
5384 | { | ||
5385 | yield return true; | ||
5386 | yield break; | ||
5387 | } | ||
5388 | } | ||
5389 | } | ||
5390 | } | ||
5391 | |||
5392 | public static void convertIndentationPython(object Level) | ||
5393 | { | ||
5394 | { | ||
5395 | Variable N = new Variable(); | ||
5396 | foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) | ||
5397 | { | ||
5398 | repeatWrite(Atom.a(@" "), N); | ||
5399 | return; | ||
5400 | } | ||
5401 | } | ||
5402 | } | ||
5403 | |||
5404 | public static void convertArgListPython(object arg1) | ||
5405 | { | ||
5406 | { | ||
5407 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
5408 | { | ||
5409 | return; | ||
5410 | } | ||
5411 | } | ||
5412 | { | ||
5413 | Variable Head = new Variable(); | ||
5414 | Variable Tail = new Variable(); | ||
5415 | foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) | ||
5416 | { | ||
5417 | convertExpressionPython(Head); | ||
5418 | if (YP.termNotEqual(Tail, Atom.NIL)) | ||
5419 | { | ||
5420 | YP.write(Atom.a(@", ")); | ||
5421 | convertArgListPython(Tail); | ||
5422 | return; | ||
5423 | goto cutIf1; | ||
5424 | } | ||
5425 | convertArgListPython(Tail); | ||
5426 | return; | ||
5427 | cutIf1: | ||
5428 | { } | ||
5429 | } | ||
5430 | } | ||
5431 | } | ||
5432 | |||
5433 | public static void convertExpressionPython(object arg1) | ||
5434 | { | ||
5435 | { | ||
5436 | Variable X = new Variable(); | ||
5437 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"arg", X))) | ||
5438 | { | ||
5439 | YP.write(X); | ||
5440 | return; | ||
5441 | } | ||
5442 | } | ||
5443 | { | ||
5444 | Variable Name = new Variable(); | ||
5445 | Variable ArgList = new Variable(); | ||
5446 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"call", Name, ArgList))) | ||
5447 | { | ||
5448 | YP.write(Name); | ||
5449 | YP.write(Atom.a(@"(")); | ||
5450 | convertArgListPython(ArgList); | ||
5451 | YP.write(Atom.a(@")")); | ||
5452 | return; | ||
5453 | } | ||
5454 | } | ||
5455 | { | ||
5456 | Variable Obj = new Variable(); | ||
5457 | Variable Name = new Variable(); | ||
5458 | Variable ArgList = new Variable(); | ||
5459 | foreach (bool l2 in YP.unify(arg1, new Functor3(@"callMember", new Functor1(@"var", Obj), Name, ArgList))) | ||
5460 | { | ||
5461 | YP.write(Obj); | ||
5462 | YP.write(Atom.a(@".")); | ||
5463 | YP.write(Name); | ||
5464 | YP.write(Atom.a(@"(")); | ||
5465 | convertArgListPython(ArgList); | ||
5466 | YP.write(Atom.a(@")")); | ||
5467 | return; | ||
5468 | } | ||
5469 | } | ||
5470 | { | ||
5471 | Variable Name = new Variable(); | ||
5472 | Variable ArgList = new Variable(); | ||
5473 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"new", Name, ArgList))) | ||
5474 | { | ||
5475 | YP.write(Name); | ||
5476 | YP.write(Atom.a(@"(")); | ||
5477 | convertArgListPython(ArgList); | ||
5478 | YP.write(Atom.a(@")")); | ||
5479 | return; | ||
5480 | } | ||
5481 | } | ||
5482 | { | ||
5483 | Variable Name = new Variable(); | ||
5484 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"var", Name))) | ||
5485 | { | ||
5486 | YP.write(Name); | ||
5487 | return; | ||
5488 | } | ||
5489 | } | ||
5490 | { | ||
5491 | foreach (bool l2 in YP.unify(arg1, Atom.a(@"null"))) | ||
5492 | { | ||
5493 | YP.write(Atom.a(@"None")); | ||
5494 | return; | ||
5495 | } | ||
5496 | } | ||
5497 | { | ||
5498 | Variable X = new Variable(); | ||
5499 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"not", X))) | ||
5500 | { | ||
5501 | YP.write(Atom.a(@"not (")); | ||
5502 | convertExpressionPython(X); | ||
5503 | YP.write(Atom.a(@")")); | ||
5504 | return; | ||
5505 | } | ||
5506 | } | ||
5507 | { | ||
5508 | Variable X = new Variable(); | ||
5509 | Variable Y = new Variable(); | ||
5510 | foreach (bool l2 in YP.unify(arg1, new Functor2(@"and", X, Y))) | ||
5511 | { | ||
5512 | YP.write(Atom.a(@"(")); | ||
5513 | convertExpressionPython(X); | ||
5514 | YP.write(Atom.a(@") and (")); | ||
5515 | convertExpressionPython(Y); | ||
5516 | YP.write(Atom.a(@")")); | ||
5517 | return; | ||
5518 | } | ||
5519 | } | ||
5520 | { | ||
5521 | Variable ArgList = new Variable(); | ||
5522 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"objectArray", ArgList))) | ||
5523 | { | ||
5524 | YP.write(Atom.a(@"[")); | ||
5525 | convertArgListPython(ArgList); | ||
5526 | YP.write(Atom.a(@"]")); | ||
5527 | return; | ||
5528 | } | ||
5529 | } | ||
5530 | { | ||
5531 | Variable X = new Variable(); | ||
5532 | Variable Codes = new Variable(); | ||
5533 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
5534 | { | ||
5535 | if (YP.atom(X)) | ||
5536 | { | ||
5537 | YP.write(Atom.a(@"""")); | ||
5538 | foreach (bool l4 in YP.atom_codes(X, Codes)) | ||
5539 | { | ||
5540 | convertStringCodesPython(Codes); | ||
5541 | YP.write(Atom.a(@"""")); | ||
5542 | return; | ||
5543 | } | ||
5544 | } | ||
5545 | } | ||
5546 | } | ||
5547 | { | ||
5548 | Variable X = new Variable(); | ||
5549 | foreach (bool l2 in YP.unify(arg1, new Functor1(@"object", X))) | ||
5550 | { | ||
5551 | YP.write(X); | ||
5552 | return; | ||
5553 | } | ||
5554 | } | ||
5555 | } | ||
5556 | |||
5557 | public static void convertStringCodesPython(object arg1) | ||
5558 | { | ||
5559 | { | ||
5560 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
5561 | { | ||
5562 | return; | ||
5563 | } | ||
5564 | } | ||
5565 | { | ||
5566 | Variable Code = new Variable(); | ||
5567 | Variable RestCodes = new Variable(); | ||
5568 | foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) | ||
5569 | { | ||
5570 | if (YP.termEqual(Code, 34)) | ||
5571 | { | ||
5572 | YP.put_code(92); | ||
5573 | YP.put_code(Code); | ||
5574 | convertStringCodesPython(RestCodes); | ||
5575 | return; | ||
5576 | goto cutIf1; | ||
5577 | } | ||
5578 | if (YP.termEqual(Code, 92)) | ||
5579 | { | ||
5580 | YP.put_code(92); | ||
5581 | YP.put_code(Code); | ||
5582 | convertStringCodesPython(RestCodes); | ||
5583 | return; | ||
5584 | goto cutIf1; | ||
5585 | } | ||
5586 | YP.put_code(Code); | ||
5587 | convertStringCodesPython(RestCodes); | ||
5588 | return; | ||
5589 | cutIf1: | ||
5590 | { } | ||
5591 | } | ||
5592 | } | ||
5593 | } | ||
5594 | |||
5595 | public static IEnumerable<bool> member(object X, object arg2) | ||
5596 | { | ||
5597 | { | ||
5598 | Variable x2 = new Variable(); | ||
5599 | foreach (bool l2 in YP.unify(arg2, new ListPair(X, x2))) | ||
5600 | { | ||
5601 | yield return false; | ||
5602 | } | ||
5603 | } | ||
5604 | { | ||
5605 | Variable x2 = new Variable(); | ||
5606 | Variable Rest = new Variable(); | ||
5607 | foreach (bool l2 in YP.unify(arg2, new ListPair(x2, Rest))) | ||
5608 | { | ||
5609 | foreach (bool l3 in member(X, Rest)) | ||
5610 | { | ||
5611 | yield return false; | ||
5612 | } | ||
5613 | } | ||
5614 | } | ||
5615 | } | ||
5616 | |||
5617 | public static IEnumerable<bool> append(object arg1, object arg2, object arg3) | ||
5618 | { | ||
5619 | { | ||
5620 | Variable List = new Variable(); | ||
5621 | foreach (bool l2 in YP.unify(arg1, Atom.NIL)) | ||
5622 | { | ||
5623 | foreach (bool l3 in YP.unify(arg2, List)) | ||
5624 | { | ||
5625 | foreach (bool l4 in YP.unify(arg3, List)) | ||
5626 | { | ||
5627 | yield return false; | ||
5628 | } | ||
5629 | } | ||
5630 | } | ||
5631 | } | ||
5632 | { | ||
5633 | object List2 = arg2; | ||
5634 | Variable X = new Variable(); | ||
5635 | Variable List1 = new Variable(); | ||
5636 | Variable List12 = new Variable(); | ||
5637 | foreach (bool l2 in YP.unify(arg1, new ListPair(X, List1))) | ||
5638 | { | ||
5639 | foreach (bool l3 in YP.unify(arg3, new ListPair(X, List12))) | ||
5640 | { | ||
5641 | foreach (bool l4 in append(List1, List2, List12)) | ||
5642 | { | ||
5643 | yield return false; | ||
5644 | } | ||
5645 | } | ||
5646 | } | ||
5647 | } | ||
5648 | } | ||
5649 | |||
5650 | } | ||
5651 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/AssemblyResolver.cs b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs index cf15b67..f9b160d 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/AssemblyResolver.cs +++ b/OpenSim/Region/ScriptEngine/Shared/AssemblyResolver.cs | |||
@@ -29,7 +29,7 @@ using System; | |||
29 | using System.IO; | 29 | using System.IO; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | 31 | ||
32 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 32 | namespace OpenSim.Region.ScriptEngine.Shared |
33 | { | 33 | { |
34 | [Serializable] | 34 | [Serializable] |
35 | public class AssemblyResolver | 35 | public class AssemblyResolver |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index 68fb1dd..2edcee0 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs | |||
@@ -34,8 +34,9 @@ using Microsoft.CSharp; | |||
34 | using Microsoft.JScript; | 34 | using Microsoft.JScript; |
35 | using Microsoft.VisualBasic; | 35 | using Microsoft.VisualBasic; |
36 | using OpenSim.Region.Environment.Interfaces; | 36 | using OpenSim.Region.Environment.Interfaces; |
37 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
37 | 38 | ||
38 | namespace OpenSim.Region.ScriptEngine.XEngine | 39 | namespace OpenSim.Region.ScriptEngine.Shared.CodeTools |
39 | { | 40 | { |
40 | public class Compiler | 41 | public class Compiler |
41 | { | 42 | { |
@@ -78,8 +79,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
78 | private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files | 79 | private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files |
79 | private static UInt64 scriptCompileCounter = 0; // And a counter | 80 | private static UInt64 scriptCompileCounter = 0; // And a counter |
80 | 81 | ||
81 | public XEngine m_scriptEngine; | 82 | public IScriptEngine m_scriptEngine; |
82 | public Compiler(XEngine scriptEngine) | 83 | public Compiler(IScriptEngine scriptEngine) |
83 | { | 84 | { |
84 | m_scriptEngine = scriptEngine; | 85 | m_scriptEngine = scriptEngine; |
85 | ReadConfig(); | 86 | ReadConfig(); |
@@ -89,11 +90,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
89 | { | 90 | { |
90 | 91 | ||
91 | // Get some config | 92 | // Get some config |
92 | WriteScriptSourceToDebugFile = m_scriptEngine.ScriptConfigSource.GetBoolean("WriteScriptSourceToDebugFile", true); | 93 | WriteScriptSourceToDebugFile = m_scriptEngine.Config.GetBoolean("WriteScriptSourceToDebugFile", true); |
93 | CompileWithDebugInformation = m_scriptEngine.ScriptConfigSource.GetBoolean("CompileWithDebugInformation", true); | 94 | CompileWithDebugInformation = m_scriptEngine.Config.GetBoolean("CompileWithDebugInformation", true); |
94 | 95 | ||
95 | // Get file prefix from scriptengine name and make it file system safe: | 96 | // Get file prefix from scriptengine name and make it file system safe: |
96 | FilePrefix = m_scriptEngine.ScriptEngineName; | 97 | FilePrefix = "CommonCompiler"; |
97 | foreach (char c in Path.GetInvalidFileNameChars()) | 98 | foreach (char c in Path.GetInvalidFileNameChars()) |
98 | { | 99 | { |
99 | FilePrefix = FilePrefix.Replace(c, '_'); | 100 | FilePrefix = FilePrefix.Replace(c, '_'); |
@@ -113,11 +114,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
113 | LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js); | 114 | LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js); |
114 | 115 | ||
115 | // Allowed compilers | 116 | // Allowed compilers |
116 | string allowComp = m_scriptEngine.ScriptConfigSource.GetString("AllowedCompilers", "lsl,cs,vb,js"); | 117 | string allowComp = m_scriptEngine.Config.GetString("AllowedCompilers", "lsl,cs,vb,js"); |
117 | AllowedCompilers.Clear(); | 118 | AllowedCompilers.Clear(); |
118 | 119 | ||
119 | #if DEBUG | 120 | #if DEBUG |
120 | m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Allowed languages: " + allowComp); | 121 | m_scriptEngine.Log.Debug("[Compiler]: Allowed languages: " + allowComp); |
121 | #endif | 122 | #endif |
122 | 123 | ||
123 | 124 | ||
@@ -126,26 +127,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
126 | string strlan = strl.Trim(" \t".ToCharArray()).ToLower(); | 127 | string strlan = strl.Trim(" \t".ToCharArray()).ToLower(); |
127 | if (!LanguageMapping.ContainsKey(strlan)) | 128 | if (!LanguageMapping.ContainsKey(strlan)) |
128 | { | 129 | { |
129 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); | 130 | m_scriptEngine.Log.Error("[Compiler]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); |
130 | } | 131 | } |
131 | else | 132 | else |
132 | { | 133 | { |
133 | #if DEBUG | 134 | #if DEBUG |
134 | //m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); | 135 | //m_scriptEngine.Log.Debug("[Compiler]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); |
135 | #endif | 136 | #endif |
136 | } | 137 | } |
137 | AllowedCompilers.Add(strlan, true); | 138 | AllowedCompilers.Add(strlan, true); |
138 | } | 139 | } |
139 | if (AllowedCompilers.Count == 0) | 140 | if (AllowedCompilers.Count == 0) |
140 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!"); | 141 | m_scriptEngine.Log.Error("[Compiler]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!"); |
141 | 142 | ||
142 | // Default language | 143 | // Default language |
143 | string defaultCompileLanguage = m_scriptEngine.ScriptConfigSource.GetString("DefaultCompileLanguage", "lsl").ToLower(); | 144 | string defaultCompileLanguage = m_scriptEngine.Config.GetString("DefaultCompileLanguage", "lsl").ToLower(); |
144 | 145 | ||
145 | // Is this language recognized at all? | 146 | // Is this language recognized at all? |
146 | if (!LanguageMapping.ContainsKey(defaultCompileLanguage)) | 147 | if (!LanguageMapping.ContainsKey(defaultCompileLanguage)) |
147 | { | 148 | { |
148 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " + | 149 | m_scriptEngine.Log.Error("[Compiler]: " + |
149 | "Config error. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is not recognized as a valid language. Changing default to: \"lsl\"."); | 150 | "Config error. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is not recognized as a valid language. Changing default to: \"lsl\"."); |
150 | defaultCompileLanguage = "lsl"; | 151 | defaultCompileLanguage = "lsl"; |
151 | } | 152 | } |
@@ -153,13 +154,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
153 | // Is this language in allow-list? | 154 | // Is this language in allow-list? |
154 | if (!AllowedCompilers.ContainsKey(defaultCompileLanguage)) | 155 | if (!AllowedCompilers.ContainsKey(defaultCompileLanguage)) |
155 | { | 156 | { |
156 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " + | 157 | m_scriptEngine.Log.Error("[Compiler]: " + |
157 | "Config error. Default language \"" + defaultCompileLanguage + "\"specified in \"DefaultCompileLanguage\" is not in list of \"AllowedCompilers\". Scripts may not be executed!"); | 158 | "Config error. Default language \"" + defaultCompileLanguage + "\"specified in \"DefaultCompileLanguage\" is not in list of \"AllowedCompilers\". Scripts may not be executed!"); |
158 | } | 159 | } |
159 | else | 160 | else |
160 | { | 161 | { |
161 | #if DEBUG | 162 | #if DEBUG |
162 | // m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: " + | 163 | // m_scriptEngine.Log.Debug("[Compiler]: " + |
163 | // "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language."); | 164 | // "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language."); |
164 | #endif | 165 | #endif |
165 | // LANGUAGE IS IN ALLOW-LIST | 166 | // LANGUAGE IS IN ALLOW-LIST |
@@ -185,7 +186,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
185 | } | 186 | } |
186 | catch (Exception ex) | 187 | catch (Exception ex) |
187 | { | 188 | { |
188 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString()); | 189 | m_scriptEngine.Log.Error("[Compiler]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString()); |
189 | } | 190 | } |
190 | } | 191 | } |
191 | 192 | ||
@@ -199,7 +200,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
199 | } | 200 | } |
200 | catch (Exception ex) | 201 | catch (Exception ex) |
201 | { | 202 | { |
202 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + Path.Combine(ScriptEnginesPath, | 203 | m_scriptEngine.Log.Error("[Compiler]: Exception trying to create ScriptEngine directory \"" + Path.Combine(ScriptEnginesPath, |
203 | m_scriptEngine.World.RegionInfo.RegionID.ToString())+ "\": " + ex.ToString()); | 204 | m_scriptEngine.World.RegionInfo.RegionID.ToString())+ "\": " + ex.ToString()); |
204 | } | 205 | } |
205 | } | 206 | } |
@@ -207,7 +208,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
207 | foreach (string file in Directory.GetFiles(Path.Combine(ScriptEnginesPath, | 208 | foreach (string file in Directory.GetFiles(Path.Combine(ScriptEnginesPath, |
208 | m_scriptEngine.World.RegionInfo.RegionID.ToString()))) | 209 | m_scriptEngine.World.RegionInfo.RegionID.ToString()))) |
209 | { | 210 | { |
210 | //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: FILE FOUND: " + file); | 211 | //m_scriptEngine.Log.Error("[Compiler]: FILE FOUND: " + file); |
211 | 212 | ||
212 | if (file.ToLower().StartsWith(FilePrefix + "_compiled_") || | 213 | if (file.ToLower().StartsWith(FilePrefix + "_compiled_") || |
213 | file.ToLower().StartsWith(FilePrefix + "_source_")) | 214 | file.ToLower().StartsWith(FilePrefix + "_source_")) |
@@ -218,7 +219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
218 | } | 219 | } |
219 | catch (Exception ex) | 220 | catch (Exception ex) |
220 | { | 221 | { |
221 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying delete old script file \"" + file + "\": " + ex.ToString()); | 222 | m_scriptEngine.Log.Error("[Compiler]: Exception trying delete old script file \"" + file + "\": " + ex.ToString()); |
222 | } | 223 | } |
223 | 224 | ||
224 | } | 225 | } |
@@ -233,10 +234,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
233 | // { | 234 | // { |
234 | // case ".txt": | 235 | // case ".txt": |
235 | // case ".lsl": | 236 | // case ".lsl": |
236 | // Common.ScriptEngineBase.Common.SendToDebug("Source code is LSL, converting to CS"); | 237 | // Common.ScriptEngineBase.Shared.SendToDebug("Source code is LSL, converting to CS"); |
237 | // return CompileFromLSLText(File.ReadAllText(LSOFileName)); | 238 | // return CompileFromLSLText(File.ReadAllText(LSOFileName)); |
238 | // case ".cs": | 239 | // case ".cs": |
239 | // Common.ScriptEngineBase.Common.SendToDebug("Source code is CS"); | 240 | // Common.ScriptEngineBase.Shared.SendToDebug("Source code is CS"); |
240 | // return CompileFromCSText(File.ReadAllText(LSOFileName)); | 241 | // return CompileFromCSText(File.ReadAllText(LSOFileName)); |
241 | // default: | 242 | // default: |
242 | // throw new Exception("Unknown script type."); | 243 | // throw new Exception("Unknown script type."); |
@@ -258,7 +259,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
258 | 259 | ||
259 | if (File.Exists(OutFile)) | 260 | if (File.Exists(OutFile)) |
260 | { | 261 | { |
261 | m_scriptEngine.Log.DebugFormat("[XEngine] Returning existing assembly for {0}", asset); | 262 | m_scriptEngine.Log.DebugFormat("[Compiler] Returning existing assembly for {0}", asset); |
262 | return OutFile; | 263 | return OutFile; |
263 | } | 264 | } |
264 | 265 | ||
@@ -359,9 +360,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
359 | private static string CreateJSCompilerScript(string compileScript) | 360 | private static string CreateJSCompilerScript(string compileScript) |
360 | { | 361 | { |
361 | compileScript = String.Empty + | 362 | compileScript = String.Empty + |
362 | "import OpenSim.Region.ScriptEngine.XEngine.Script; import System.Collections.Generic;\r\n" + | 363 | "import OpenSim.Region.ScriptEngine.Shared; import System.Collections.Generic;\r\n" + |
363 | "package SecondLife {\r\n" + | 364 | "package SecondLife {\r\n" + |
364 | "class Script extends OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass { \r\n" + | 365 | "class Script extends OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + |
365 | compileScript + | 366 | compileScript + |
366 | "} }\r\n"; | 367 | "} }\r\n"; |
367 | return compileScript; | 368 | return compileScript; |
@@ -370,9 +371,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
370 | private static string CreateCSCompilerScript(string compileScript) | 371 | private static string CreateCSCompilerScript(string compileScript) |
371 | { | 372 | { |
372 | compileScript = String.Empty + | 373 | compileScript = String.Empty + |
373 | "using OpenSim.Region.ScriptEngine.XEngine.Script; using System.Collections.Generic;\r\n" + | 374 | "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" + |
374 | String.Empty + "namespace SecondLife { " + | 375 | String.Empty + "namespace SecondLife { " + |
375 | String.Empty + "public class Script : OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass { \r\n" + | 376 | String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + |
376 | @"public Script() { } " + | 377 | @"public Script() { } " + |
377 | compileScript + | 378 | compileScript + |
378 | "} }\r\n"; | 379 | "} }\r\n"; |
@@ -382,9 +383,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
382 | private static string CreateVBCompilerScript(string compileScript) | 383 | private static string CreateVBCompilerScript(string compileScript) |
383 | { | 384 | { |
384 | compileScript = String.Empty + | 385 | compileScript = String.Empty + |
385 | "Imports OpenSim.Region.ScriptEngine.XEngine.Script: Imports System.Collections.Generic: " + | 386 | "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " + |
386 | String.Empty + "NameSpace SecondLife:" + | 387 | String.Empty + "NameSpace SecondLife:" + |
387 | String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.XEngine.Script.BuiltIn_Commands_BaseClass: " + | 388 | String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass: " + |
388 | "\r\nPublic Sub New()\r\nEnd Sub: " + | 389 | "\r\nPublic Sub New()\r\nEnd Sub: " + |
389 | compileScript + | 390 | compileScript + |
390 | ":End Class :End Namespace\r\n"; | 391 | ":End Class :End Namespace\r\n"; |
@@ -406,7 +407,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
406 | m_scriptEngine.World.RegionInfo.RegionID.ToString(), | 407 | m_scriptEngine.World.RegionInfo.RegionID.ToString(), |
407 | FilePrefix + "_compiled_" + asset + ".dll")); | 408 | FilePrefix + "_compiled_" + asset + ".dll")); |
408 | #if DEBUG | 409 | #if DEBUG |
409 | // m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Starting compile of \"" + OutFile + "\"."); | 410 | // m_scriptEngine.Log.Debug("[Compiler]: Starting compile of \"" + OutFile + "\"."); |
410 | #endif | 411 | #endif |
411 | try | 412 | try |
412 | { | 413 | { |
@@ -414,7 +415,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
414 | } | 415 | } |
415 | catch (Exception e) // NOTLEGIT - Should be just catching FileIOException | 416 | catch (Exception e) // NOTLEGIT - Should be just catching FileIOException |
416 | { | 417 | { |
417 | //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); | 418 | //m_scriptEngine.Log.Error("[Compiler]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); |
418 | throw new Exception("Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); | 419 | throw new Exception("Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); |
419 | } | 420 | } |
420 | //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll"); | 421 | //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll"); |
@@ -432,7 +433,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
432 | } | 433 | } |
433 | catch (Exception ex) // NOTLEGIT - Should be just catching FileIOException | 434 | catch (Exception ex) // NOTLEGIT - Should be just catching FileIOException |
434 | { | 435 | { |
435 | m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString()); | 436 | m_scriptEngine.Log.Error("[Compiler]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString()); |
436 | } | 437 | } |
437 | } | 438 | } |
438 | 439 | ||
@@ -451,10 +452,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
451 | string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); | 452 | string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); |
452 | string rootPathSE = Path.GetDirectoryName(GetType().Assembly.Location); | 453 | string rootPathSE = Path.GetDirectoryName(GetType().Assembly.Location); |
453 | //Console.WriteLine("Assembly location: " + rootPath); | 454 | //Console.WriteLine("Assembly location: " + rootPath); |
454 | parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.XEngine.Script.dll")); | 455 | parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll")); |
455 | // parameters.ReferencedAssemblies.Add(Path.Combine(rootPathSE, "OpenSim.Region.ScriptEngine.XEngine.dll")); | 456 | parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll")); |
456 | 457 | ||
457 | //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment"); | ||
458 | parameters.GenerateExecutable = false; | 458 | parameters.GenerateExecutable = false; |
459 | parameters.OutputAssembly = OutFile; | 459 | parameters.OutputAssembly = OutFile; |
460 | parameters.IncludeDebugInformation = CompileWithDebugInformation; | 460 | parameters.IncludeDebugInformation = CompileWithDebugInformation; |
@@ -508,7 +508,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
508 | errtext += "No compile error. But not able to locate compiled file."; | 508 | errtext += "No compile error. But not able to locate compiled file."; |
509 | throw new Exception(errtext); | 509 | throw new Exception(errtext); |
510 | } | 510 | } |
511 | m_scriptEngine.Log.DebugFormat("[XEngine] Compiled new assembly for {0}", asset); | 511 | m_scriptEngine.Log.DebugFormat("[Compiler] Compiled new assembly for {0}", asset); |
512 | return OutFile; | 512 | return OutFile; |
513 | } | 513 | } |
514 | } | 514 | } |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs index 2dc8547..380686e 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/LSL2CSConverter.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/LSL2CSConverter.cs | |||
@@ -30,7 +30,7 @@ using System; | |||
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Text.RegularExpressions; | 31 | using System.Text.RegularExpressions; |
32 | 32 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine | 33 | namespace OpenSim.Region.ScriptEngine.Shared.CodeTools |
34 | { | 34 | { |
35 | public class LSL2CSConverter | 35 | public class LSL2CSConverter |
36 | { | 36 | { |
@@ -355,13 +355,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
355 | 355 | ||
356 | //System.Console.WriteLine(Script); | 356 | //System.Console.WriteLine(Script); |
357 | Return = String.Empty;// + | 357 | Return = String.Empty;// + |
358 | //"using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic;"; | 358 | //"using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;"; |
359 | 359 | ||
360 | //Return += String.Empty + | 360 | //Return += String.Empty + |
361 | // "namespace SecondLife { "; | 361 | // "namespace SecondLife { "; |
362 | //Return += String.Empty + | 362 | //Return += String.Empty + |
363 | // //"[Serializable] " + | 363 | // //"[Serializable] " + |
364 | // "public class Script : OpenSim.Region.ScriptEngine.Common.LSL_BaseClass { "; | 364 | // "public class Script : OpenSim.Region.ScriptEngine.Shared.LSL_BaseClass { "; |
365 | //Return += @"public Script() { } "; | 365 | //Return += @"public Script() { } "; |
366 | Return += Script; | 366 | Return += Script; |
367 | //Return += "} }\r\n"; | 367 | //Return += "} }\r\n"; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs new file mode 100644 index 0000000..54b4861 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/YP2CSConverter.cs | |||
@@ -0,0 +1,108 @@ | |||
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 | */ | ||
28 | |||
29 | using System; | ||
30 | using System.IO; | ||
31 | using System.Collections.Generic; | ||
32 | using System.Text; | ||
33 | using System.Text.RegularExpressions; | ||
34 | using OpenSim.Region.ScriptEngine.Shared.YieldProlog; | ||
35 | |||
36 | namespace OpenSim.Region.ScriptEngine.Shared.CodeTools | ||
37 | { | ||
38 | public class YP2CSConverter | ||
39 | { | ||
40 | public YP2CSConverter() | ||
41 | { | ||
42 | } | ||
43 | |||
44 | public string Convert(string Script) | ||
45 | { | ||
46 | string CS_code = GenCode(Script); | ||
47 | return CS_code; | ||
48 | } | ||
49 | |||
50 | static string GenCode(string myCode) | ||
51 | { | ||
52 | Variable TermList = new Variable(); | ||
53 | Variable FunctionCode = new Variable(); | ||
54 | |||
55 | string CS_code = ""; | ||
56 | |||
57 | int cs_pointer = myCode.IndexOf("\n//cs"); | ||
58 | if (cs_pointer > 0) | ||
59 | { | ||
60 | CS_code = myCode.Substring(cs_pointer); // CS code comes after | ||
61 | myCode = myCode.Substring(0, cs_pointer); | ||
62 | } | ||
63 | myCode.Replace("//yp", "%YPCode"); | ||
64 | |||
65 | StringWriter myCS_SW = new StringWriter(); | ||
66 | StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n "+myCode + "\n"); | ||
67 | |||
68 | YP.see(myCode_SR); | ||
69 | YP.tell(myCS_SW); | ||
70 | |||
71 | //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n"); | ||
72 | foreach (bool l1 in Parser.parseInput(TermList)) | ||
73 | { | ||
74 | foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode)) | ||
75 | { | ||
76 | ListPair VFC = new ListPair(FunctionCode, new Variable()); | ||
77 | //Console.WriteLine("-------------------------") | ||
78 | //Console.WriteLine(FunctionCode.ToString()) | ||
79 | //Console.WriteLine("-------------------------") | ||
80 | YPCompiler.convertFunctionCSharp(FunctionCode); | ||
81 | //YPCompiler.convertStringCodesCSharp(VFC); | ||
82 | } | ||
83 | } | ||
84 | YP.seen(); | ||
85 | myCS_SW.Close(); | ||
86 | YP.told(); | ||
87 | StringBuilder bu = myCS_SW.GetStringBuilder(); | ||
88 | string finalcode = "//YPEncoded\n" + bu.ToString(); | ||
89 | // FIX script events (we're in the same script) | ||
90 | // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit(' | ||
91 | finalcode = Regex.Replace(finalcode, | ||
92 | @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,", | ||
93 | @"this.$1(", | ||
94 | RegexOptions.Compiled | RegexOptions.Singleline); | ||
95 | finalcode = Regex.Replace(finalcode, | ||
96 | @" static ", | ||
97 | @" ", | ||
98 | RegexOptions.Compiled | RegexOptions.Singleline); | ||
99 | |||
100 | finalcode = CS_code+"\n\r"+ finalcode; | ||
101 | finalcode = Regex.Replace(finalcode, | ||
102 | @"PrologCallback", | ||
103 | @"public IEnumerable<bool> ", | ||
104 | RegexOptions.Compiled | RegexOptions.Singleline); | ||
105 | return finalcode; | ||
106 | } | ||
107 | } | ||
108 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs new file mode 100644 index 0000000..8e312c5 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs | |||
@@ -0,0 +1,121 @@ | |||
1 | using System; | ||
2 | using System.IO; | ||
3 | using System.Threading; | ||
4 | using System.Collections; | ||
5 | using System.Collections.Generic; | ||
6 | using libsecondlife; | ||
7 | using OpenSim.Framework; | ||
8 | using OpenSim.Region.Environment; | ||
9 | using OpenSim.Region.Environment.Scenes; | ||
10 | |||
11 | namespace OpenSim.Region.ScriptEngine.Shared | ||
12 | { | ||
13 | public class DetectParams | ||
14 | { | ||
15 | public DetectParams() | ||
16 | { | ||
17 | Key = LLUUID.Zero; | ||
18 | OffsetPos = new LSL_Types.Vector3(); | ||
19 | LinkNum = 0; | ||
20 | Group = LLUUID.Zero; | ||
21 | Name = String.Empty; | ||
22 | Owner = LLUUID.Zero; | ||
23 | Position = new LSL_Types.Vector3(); | ||
24 | Rotation = new LSL_Types.Quaternion(); | ||
25 | Type = 0; | ||
26 | Velocity = new LSL_Types.Vector3(); | ||
27 | } | ||
28 | |||
29 | public LLUUID Key; | ||
30 | public LSL_Types.Vector3 OffsetPos; | ||
31 | public int LinkNum; | ||
32 | public LLUUID Group; | ||
33 | public string Name; | ||
34 | public LLUUID Owner; | ||
35 | public LSL_Types.Vector3 Position; | ||
36 | public LSL_Types.Quaternion Rotation; | ||
37 | public int Type; | ||
38 | public LSL_Types.Vector3 Velocity; | ||
39 | |||
40 | public void Populate(Scene scene) | ||
41 | { | ||
42 | SceneObjectPart part = scene.GetSceneObjectPart(Key); | ||
43 | if (part == null) // Avatar, maybe? | ||
44 | { | ||
45 | ScenePresence presence = scene.GetScenePresence(Key); | ||
46 | if (presence == null) | ||
47 | return; | ||
48 | |||
49 | Name = presence.Firstname + " " + presence.Lastname; | ||
50 | Owner = Key; | ||
51 | Position = new LSL_Types.Vector3( | ||
52 | presence.AbsolutePosition.X, | ||
53 | presence.AbsolutePosition.X, | ||
54 | presence.AbsolutePosition.Z); | ||
55 | Rotation = new LSL_Types.Quaternion( | ||
56 | presence.Rotation.x, | ||
57 | presence.Rotation.y, | ||
58 | presence.Rotation.z, | ||
59 | presence.Rotation.w); | ||
60 | Velocity = new LSL_Types.Vector3( | ||
61 | presence.Velocity.X, | ||
62 | presence.Velocity.X, | ||
63 | presence.Velocity.Z); | ||
64 | |||
65 | Type = 0x01; // Avatar | ||
66 | if (presence.Velocity != LLVector3.Zero) | ||
67 | Type |= 0x02; // Active | ||
68 | |||
69 | Group = presence.ControllingClient.ActiveGroupId; | ||
70 | |||
71 | return; | ||
72 | } | ||
73 | |||
74 | part=part.ParentGroup.RootPart; // We detect objects only | ||
75 | |||
76 | LinkNum = 0; // Not relevant | ||
77 | |||
78 | Group = part.GroupID; | ||
79 | Name = part.Name; | ||
80 | Owner = part.OwnerID; | ||
81 | if (part.Velocity == LLVector3.Zero) | ||
82 | Type = 0x04; // Passive | ||
83 | else | ||
84 | Type = 0x02; // Passive | ||
85 | |||
86 | foreach (SceneObjectPart p in part.ParentGroup.Children.Values) | ||
87 | { | ||
88 | if (p.ContainsScripts()) | ||
89 | { | ||
90 | Type |= 0x08; // Scripted | ||
91 | break; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | Position = new LSL_Types.Vector3(part.AbsolutePosition.X, | ||
96 | part.AbsolutePosition.Y, | ||
97 | part.AbsolutePosition.Z); | ||
98 | |||
99 | LLQuaternion wr = part.GetWorldRotation(); | ||
100 | Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W); | ||
101 | |||
102 | Velocity = new LSL_Types.Vector3(part.Velocity.X, | ||
103 | part.Velocity.Y, | ||
104 | part.Velocity.Z); | ||
105 | } | ||
106 | } | ||
107 | |||
108 | public class EventParams | ||
109 | { | ||
110 | public EventParams(string eventName, Object[] eventParams, DetectParams[] detectParams) | ||
111 | { | ||
112 | EventName=eventName; | ||
113 | Params=eventParams; | ||
114 | DetectParams=detectParams; | ||
115 | } | ||
116 | |||
117 | public string EventName; | ||
118 | public Object[] Params; | ||
119 | public DetectParams[] DetectParams; | ||
120 | } | ||
121 | } | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Script/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 8bd3d73..6b080a0 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Script/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -29,7 +29,7 @@ using System; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Text.RegularExpressions; | 30 | using System.Text.RegularExpressions; |
31 | 31 | ||
32 | namespace OpenSim.Region.ScriptEngine.XEngine.Script | 32 | namespace OpenSim.Region.ScriptEngine.Shared |
33 | { | 33 | { |
34 | [Serializable] | 34 | [Serializable] |
35 | public partial class LSL_Types | 35 | public partial class LSL_Types |
@@ -1474,6 +1474,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1474 | return f1.value != f2.value; | 1474 | return f1.value != f2.value; |
1475 | } | 1475 | } |
1476 | 1476 | ||
1477 | public override bool Equals(Object o) | ||
1478 | { | ||
1479 | if(!(o is LSLFloat)) | ||
1480 | return false; | ||
1481 | |||
1482 | return value == ((LSLFloat)o).value; | ||
1483 | } | ||
1484 | |||
1485 | public override int GetHashCode() | ||
1486 | { | ||
1487 | return (int)value; | ||
1488 | } | ||
1489 | |||
1477 | static public LSLFloat operator ++(LSLFloat f) | 1490 | static public LSLFloat operator ++(LSLFloat f) |
1478 | { | 1491 | { |
1479 | f.value++; | 1492 | f.value++; |
@@ -1491,12 +1504,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script | |||
1491 | return f.value; | 1504 | return f.value; |
1492 | } | 1505 | } |
1493 | 1506 | ||
1494 | static public explicit operator LSLString(LSLFloat f) | ||
1495 | { | ||
1496 | string v = String.Format("{0:0.000000}", f.value); | ||
1497 | return new LSLString(v); | ||
1498 | } | ||
1499 | |||
1500 | #endregion | 1507 | #endregion |
1501 | 1508 | ||
1502 | #region Overriders | 1509 | #region Overriders |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index c226a7e..8bfef79 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | |||
@@ -33,7 +33,8 @@ using OpenSim.Framework; | |||
33 | using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; | 33 | using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; |
34 | using OpenSim.Region.Environment.Scenes; | 34 | using OpenSim.Region.Environment.Scenes; |
35 | using OpenSim.Region.Environment.Interfaces; | 35 | using OpenSim.Region.Environment.Interfaces; |
36 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 36 | using OpenSim.Region.ScriptEngine.Shared; |
37 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
37 | using Axiom.Math; | 38 | using Axiom.Math; |
38 | 39 | ||
39 | namespace OpenSim.Region.ScriptEngine.XEngine | 40 | namespace OpenSim.Region.ScriptEngine.XEngine |
@@ -83,8 +84,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
83 | IClientAPI remoteClient) | 84 | IClientAPI remoteClient) |
84 | { | 85 | { |
85 | // Add to queue for all scripts in ObjectID object | 86 | // Add to queue for all scripts in ObjectID object |
86 | XDetectParams[] det = new XDetectParams[1]; | 87 | DetectParams[] det = new DetectParams[1]; |
87 | det[0] = new XDetectParams(); | 88 | det[0] = new DetectParams(); |
88 | det[0].Key = remoteClient.AgentId; | 89 | det[0].Key = remoteClient.AgentId; |
89 | det[0].Populate(myScriptEngine.World); | 90 | det[0].Populate(myScriptEngine.World); |
90 | 91 | ||
@@ -97,7 +98,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
97 | if (part.ParentGroup.Children.Count > 0) | 98 | if (part.ParentGroup.Children.Count > 0) |
98 | det[0].LinkNum = part.LinkNum + 1; | 99 | det[0].LinkNum = part.LinkNum + 1; |
99 | 100 | ||
100 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 101 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
101 | "touch_start", new Object[] { new LSL_Types.LSLInteger(1) }, | 102 | "touch_start", new Object[] { new LSL_Types.LSLInteger(1) }, |
102 | det)); | 103 | det)); |
103 | } | 104 | } |
@@ -106,8 +107,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
106 | IClientAPI remoteClient) | 107 | IClientAPI remoteClient) |
107 | { | 108 | { |
108 | // Add to queue for all scripts in ObjectID object | 109 | // Add to queue for all scripts in ObjectID object |
109 | XDetectParams[] det = new XDetectParams[1]; | 110 | DetectParams[] det = new DetectParams[1]; |
110 | det[0] = new XDetectParams(); | 111 | det[0] = new DetectParams(); |
111 | det[0].Key = remoteClient.AgentId; | 112 | det[0].Key = remoteClient.AgentId; |
112 | det[0].Populate(myScriptEngine.World); | 113 | det[0].Populate(myScriptEngine.World); |
113 | det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X, | 114 | det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X, |
@@ -123,7 +124,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
123 | if (part.ParentGroup.Children.Count > 0) | 124 | if (part.ParentGroup.Children.Count > 0) |
124 | det[0].LinkNum = part.LinkNum + 1; | 125 | det[0].LinkNum = part.LinkNum + 1; |
125 | 126 | ||
126 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 127 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
127 | "touch", new Object[] { new LSL_Types.LSLInteger(1) }, | 128 | "touch", new Object[] { new LSL_Types.LSLInteger(1) }, |
128 | det)); | 129 | det)); |
129 | } | 130 | } |
@@ -131,8 +132,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
131 | public void touch_end(uint localID, IClientAPI remoteClient) | 132 | public void touch_end(uint localID, IClientAPI remoteClient) |
132 | { | 133 | { |
133 | // Add to queue for all scripts in ObjectID object | 134 | // Add to queue for all scripts in ObjectID object |
134 | XDetectParams[] det = new XDetectParams[1]; | 135 | DetectParams[] det = new DetectParams[1]; |
135 | det[0] = new XDetectParams(); | 136 | det[0] = new DetectParams(); |
136 | det[0].Key = remoteClient.AgentId; | 137 | det[0].Key = remoteClient.AgentId; |
137 | det[0].Populate(myScriptEngine.World); | 138 | det[0].Populate(myScriptEngine.World); |
138 | 139 | ||
@@ -145,7 +146,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
145 | if (part.ParentGroup.Children.Count > 0) | 146 | if (part.ParentGroup.Children.Count > 0) |
146 | det[0].LinkNum = part.LinkNum + 1; | 147 | det[0].LinkNum = part.LinkNum + 1; |
147 | 148 | ||
148 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 149 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
149 | "touch_end", new Object[] { new LSL_Types.LSLInteger(1) }, | 150 | "touch_end", new Object[] { new LSL_Types.LSLInteger(1) }, |
150 | det)); | 151 | det)); |
151 | } | 152 | } |
@@ -153,9 +154,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
153 | public void changed(uint localID, uint change) | 154 | public void changed(uint localID, uint change) |
154 | { | 155 | { |
155 | // Add to queue for all scripts in localID, Object pass change. | 156 | // Add to queue for all scripts in localID, Object pass change. |
156 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 157 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
157 | "changed",new object[] { new LSL_Types.LSLInteger(change) }, | 158 | "changed",new object[] { new LSL_Types.LSLInteger(change) }, |
158 | new XDetectParams[0])); | 159 | new DetectParams[0])); |
159 | } | 160 | } |
160 | 161 | ||
161 | // state_entry: not processed here | 162 | // state_entry: not processed here |
@@ -163,27 +164,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
163 | 164 | ||
164 | public void money(uint localID, LLUUID agentID, int amount) | 165 | public void money(uint localID, LLUUID agentID, int amount) |
165 | { | 166 | { |
166 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 167 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
167 | "money", new object[] { | 168 | "money", new object[] { |
168 | new LSL_Types.LSLString(agentID.ToString()), | 169 | new LSL_Types.LSLString(agentID.ToString()), |
169 | new LSL_Types.LSLInteger(amount) }, | 170 | new LSL_Types.LSLInteger(amount) }, |
170 | new XDetectParams[0])); | 171 | new DetectParams[0])); |
171 | } | 172 | } |
172 | 173 | ||
173 | public void collision_start(uint localID, ColliderArgs col) | 174 | public void collision_start(uint localID, ColliderArgs col) |
174 | { | 175 | { |
175 | // Add to queue for all scripts in ObjectID object | 176 | // Add to queue for all scripts in ObjectID object |
176 | List<XDetectParams> det = new List<XDetectParams>(); | 177 | List<DetectParams> det = new List<DetectParams>(); |
177 | 178 | ||
178 | foreach (DetectedObject detobj in col.Colliders) | 179 | foreach (DetectedObject detobj in col.Colliders) |
179 | { | 180 | { |
180 | XDetectParams d = new XDetectParams(); | 181 | DetectParams d = new DetectParams(); |
181 | d.Key =detobj.keyUUID; | 182 | d.Key =detobj.keyUUID; |
182 | d.Populate(myScriptEngine.World); | 183 | d.Populate(myScriptEngine.World); |
183 | det.Add(d); | 184 | det.Add(d); |
184 | } | 185 | } |
185 | 186 | ||
186 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 187 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
187 | "collision_start", | 188 | "collision_start", |
188 | new Object[] { new LSL_Types.LSLInteger(1) }, | 189 | new Object[] { new LSL_Types.LSLInteger(1) }, |
189 | det.ToArray())); | 190 | det.ToArray())); |
@@ -192,17 +193,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
192 | public void collision(uint localID, ColliderArgs col) | 193 | public void collision(uint localID, ColliderArgs col) |
193 | { | 194 | { |
194 | // Add to queue for all scripts in ObjectID object | 195 | // Add to queue for all scripts in ObjectID object |
195 | List<XDetectParams> det = new List<XDetectParams>(); | 196 | List<DetectParams> det = new List<DetectParams>(); |
196 | 197 | ||
197 | foreach (DetectedObject detobj in col.Colliders) | 198 | foreach (DetectedObject detobj in col.Colliders) |
198 | { | 199 | { |
199 | XDetectParams d = new XDetectParams(); | 200 | DetectParams d = new DetectParams(); |
200 | d.Key =detobj.keyUUID; | 201 | d.Key =detobj.keyUUID; |
201 | d.Populate(myScriptEngine.World); | 202 | d.Populate(myScriptEngine.World); |
202 | det.Add(d); | 203 | det.Add(d); |
203 | } | 204 | } |
204 | 205 | ||
205 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 206 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
206 | "collision", new Object[] { new LSL_Types.LSLInteger(1) }, | 207 | "collision", new Object[] { new LSL_Types.LSLInteger(1) }, |
207 | det.ToArray())); | 208 | det.ToArray())); |
208 | } | 209 | } |
@@ -210,17 +211,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
210 | public void collision_end(uint localID, ColliderArgs col) | 211 | public void collision_end(uint localID, ColliderArgs col) |
211 | { | 212 | { |
212 | // Add to queue for all scripts in ObjectID object | 213 | // Add to queue for all scripts in ObjectID object |
213 | List<XDetectParams> det = new List<XDetectParams>(); | 214 | List<DetectParams> det = new List<DetectParams>(); |
214 | 215 | ||
215 | foreach (DetectedObject detobj in col.Colliders) | 216 | foreach (DetectedObject detobj in col.Colliders) |
216 | { | 217 | { |
217 | XDetectParams d = new XDetectParams(); | 218 | DetectParams d = new DetectParams(); |
218 | d.Key =detobj.keyUUID; | 219 | d.Key =detobj.keyUUID; |
219 | d.Populate(myScriptEngine.World); | 220 | d.Populate(myScriptEngine.World); |
220 | det.Add(d); | 221 | det.Add(d); |
221 | } | 222 | } |
222 | 223 | ||
223 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 224 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
224 | "collision_end", | 225 | "collision_end", |
225 | new Object[] { new LSL_Types.LSLInteger(1) }, | 226 | new Object[] { new LSL_Types.LSLInteger(1) }, |
226 | det.ToArray())); | 227 | det.ToArray())); |
@@ -228,26 +229,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
228 | 229 | ||
229 | public void land_collision_start(uint localID, LLUUID itemID) | 230 | public void land_collision_start(uint localID, LLUUID itemID) |
230 | { | 231 | { |
231 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 232 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
232 | "land_collision_start", | 233 | "land_collision_start", |
233 | new object[0], | 234 | new object[0], |
234 | new XDetectParams[0])); | 235 | new DetectParams[0])); |
235 | } | 236 | } |
236 | 237 | ||
237 | public void land_collision(uint localID, LLUUID itemID) | 238 | public void land_collision(uint localID, LLUUID itemID) |
238 | { | 239 | { |
239 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 240 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
240 | "land_collision", | 241 | "land_collision", |
241 | new object[0], | 242 | new object[0], |
242 | new XDetectParams[0])); | 243 | new DetectParams[0])); |
243 | } | 244 | } |
244 | 245 | ||
245 | public void land_collision_end(uint localID, LLUUID itemID) | 246 | public void land_collision_end(uint localID, LLUUID itemID) |
246 | { | 247 | { |
247 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 248 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
248 | "land_collision_end", | 249 | "land_collision_end", |
249 | new object[0], | 250 | new object[0], |
250 | new XDetectParams[0])); | 251 | new DetectParams[0])); |
251 | } | 252 | } |
252 | 253 | ||
253 | // timer: not handled here | 254 | // timer: not handled here |
@@ -255,75 +256,75 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
255 | 256 | ||
256 | public void on_rez(uint localID, LLUUID itemID, int startParam) | 257 | public void on_rez(uint localID, LLUUID itemID, int startParam) |
257 | { | 258 | { |
258 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 259 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
259 | "on_rez",new object[] { | 260 | "on_rez",new object[] { |
260 | new LSL_Types.LSLInteger(startParam)}, | 261 | new LSL_Types.LSLInteger(startParam)}, |
261 | new XDetectParams[0])); | 262 | new DetectParams[0])); |
262 | } | 263 | } |
263 | 264 | ||
264 | public void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change) | 265 | public void control(uint localID, LLUUID itemID, LLUUID agentID, uint held, uint change) |
265 | { | 266 | { |
266 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 267 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
267 | "control",new object[] { | 268 | "control",new object[] { |
268 | new LSL_Types.LSLString(agentID.ToString()), | 269 | new LSL_Types.LSLString(agentID.ToString()), |
269 | new LSL_Types.LSLInteger(held), | 270 | new LSL_Types.LSLInteger(held), |
270 | new LSL_Types.LSLInteger(change)}, | 271 | new LSL_Types.LSLInteger(change)}, |
271 | new XDetectParams[0])); | 272 | new DetectParams[0])); |
272 | } | 273 | } |
273 | 274 | ||
274 | public void email(uint localID, LLUUID itemID, string timeSent, | 275 | public void email(uint localID, LLUUID itemID, string timeSent, |
275 | string address, string subject, string message, int numLeft) | 276 | string address, string subject, string message, int numLeft) |
276 | { | 277 | { |
277 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 278 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
278 | "email",new object[] { | 279 | "email",new object[] { |
279 | new LSL_Types.LSLString(timeSent), | 280 | new LSL_Types.LSLString(timeSent), |
280 | new LSL_Types.LSLString(address), | 281 | new LSL_Types.LSLString(address), |
281 | new LSL_Types.LSLString(subject), | 282 | new LSL_Types.LSLString(subject), |
282 | new LSL_Types.LSLString(message), | 283 | new LSL_Types.LSLString(message), |
283 | new LSL_Types.LSLInteger(numLeft)}, | 284 | new LSL_Types.LSLInteger(numLeft)}, |
284 | new XDetectParams[0])); | 285 | new DetectParams[0])); |
285 | } | 286 | } |
286 | 287 | ||
287 | public void at_target(uint localID, uint handle, LLVector3 targetpos, | 288 | public void at_target(uint localID, uint handle, LLVector3 targetpos, |
288 | LLVector3 atpos) | 289 | LLVector3 atpos) |
289 | { | 290 | { |
290 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 291 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
291 | "at_target", new object[] { | 292 | "at_target", new object[] { |
292 | new LSL_Types.LSLInteger(handle), | 293 | new LSL_Types.LSLInteger(handle), |
293 | new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z), | 294 | new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z), |
294 | new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) }, | 295 | new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) }, |
295 | new XDetectParams[0])); | 296 | new DetectParams[0])); |
296 | } | 297 | } |
297 | 298 | ||
298 | public void not_at_target(uint localID) | 299 | public void not_at_target(uint localID) |
299 | { | 300 | { |
300 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 301 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
301 | "not_at_target",new object[0], | 302 | "not_at_target",new object[0], |
302 | new XDetectParams[0])); | 303 | new DetectParams[0])); |
303 | } | 304 | } |
304 | 305 | ||
305 | public void at_rot_target(uint localID, LLUUID itemID) | 306 | public void at_rot_target(uint localID, LLUUID itemID) |
306 | { | 307 | { |
307 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 308 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
308 | "at_rot_target",new object[0], | 309 | "at_rot_target",new object[0], |
309 | new XDetectParams[0])); | 310 | new DetectParams[0])); |
310 | } | 311 | } |
311 | 312 | ||
312 | public void not_at_rot_target(uint localID, LLUUID itemID) | 313 | public void not_at_rot_target(uint localID, LLUUID itemID) |
313 | { | 314 | { |
314 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 315 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
315 | "not_at_rot_target",new object[0], | 316 | "not_at_rot_target",new object[0], |
316 | new XDetectParams[0])); | 317 | new DetectParams[0])); |
317 | } | 318 | } |
318 | 319 | ||
319 | // run_time_permissions: not handled here | 320 | // run_time_permissions: not handled here |
320 | 321 | ||
321 | public void attach(uint localID, LLUUID itemID, LLUUID avatar) | 322 | public void attach(uint localID, LLUUID itemID, LLUUID avatar) |
322 | { | 323 | { |
323 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 324 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
324 | "attach",new object[] { | 325 | "attach",new object[] { |
325 | new LSL_Types.LSLString(avatar.ToString()) }, | 326 | new LSL_Types.LSLString(avatar.ToString()) }, |
326 | new XDetectParams[0])); | 327 | new DetectParams[0])); |
327 | } | 328 | } |
328 | 329 | ||
329 | // dataserver: not handled here | 330 | // dataserver: not handled here |
@@ -331,16 +332,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
331 | 332 | ||
332 | public void moving_start(uint localID, LLUUID itemID) | 333 | public void moving_start(uint localID, LLUUID itemID) |
333 | { | 334 | { |
334 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 335 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
335 | "moving_start",new object[0], | 336 | "moving_start",new object[0], |
336 | new XDetectParams[0])); | 337 | new DetectParams[0])); |
337 | } | 338 | } |
338 | 339 | ||
339 | public void moving_end(uint localID, LLUUID itemID) | 340 | public void moving_end(uint localID, LLUUID itemID) |
340 | { | 341 | { |
341 | myScriptEngine.PostObjectEvent(localID, new XEventParams( | 342 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
342 | "moving_end",new object[0], | 343 | "moving_end",new object[0], |
343 | new XDetectParams[0])); | 344 | new DetectParams[0])); |
344 | } | 345 | } |
345 | 346 | ||
346 | // object_rez: not handled here | 347 | // object_rez: not handled here |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Executor.cs b/OpenSim/Region/ScriptEngine/XEngine/Executor.cs index 29336ac..e12f2bf 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Executor.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/Executor.cs | |||
@@ -28,7 +28,8 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 31 | using OpenSim.Region.ScriptEngine.Shared; |
32 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
32 | 33 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine | 34 | namespace OpenSim.Region.ScriptEngine.XEngine |
34 | { | 35 | { |
@@ -44,15 +45,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
44 | } | 45 | } |
45 | 46 | ||
46 | 47 | ||
47 | protected override scriptEvents DoGetStateEventFlags() | 48 | protected override scriptEvents DoGetStateEventFlags(string state) |
48 | { | 49 | { |
49 | //Console.WriteLine("Get event flags for " + m_Script.State); | 50 | //Console.WriteLine("Get event flags for " + state); |
50 | 51 | ||
51 | // Check to see if we've already computed the flags for this state | 52 | // Check to see if we've already computed the flags for this state |
52 | scriptEvents eventFlags = scriptEvents.None; | 53 | scriptEvents eventFlags = scriptEvents.None; |
53 | if (m_stateEvents.ContainsKey(m_Script.State)) | 54 | if (m_stateEvents.ContainsKey(state)) |
54 | { | 55 | { |
55 | m_stateEvents.TryGetValue(m_Script.State, out eventFlags); | 56 | m_stateEvents.TryGetValue(state, out eventFlags); |
56 | return eventFlags; | 57 | return eventFlags; |
57 | } | 58 | } |
58 | 59 | ||
@@ -61,7 +62,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
61 | // Fill in the events for this state, cache the results in the map | 62 | // Fill in the events for this state, cache the results in the map |
62 | foreach (KeyValuePair<string, scriptEvents> kvp in m_eventFlagsMap) | 63 | foreach (KeyValuePair<string, scriptEvents> kvp in m_eventFlagsMap) |
63 | { | 64 | { |
64 | string evname = m_Script.State + "_event_" + kvp.Key; | 65 | string evname = state + "_event_" + kvp.Key; |
65 | //Console.WriteLine("Trying event "+evname); | 66 | //Console.WriteLine("Trying event "+evname); |
66 | try | 67 | try |
67 | { | 68 | { |
@@ -80,18 +81,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
80 | 81 | ||
81 | // Save the flags we just computed and return the result | 82 | // Save the flags we just computed and return the result |
82 | if (eventFlags != 0) | 83 | if (eventFlags != 0) |
83 | m_stateEvents.Add(m_Script.State, eventFlags); | 84 | m_stateEvents.Add(state, eventFlags); |
84 | 85 | ||
85 | //Console.WriteLine("Returning {0:x}", eventFlags); | 86 | //Console.WriteLine("Returning {0:x}", eventFlags); |
86 | return (eventFlags); | 87 | return (eventFlags); |
87 | } | 88 | } |
88 | 89 | ||
89 | protected override void DoExecuteEvent(string FunctionName, object[] args) | 90 | protected override void DoExecuteEvent(string state, string FunctionName, object[] args) |
90 | { | 91 | { |
91 | // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory. | 92 | // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory. |
92 | // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead! | 93 | // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead! |
93 | 94 | ||
94 | string EventName = m_Script.State + "_event_" + FunctionName; | 95 | string EventName = state + "_event_" + FunctionName; |
95 | 96 | ||
96 | //#if DEBUG | 97 | //#if DEBUG |
97 | // Console.WriteLine("ScriptEngine: Script event function name: " + EventName); | 98 | // Console.WriteLine("ScriptEngine: Script event function name: " + EventName); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs b/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs index 3775372..799005c 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs | |||
@@ -28,7 +28,9 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Runtime.Remoting.Lifetime; | 30 | using System.Runtime.Remoting.Lifetime; |
31 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 31 | using OpenSim.Region.ScriptEngine.Shared; |
32 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
33 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
32 | 34 | ||
33 | namespace OpenSim.Region.ScriptEngine.XEngine | 35 | namespace OpenSim.Region.ScriptEngine.XEngine |
34 | { | 36 | { |
@@ -117,23 +119,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
117 | /// </summary> | 119 | /// </summary> |
118 | /// <param name="FunctionName">Name of function to execute</param> | 120 | /// <param name="FunctionName">Name of function to execute</param> |
119 | /// <param name="args">Arguments to pass to function</param> | 121 | /// <param name="args">Arguments to pass to function</param> |
120 | public void ExecuteEvent(string FunctionName, object[] args) | 122 | public void ExecuteEvent(string state, string FunctionName, object[] args) |
121 | { | 123 | { |
122 | DoExecuteEvent(FunctionName, args); | 124 | DoExecuteEvent(state, FunctionName, args); |
123 | } | 125 | } |
124 | 126 | ||
125 | protected abstract void DoExecuteEvent(string FunctionName, object[] args); | 127 | protected abstract void DoExecuteEvent(string state, string FunctionName, object[] args); |
126 | 128 | ||
127 | /// <summary> | 129 | /// <summary> |
128 | /// Compute the events handled by the current state of the script | 130 | /// Compute the events handled by the current state of the script |
129 | /// </summary> | 131 | /// </summary> |
130 | /// <returns>state mask</returns> | 132 | /// <returns>state mask</returns> |
131 | public scriptEvents GetStateEventFlags() | 133 | public scriptEvents GetStateEventFlags(string state) |
132 | { | 134 | { |
133 | return DoGetStateEventFlags(); | 135 | return DoGetStateEventFlags(state); |
134 | } | 136 | } |
135 | 137 | ||
136 | protected abstract scriptEvents DoGetStateEventFlags(); | 138 | protected abstract scriptEvents DoGetStateEventFlags(string state); |
137 | 139 | ||
138 | protected void initEventFlags() | 140 | protected void initEventFlags() |
139 | { | 141 | { |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 0b0ff3d..709e3ee 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -14,11 +14,15 @@ using OpenSim.Framework; | |||
14 | using OpenSim.Region.Environment; | 14 | using OpenSim.Region.Environment; |
15 | using OpenSim.Region.Environment.Scenes; | 15 | using OpenSim.Region.Environment.Scenes; |
16 | using OpenSim.Region.Environment.Interfaces; | 16 | using OpenSim.Region.Environment.Interfaces; |
17 | using OpenSim.Region.ScriptEngine.XEngine.Script; | 17 | using OpenSim.Region.ScriptEngine.Shared; |
18 | using OpenSim.Region.ScriptEngine.Shared.Api; | ||
19 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | ||
20 | using OpenSim.Region.ScriptEngine.Shared.CodeTools; | ||
21 | using OpenSim.Region.ScriptEngine.Interfaces; | ||
18 | 22 | ||
19 | namespace OpenSim.Region.ScriptEngine.XEngine | 23 | namespace OpenSim.Region.ScriptEngine.XEngine |
20 | { | 24 | { |
21 | public class XEngine : IRegionModule | 25 | public class XEngine : IRegionModule, IScriptEngine |
22 | { | 26 | { |
23 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 27 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
24 | 28 | ||
@@ -30,10 +34,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
30 | private EventManager m_EventManager; | 34 | private EventManager m_EventManager; |
31 | private int m_EventLimit; | 35 | private int m_EventLimit; |
32 | private bool m_KillTimedOutScripts; | 36 | private bool m_KillTimedOutScripts; |
37 | public AsyncCommandManager m_AsyncCommands; | ||
33 | 38 | ||
34 | private static List<XEngine> m_ScriptEngines = | 39 | private static List<XEngine> m_ScriptEngines = |
35 | new List<XEngine>(); | 40 | new List<XEngine>(); |
36 | public AsyncCommandManager m_ASYNCLSLCommandManager; | ||
37 | 41 | ||
38 | // Maps the local id to the script inventory items in it | 42 | // Maps the local id to the script inventory items in it |
39 | 43 | ||
@@ -87,11 +91,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
87 | string Script; | 91 | string Script; |
88 | } | 92 | } |
89 | 93 | ||
90 | public IConfig ScriptConfigSource | 94 | public IConfig Config |
91 | { | 95 | { |
92 | get { return m_ScriptConfig; } | 96 | get { return m_ScriptConfig; } |
93 | } | 97 | } |
94 | 98 | ||
99 | public Object AsyncCommands | ||
100 | { | ||
101 | get { return (Object)m_AsyncCommands; } | ||
102 | } | ||
103 | |||
95 | // | 104 | // |
96 | // IRegionModule functions | 105 | // IRegionModule functions |
97 | // | 106 | // |
@@ -155,7 +164,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
155 | } | 164 | } |
156 | 165 | ||
157 | m_EventManager = new EventManager(this); | 166 | m_EventManager = new EventManager(this); |
158 | m_ASYNCLSLCommandManager = new AsyncCommandManager(this); | ||
159 | 167 | ||
160 | StartEngine(minThreads, maxThreads, idleTimeout, prio, | 168 | StartEngine(minThreads, maxThreads, idleTimeout, prio, |
161 | maxScriptQueue, stackSize); | 169 | maxScriptQueue, stackSize); |
@@ -166,6 +174,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
166 | m_Scene.EventManager.OnRemoveScript += OnRemoveScript; | 174 | m_Scene.EventManager.OnRemoveScript += OnRemoveScript; |
167 | m_Scene.EventManager.OnScriptReset += OnScriptReset; | 175 | m_Scene.EventManager.OnScriptReset += OnScriptReset; |
168 | 176 | ||
177 | m_AsyncCommands = new AsyncCommandManager(this); | ||
178 | |||
169 | if (sleepTime > 0) | 179 | if (sleepTime > 0) |
170 | { | 180 | { |
171 | m_ThreadPool.QueueWorkItem(new WorkItemCallback( | 181 | m_ThreadPool.QueueWorkItem(new WorkItemCallback( |
@@ -418,7 +428,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
418 | if (!m_Scripts.ContainsKey(itemID)) | 428 | if (!m_Scripts.ContainsKey(itemID)) |
419 | return; | 429 | return; |
420 | 430 | ||
421 | m_ASYNCLSLCommandManager.RemoveScript(localID, itemID); | 431 | m_AsyncCommands.RemoveScript(localID, itemID); |
422 | 432 | ||
423 | XScriptInstance instance=m_Scripts[itemID]; | 433 | XScriptInstance instance=m_Scripts[itemID]; |
424 | m_Scripts.Remove(itemID); | 434 | m_Scripts.Remove(itemID); |
@@ -552,7 +562,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
552 | // | 562 | // |
553 | // Post event to an entire prim | 563 | // Post event to an entire prim |
554 | // | 564 | // |
555 | public bool PostObjectEvent(uint localID, XEventParams p) | 565 | public bool PostObjectEvent(uint localID, EventParams p) |
556 | { | 566 | { |
557 | bool result = false; | 567 | bool result = false; |
558 | 568 | ||
@@ -577,7 +587,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
577 | // | 587 | // |
578 | // Post an event to a single script | 588 | // Post an event to a single script |
579 | // | 589 | // |
580 | public bool PostScriptEvent(LLUUID itemID, XEventParams p) | 590 | public bool PostScriptEvent(LLUUID itemID, EventParams p) |
581 | { | 591 | { |
582 | if (m_Scripts.ContainsKey(itemID)) | 592 | if (m_Scripts.ContainsKey(itemID)) |
583 | { | 593 | { |
@@ -654,7 +664,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
654 | instance.ResetScript(); | 664 | instance.ResetScript(); |
655 | } | 665 | } |
656 | 666 | ||
657 | public XDetectParams GetDetectParams(LLUUID itemID, int idx) | 667 | public DetectParams GetDetectParams(LLUUID itemID, int idx) |
658 | { | 668 | { |
659 | XScriptInstance instance = GetInstance(itemID); | 669 | XScriptInstance instance = GetInstance(itemID); |
660 | if (instance != null) | 670 | if (instance != null) |
@@ -669,115 +679,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
669 | return instance.GetDetectID(idx); | 679 | return instance.GetDetectID(idx); |
670 | return LLUUID.Zero; | 680 | return LLUUID.Zero; |
671 | } | 681 | } |
672 | } | ||
673 | |||
674 | public class XDetectParams | ||
675 | { | ||
676 | public XDetectParams() | ||
677 | { | ||
678 | Key = LLUUID.Zero; | ||
679 | OffsetPos = new LSL_Types.Vector3(); | ||
680 | LinkNum = 0; | ||
681 | Group = LLUUID.Zero; | ||
682 | Name = String.Empty; | ||
683 | Owner = LLUUID.Zero; | ||
684 | Position = new LSL_Types.Vector3(); | ||
685 | Rotation = new LSL_Types.Quaternion(); | ||
686 | Type = 0; | ||
687 | Velocity = new LSL_Types.Vector3(); | ||
688 | } | ||
689 | |||
690 | public LLUUID Key; | ||
691 | public LSL_Types.Vector3 OffsetPos; | ||
692 | public int LinkNum; | ||
693 | public LLUUID Group; | ||
694 | public string Name; | ||
695 | public LLUUID Owner; | ||
696 | public LSL_Types.Vector3 Position; | ||
697 | public LSL_Types.Quaternion Rotation; | ||
698 | public int Type; | ||
699 | public LSL_Types.Vector3 Velocity; | ||
700 | |||
701 | public void Populate(Scene scene) | ||
702 | { | ||
703 | SceneObjectPart part = scene.GetSceneObjectPart(Key); | ||
704 | if (part == null) // Avatar, maybe? | ||
705 | { | ||
706 | ScenePresence presence = scene.GetScenePresence(Key); | ||
707 | if (presence == null) | ||
708 | return; | ||
709 | |||
710 | Name = presence.Firstname + " " + presence.Lastname; | ||
711 | Owner = Key; | ||
712 | Position = new LSL_Types.Vector3( | ||
713 | presence.AbsolutePosition.X, | ||
714 | presence.AbsolutePosition.X, | ||
715 | presence.AbsolutePosition.Z); | ||
716 | Rotation = new LSL_Types.Quaternion( | ||
717 | presence.Rotation.x, | ||
718 | presence.Rotation.y, | ||
719 | presence.Rotation.z, | ||
720 | presence.Rotation.w); | ||
721 | Velocity = new LSL_Types.Vector3( | ||
722 | presence.Velocity.X, | ||
723 | presence.Velocity.X, | ||
724 | presence.Velocity.Z); | ||
725 | |||
726 | Type = 0x01; // Avatar | ||
727 | if (presence.Velocity != LLVector3.Zero) | ||
728 | Type |= 0x02; // Active | ||
729 | |||
730 | Group = presence.ControllingClient.ActiveGroupId; | ||
731 | 682 | ||
683 | public void SetState(LLUUID itemID, string newState) | ||
684 | { | ||
685 | XScriptInstance instance = GetInstance(itemID); | ||
686 | if (instance == null) | ||
732 | return; | 687 | return; |
733 | } | 688 | instance.SetState(newState); |
734 | |||
735 | part=part.ParentGroup.RootPart; // We detect objects only | ||
736 | |||
737 | LinkNum = 0; // Not relevant | ||
738 | |||
739 | Group = part.GroupID; | ||
740 | Name = part.Name; | ||
741 | Owner = part.OwnerID; | ||
742 | if (part.Velocity == LLVector3.Zero) | ||
743 | Type = 0x04; // Passive | ||
744 | else | ||
745 | Type = 0x02; // Passive | ||
746 | |||
747 | foreach (SceneObjectPart p in part.ParentGroup.Children.Values) | ||
748 | { | ||
749 | if (part.ContainsScripts()) | ||
750 | { | ||
751 | Type |= 0x08; // Scripted | ||
752 | break; | ||
753 | } | ||
754 | } | ||
755 | |||
756 | Position = new LSL_Types.Vector3(part.AbsolutePosition.X, | ||
757 | part.AbsolutePosition.Y, | ||
758 | part.AbsolutePosition.Z); | ||
759 | |||
760 | LLQuaternion wr = part.GetWorldRotation(); | ||
761 | Rotation = new LSL_Types.Quaternion(wr.X, wr.Y, wr.Z, wr.W); | ||
762 | |||
763 | Velocity = new LSL_Types.Vector3(part.Velocity.X, | ||
764 | part.Velocity.Y, | ||
765 | part.Velocity.Z); | ||
766 | } | 689 | } |
767 | } | 690 | public string GetState(LLUUID itemID) |
768 | |||
769 | public class XEventParams | ||
770 | { | ||
771 | public XEventParams(string eventName, Object[] eventParams, XDetectParams[] detectParams) | ||
772 | { | 691 | { |
773 | EventName=eventName; | 692 | XScriptInstance instance = GetInstance(itemID); |
774 | Params=eventParams; | 693 | if (instance == null) |
775 | DetectParams=detectParams; | 694 | return "default"; |
695 | return instance.State; | ||
776 | } | 696 | } |
777 | |||
778 | public string EventName; | ||
779 | public Object[] Params; | ||
780 | public XDetectParams[] DetectParams; | ||
781 | } | 697 | } |
782 | 698 | ||
783 | public class XScriptInstance | 699 | public class XScriptInstance |
@@ -791,17 +707,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
791 | private LLUUID m_ObjectID; | 707 | private LLUUID m_ObjectID; |
792 | private LLUUID m_AssetID; | 708 | private LLUUID m_AssetID; |
793 | private IScript m_Script; | 709 | private IScript m_Script; |
794 | private LSL_ScriptCommands m_LSLCommands; | ||
795 | private OSSL_ScriptCommands m_OSSLCommands; | ||
796 | private Executor m_Executor; | 710 | private Executor m_Executor; |
797 | private LLUUID m_AppDomain; | 711 | private LLUUID m_AppDomain; |
798 | private XDetectParams[] m_DetectParams; | 712 | private DetectParams[] m_DetectParams; |
799 | private bool m_TimerQueued; | 713 | private bool m_TimerQueued; |
800 | private DateTime m_EventStart; | 714 | private DateTime m_EventStart; |
801 | private bool m_InEvent; | 715 | private bool m_InEvent; |
802 | private string m_PrimName; | 716 | private string m_PrimName; |
803 | private string m_ScriptName; | 717 | private string m_ScriptName; |
804 | private string m_Assembly; | 718 | private string m_Assembly; |
719 | private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>(); | ||
805 | 720 | ||
806 | public enum StateSource | 721 | public enum StateSource |
807 | { | 722 | { |
@@ -893,6 +808,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
893 | m_ScriptName = scriptName; | 808 | m_ScriptName = scriptName; |
894 | m_Assembly = assembly; | 809 | m_Assembly = assembly; |
895 | 810 | ||
811 | ApiManager am = new ApiManager(); | ||
812 | |||
896 | SceneObjectPart part=engine.World.GetSceneObjectPart(localID); | 813 | SceneObjectPart part=engine.World.GetSceneObjectPart(localID); |
897 | if (part == null) | 814 | if (part == null) |
898 | { | 815 | { |
@@ -900,10 +817,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
900 | return; | 817 | return; |
901 | } | 818 | } |
902 | 819 | ||
903 | m_LSLCommands = new LSL_ScriptCommands(engine, this, part, localID, | 820 | foreach (string api in am.GetApis()) |
904 | itemID); | 821 | { |
905 | m_OSSLCommands = new OSSL_ScriptCommands(engine, this, part, | 822 | m_Apis[api] = am.CreateApi(api); |
906 | localID, itemID); | 823 | m_Apis[api].Initialize(engine, part, localID, itemID); |
824 | } | ||
907 | 825 | ||
908 | try | 826 | try |
909 | { | 827 | { |
@@ -918,14 +836,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
918 | 836 | ||
919 | try | 837 | try |
920 | { | 838 | { |
921 | m_Script.Start(m_LSLCommands, m_OSSLCommands); | 839 | foreach (KeyValuePair<string,IScriptApi> kv in m_Apis) |
840 | { | ||
841 | m_Script.InitApi(kv.Key, kv.Value); | ||
842 | } | ||
922 | 843 | ||
923 | m_Executor = new Executor(m_Script); | 844 | m_Executor = new Executor(m_Script); |
924 | 845 | ||
925 | // m_Engine.Log.Debug("[XEngine] Script instance created"); | 846 | // m_Engine.Log.Debug("[XEngine] Script instance created"); |
926 | 847 | ||
927 | part.SetScriptEvents(m_ItemID, | 848 | part.SetScriptEvents(m_ItemID, |
928 | (int)m_Executor.GetStateEventFlags()); | 849 | (int)m_Executor.GetStateEventFlags(State)); |
929 | } | 850 | } |
930 | catch (Exception e) | 851 | catch (Exception e) |
931 | { | 852 | { |
@@ -958,7 +879,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
958 | 879 | ||
959 | ScriptSerializer.Deserialize(xml, this); | 880 | ScriptSerializer.Deserialize(xml, this); |
960 | 881 | ||
961 | m_Engine.m_ASYNCLSLCommandManager.CreateFromData( | 882 | m_Engine.m_AsyncCommands.CreateFromData( |
962 | m_LocalID, m_ItemID, m_ObjectID, | 883 | m_LocalID, m_ItemID, m_ObjectID, |
963 | PluginData); | 884 | PluginData); |
964 | 885 | ||
@@ -976,32 +897,32 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
976 | if (stateSource == StateSource.NewRez) | 897 | if (stateSource == StateSource.NewRez) |
977 | { | 898 | { |
978 | // m_Engine.Log.Debug("[XEngine] Posted changed(CHANGED_REGION_RESTART) to script"); | 899 | // m_Engine.Log.Debug("[XEngine] Posted changed(CHANGED_REGION_RESTART) to script"); |
979 | PostEvent(new XEventParams("changed", | 900 | PostEvent(new EventParams("changed", |
980 | new Object[] {new LSL_Types.LSLInteger(256)}, new XDetectParams[0])); | 901 | new Object[] {new LSL_Types.LSLInteger(256)}, new DetectParams[0])); |
981 | } | 902 | } |
982 | } | 903 | } |
983 | } | 904 | } |
984 | else | 905 | else |
985 | { | 906 | { |
986 | m_Engine.Log.Error("[XEngine] Unable to load script state: Memory limit exceeded"); | 907 | m_Engine.Log.Error("[XEngine] Unable to load script state: Memory limit exceeded"); |
987 | PostEvent(new XEventParams("state_entry", | 908 | PostEvent(new EventParams("state_entry", |
988 | new Object[0], new XDetectParams[0])); | 909 | new Object[0], new DetectParams[0])); |
989 | Start(); | 910 | Start(); |
990 | } | 911 | } |
991 | } | 912 | } |
992 | catch (Exception e) | 913 | catch (Exception e) |
993 | { | 914 | { |
994 | m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state from xml: {0}\n"+e.ToString(), xml); | 915 | m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state from xml: {0}\n"+e.ToString(), xml); |
995 | PostEvent(new XEventParams("state_entry", | 916 | PostEvent(new EventParams("state_entry", |
996 | new Object[0], new XDetectParams[0])); | 917 | new Object[0], new DetectParams[0])); |
997 | Start(); | 918 | Start(); |
998 | } | 919 | } |
999 | } | 920 | } |
1000 | else | 921 | else |
1001 | { | 922 | { |
1002 | m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state, file not found"); | 923 | m_Engine.Log.ErrorFormat("[XEngine] Unable to load script state, file not found"); |
1003 | PostEvent(new XEventParams("state_entry", | 924 | PostEvent(new EventParams("state_entry", |
1004 | new Object[0], new XDetectParams[0])); | 925 | new Object[0], new DetectParams[0])); |
1005 | Start(); | 926 | Start(); |
1006 | } | 927 | } |
1007 | } | 928 | } |
@@ -1100,15 +1021,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1100 | 1021 | ||
1101 | public void SetState(string state) | 1022 | public void SetState(string state) |
1102 | { | 1023 | { |
1103 | PostEvent(new XEventParams("state_exit", new Object[0], | 1024 | PostEvent(new EventParams("state_exit", new Object[0], |
1104 | new XDetectParams[0])); | 1025 | new DetectParams[0])); |
1105 | PostEvent(new XEventParams("state", new Object[] { state }, | 1026 | PostEvent(new EventParams("state", new Object[] { state }, |
1106 | new XDetectParams[0])); | 1027 | new DetectParams[0])); |
1107 | PostEvent(new XEventParams("state_entry", new Object[0], | 1028 | PostEvent(new EventParams("state_entry", new Object[0], |
1108 | new XDetectParams[0])); | 1029 | new DetectParams[0])); |
1109 | } | 1030 | } |
1110 | 1031 | ||
1111 | public void PostEvent(XEventParams data) | 1032 | public void PostEvent(EventParams data) |
1112 | { | 1033 | { |
1113 | // m_Engine.Log.DebugFormat("[XEngine] Posted event {2} in state {3} to {0}.{1}", | 1034 | // m_Engine.Log.DebugFormat("[XEngine] Posted event {2} in state {3} to {0}.{1}", |
1114 | // m_PrimName, m_ScriptName, data.EventName, m_State); | 1035 | // m_PrimName, m_ScriptName, data.EventName, m_State); |
@@ -1137,11 +1058,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1137 | 1058 | ||
1138 | public object EventProcessor() | 1059 | public object EventProcessor() |
1139 | { | 1060 | { |
1140 | XEventParams data = null; | 1061 | EventParams data = null; |
1141 | 1062 | ||
1142 | lock (m_EventQueue) | 1063 | lock (m_EventQueue) |
1143 | { | 1064 | { |
1144 | data = (XEventParams) m_EventQueue.Dequeue(); | 1065 | data = (EventParams) m_EventQueue.Dequeue(); |
1145 | if (data == null) // Shouldn't happen | 1066 | if (data == null) // Shouldn't happen |
1146 | { | 1067 | { |
1147 | m_CurrentResult = null; | 1068 | m_CurrentResult = null; |
@@ -1158,7 +1079,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1158 | // m_Engine.Log.DebugFormat("[XEngine] Script {0}.{1} state set to {2}", | 1079 | // m_Engine.Log.DebugFormat("[XEngine] Script {0}.{1} state set to {2}", |
1159 | // m_PrimName, m_ScriptName, data.Params[0].ToString()); | 1080 | // m_PrimName, m_ScriptName, data.Params[0].ToString()); |
1160 | m_State=data.Params[0].ToString(); | 1081 | m_State=data.Params[0].ToString(); |
1161 | m_Engine.m_ASYNCLSLCommandManager.RemoveScript( | 1082 | m_Engine.m_AsyncCommands.RemoveScript( |
1162 | m_LocalID, m_ItemID); | 1083 | m_LocalID, m_ItemID); |
1163 | 1084 | ||
1164 | SceneObjectPart part = m_Engine.World.GetSceneObjectPart( | 1085 | SceneObjectPart part = m_Engine.World.GetSceneObjectPart( |
@@ -1166,7 +1087,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1166 | if (part != null) | 1087 | if (part != null) |
1167 | { | 1088 | { |
1168 | part.SetScriptEvents(m_ItemID, | 1089 | part.SetScriptEvents(m_ItemID, |
1169 | (int)m_Executor.GetStateEventFlags()); | 1090 | (int)m_Executor.GetStateEventFlags(State)); |
1170 | } | 1091 | } |
1171 | } | 1092 | } |
1172 | else | 1093 | else |
@@ -1181,7 +1102,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1181 | { | 1102 | { |
1182 | m_EventStart = DateTime.Now; | 1103 | m_EventStart = DateTime.Now; |
1183 | m_InEvent = true; | 1104 | m_InEvent = true; |
1184 | m_Executor.ExecuteEvent(data.EventName, data.Params); | 1105 | m_Executor.ExecuteEvent(State, data.EventName, data.Params); |
1185 | m_InEvent = false; | 1106 | m_InEvent = false; |
1186 | } | 1107 | } |
1187 | catch (Exception e) | 1108 | catch (Exception e) |
@@ -1259,14 +1180,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1259 | bool running = Running; | 1180 | bool running = Running; |
1260 | 1181 | ||
1261 | Stop(0); | 1182 | Stop(0); |
1262 | m_Engine.m_ASYNCLSLCommandManager.RemoveScript(m_LocalID, m_ItemID); | 1183 | m_Engine.m_AsyncCommands.RemoveScript(m_LocalID, m_ItemID); |
1263 | m_EventQueue.Clear(); | 1184 | m_EventQueue.Clear(); |
1264 | m_Script.ResetVars(); | 1185 | m_Script.ResetVars(); |
1265 | m_State = "default"; | 1186 | m_State = "default"; |
1266 | if (running) | 1187 | if (running) |
1267 | Start(); | 1188 | Start(); |
1268 | PostEvent(new XEventParams("state_entry", | 1189 | PostEvent(new EventParams("state_entry", |
1269 | new Object[0], new XDetectParams[0])); | 1190 | new Object[0], new DetectParams[0])); |
1270 | } | 1191 | } |
1271 | 1192 | ||
1272 | public Dictionary<string, object> GetVars() | 1193 | public Dictionary<string, object> GetVars() |
@@ -1279,7 +1200,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1279 | m_Script.SetVars(vars); | 1200 | m_Script.SetVars(vars); |
1280 | } | 1201 | } |
1281 | 1202 | ||
1282 | public XDetectParams GetDetectParams(int idx) | 1203 | public DetectParams GetDetectParams(int idx) |
1283 | { | 1204 | { |
1284 | if (idx < 0 || idx >= m_DetectParams.Length) | 1205 | if (idx < 0 || idx >= m_DetectParams.Length) |
1285 | return null; | 1206 | return null; |
@@ -1298,7 +1219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1298 | public void SaveState(string assembly) | 1219 | public void SaveState(string assembly) |
1299 | { | 1220 | { |
1300 | PluginData = | 1221 | PluginData = |
1301 | m_Engine.m_ASYNCLSLCommandManager.GetSerializationData( | 1222 | m_Engine.m_AsyncCommands.GetSerializationData( |
1302 | m_ItemID); | 1223 | m_ItemID); |
1303 | 1224 | ||
1304 | string xml = ScriptSerializer.Serialize(this); | 1225 | string xml = ScriptSerializer.Serialize(this); |
@@ -1368,7 +1289,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1368 | 1289 | ||
1369 | while (count > 0) | 1290 | while (count > 0) |
1370 | { | 1291 | { |
1371 | XEventParams ep = (XEventParams)instance.EventQueue.Dequeue(); | 1292 | EventParams ep = (EventParams)instance.EventQueue.Dequeue(); |
1372 | instance.EventQueue.Enqueue(ep); | 1293 | instance.EventQueue.Enqueue(ep); |
1373 | count--; | 1294 | count--; |
1374 | 1295 | ||
@@ -1387,7 +1308,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1387 | 1308 | ||
1388 | XmlElement detect = xmldoc.CreateElement("", "Detected", ""); | 1309 | XmlElement detect = xmldoc.CreateElement("", "Detected", ""); |
1389 | 1310 | ||
1390 | foreach (XDetectParams det in ep.DetectParams) | 1311 | foreach (DetectParams det in ep.DetectParams) |
1391 | { | 1312 | { |
1392 | XmlElement objectElem = xmldoc.CreateElement("", "Object", | 1313 | XmlElement objectElem = xmldoc.CreateElement("", "Object", |
1393 | ""); | 1314 | ""); |
@@ -1449,9 +1370,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1449 | rootElement.AppendChild(queue); | 1370 | rootElement.AppendChild(queue); |
1450 | 1371 | ||
1451 | XmlNode plugins = xmldoc.CreateElement("", "Plugins", ""); | 1372 | XmlNode plugins = xmldoc.CreateElement("", "Plugins", ""); |
1452 | if (instance.PluginData.Length > 0) | 1373 | DumpList(xmldoc, plugins, |
1453 | DumpList(xmldoc, plugins, | 1374 | new LSL_Types.list(instance.PluginData)); |
1454 | new LSL_Types.list(instance.PluginData)); | ||
1455 | 1375 | ||
1456 | rootElement.AppendChild(plugins); | 1376 | rootElement.AppendChild(plugins); |
1457 | 1377 | ||
@@ -1510,8 +1430,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1510 | foreach (XmlNode item in itemL) | 1430 | foreach (XmlNode item in itemL) |
1511 | { | 1431 | { |
1512 | List<Object> parms = new List<Object>(); | 1432 | List<Object> parms = new List<Object>(); |
1513 | List<XDetectParams> detected = | 1433 | List<DetectParams> detected = |
1514 | new List<XDetectParams>(); | 1434 | new List<DetectParams>(); |
1515 | 1435 | ||
1516 | string eventName = | 1436 | string eventName = |
1517 | item.Attributes.GetNamedItem("event").Value; | 1437 | item.Attributes.GetNamedItem("event").Value; |
@@ -1595,7 +1515,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1595 | LLUUID.TryParse(det.InnerText, | 1515 | LLUUID.TryParse(det.InnerText, |
1596 | out uuid); | 1516 | out uuid); |
1597 | 1517 | ||
1598 | XDetectParams d = new XDetectParams(); | 1518 | DetectParams d = new DetectParams(); |
1599 | d.Key = uuid; | 1519 | d.Key = uuid; |
1600 | d.OffsetPos = v; | 1520 | d.OffsetPos = v; |
1601 | d.LinkNum = d_linkNum; | 1521 | d.LinkNum = d_linkNum; |
@@ -1612,7 +1532,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1612 | break; | 1532 | break; |
1613 | } | 1533 | } |
1614 | } | 1534 | } |
1615 | XEventParams ep = new XEventParams( | 1535 | EventParams ep = new EventParams( |
1616 | eventName, parms.ToArray(), | 1536 | eventName, parms.ToArray(), |
1617 | detected.ToArray()); | 1537 | detected.ToArray()); |
1618 | instance.EventQueue.Enqueue(ep); | 1538 | instance.EventQueue.Enqueue(ep); |