|
1 | 1 | using System;
|
2 | 2 | using System.Collections.Generic;
|
| 3 | +using System.Diagnostics; |
3 | 4 | using System.IO;
|
4 | 5 | using System.Linq;
|
5 | 6 | using System.Reflection;
|
@@ -235,7 +236,7 @@ public static void Initialize(IEnumerable<string> args, bool setSysArgv = true,
|
235 | 236 | Exec(clr_py, module_globals, locals.Reference);
|
236 | 237 | }
|
237 | 238 |
|
238 |
| - LoadExtraModules(module_globals); |
| 239 | + LoadMixins(module_globals); |
239 | 240 |
|
240 | 241 | // add the imported module to the clr module, and copy the API functions
|
241 | 242 | // and decorators into the main clr module.
|
@@ -267,23 +268,31 @@ static BorrowedReference DefineModule(string name)
|
267 | 268 | return module;
|
268 | 269 | }
|
269 | 270 |
|
270 |
| - static void LoadExtraModules(BorrowedReference targetModuleDict) |
| 271 | + static void LoadMixins(BorrowedReference targetModuleDict) |
271 | 272 | {
|
272 |
| - Assembly assembly = Assembly.GetExecutingAssembly(); |
273 |
| - foreach (string nested in new[] { "collections" }) |
| 273 | + foreach (string nested in new[] {"collections"}) |
274 | 274 | {
|
275 |
| - var module = DefineModule("clr._extras." + nested); |
276 |
| - var module_globals = Runtime.PyModule_GetDict(module); |
277 |
| - string resourceName = typeof(PythonEngine).Namespace + ".Mixins." + nested + ".py"; |
278 |
| - using (var stream = assembly.GetManifestResourceStream(resourceName)) |
279 |
| - using (var reader = new StreamReader(stream)) |
280 |
| - { |
281 |
| - string pyCode = reader.ReadToEnd(); |
282 |
| - Exec(pyCode, module_globals.DangerousGetAddress(), module_globals.DangerousGetAddress()); |
283 |
| - } |
| 275 | + LoadSubmodule(targetModuleDict, |
| 276 | + fullName: "clr._extras." + nested, |
| 277 | + resourceName: typeof(PythonEngine).Namespace + ".Mixins." + nested + ".py"); |
| 278 | + } |
| 279 | + } |
284 | 280 |
|
285 |
| - Runtime.PyDict_SetItemString(targetModuleDict, nested, module); |
| 281 | + static void LoadSubmodule(BorrowedReference targetModuleDict, string fullName, string resourceName) |
| 282 | + { |
| 283 | + string memberName = fullName.AfterLast('.'); |
| 284 | + Debug.Assert(memberName != null); |
| 285 | + Assembly assembly = Assembly.GetExecutingAssembly(); |
| 286 | + var module = DefineModule(fullName); |
| 287 | + var module_globals = Runtime.PyModule_GetDict(module); |
| 288 | + using (var stream = assembly.GetManifestResourceStream(resourceName)) |
| 289 | + using (var reader = new StreamReader(stream)) |
| 290 | + { |
| 291 | + string pyCode = reader.ReadToEnd(); |
| 292 | + Exec(pyCode, module_globals.DangerousGetAddress(), module_globals.DangerousGetAddress()); |
286 | 293 | }
|
| 294 | + |
| 295 | + Runtime.PyDict_SetItemString(targetModuleDict, memberName, module); |
287 | 296 | }
|
288 | 297 |
|
289 | 298 | static void OnDomainUnload(object _, EventArgs __)
|
|
0 commit comments