From 818bd7acd693baaea4781a28a1609ee0ce9db2f2 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: Sun, 30 Jun 2019 14:22:24 +0200 Subject: [PATCH] fix #2015 --- Compiler/Compiler.cs | 5 +- TestSuite/errors/err0326.pas | 4 + TestSuite/errors/err0328.pas | 5 + TestSuite/errors/namespaces/err0327.pas | 7 ++ TestSuite/errors/namespaces/err0328.pas | 8 ++ TestSuite/use_ns_typedef.pas | 3 +- .../TreeConversion/syntax_tree_visitor.cs | 103 ++++++++++-------- TreeConverter/TreeRealization/units.cs | 13 +++ bin/TestRunner.exe | Bin 37888 -> 33280 bytes bin/TestRunner.pas | 3 + 10 files changed, 103 insertions(+), 48 deletions(-) create mode 100644 TestSuite/errors/err0326.pas create mode 100644 TestSuite/errors/err0328.pas create mode 100644 TestSuite/errors/namespaces/err0327.pas create mode 100644 TestSuite/errors/namespaces/err0328.pas diff --git a/Compiler/Compiler.cs b/Compiler/Compiler.cs index 7fb508a60..64a37b3d7 100644 --- a/Compiler/Compiler.cs +++ b/Compiler/Compiler.cs @@ -1815,6 +1815,8 @@ namespace PascalABCCompiler //Console.WriteLine("ERROR! interface not compiled "+GetUnitFileName(CurrentUnit.SyntaxUnitName));//DEBUG System.Collections.Generic.List SyntaxUsesList = GetSyntaxImplementationUsesList(CurrentUnit.SyntaxTree); CurrentUnit.PossibleNamespaces.Clear(); + if (HasIncludeNamespacesDirective(CurrentUnit)) + compilerOptions.UseDllForSystemUnits = false; if (SyntaxUsesList != null) { for (int i = SyntaxUsesList.Count - 1; i >= 0; i--) @@ -2771,7 +2773,6 @@ namespace PascalABCCompiler SyntaxTree.unit_module main_library = Unit.SyntaxTree as SyntaxTree.unit_module; SyntaxTree.program_module main_program = Unit.SyntaxTree as SyntaxTree.program_module; List files = new List(); - foreach (TreeRealization.compiler_directive cd in directives) { if (cd.name.ToLower() == TreeConverter.compiler_string_consts.include_namespace_directive) @@ -2838,7 +2839,7 @@ namespace PascalABCCompiler { if (IsPossibleNamespace(name_space, false)) { - ns.referenced_units.AddElement(new TreeRealization.namespace_unit_node(GetNamespace(name_space))); + ns.referenced_units.AddElement(new TreeRealization.namespace_unit_node(GetNamespace(name_space), get_location_from_treenode(name_space, tree.file_name))); } else { diff --git a/TestSuite/errors/err0326.pas b/TestSuite/errors/err0326.pas new file mode 100644 index 000000000..a61169060 --- /dev/null +++ b/TestSuite/errors/err0326.pas @@ -0,0 +1,4 @@ +{$includenamespace namespaces/err0326.pas} +begin + +end. \ No newline at end of file diff --git a/TestSuite/errors/err0328.pas b/TestSuite/errors/err0328.pas new file mode 100644 index 000000000..a54eb58e4 --- /dev/null +++ b/TestSuite/errors/err0328.pas @@ -0,0 +1,5 @@ +{$includenamespace namespaces/err0328.pas} + +begin + +end. \ No newline at end of file diff --git a/TestSuite/errors/namespaces/err0327.pas b/TestSuite/errors/namespaces/err0327.pas new file mode 100644 index 000000000..40ba1393b --- /dev/null +++ b/TestSuite/errors/namespaces/err0327.pas @@ -0,0 +1,7 @@ +namespace NS1; + +uses NS2; +type + T1 = class end; + +end. \ No newline at end of file diff --git a/TestSuite/errors/namespaces/err0328.pas b/TestSuite/errors/namespaces/err0328.pas new file mode 100644 index 000000000..e42bbf1b0 --- /dev/null +++ b/TestSuite/errors/namespaces/err0328.pas @@ -0,0 +1,8 @@ +namespace NS1.SubNS1; + +uses NS1.SubNS2; + +type + T1 = class end; + +end. \ No newline at end of file diff --git a/TestSuite/use_ns_typedef.pas b/TestSuite/use_ns_typedef.pas index 0cb86eebe..52192bcb3 100644 --- a/TestSuite/use_ns_typedef.pas +++ b/TestSuite/use_ns_typedef.pas @@ -1,4 +1,5 @@ -{$includenamespace 'namespaces/nstypedef1.pas'} +//nopabcrtl +{$includenamespace 'namespaces/nstypedef1.pas'} {$includenamespace 'namespaces/nstypedef2.pas'} uses nstypedef; diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index b599fb994..47583a399 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -10874,51 +10874,8 @@ namespace PascalABCCompiler.TreeConverter } parent_scope = scope; } - - context.enter_scope(scope); - foreach (declaration decl in _syntax_namespace_node.defs) - { - if (decl is type_declarations) - { - type_declarations type_decls = decl as type_declarations; - foreach (type_declaration td in type_decls.types_decl) - { - if (td.type_def is class_definition) - { - class_definition cl_def = td.type_def as class_definition; - if (cl_def.body == null) - AddError(get_location(cl_def), "TYPE_PREDEFINITION_NOT_ALLOWED"); - common_type_node ctn = null; - if (td.type_name is template_type_name) - ctn = context.advanced_create_type(td.type_name.name+"`"+(td.type_name as template_type_name).template_args.Count, get_location(td.type_name), (td.type_def as class_definition).keyword == class_keyword.Interface, false); - else - ctn = context.advanced_create_type(td.type_name.name, get_location(td.type_name), (td.type_def as class_definition).keyword == class_keyword.Interface, false); - ctn.ForwardDeclarationOnly = true; - if ((td.type_def as class_definition).keyword == class_keyword.Interface) - ctn.IsInterface = true; - context.converted_type = null; - context.add_type_header(td, ctn); - } - else if (td.type_def is procedure_header || td.type_def is function_header || td.type_def is named_type_reference) - { - - } - else if (td.type_def is enum_type_definition) - { - hard_node_test_and_visit(td); - } - else - AddError(get_location(decl), "NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES"); - } - - } - else - AddError(get_location(decl), "NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES"); - } - - context.leave_scope(); - } + foreach (syntax_namespace_node _syntax_namespace_node in namespaces) { var cmn = dict[_syntax_namespace_node]; @@ -10939,14 +10896,70 @@ namespace PascalABCCompiler.TreeConverter for (int i = 1; i < names.Length; i++) { si_list = ns_scope2.Find(names[i]); - ns_scope2 = (si_list.FirstOrDefault().sym_info as common_namespace_node).scope; + if (si_list != null && si_list.FirstOrDefault().sym_info is common_namespace_node) + ns_scope2 = (si_list.FirstOrDefault().sym_info as common_namespace_node).scope; + else + AddError(new NamespaceNotFound(nun.namespace_name.namespace_name, un.location)); } scopes.Add(ns_scope2); } + else + AddError(new NamespaceNotFound(nun.namespace_name.namespace_name, un.location)); } } ns_scope.TopScopeArray = scopes.ToArray(); } + + //convert type predefinitions + foreach (syntax_namespace_node _syntax_namespace_node in namespaces) + { + var cmn = dict[_syntax_namespace_node]; + var scope = cmn.scope; + context.enter_scope(scope); + foreach (declaration decl in _syntax_namespace_node.defs) + { + if (decl is type_declarations) + { + type_declarations type_decls = decl as type_declarations; + foreach (type_declaration td in type_decls.types_decl) + { + if (td.type_def is class_definition) + { + class_definition cl_def = td.type_def as class_definition; + if (cl_def.body == null) + AddError(get_location(cl_def), "TYPE_PREDEFINITION_NOT_ALLOWED"); + common_type_node ctn = null; + if (td.type_name is template_type_name) + ctn = context.advanced_create_type(td.type_name.name + "`" + (td.type_name as template_type_name).template_args.Count, get_location(td.type_name), (td.type_def as class_definition).keyword == class_keyword.Interface, false); + else + ctn = context.advanced_create_type(td.type_name.name, get_location(td.type_name), (td.type_def as class_definition).keyword == class_keyword.Interface, false); + ctn.ForwardDeclarationOnly = true; + if ((td.type_def as class_definition).keyword == class_keyword.Interface) + ctn.IsInterface = true; + context.converted_type = null; + context.add_type_header(td, ctn); + } + else if (td.type_def is procedure_header || td.type_def is function_header || td.type_def is named_type_reference) + { + + } + else if (td.type_def is enum_type_definition) + { + hard_node_test_and_visit(td); + } + else + AddError(get_location(decl), "NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES"); + } + + } + else + AddError(get_location(decl), "NAMESPACE_SHOULD_CONTAINS_ONLY_TYPES"); + } + + context.leave_scope(); + } + + foreach (syntax_namespace_node _syntax_namespace_node in namespaces) { common_namespace_node cmn = dict[_syntax_namespace_node]; diff --git a/TreeConverter/TreeRealization/units.cs b/TreeConverter/TreeRealization/units.cs index 9b986bf6d..042d45569 100644 --- a/TreeConverter/TreeRealization/units.cs +++ b/TreeConverter/TreeRealization/units.cs @@ -25,14 +25,27 @@ namespace PascalABCCompiler.TreeRealization { public using_namespace namespace_name; public SymbolTable.Scope scope; + public location loc; public namespace_unit_node(using_namespace namespace_name) { this.namespace_name = namespace_name; } + public namespace_unit_node(using_namespace namespace_name, location loc) + { + this.namespace_name = namespace_name; + this.loc = loc; + } public override List find_only_in_namespace(string name) { throw new NotSupportedException(); } + public override location location + { + get + { + return loc; + } + } public override semantic_node_type semantic_node_type { get diff --git a/bin/TestRunner.exe b/bin/TestRunner.exe index 75e161fd88c8e076909601fc2125379e25b4d939..d30904e78af91a72c6bb1690242f22a552819a46 100644 GIT binary patch literal 33280 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

