OSDN Git Service

Initial contents of nt2chview
[nt2chview/stable.git] / NT2chCtrl45 / html / js / JsFunctionContext.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using System.Text;\r
5 using System.Threading.Tasks;\r
6 \r
7 namespace NT2chCtrl.html.js\r
8 {\r
9     public class JsFunctionContext\r
10     {\r
11         protected static Dictionary<string, JsVariant>\r
12             mGlobalVariables = new Dictionary<string, JsVariant>();\r
13         protected Dictionary<string, JsVariant>\r
14             mLocalVariables = new Dictionary<string, JsVariant>();\r
15 \r
16         private DebugContext mDbgCtx;\r
17         public void setDbgCtx(DebugContext dbgCtx)\r
18         {\r
19             mDbgCtx = dbgCtx;\r
20         }\r
21         public DebugContext getDbgCtx() { return mDbgCtx; }\r
22 \r
23         public JsFunctionContext(DebugContext dCtx)\r
24         {\r
25             setDbgCtx(dCtx);\r
26         }\r
27 \r
28         public bool getMemoryList(out List<DebugMemory> list)\r
29         {\r
30             list = new List<DebugMemory>();\r
31             foreach (string key in mGlobalVariables.Keys)\r
32             {\r
33                 JsVariant var;\r
34                 if (mGlobalVariables.TryGetValue(key, out var))\r
35                 {\r
36                     list.Add(DebugMemory.createInstance(key, var, false));\r
37                 }\r
38             }\r
39             foreach (string key in mLocalVariables.Keys)\r
40             {\r
41                 JsVariant var;\r
42                 if (mLocalVariables.TryGetValue(key, out var))\r
43                 {\r
44                     list.Add(DebugMemory.createInstance(key, var, true));\r
45                 }\r
46             }\r
47 \r
48             return true;\r
49         }\r
50         public JsFunctionContext() { }\r
51 \r
52         public JsVariant getValue(JsIdentifier id)\r
53         {\r
54             return getValue(id.getName(), id.isLocal());\r
55         }\r
56 \r
57         public JsVariant getValue(string name, bool local)\r
58         {\r
59             JsVariant value;\r
60             if (mLocalVariables.TryGetValue(name, out value))\r
61             {\r
62                 return value;\r
63             }\r
64 \r
65             if (local)\r
66             {\r
67                 value = new JsUndefValue();\r
68                 mLocalVariables.Add(name, value);\r
69                 return value;\r
70             }\r
71             if (mGlobalVariables.TryGetValue(name, out value))\r
72             {\r
73                 return value;\r
74             }\r
75             value = new JsUndefValue();\r
76             mGlobalVariables.Add(name, value);\r
77             return value;\r
78         }\r
79         public void setValue(JsIdentifier id, JsVariant value)\r
80         {\r
81             setValue(id.getName(), id.isLocal(), value);\r
82         }\r
83 \r
84         public void setValue(string name, bool local, JsVariant inValue)\r
85         {\r
86             if (mLocalVariables.ContainsKey(name))\r
87             {\r
88                 mLocalVariables.Remove(name);\r
89                 mLocalVariables.Add(name, inValue);\r
90                 return;\r
91             }\r
92             if (local)\r
93             {\r
94                 mLocalVariables.Add(name, inValue);\r
95                 return;\r
96             }\r
97             if (mGlobalVariables.ContainsKey(name))\r
98             {\r
99                 mGlobalVariables.Remove(name);\r
100                 mGlobalVariables.Add(name, inValue);\r
101                 return;\r
102             }\r
103             mGlobalVariables.Add(name, inValue);\r
104         }\r
105 \r
106         public JsVariant getParamValue(HtmlElement elem, JsVariant val)\r
107         {\r
108             if (val == null)\r
109                 return null;\r
110             JsFunction func = val as JsFunction;\r
111             if (func != null)\r
112             {\r
113                 val = func.Execute(this, elem);\r
114                 if (val == null)\r
115                     return null;\r
116             }\r
117             JsIdentifier id = val as JsIdentifier;\r
118             if (id != null)\r
119             {\r
120                 val = getValue(id);\r
121             }\r
122             func = val as JsFunction;\r
123             if (func != null)\r
124             {\r
125                 return getParamValue(elem, val);\r
126             }\r
127             return val;\r
128 \r
129         }\r
130     }\r
131 }\r