aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XMREngine/MMRInternalFuncDict.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/XMREngine/MMRInternalFuncDict.cs94
1 files changed, 94 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/XMREngine/MMRInternalFuncDict.cs b/OpenSim/Region/ScriptEngine/XMREngine/MMRInternalFuncDict.cs
new file mode 100644
index 0000000..c2c01b5
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/XMREngine/MMRInternalFuncDict.cs
@@ -0,0 +1,94 @@
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 OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Reflection;
32
33namespace OpenSim.Region.ScriptEngine.XMREngine {
34
35 public class InternalFuncDict : VarDict {
36
37 /**
38 * @brief build dictionary of internal functions from an interface.
39 * @param iface = interface with function definitions
40 * @param inclSig = true: catalog by name with arg sig, eg, llSay(integer,string)
41 * false: catalog by simple name only, eg, state_entry
42 * @returns dictionary of function definition tokens
43 */
44 public InternalFuncDict (Type iface, bool inclSig)
45 : base (false)
46 {
47 /*
48 * Loop through list of all methods declared in the interface.
49 */
50 System.Reflection.MethodInfo[] ifaceMethods = iface.GetMethods ();
51 foreach (System.Reflection.MethodInfo ifaceMethod in ifaceMethods) {
52 string key = ifaceMethod.Name;
53
54 /*
55 * Only do ones that begin with lower-case letters...
56 * as any others can't be referenced by scripts
57 */
58 if ((key[0] < 'a') || (key[0] > 'z')) continue;
59
60 try {
61
62 /*
63 * Create a corresponding TokenDeclVar struct.
64 */
65 System.Reflection.ParameterInfo[] parameters = ifaceMethod.GetParameters ();
66 TokenArgDecl argDecl = new TokenArgDecl (null);
67 for (int i = 0; i < parameters.Length; i++) {
68 System.Reflection.ParameterInfo param = parameters[i];
69 TokenType type = TokenType.FromSysType (null, param.ParameterType);
70 TokenName name = new TokenName (null, param.Name);
71 argDecl.AddArg (type, name);
72 }
73 TokenDeclVar declFunc = new TokenDeclVar (null, null, null);
74 declFunc.name = new TokenName (null, key);
75 declFunc.retType = TokenType.FromSysType (null, ifaceMethod.ReturnType);
76 declFunc.argDecl = argDecl;
77
78 /*
79 * Add the TokenDeclVar struct to the dictionary.
80 */
81 this.AddEntry (declFunc);
82 } catch (Exception except) {
83
84 string msg = except.ToString ();
85 int i = msg.IndexOf ("\n");
86 if (i > 0) msg = msg.Substring (0, i);
87 Console.WriteLine ("InternalFuncDict*: {0}: {1}", key, msg);
88
89 ///??? IGNORE ANY THAT FAIL - LIKE UNRECOGNIZED TYPE ???///
90 }
91 }
92 }
93 }
94}