diff --git a/TestSuite/errors/err0422.pas b/TestSuite/errors/err0422.pas index db02b58e2..1b137fe97 100644 --- a/TestSuite/errors/err0422.pas +++ b/TestSuite/errors/err0422.pas @@ -1,4 +1,5 @@ -function f(i: integer): string; +//!GetType не объявлен в типе function(i: integer): string +function f(i: integer): string; begin end; diff --git a/TestSuite/errors/err0423.pas b/TestSuite/errors/err0423.pas index cd79e4a88..88447fb35 100644 --- a/TestSuite/errors/err0423.pas +++ b/TestSuite/errors/err0423.pas @@ -1,4 +1,5 @@ -function f(i: integer): integer; +//!Ожидался порядковый или строковый тип +function f(i: integer): integer; begin end; diff --git a/TestSuite/errors/err0424.pas b/TestSuite/errors/err0424.pas index 68d6dd24e..473683e21 100644 --- a/TestSuite/errors/err0424.pas +++ b/TestSuite/errors/err0424.pas @@ -1,4 +1,5 @@ -procedure p1(o: T); +//!Невозможно инстанцировать, так как тип IEnumerable не наследован от string +procedure p1(o: T); where T: string; begin o.Length.Println; diff --git a/TestSuite/errors/err0429.pas b/TestSuite/errors/err0429.pas index 7a00a4cba..80ab3c12a 100644 --- a/TestSuite/errors/err0429.pas +++ b/TestSuite/errors/err0429.pas @@ -1,4 +1,5 @@ -unit err0429; +//!Класс t1 абстрактный и не может иметь атрибут sealed, потому что метод p1 не реализован +unit err0429; type t0 = partial abstract class diff --git a/TestSuite/errors/err0430.pas b/TestSuite/errors/err0430.pas index 9841ad8d9..8b6f558fb 100644 --- a/TestSuite/errors/err0430.pas +++ b/TestSuite/errors/err0430.pas @@ -1,4 +1,5 @@ -unit err0430; +//!Класс t1 абстрактный и не может иметь атрибут sealed, потому что метод p1 не реализован +unit err0430; interface type diff --git a/TestSuite/errors/err0431.pas b/TestSuite/errors/err0431.pas new file mode 100644 index 000000000..57f91484b --- /dev/null +++ b/TestSuite/errors/err0431.pas @@ -0,0 +1,10 @@ +//!Неизвестное имя 't1' +unit err0431; + +uses err0432; + +type + t3 = class(err0432.t1) + end; + +end. \ No newline at end of file diff --git a/TestSuite/errors/err0432.pas b/TestSuite/errors/err0432.pas new file mode 100644 index 000000000..d71662771 --- /dev/null +++ b/TestSuite/errors/err0432.pas @@ -0,0 +1,7 @@ +//exclude +{$savepcu false} +unit err0432; + +uses err0433; + +end. \ No newline at end of file diff --git a/TestSuite/errors/err0433.pas b/TestSuite/errors/err0433.pas new file mode 100644 index 000000000..8e427e10b --- /dev/null +++ b/TestSuite/errors/err0433.pas @@ -0,0 +1,8 @@ +//exclude +{$savepcu false} +unit err0433; + +type + t1 = class end; + +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/compilation_context.cs b/TreeConverter/TreeConversion/compilation_context.cs index c9b47966f..38c3586c5 100644 --- a/TreeConverter/TreeConversion/compilation_context.cs +++ b/TreeConverter/TreeConversion/compilation_context.cs @@ -871,7 +871,7 @@ namespace PascalABCCompiler.TreeConverter int num = names.names.Count - 1; if (di is namespace_node) { - si = (di as namespace_node).find(names.names[num].name); + si = (di as namespace_node).findOnlyInNamespace(names.names[num].name); if (si == null && throw_error) AddError(new UndefinedNameReference(names.names[num].name, syntax_tree_visitor.get_location(names.names[num]))); } diff --git a/bin/TestRunner.exe b/bin/TestRunner.exe index 2fffa8aa5..cf9c79ee2 100644 Binary files a/bin/TestRunner.exe and b/bin/TestRunner.exe differ diff --git a/bin/TestRunner.pas b/bin/TestRunner.pas index dcc54a4c6..c4010e4cf 100644 --- a/bin/TestRunner.pas +++ b/bin/TestRunner.pas @@ -45,7 +45,13 @@ begin var content := &File.ReadAllText(files[i]); if content.StartsWith('//winonly') and IsUnix then continue; - + if content.StartsWith('//exclude') then + continue; + var errorMessage := ''; + if content.StartsWith('//!') then + begin + errorMessage := content.Substring(3, content.IndexOf(System.Environment.NewLine)-3).Trim; + end; var co: CompilerOptions := new CompilerOptions(files[i], CompilerOptions.OutputType.ConsoleApplicaton); co.Debug := true; co.OutputDirectory := TestSuiteDir + PathSeparator + 'errors'; @@ -70,6 +76,10 @@ begin raise new Exception('Compilation of ' + files[i] + ' failed' + System.Environment.NewLine + comp.ErrorsList[0].ToString()); System.Windows.Forms.MessageBox.Show('Compilation of ' + files[i] + ' failed' + System.Environment.NewLine + comp.ErrorsList[0].ToString()); end; + if (errorMessage <> '') and (comp.ErrorsList[0].Message.Trim <> errorMessage) then + begin + System.Windows.Forms.MessageBox.Show('Wrong error message in file ' + files[i] + ', should '+errorMessage+', is '+comp.ErrorsList[0].Message); + end; end; if i mod 50 = 0 then System.GC.Collect();