From 8660c5634cbd83f14d7c6b1581d46e30de00ce34 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 30 Jul 2023 14:54:49 +0200 Subject: [PATCH] #2907 --- Compiler/Compiler.cs | 16 +++++++++------ TestSuite/libA.dll | Bin 0 -> 59392 bytes TestSuite/libB.dll | Bin 0 -> 59392 bytes TestSuite/libref.pas | 5 +++++ .../NetWrappers/AssemblyResolveScope.cs | 19 +++++++++++++++++- TreeConverter/NetWrappers/NetHelper.cs | 19 ++++++++++++++++-- 6 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 TestSuite/libA.dll create mode 100644 TestSuite/libB.dll create mode 100644 TestSuite/libref.pas diff --git a/Compiler/Compiler.cs b/Compiler/Compiler.cs index 8bc32800c..6867dedc3 100644 --- a/Compiler/Compiler.cs +++ b/Compiler/Compiler.cs @@ -3154,16 +3154,17 @@ namespace PascalABCCompiler var preloadedAssemblies = new List(); foreach (var reference in referenceDirectives) preloadedAssemblies.Add(PreloadReference(reference)); - - using (new NetHelper.AssemblyResolveScope(AppDomain.CurrentDomain, preloadedAssemblies)) - { - foreach (var reference in referenceDirectives) - CompileReference(res, reference); - } + + if (assemblyResolveScope == null) + assemblyResolveScope = new NetHelper.AssemblyResolveScope(AppDomain.CurrentDomain, preloadedAssemblies); + foreach (var reference in referenceDirectives) + CompileReference(res, reference); return res; } + NetHelper.AssemblyResolveScope assemblyResolveScope; + private bool IsPossibleNamespace(SyntaxTree.unit_or_namespace name_space, bool add_to_standard_modules, string curr_path) { if (name_space is SyntaxTree.uses_unit_in) @@ -4086,6 +4087,9 @@ namespace PascalABCCompiler project = null; StandarModules.Clear(); CompiledVariables.Clear(); + if (assemblyResolveScope != null) + assemblyResolveScope.Dispose(); + assemblyResolveScope = null; if (!close_pcu) { SyntaxTreeToSemanticTreeConverter = new TreeConverter.SyntaxTreeToSemanticTreeConverter(); diff --git a/TestSuite/libA.dll b/TestSuite/libA.dll new file mode 100644 index 0000000000000000000000000000000000000000..961537c0bdb516ba1358d6ee63e7f6c18f313bf8 GIT binary patch literal 59392 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

%uJeATtXqf=Ce4cgplvS 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 Rf!w|7;*pr literal 0 HcmV?d00001 diff --git a/TestSuite/libB.dll b/TestSuite/libB.dll new file mode 100644 index 0000000000000000000000000000000000000000..89984d7894c6c41a392a442e622159a775aa843b GIT binary patch literal 59392 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 UfJxstu=xB(e3~Cm@BdoheVWS(vj6}9 literal 0 HcmV?d00001 diff --git a/TestSuite/libref.pas b/TestSuite/libref.pas new file mode 100644 index 000000000..470356dba --- /dev/null +++ b/TestSuite/libref.pas @@ -0,0 +1,5 @@ +{$reference 'libA.dll'} +begin + var t := new libA.ClassA(); + assert(t.field1 <> nil); +end. diff --git a/TreeConverter/NetWrappers/AssemblyResolveScope.cs b/TreeConverter/NetWrappers/AssemblyResolveScope.cs index 282dfeb3a..b2837d906 100644 --- a/TreeConverter/NetWrappers/AssemblyResolveScope.cs +++ b/TreeConverter/NetWrappers/AssemblyResolveScope.cs @@ -30,12 +30,29 @@ namespace PascalABCCompiler.NetHelper _appDomain.AssemblyResolve -= OnAssemblyResolve; } - private Assembly OnAssemblyResolve(object _, ResolveEventArgs args) + private Assembly OnAssemblyResolve(object obj, ResolveEventArgs args) { var requestedName = new AssemblyName(args.Name); if (_assemblies.TryGetValue(requestedName.Name, out var assembly)) return assembly; + var dir = PascalABCCompiler.NetHelper.NetHelper.GetAssemblyDirectory(args.RequestingAssembly); + if (string.IsNullOrEmpty(dir)) + return null; + string path = System.IO.Path.Combine(dir, args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"); + if (System.IO.File.Exists(path)) + { + try + { + var assm = PascalABCCompiler.NetHelper.NetHelper.LoadAssembly(path, true); + _assemblies[assm.GetName().Name] = assm; + return assm; + } + catch + { + } + + } return null; } } diff --git a/TreeConverter/NetWrappers/NetHelper.cs b/TreeConverter/NetWrappers/NetHelper.cs index 8994b2042..b9463528c 100644 --- a/TreeConverter/NetWrappers/NetHelper.cs +++ b/TreeConverter/NetWrappers/NetHelper.cs @@ -342,12 +342,15 @@ namespace PascalABCCompiler.NetHelper cur_used_assemblies[typeof(string).Assembly] = typeof(string).Assembly; cur_used_assemblies[typeof(Microsoft.CSharp.CSharpCodeProvider).Assembly] = typeof(Microsoft.CSharp.CSharpCodeProvider).Assembly; type_search_cache.Clear(); + } private static Hashtable ass_name_cache; private static Hashtable file_dates; - - public static bool IsAssemblyChanged(string name) + private static Dictionary assm_full_paths; + + + public static bool IsAssemblyChanged(string name) { if (name == null) return false; Assembly a = ass_name_cache[name] as Assembly; @@ -430,6 +433,7 @@ namespace PascalABCCompiler.NetHelper a = System.Reflection.Assembly.LoadFrom(name); } ass_name_cache[name] = a; + assm_full_paths[a] = name; file_dates[a] = System.IO.File.GetLastWriteTime(name); return a; } @@ -884,6 +888,7 @@ namespace PascalABCCompiler.NetHelper compiled_pascal_types = new Hashtable(1024, StringComparer.CurrentCultureIgnoreCase); namespaces = new Hashtable(1024, StringComparer.CurrentCultureIgnoreCase); ass_name_cache = new Hashtable(1024, StringComparer.CurrentCultureIgnoreCase); + assm_full_paths = new Dictionary(); //ass_name_cache = new Hashtable(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default); file_dates = new Hashtable(); //methods = new Hashtable(); @@ -935,6 +940,16 @@ namespace PascalABCCompiler.NetHelper AddToDictionaryMethod = typeof(Dictionary).GetMethod("Add"); } + public static string GetAssemblyDirectory(Assembly assm) + { + string path; + if (assm_full_paths.TryGetValue(assm, out path)) + { + return Path.GetDirectoryName(path); + } + return null; + } + private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { try