From 735e051a87d677cbe8f0bf5eeea1cee6a8472012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Mon, 29 Jun 2020 22:01:14 +0200 Subject: [PATCH] bug fix #2143 --- .../LibWithoutNamespace.dll | Bin 0 -> 4096 bytes .../use_lib_without_namespace.pas | 6 +++ TestSuite/LibWithoutNamespace.dll | Bin 0 -> 4096 bytes TreeConverter/NetWrappers/NetHelper.cs | 38 +++++++++++++++++- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 TestSuite/CompilationSamples/LibWithoutNamespace.dll create mode 100644 TestSuite/CompilationSamples/use_lib_without_namespace.pas create mode 100644 TestSuite/LibWithoutNamespace.dll diff --git a/TestSuite/CompilationSamples/LibWithoutNamespace.dll b/TestSuite/CompilationSamples/LibWithoutNamespace.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f90a0a00d332492f1d072bad647d5894263189f GIT binary patch literal 4096 zcmeHJPiz!b82@JbhXPW-5-18drI0F+&9=LWpy;-{ZK-bm*j-vQD|B}Du{$t3Gntt! zT@P9lHIi^Z4~C0eNYuoGXiOv~-tb7`!2^jG4kjjCH&W_r~A4KrKYnigNEB(N)weaf$bbMYubk`LUC}Uwgghs*<|ilPMaW>bQ2n z)k>-}KS&0*U%!ybjbLa!x zuX~Ahtn}Tltp@aKT{_S{T5F&V`(nXIonHe`QFyIY-q56|L~~)+b9J;Nw>T7D=sJ`J ziGzLE6{d}j%$4R)I94Z0gT#r38k$m#b6z3LEktc(szk*$B883rLAoLe@scopGi_V9 zpW65B3O&0KocGaC`n4gY8ku>{$HI|tG!pGU#1mm|;1vw)eHXa~|13&x+IJ1B;Bk)y ztew-;dn`?h(D}3WjvgCJqP~Fk4Q>yab`CWQhAX36LbR3}clJhUYp^aJ2cIlpCUeH? ztrbo%>%936QxtfLQov8>J>XXof0p>W#J?nNRoL4vF(vT>MJVlbQR>%}Z#=c8NU_pOe@x@sPwp ziDMGqkoYEW8);HEfIFxH+)eKTJCP;EFs-Nkz%KHDPt$o|uf+WlqtgBoeF}R*TGA4A z`T~|S^bOF%Dbh!+i^1BC?3_JEQihRqe5Sf6w6Cty%j0&wY>HPXW#ncJzi5~J39TeN zN7F?(Z<;h-Ntl}FQOVP7*EDjJu6VvE(PZwl(0$4X&!@2N+iukno-SLyQ4--9;d+K` zVHZ(Ga|^;B!RaK<+U}V_ADb&z_C$@XZ>5N1CfCUh~Yq$PAGi( z5$)omA`{v=>uSz~Z4EEzLTo*VfkJ*UDRABDduszI4brh|JJ;0lO;5@ z*}2nMxdWPc!%jZO%Xw@hR=o?E&;;u$YpbPpX9k{=3ENGY=D229!Pz8&^NPLq_9BLS zeXNf1I9m7yBI+huT+S}IwXqpj*|{IT9gfF|4&Y~0lLIX=s56wNlfYq`hBk(m)&$yP zz>(n9ML)IvdAD}+&YnB6lXb3Ntp?)zg7;^mB+*b1RU;R147?izVp_PRZP{&)yk#=* zYOs3nYviM!jaDF6TF)b>0!}`98L$_cL@LTY5vu*gC>QR@;ECq|De1dm3bP(xAL%- j627&GEUDO;%fH}*;xO+=CTj5hojdr*82mr+Bh0|xWYSHz literal 0 HcmV?d00001 diff --git a/TestSuite/CompilationSamples/use_lib_without_namespace.pas b/TestSuite/CompilationSamples/use_lib_without_namespace.pas new file mode 100644 index 000000000..748c69442 --- /dev/null +++ b/TestSuite/CompilationSamples/use_lib_without_namespace.pas @@ -0,0 +1,6 @@ +{$reference LibWithoutNamespace.dll} +begin + var o: MyClass; + var o2: MyClass; + assert(MyClass.Test = 1); +end. \ No newline at end of file diff --git a/TestSuite/LibWithoutNamespace.dll b/TestSuite/LibWithoutNamespace.dll new file mode 100644 index 0000000000000000000000000000000000000000..3f90a0a00d332492f1d072bad647d5894263189f GIT binary patch literal 4096 zcmeHJPiz!b82@JbhXPW-5-18drI0F+&9=LWpy;-{ZK-bm*j-vQD|B}Du{$t3Gntt! zT@P9lHIi^Z4~C0eNYuoGXiOv~-tb7`!2^jG4kjjCH&W_r~A4KrKYnigNEB(N)weaf$bbMYubk`LUC}Uwgghs*<|ilPMaW>bQ2n z)k>-}KS&0*U%!ybjbLa!x zuX~Ahtn}Tltp@aKT{_S{T5F&V`(nXIonHe`QFyIY-q56|L~~)+b9J;Nw>T7D=sJ`J ziGzLE6{d}j%$4R)I94Z0gT#r38k$m#b6z3LEktc(szk*$B883rLAoLe@scopGi_V9 zpW65B3O&0KocGaC`n4gY8ku>{$HI|tG!pGU#1mm|;1vw)eHXa~|13&x+IJ1B;Bk)y ztew-;dn`?h(D}3WjvgCJqP~Fk4Q>yab`CWQhAX36LbR3}clJhUYp^aJ2cIlpCUeH? ztrbo%>%936QxtfLQov8>J>XXof0p>W#J?nNRoL4vF(vT>MJVlbQR>%}Z#=c8NU_pOe@x@sPwp ziDMGqkoYEW8);HEfIFxH+)eKTJCP;EFs-Nkz%KHDPt$o|uf+WlqtgBoeF}R*TGA4A z`T~|S^bOF%Dbh!+i^1BC?3_JEQihRqe5Sf6w6Cty%j0&wY>HPXW#ncJzi5~J39TeN zN7F?(Z<;h-Ntl}FQOVP7*EDjJu6VvE(PZwl(0$4X&!@2N+iukno-SLyQ4--9;d+K` zVHZ(Ga|^;B!RaK<+U}V_ADb&z_C$@XZ>5N1CfCUh~Yq$PAGi( z5$)omA`{v=>uSz~Z4EEzLTo*VfkJ*UDRABDduszI4brh|JJ;0lO;5@ z*}2nMxdWPc!%jZO%Xw@hR=o?E&;;u$YpbPpX9k{=3ENGY=D229!Pz8&^NPLq_9BLS zeXNf1I9m7yBI+huT+S}IwXqpj*|{IT9gfF|4&Y~0lLIX=s56wNlfYq`hBk(m)&$yP zz>(n9ML)IvdAD}+&YnB6lXb3Ntp?)zg7;^mB+*b1RU;R147?izVp_PRZP{&)yk#=* zYOs3nYviM!jaDF6TF)b>0!}`98L$_cL@LTY5vu*gC>QR@;ECq|De1dm3bP(xAL%- j627&GEUDO;%fH}*;xO+=CTj5hojdr*82mr+Bh0|xWYSHz literal 0 HcmV?d00001 diff --git a/TreeConverter/NetWrappers/NetHelper.cs b/TreeConverter/NetWrappers/NetHelper.cs index e015ff094..3921e1de1 100644 --- a/TreeConverter/NetWrappers/NetHelper.cs +++ b/TreeConverter/NetWrappers/NetHelper.cs @@ -57,11 +57,13 @@ namespace PascalABCCompiler.NetHelper { foreach (using_namespace un in unl) { - if (string.Compare(un.namespace_name, tni.us_ns.namespace_name, true) == 0) + if (tni.us_ns != null && string.Compare(un.namespace_name, tni.us_ns.namespace_name, true) == 0) { return tni.type_info; } } + if (tni.us_ns == null) + return tni.type_info; } return null; } @@ -73,11 +75,13 @@ namespace PascalABCCompiler.NetHelper { foreach (using_namespace un in unl) { - if (string.Compare(un.namespace_name, tni.us_ns.namespace_name, true) == 0) + if (tni.us_ns != null && string.Compare(un.namespace_name, tni.us_ns.namespace_name, true) == 0) { types.Add(tni.type_info); } } + if (tni.us_ns == null) + types.Add(tni.type_info); } return types; } @@ -1964,6 +1968,22 @@ namespace PascalABCCompiler.NetHelper if (o is TypeInfo) { TypeInfo t = o as TypeInfo; + if (t.type.FullName != null && t.type.FullName.IndexOf('.') == -1 && t.type.FullName.IndexOf('+') == -1) + { + if (!type_search_cache.TryGetValue(name, out fi)) + { + fi = new FoundInfo(true, t); + type_search_cache[name] = fi; + } + else + { + fi.type_infos.Add(new TypeNamespaceInfo(t, null)); + } + if (cur_used_assemblies.ContainsKey(t.type.Assembly)) + return t.type; + else + return null; + } for (int i = 0; i < _unar.Count; i++) { if (string.Compare(_unar[i].namespace_name + "." + name, t.FullName, true) == 0) @@ -1990,6 +2010,20 @@ namespace PascalABCCompiler.NetHelper { foreach (TypeInfo t in o as List) { + if (t.type.FullName != null && t.type.FullName.IndexOf('.') == -1 && t.type.FullName.IndexOf('+') == -1) + { + if (!type_search_cache.TryGetValue(name, out fi)) + { + fi = new FoundInfo(true, t, null); + type_search_cache[name] = fi; + } + else + { + fi.type_infos.Add(new TypeNamespaceInfo(t, null)); + } + if (cur_used_assemblies.ContainsKey(t.type.Assembly)) + return t.type; + } for (int i = 0; i < _unar.Count; i++) { if (string.Compare(_unar[i].namespace_name + "." + name, t.FullName, true) == 0)