From 288e9e87513a239a2d6ebf918be734fbcbe7ae3c Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Fri, 14 Dec 2018 16:33:59 +0300 Subject: [PATCH] fix #1582 --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 ++-- Localization/DefaultLang.resources | Bin 88482 -> 88558 bytes ReleaseGenerators/PascalABCNET_version.nsh | 2 +- SyntaxVisitors/ChangeWhileVisitor.cs | 2 ++ .../LightSymInfoVisitors/SymInfoCollect1.cs | 2 ++ SyntaxVisitors/Optimization/CalcConstExprs.cs | 4 +++- .../UniversalVisitors/CountNodesVisitor.cs | 1 + TestSuite/actionArr.pas | 4 ++++ .../TreeConversion/syntax_tree_visitor.cs | 2 +- 10 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 TestSuite/actionArr.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2d40ba2e3..819b0506c 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "4"; public const string Build = "2"; - public const string Revision = "1895"; + public const string Revision = "1896"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 181bcf41c..60fb0e2f4 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=2 -%REVISION%=1895 %MINOR%=4 +%REVISION%=1896 +%COREVERSION%=2 %MAJOR%=3 diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources index bdc5da498a12589997b186f476f9b043e3cea5de..3df350a6493ce2208d60e62ea89820b5278c7a46 100644 GIT binary patch delta 99 zcmV-p0G$7#vjy(61(4tZ3R!{Twc-JN21-&zP(?vhMMPgjMMFL@$%r}>*ej}=pgYR?&0v@=l1UGw_OJT FMN*IGI8Oio delta 24 gcmaF2nRU@-)(H=o_C+*4+WLsGmTmiLc1GtQ0GbsG1^@s6 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index f6d2fb016..474db2384 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.4.2.1895' +!define VERSION '3.4.2.1896' diff --git a/SyntaxVisitors/ChangeWhileVisitor.cs b/SyntaxVisitors/ChangeWhileVisitor.cs index 6c06650bc..7a01994b2 100644 --- a/SyntaxVisitors/ChangeWhileVisitor.cs +++ b/SyntaxVisitors/ChangeWhileVisitor.cs @@ -12,6 +12,8 @@ using PascalABCCompiler.SyntaxTree; namespace SyntaxVisitors { + // Визитор, заменяющий цикл while на низкоуровневый код из if и goto + // Это - учебный визитор, служит отправной точкой при изучении визиторов изменения синтаксического дерева public class ChangeWhileVisitor : BaseChangeVisitor { int lbnum = 0; diff --git a/SyntaxVisitors/LightSymInfoVisitors/SymInfoCollect1.cs b/SyntaxVisitors/LightSymInfoVisitors/SymInfoCollect1.cs index ef8af7f13..9c2f1de99 100644 --- a/SyntaxVisitors/LightSymInfoVisitors/SymInfoCollect1.cs +++ b/SyntaxVisitors/LightSymInfoVisitors/SymInfoCollect1.cs @@ -18,6 +18,8 @@ using System.Text; namespace PascalABCCompiler.SyntaxTree { + // Визитор накопления легковесной синтаксической таблицы символов. + // Не дописан. Имеет большой потенциал применения public partial class CollectLightSymInfoVisitor : BaseEnterExitVisitor { public ScopeSyntax Root; diff --git a/SyntaxVisitors/Optimization/CalcConstExprs.cs b/SyntaxVisitors/Optimization/CalcConstExprs.cs index f41732523..692a46c59 100644 --- a/SyntaxVisitors/Optimization/CalcConstExprs.cs +++ b/SyntaxVisitors/Optimization/CalcConstExprs.cs @@ -11,7 +11,9 @@ using PascalABCCompiler.SyntaxTree; namespace SyntaxVisitors { - public class CalcConstExprs : BaseChangeVisitor // вычисление целых и вещественных константных выражений на этапе парсинга + // Учебный визитор. + // Вычисление целых и вещественных константных выражений на этапе парсинга + public class CalcConstExprs : BaseChangeVisitor { public override void Exit(syntax_tree_node st) { diff --git a/SyntaxVisitors/UniversalVisitors/CountNodesVisitor.cs b/SyntaxVisitors/UniversalVisitors/CountNodesVisitor.cs index 09cd2e5e8..4ce9b80ce 100644 --- a/SyntaxVisitors/UniversalVisitors/CountNodesVisitor.cs +++ b/SyntaxVisitors/UniversalVisitors/CountNodesVisitor.cs @@ -11,6 +11,7 @@ using PascalABCCompiler.SyntaxTree; namespace SyntaxVisitors { + // Учебный визитор подсчёта узлов каждого типа public class CountNodesVisitor : BaseEnterExitVisitor { public Dictionary d = new Dictionary(); diff --git a/TestSuite/actionArr.pas b/TestSuite/actionArr.pas new file mode 100644 index 000000000..b8d29c9f0 --- /dev/null +++ b/TestSuite/actionArr.pas @@ -0,0 +1,4 @@ +begin + var aa := new Action0[1]; + Assert(aa[0] = nil); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 8b7a221d4..219645cc3 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -18280,7 +18280,7 @@ namespace PascalABCCompiler.TreeConverter type_node tn = ret.visit(_new_expr.type); //if (tn == SystemLibrary.SystemLibrary.void_type) // AddError(new VoidNotValid(get_location(_new_expr.type))); - if (tn.IsDelegate) + if (tn.IsDelegate && !_new_expr.new_array) AddError(get_location(_new_expr), "CONSTRUCTOR_CALL_FOR_DELEGATE_TYPES_IS_FORBIDDEN"); check_for_type_allowed(tn,get_location(_new_expr.type)); location loc = get_location(_new_expr);