x;BtS~+KL#YUd#QvtZ$5hzQw=0lh<;8 z1(?lr!*m8sdZ$2lC`h!_Ob-gQTw^UYQ^OgIxm;r{HPbE!Vl9D+2kk{9yw8IU(CKvC zgRVzJe4Y;&pmLRU6Q$@i5BdO2r%5y1z7OL!PV+qIE;^IedC)!h9ZSK3K8vTq-{(PJ zLL9u$gT9IouxRimd>GF4#ZkIhd$;(-@-Rt4?7TR={)+KK(R^JTdn-< z8;5#FXXjCaf<$NM(JX;n%!Q*cS2@tft*1fdM>XSS(Q6*`9O8faY~cW!Kf@lf&4Yf0 z-`FfXM{$4LdXDDMGY<3v&}^j}X1je`X)dk1Ktaz~zXkM81%c*o@lD{v9`x^cZu4b< zc4)u1{z&twaSo4LPDWVQ=F_~n45=B-r)2^udznw&3X-|cr@>K}{1v>brTKJ+hdCKE zUlGVhbHit73#dV^icDH0&R%(cJF zMf4K~ll8KQe&ax_mqldYgu&Wny z{|>hTdd7qLv<`aNfnE&n(w0*yqsIMPxKCS2@^b`Gc`a;fo%Ep77pN-(nj`0!B*p9Y zX_pf}Bf|XRbqBO7=y?a4Qg^+!idHUAeKYEA*4EI24m7XsHf=5a<`UJnxvrJE=tBz? zw7c#Ot&5uZavC(>U-t=ZBi-OYmxu4uuB6{M(Cu|!&^8nP42FaGXWCWtAqToV{IIr_ zUJ5C3DFVaTupx-!9N8}mp9W-k(k4w_l$WOH% z>Tg%juE;*^Y8r8%eUX3Evh>Pw)pt8+_R*vj3i@>9MXjGEtyIw0BEQ#m(s2j+n@B58 zWzRU!^O1`H8J!CAm(n-MfqpO03|tMdEWRj@%Q#Rh`kJ8PgX zX(b=?Fm7SA4ShcnNa-a{{VDEKddbs2Ihf2ZPp^!^+&2m{=;S>tC-x_ST$+bRVRGhv zKQefYz7=R_(CG=Ozl2gp3%Ae3F;k-)N}YC}P*<1_N_!8^#Tva`Wl^Y=-d37Qwpz-c z5&B<{@+&BHN4?*VCl zx72ILDrt{O?`J3IT`cXJkRrO=l?+EBY&nX8lJn1iqtk;ZeWav4;*2uzI~NoA?_@k+ zxfQm_Wu27As2Gjtk6>qQ&_mMlD7`0YYu}}tqo?WLr4L4@=ub=g({xvKI_kU!f0yo! zo{ir7qq9&Ri?*VCBziH*$D)^@{9bf1%D;_vpnN8Jx&8wEBC2aI(2LRa`maE3ll~}8 zsoRF~RruyhD7S&TuRg11DO|rpZ=+=WH7KXmKTY2S$Jewrk)e&wtN$6!kr&k4dW<+X zXs1m55a=(f&(jOEwtiS|r!An6rQZ5?fqSw3y?RI+sy~eS&Cw$$?~Q&0<^9pSP#%lk zjq;J`r%^r@{XEL=MZbdbZ=(!cb=5}i0+%gPe}Udp|8>;Q1I;WQuKyP5 zN5OrIc3=Hgl*#%h^h0!i{Zr_DKqNU{{}1}G_QU$^h=@;1%dhHx1{{_-tNk0dXj%i$ z{l)0FP}VoRh?W^Sugvp60t>`&h#i-*>goH>9LR z*IuG|bu-caP(vF%t!Aom%XIo?!z`3PY}kr?j_a*b&(cpC=K4A%N9vSa{{_0eZm|z* z-O%Z)qhB|4`Lf#K`j;`6|7f^I$Av*`n=d5xGg&udy}rqMJ<3DW63f$ceP)a;Lfz$L{m3*B_2Og!1v&U-^#E4`Yw{j%m-uzT?}X|1S17 zsJ{{WJKsHGZ}(7Re3QOK=T$hSoge=@-~F^W{){iLuZ+LoyH>w4{*S=CCjJ}WFmSfg zBlOPrOTJ@tQ~bx6%hCAneTSs|CjB$E7Xwi)$`XBWjbVUD4&_AO80CbM% z{}kUrhx9+hEu#@%&u&G%A#s|~?9^KlDYUbtJ*uCTI2-k3{cPiDjlJe+tgNm*t)H7{ z1Wu7q$o^q*ijIxOzYj^4ciH-D<%-9VJ^U!{b<~DvE^#zUHMjgC(t1;cz6zVftQEt-Pq-;ldjnRqnImEFD4H-He zr@cmyen-P7U#5d7UqL-e9U9-nc4~uYxe4WLy3qWlIUBcakE1-#{411G%{x$@iF%** zZsT_IQ`#B++s&V83s9b^Z$LRCkf7Vm=R=>;P!CJJp6k?jJ@BtLZZvK-9;b+YtMNgj z2Y+3xmp*Cip!AG|5N{~ ze!p2~#?2`(U|wo2H@nR(<~z&*bB}qzywMC|CkR19MAwEFLJwT(_}#M)?b}i6 zWaHLMqia$A0=I%OoVd@#2~yXVYEz>c86&)x)V|^XjG6|G{#BsSZGRZ2O&3Bwa3b1+ ze1u>8>kZz6YTKqt+h}@cNShQqKwk65XRj73T(0B>XkGh~rA`%Xm29y;Tk3Zjy7`Y0cMlKd`nz%!YVR#qO4+{3l6)~+ z8eX0+;A)T`D_hvp407{r2AS?B#Z8fRXxhj9AFAD74D%%NFw2iCna{_nKT^g*rQmOfuUG z6*xSW+JyqTWSTs=eD6>Not089JFuyguYjq8*}0ZjW1Ynvw$r~Mm+eRY%4~U8MQFP8 zEBN6D<0>+wbnIX&z#+|RMC-En^V;pDQg*m1Kxcb-xY)NLR~{;00lB_3TPXBq`*xFH z(&}7gm));~5rde$A-BVs33U|v?0$T;v!2w~T}y`Y zg(^e}r(<7VZcvtOS*~};lY3b{yR&GQD{KRu#ma?qsk16E*9QinJ6=szBpU!N8Rq4a z5+hnKrj6AP9$&0nJWty2A-s0xN?n!QVE3+)J+yOIbp=GttMcUvRx(#mnqHRc%MWA= z1YfLR?#y&091r|gXG`T>=y7btL6{A8xspBDl`HMZ_vOlL3A`@L3t4>ar*NxNZ^!!V z$+GRVm&>_<-oh}cK!Ek!lP}pt_A`Q@Fgur#f_SMr*H$Uk8S* z4y-M{S*+q?#Uw(wRBQA;+wFtA;uJCmZ#BCH3;D`gS-LWh@1N-DY zSS;I>Sd=o}CD}5}2kL>b3`@IsLJlNGL(oEgM;?T)%oc`3>(o9txXd2N=8Lox9x_x? zZrP16m*X{KQ?9WTX~%N!$O3s35_RSJhT!JIUD+MErKsc)HL6D7ET@YEV=r_6lBHfm zT9z*%eAuO7FG#uCknp;8s4_TI5jSVKuEvcFhp-a~&2~bYOL$YZRODq{ohz5KJ9A6$ z(><(8!QSb_1Q$;%te7n*vMZK)F%B|;n;Vg^9)O^1SYa8vMM=4~(=aA>@^<5`F!|$Z~!nwWqN)1wtxC*(yN*y$K zoAtIlhRZn?P1**B*Dc-1hE?Vmgib}ElmiKvA+{(qckCN1VU>AH!ye8%zrvEK6mv_4 z*V$z%MOxPK`sOiqg)KL%2dNTY^q7C|f~mkp`Vl>FL-f zs$+AgCkheIz_jKiW z58$pDh(6g;X`WlT$gN!LR_42vj9Y1QE3I?9TB}!^>(wswY99Gkk3M!8hj**Tq19u7 zM?jq3xgL+X9*?;mkGUR?xgL+X9*?;mkGUR?xgL+X9*+x|N4X~t9nxSfx0`sk=qV2m z^y2r*vUBW{k3y05a(Y8{?=|?#Pf|zQ3|9UO=vtIrMp~C645sp4+L5QSZ1NSjOPR2^ z160TrsbKHz>9vQ7{WLU)Q0~?1G#bF^9D~@azE3Y;y-AtjQu_TA9U|+`c@#4zZ(?l|fyFTy79)F!lxHf=i*z zimE~jxXqHi9IGRr1l77*ZMUl?j+scg`fM!2fZ8%h#ck#*-cCI|%W(ogPMlL|MNf~L z$gtqpTv#Q$k)eQt@;XUkS*yzbi4%uxr7Vvv!R3*O_w;mj^>l6N>h4(GvwH2ajjK91 z&}9UP78<%NB^0#zu(Ux>Q0IxWa*9x-0Ad3Z{XBO!D> z)W^9*zd9~>%C(*OFE7|xP~|j+v+y+@LKd^@&+X%=oa@i+z|8x-KF70a_;i*xE$dL8 zCQ4T`fF`jDPQo|CSt-?}w9lr1h;R2f8lz2}YueX!_Ka#1Z%4KT-z>smWv7=k9W!S& z_rRR-SCona*?m&9BCBu`7%z}YGQWY7%x)XI0kY<9+ezuLN;%j^w=D@a=IDF^4MDKm zc9LyXk%8zzrmY&J(xtM(ZhMuz7kab@dpfQig6&m?m3gz>$m;UZXeT_kv&?ZpRr%nH z=}QE`7Y)!AZx2XYn1tb{PU zVt74k94U3bL?re%@t`rD%jliui{~xLSKLIAo7Q$+nJaO6AuQYjg#c@Edu9C?ja?5m zi*q!q6sf+7n(7!pa&VyT((sC0bpud4!Ny`QvRx(tBUIYx9LORhQB<#uJbg;Qhlf zrVY8l0?rsb#A!iI9cP4-V}H)s1bsLsXBpdzVLL(0!E%mr=&e1(FgFKbW2e(0TbPPG zD{xN5ffB}=<&Cli+r?!LYwW!uk9!y@3!>U3Hs(8uoKq>+!K!eyM@;664aBBhu)?lE zXOdoY5VfvCk}sOVz6PmzYvGWW?MDofI|i0U9eKQg!WcR1vO)oIOdY6HI*WahSE%-I z%c84;5DTvIOqqvs9P;vF>e_`FI!8R}#4SN7x1pj=L1kJiSvSnKRy|dT9MNS;s}U0v zmU!11TU{!-Qg`h_GK_q-k8g!|cAM-Hw#c1TV%#X^Ci;__NQ|0X$#u%U#}mUn5qp}W zcW;y9B)eA5?!ES^9B0*?U27%XMF{mWax4&UYimm#1A~Z|DyQZxx0k~vr_(Y7s>KO- zHueF&P{d_wg-SF;fWkW{i>Dirzu|{Haihby)R<>1GUga-jTE&TON_;6SpYai8DpVw zk#ULC7oj#6@5R8q!e~S9GTHHxNbm$LMM+TE=3zKs)*J+4WP9PpV#4Y zEqKuMt?2EbW%#WUe=Y@9Cwf-nje8E<856#3*nlTK*VML++}?=k@x+&58f~awib-B7 z)4NP2dy%MM5hkr#Sq&+g3l+=<<{VL6iY^nSEl1xxV=3yaymm|s=`DWfQ^Z$P)A4AJ zs}!Wsm`oAMso;|p;Nr0&v}D312>DA57X6nG>gva5^W$Aht?;=O01L>LKXqM3P!fVz-vd=w1;Nl zPx0}8G`S00%D~UTRA<8&hp-MJ-Q+9KHcVHFwCs@UP|HIq3aPOe9qWc zAX5i!zhLHMK5X7Sz+wmKLp#r&ooFZcQkZpcz8Jg)cT~>S1B@Cy`M@d6`a2(P(SWKsX_=%XM1HY;hrJPwNGR!!y)u>G8i*^a-KU66*YhgZckHAxW z>uX1_*HrMBS89xHz9l(Uyg7=el&-6m4qIUg53$aL&Xvuw%_y6F3p%>&?0}konk#!OicYP(P>`}-IQQARc}mTT~#c7Q<7|7N(=CZ zo;C@c-KedG)^}qT+u+x(C9gpQ>Bf&+cs*8PZoTMLk$aoxw;N>6oB@=o5t@IIwqVP* z<9ik#zWt%l=E57-Q}Chdwp}@S-t#w^r^Q$6(dOW3@k1N6_@OOsWji_!4QWySxK@k$ zkXGWY;~h2l$1;9=`>snF)$#A!1Y4p(Zi+^INC9*+>N8uKb^LQ5DGK84^QZ7cP*BQ< zl&U2vb-$E`l%|vcDMM0PQii3hlTtT8t(mL!U={S4@fhBx;XN5WdNX%}m##GnQj5@! zPYR@bXo*ikLKUA5p&(ljz9T42&QPC54}B1{Wq50WLyZ zSX_h!nGG!(jRwFn-U=e%5DYbF(0iZ(vQwDxs#?rI)(E1Cs#zua{2CYX0S-3;zfNV45)Z(4c1f+f1ME%hDAO*WRbUx-1+bEc< z8chcrUk~Ns?^Ht5ykIS?Jy>uwc4)noBG>h+)$Je^jUVa+;n<-ZPa%PSuU0UxMb${* zCpL=PFzWFbQwL!m^rti71SK@?j~)6jdy397@VQjejDA#%(^2RF{DYZV5O4ed5Sj=W zFgW~=hNuzHTAESO(K87^e3Cz)$0r31lg-GCPp=EWby07QPme~;fT0J2!EnIuwl(vZ z>5ToQXdoDkPe%p*3nUCqac2tDtw6xQ62dP`wiI-=^N?eW0So@y%x&>@6c~n;3HYK` zFeD>duu?`qZx(r83`<*lr=aS=Ld1^h)YXc%i`{_v&ffy-KC*&Me{QznQTsotD5|PnOpef{5$kI zs%J|BQTko@cXYazb$#{nC;d}@-Ld%L#kG(FnOSmwS?=t1Nrd&>*aboN@&Z5-f+F@^h{WkUc^Sc+l{iOdt#sB^q F_&=n2%k2OF literal 37888 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 diff --git a/bin/TestRunner.pas b/bin/TestRunner.pas index 081e51dd3..220a52373 100644 --- a/bin/TestRunner.pas +++ b/bin/TestRunner.pas @@ -44,6 +44,7 @@ begin var content := &File.ReadAllText(files[i]); if content.StartsWith('//winonly') and IsUnix then continue; + var co: CompilerOptions := new CompilerOptions(files[i], CompilerOptions.OutputType.ConsoleApplicaton); co.Debug := true; co.OutputDirectory := TestSuiteDir + PathSeparator + 'errors'; @@ -80,6 +81,8 @@ begin var content := &File.ReadAllText(files[i]); if content.StartsWith('//winonly') and IsUnix then continue; + if content.StartsWith('//nopabcrtl') and withdll then + continue; var co: CompilerOptions := new CompilerOptions(files[i], CompilerOptions.OutputType.ConsoleApplicaton); co.Debug := true; co.OutputDirectory := TestSuiteDir + PathSeparator + 'exe';