comparison InteropCodeGen/gendotnet.cs @ 2:f1deea9c97a0

Cleaned up the interop code generator, added wrapper application to initialize kernel driver and run mono
author Ivo Smits
date Wed, 04 May 2011 16:10:08 +0200
parents e1ec7bf71313
children 64226294e26b
comparison
equal deleted inserted replaced
1:55ca098c88d0 2:f1deea9c97a0
13 Param, 13 Param,
14 } 14 }
15 class TypeInfo { 15 class TypeInfo {
16 public String Name { get; private set; } 16 public String Name { get; private set; }
17 public String[] Attributes { get; private set; } 17 public String[] Attributes { get; private set; }
18 //public Boolean InputOnly { get; private set; }
19 public String Members { get; set; }
20 18
21 public TypeInfo(String name, params String[] attributes) { 19 public TypeInfo(String name, params String[] attributes) {
22 this.Name = name; 20 this.Name = name;
23 this.Attributes = attributes; 21 this.Attributes = attributes;
24 } 22 }
25 /*public TypeInfo(String name, bool inputOnly, params String[] attributes)
26 : this(name, attributes) {
27 this.InputOnly = inputOnly;
28 }*/
29 /*public static TypeInfo CreateInterfaceWithMembers(String name, String members) {
30 TypeInfo ret = new TypeInfo(name, "MarshalAs(UnmanagedType.Interface)");
31 ret.Members = members;
32 return ret;
33 }*/
34 //Todo: if attribute mod="string"/"ptr" ...
35 public void WriteDeclaration(TextWriter o, ParameterType vartype) { 23 public void WriteDeclaration(TextWriter o, ParameterType vartype) {
36 WriteAttributes(o, vartype); 24 WriteAttributes(o, vartype);
37 o.Write(Name); 25 o.Write(Name);
38 } 26 }
39 public void WriteAttributes(TextWriter o, ParameterType vartype) { 27 public void WriteAttributes(TextWriter o, ParameterType vartype) {
40 //if (InputOnly && vartype != ParameterType.In) {
41 foreach (String attribute in Attributes) { 28 foreach (String attribute in Attributes) {
42 o.Write("["); 29 o.Write("[");
43 if (vartype == ParameterType.Return) o.Write("return: "); 30 if (vartype == ParameterType.Return) o.Write("return: ");
44 else if (vartype == ParameterType.Param) o.Write("param: "); 31 else if (vartype == ParameterType.Param) o.Write("param: ");
45 o.Write(attribute); 32 o.Write(attribute);
48 if (vartype == ParameterType.Out) o.Write("out "); 35 if (vartype == ParameterType.Out) o.Write("out ");
49 else if (vartype == ParameterType.Reference) o.Write("ref "); 36 else if (vartype == ParameterType.Reference) o.Write("ref ");
50 } 37 }
51 } 38 }
52 static Dictionary<String, TypeInfo> Types = new Dictionary<string, TypeInfo>(); 39 static Dictionary<String, TypeInfo> Types = new Dictionary<string, TypeInfo>();
40 static void AddInterfaceTypes(params String[] names) {
41 foreach (String name in names) Types.Add(name, new TypeInfo(name, "MarshalAs(UnmanagedType.Interface)"));
42 }
43 static void AddEnumTypes(params String[] names) {
44 foreach (String name in names) Types.Add(name, new TypeInfo(name));
45 }
53 static void InitTypes() { 46 static void InitTypes() {
54 Types.Add("short", new TypeInfo("Int16")); 47 Types.Add("short", new TypeInfo("Int16"));
55 Types.Add("unsigned short", new TypeInfo("UInt16")); 48 Types.Add("unsigned short", new TypeInfo("UInt16"));
56 Types.Add("unsigned long", new TypeInfo("UInt32")); 49 Types.Add("unsigned long", new TypeInfo("UInt32"));
57 Types.Add("long long", new TypeInfo("Int64")); 50 Types.Add("long long", new TypeInfo("Int64"));
61 //Types.Add("boolean", new TypeInfo("Boolean", "MarshalAs(UnmanagedType.Bool)")); 54 //Types.Add("boolean", new TypeInfo("Boolean", "MarshalAs(UnmanagedType.Bool)"));
62 Types.Add("boolean", new TypeInfo("Int32")); 55 Types.Add("boolean", new TypeInfo("Int32"));
63 Types.Add("wstring", new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)")); 56 Types.Add("wstring", new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)"));
64 //Types.Add("uuid", new TypeInfo("Guid", true, "MarshalAs(UnmanagedType.LPStruct)")); 57 //Types.Add("uuid", new TypeInfo("Guid", true, "MarshalAs(UnmanagedType.LPStruct)"));
65 Types.Add("uuid", new TypeInfo("Guid", "MarshalAs(UnmanagedType.LPStruct)")); 58 Types.Add("uuid", new TypeInfo("Guid", "MarshalAs(UnmanagedType.LPStruct)"));
66
67 Types.Add("IMachine", new TypeInfo("IMachine", "MarshalAs(UnmanagedType.Interface)"));
68 Types.Add("ISession", new TypeInfo("ISession", "MarshalAs(UnmanagedType.Interface)"));
69 Types.Add("IVirtualBox", new TypeInfo("IVirtualBox", "MarshalAs(UnmanagedType.Interface)"));
70 Types.Add("IHost", new TypeInfo("IHost", "MarshalAs(UnmanagedType.Interface)"));
71 Types.Add("IConsole", new TypeInfo("IConsole", "MarshalAs(UnmanagedType.Interface)"));
72 Types.Add("ISystemProperties", new TypeInfo("ISystemProperties", "MarshalAs(UnmanagedType.Interface)"));
73 Types.Add("IProgress", new TypeInfo("IProgress", "MarshalAs(UnmanagedType.Interface)"));
74 Types.Add("IDisplay", new TypeInfo("IDisplay", "MarshalAs(UnmanagedType.Interface)"));
75 Types.Add("IMouse", new TypeInfo("IMouse", "MarshalAs(UnmanagedType.Interface)"));
76 Types.Add("IKeyboard", new TypeInfo("IKeyboard", "MarshalAs(UnmanagedType.Interface)"));
77 Types.Add("IFramebuffer", new TypeInfo("IFramebuffer", "MarshalAs(UnmanagedType.Interface)"));
78 Types.Add("IFramebufferOverlay", new TypeInfo("IFramebufferOverlay", "MarshalAs(UnmanagedType.Interface)"));
79 Types.Add("IMachineDebugger", new TypeInfo("IMachineDebugger", "MarshalAs(UnmanagedType.Interface)"));
80 Types.Add("IVirtualBoxErrorInfo", new TypeInfo("IVirtualBoxErrorInfo", "MarshalAs(UnmanagedType.Interface)"));
81 Types.Add("IEventSource", new TypeInfo("IEventSource", "MarshalAs(UnmanagedType.Interface)"));
82 Types.Add("IEventListener", new TypeInfo("IEventListener", "MarshalAs(UnmanagedType.Interface)"));
83 Types.Add("IEventContext", new TypeInfo("IEventContext", "MarshalAs(UnmanagedType.Interface)"));
84 Types.Add("IConsoleCallback", new TypeInfo("IConsoleCallback", "MarshalAs(UnmanagedType.Interface)"));
85 Types.Add("IEvent", new TypeInfo("IEvent", "MarshalAs(UnmanagedType.Interface)"));
86
87 Types.Add("LockType", new TypeInfo("LockType"));
88 Types.Add("MediumVariant", new TypeInfo("MediumVariant"));
89 Types.Add("AccessMode", new TypeInfo("AccessMode"));
90 Types.Add("NATProtocol", new TypeInfo("NATProtocol"));
91 Types.Add("FirmwareType", new TypeInfo("FirmwareType"));
92 Types.Add("StorageControllerType", new TypeInfo("StorageControllerType"));
93 Types.Add("StorageBus", new TypeInfo("StorageBus"));
94 Types.Add("SessionType", new TypeInfo("SessionType"));
95 Types.Add("SessionState", new TypeInfo("SessionState"));
96 Types.Add("USBDeviceState", new TypeInfo("USBDeviceState"));
97 Types.Add("USBDeviceFilterAction", new TypeInfo("USBDeviceFilterAction"));
98 Types.Add("AudioControllerType", new TypeInfo("AudioControllerType"));
99 Types.Add("AudioDriverType", new TypeInfo("AudioDriverType"));
100 Types.Add("VRDPAuthType", new TypeInfo("VRDPAuthType"));
101 Types.Add("MachineState", new TypeInfo("MachineState"));
102 Types.Add("NetworkAdapterType", new TypeInfo("NetworkAdapterType"));
103 Types.Add("NetworkAttachmentType", new TypeInfo("NetworkAttachmentType"));
104 Types.Add("PortMode", new TypeInfo("PortMode"));
105 Types.Add("DeviceType", new TypeInfo("DeviceType"));
106 Types.Add("MediumState", new TypeInfo("MediumState"));
107 Types.Add("MediumType", new TypeInfo("MediumType"));
108 Types.Add("HostNetworkInterfaceType", new TypeInfo("HostNetworkInterfaceType"));
109 Types.Add("DeviceActivity", new TypeInfo("DeviceActivity"));
110 Types.Add("HostNetworkInterfaceMediumType", new TypeInfo("HostNetworkInterfaceMediumType"));
111 Types.Add("HostNetworkInterfaceStatus", new TypeInfo("HostNetworkInterfaceStatus"));
112 Types.Add("ProcessorFeature", new TypeInfo("ProcessorFeature"));
113 Types.Add("VFSType", new TypeInfo("VFSType"));
114 Types.Add("BIOSBootMenuMode", new TypeInfo("BIOSBootMenuMode"));
115 Types.Add("VirtualSystemDescriptionType", new TypeInfo("VirtualSystemDescriptionType"));
116 Types.Add("VirtualSystemDescriptionValueType", new TypeInfo("VirtualSystemDescriptionValueType"));
117 Types.Add("KeyboardHidType", new TypeInfo("KeyboardHidType"));
118 Types.Add("ClipboardMode", new TypeInfo("ClipboardMode"));
119 Types.Add("PointingHidType", new TypeInfo("PointingHidType"));
120 Types.Add("CPUPropertyType", new TypeInfo("CPUPropertyType"));
121 Types.Add("HWVirtExPropertyType", new TypeInfo("HWVirtExPropertyType"));
122 Types.Add("Scope", new TypeInfo("Scope"));
123 Types.Add("ChipsetType", new TypeInfo("ChipsetType"));
124 Types.Add("FaultToleranceState", new TypeInfo("FaultToleranceState"));
125 Types.Add("BandwidthGroupType", new TypeInfo("BandwidthGroupType"));
126 Types.Add("VBoxEventType", new TypeInfo("VBoxEventType"));
127 Types.Add("GuestMonitorChangedEventType", new TypeInfo("GuestMonitorChangedEventType"));
128 Types.Add("AuthType", new TypeInfo("AuthType"));
129 Types.Add("NetworkAdapterPromiscModePolicy", new TypeInfo("NetworkAdapterPromiscModePolicy"));
130 Types.Add("ExecuteProcessStatus", new TypeInfo("ExecuteProcessStatus"));
131 Types.Add("AdditionsRunLevelType", new TypeInfo("AdditionsRunLevelType"));
132 Types.Add("AdditionsFacilityStatus", new TypeInfo("AdditionsFacilityStatus"));
133 Types.Add("AdditionsFacilityType", new TypeInfo("AdditionsFacilityType"));
134 Types.Add("AdditionsFacilityClass", new TypeInfo("AdditionsFacilityClass"));
135 Types.Add("CleanupMode", new TypeInfo("CleanupMode"));
136 Types.Add("DataType", new TypeInfo("DataType"));
137
138 Types.Add("IBandwidthControl", new TypeInfo("IntPtr"));
139 Types.Add("IVRDEServerInfo", new TypeInfo("IntPtr"));
140 Types.Add("IAdditionsFacility", new TypeInfo("IntPtr"));
141 Types.Add("IExtPackPlugIn", new TypeInfo("IntPtr"));
142 Types.Add("IExtPackFile", new TypeInfo("IntPtr"));
143 Types.Add("IExtPack", new TypeInfo("IntPtr"));
144 Types.Add("IBIOSSettings", new TypeInfo("IntPtr"));
145 Types.Add("IVFSExplorer", new TypeInfo("IntPtr"));
146 Types.Add("IUSBController", new TypeInfo("IntPtr"));
147 Types.Add("IStorageController", new TypeInfo("IntPtr"));
148 Types.Add("IVRDPServer", new TypeInfo("IntPtr"));
149 Types.Add("ISnapshot", new TypeInfo("IntPtr"));
150 Types.Add("INATEngine", new TypeInfo("IntPtr"));
151 Types.Add("IUSBDeviceFilter", new TypeInfo("IntPtr"));
152 Types.Add("IMediumAttachment", new TypeInfo("IntPtr"));
153 Types.Add("IUSBDevice", new TypeInfo("IntPtr"));
154 Types.Add("IParallelPort", new TypeInfo("IntPtr"));
155 Types.Add("ISerialPort", new TypeInfo("IntPtr"));
156 Types.Add("INetworkAdapter", new TypeInfo("IntPtr"));
157 Types.Add("IMedium", new TypeInfo("IntPtr"));
158 Types.Add("IGuestOSType", new TypeInfo("IntPtr"));
159 Types.Add("ISharedFolder", new TypeInfo("IntPtr"));
160 Types.Add("IPerformanceCollector", new TypeInfo("IntPtr"));
161 Types.Add("IDHCPServer", new TypeInfo("IntPtr"));
162 Types.Add("IAppliance", new TypeInfo("IntPtr"));
163 Types.Add("IVirtualBoxCallback", new TypeInfo("IntPtr"));
164 Types.Add("IPerformanceMetric", new TypeInfo("IntPtr"));
165 Types.Add("IMediumFormat", new TypeInfo("IntPtr"));
166 Types.Add("IHostUSBDevice", new TypeInfo("IntPtr"));
167 Types.Add("IHostNetworkInterface", new TypeInfo("IntPtr"));
168 Types.Add("IHostUSBDeviceFilter", new TypeInfo("IntPtr"));
169 Types.Add("IRemoteDisplayInfo", new TypeInfo("IntPtr"));
170 Types.Add("IGuest", new TypeInfo("IntPtr"));
171 Types.Add("IVirtualSystemDescription", new TypeInfo("IntPtr"));
172 Types.Add("IAudioAdapter", new TypeInfo("IntPtr"));
173 Types.Add("IExtPackManager", new TypeInfo("IntPtr"));
174 Types.Add("IVRDEServer", new TypeInfo("IntPtr"));
175 Types.Add("IPciDeviceAttachment", new TypeInfo("IntPtr"));
176 Types.Add("IBandwidthGroup", new TypeInfo("IntPtr"));
177
178 Types.Add("$unknown", new TypeInfo("IntPtr")); 59 Types.Add("$unknown", new TypeInfo("IntPtr"));
60
61 AddInterfaceTypes("IMachine", "ISession", "IVirtualBox", "IHost", "IConsole", "ISystemProperties");
62 AddInterfaceTypes("IProgress", "IDisplay", "IMouse", "IKeyboard", "IFramebuffer", "IFramebufferOverlay");
63 AddInterfaceTypes("IMachineDebugger", "IVirtualBoxErrorInfo", "IEventSource", "IEventListener", "IEventContext");
64 AddInterfaceTypes("IConsoleCallback", "IEvent", "IBandwidthControl", "IVRDEServerInfo", "IAdditionsFacility");
65 AddInterfaceTypes("IExtPackPlugIn", "IExtPackFile", "IExtPack", "IBIOSSettings", "IVFSExplorer", "IUSBController");
66 AddInterfaceTypes("IStorageController", "IVRDPServer", "ISnapshot", "INATEngine", "IUSBDeviceFilter");
67 AddInterfaceTypes("IMediumAttachment", "IUSBDevice", "IParallelPort", "ISerialPort", "INetworkAdapter");
68 AddInterfaceTypes("IMedium", "IGuestOSType", "ISharedFolder", "IPerformanceCollector", "IDHCPServer");
69 AddInterfaceTypes("IAppliance", "IVirtualBoxCallback", "IPerformanceMetric", "IMediumFormat", "IHostUSBDevice");
70 AddInterfaceTypes("IHostNetworkInterface", "IHostUSBDeviceFilter", "IRemoteDisplayInfo", "IGuest");
71 AddInterfaceTypes("IVirtualSystemDescription", "IAudioAdapter", "IExtPackManager", "IVRDEServer");
72 AddInterfaceTypes("IPciDeviceAttachment", "IBandwidthGroup");
73
74 AddEnumTypes("LockType", "MediumVariant", "AccessMode", "NATProtocol", "FirmwareType", "StorageControllerType");
75 AddEnumTypes("StorageBus", "SessionType", "SessionState", "USBDeviceState", "USBDeviceFilterAction");
76 AddEnumTypes("AudioControllerType", "AudioDriverType", "VRDPAuthType", "MachineState", "NetworkAdapterType");
77 AddEnumTypes("NetworkAttachmentType", "PortMode", "DeviceType", "MediumState", "VFSType", "MediumType");
78 AddEnumTypes("HostNetworkInterfaceType", "DeviceActivity", "HostNetworkInterfaceMediumType", "HostNetworkInterfaceStatus");
79 AddEnumTypes("ProcessorFeature", "BIOSBootMenuMode", "VirtualSystemDescriptionType", "VirtualSystemDescriptionValueType");
80 AddEnumTypes("KeyboardHidType", "ClipboardMode", "PointingHidType", "CPUPropertyType", "HWVirtExPropertyType");
81 AddEnumTypes("ChipsetType", "FaultToleranceState", "BandwidthGroupType", "ExecuteProcessStatus", "VBoxEventType");
82 AddEnumTypes("GuestMonitorChangedEventType", "AuthType", "NetworkAdapterPromiscModePolicy", "AdditionsRunLevelType");
83 AddEnumTypes("AdditionsFacilityStatus", "AdditionsFacilityType", "AdditionsFacilityClass", "CleanupMode", "DataType");
179 } 84 }
180 static void Main(string[] args) { 85 static void Main(string[] args) {
181 InitTypes(); 86 InitTypes();
182 87
183 XPathDocument doc = new XPathDocument("VirtualBox.xidl"); 88 XPathDocument doc = new XPathDocument("VirtualBox.xidl");
241 switch (member.Name) { 146 switch (member.Name) {
242 case "desc": 147 case "desc":
243 break; 148 break;
244 case "attribute": { 149 case "attribute": {
245 String mName = member.SelectSingleNode("@name").Value; 150 String mName = member.SelectSingleNode("@name").Value;
246 //String mType = member.SelectSingleNode("@type").Value;
247 item = member.SelectSingleNode("@readonly"); 151 item = member.SelectSingleNode("@readonly");
248 Boolean mReadOnly = item == null ? false : item.Value == "yes"; 152 Boolean mReadOnly = item == null ? false : item.Value == "yes";
249 //item = member.SelectSingleNode("@mod");
250 //String mMod = item == null ? null : item.Value;
251 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); 153 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1);
252 oattribute.Write("\t"); 154 oattribute.Write("\t");
253 /*TypeInfo t;
254 if (mMod == "ptr") {
255 t = new TypeInfo("IntPtr");
256 } else if (mMod == "string") {
257 t = new TypeInfo("String", "MarshalAs(UnmanagedType.LPWStr)");
258 } else if (mMod == null) {
259 if (!Types.TryGetValue(mType, out t)) {
260 Console.Error.WriteLine("Type {0} is not supported", mType);
261 t = new TypeInfo("void");
262 }
263 } else {
264 Console.Error.WriteLine("Type modifier {0} is not supported", mMod);
265 t = new TypeInfo("void");
266 }*/
267 TypeInfo t = GetTypeDeclaration(member); 155 TypeInfo t = GetTypeDeclaration(member);
268 oattribute.Write(t.Name); 156 oattribute.Write(t.Name);
269 oattribute.Write(" "); 157 oattribute.Write(" ");
270 oattribute.Write(mName); 158 oattribute.Write(mName);
271 oattribute.WriteLine(" {"); 159 oattribute.WriteLine(" {");
288 if (mParamReturn == null || mParamReturn.Count != 1) { 176 if (mParamReturn == null || mParamReturn.Count != 1) {
289 omethod.Write("void"); 177 omethod.Write("void");
290 } else { 178 } else {
291 mParamReturn.MoveNext(); 179 mParamReturn.MoveNext();
292 mReturn = true; 180 mReturn = true;
293 TypeInfo t = GetTypeDeclaration(mParamReturn.Current); 181 WriteTypeDeclaration(omethod, mParamReturn.Current, ParameterType.Return);
294 /*String mType = mParamReturn.Current.SelectSingleNode("@type").Value;
295 TypeInfo t;
296 if (!Types.TryGetValue(mType, out t)) {
297 Console.Error.WriteLine("Type {0} is not supported", mType);
298 t = new TypeInfo("void");
299 mReturn = false;
300 }*/
301 t.WriteDeclaration(omethod, ParameterType.Return);
302 } 182 }
303 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1); 183 mName = mName.Substring(0, 1).ToUpper() + mName.Substring(1);
304 omethod.Write(" "); 184 omethod.Write(" ");
305 omethod.Write(mName); 185 omethod.Write(mName);
306 omethod.Write("("); 186 omethod.Write("(");
308 bool first = true; 188 bool first = true;
309 if (mParams.MoveNext()) { 189 if (mParams.MoveNext()) {
310 while (true) { 190 while (true) {
311 XPathNavigator mParam = mParams.Current; 191 XPathNavigator mParam = mParams.Current;
312 String pDir = mParam.SelectSingleNode("@dir").Value; 192 String pDir = mParam.SelectSingleNode("@dir").Value;
313 //item = mParam.SelectSingleNode("@safearray");
314 //Boolean pArray = item == null ? false : item.Value == "yes";
315 //item = mParam.SelectSingleNode("@mod");
316 //String pMod = item == null ? null : item.Value;
317 if (pDir == "return" && mReturn) { 193 if (pDir == "return" && mReturn) {
318 if (mParams.MoveNext()) { 194 if (mParams.MoveNext()) {
319 continue; 195 continue;
320 } else { 196 } else {
321 break; 197 break;
328 if (first) { 204 if (first) {
329 first = false; 205 first = false;
330 } else { 206 } else {
331 omethod.Write(", "); 207 omethod.Write(", ");
332 } 208 }
333 ParameterType pt = ParameterType.In; 209 WriteTypeDeclaration(omethod, mParam, pDir == "out" ? ParameterType.Out : ParameterType.In);
334 if (pDir == "out") pt = ParameterType.Out;
335 TypeInfo t = GetTypeDeclaration(mParam, ref pt);
336 t.WriteDeclaration(omethod, pt);
337 /*if (pArray) {
338 omethod.Write("[MarshalAs(UnmanagedType.SafeArray)] ");
339 if (pDir == "out") omethod.Write("out ");
340 else omethod.Write("ref ");
341 omethod.Write("System.Array");
342 } else {
343 String pType = mParam.SelectSingleNode("@type").Value;
344 TypeInfo t;
345 if (!Types.TryGetValue(pType, out t)) {
346 Console.Error.WriteLine("Type {0} is not supported", pType);
347 t = new TypeInfo("IntPtr");
348 mReturn = false;
349 }
350 if (pMod == "ptr") {
351 t.WriteDeclaration(omethod, ParameterType.Reference);
352 } else if (pDir == "out") {
353 t.WriteDeclaration(omethod, ParameterType.Out);
354 } else {
355 t.WriteDeclaration(omethod, ParameterType.In);
356 }
357 }*/
358 omethod.Write(" p"); 210 omethod.Write(" p");
359 omethod.Write(mParam.SelectSingleNode("@name").Value); 211 omethod.Write(mParam.SelectSingleNode("@name").Value);
360 if (!mParams.MoveNext()) break; 212 if (!mParams.MoveNext()) break;
361 } 213 }
362 } 214 }
371 } 223 }
372 private static TypeInfo GetTypeDeclaration(XPathNavigator nav) { 224 private static TypeInfo GetTypeDeclaration(XPathNavigator nav) {
373 ParameterType pt = ParameterType.Param; 225 ParameterType pt = ParameterType.Param;
374 return GetTypeDeclaration(nav, ref pt); 226 return GetTypeDeclaration(nav, ref pt);
375 } 227 }
228 private static void WriteTypeDeclaration(TextWriter o, XPathNavigator nav, ParameterType paramType) {
229 TypeInfo t = GetTypeDeclaration(nav, ref paramType);
230 t.WriteDeclaration(o, paramType);
231 }
376 private static TypeInfo GetTypeDeclaration(XPathNavigator nav, ref ParameterType paramType) { 232 private static TypeInfo GetTypeDeclaration(XPathNavigator nav, ref ParameterType paramType) {
377 String mType = nav.SelectSingleNode("@type").Value; 233 String mType = nav.SelectSingleNode("@type").Value;
378 XPathItem item; 234 XPathItem item;
379 item = nav.SelectSingleNode("@mod"); 235 item = nav.SelectSingleNode("@mod");
380 String mMod = item == null ? null : item.Value; 236 String mMod = item == null ? null : item.Value;