From 680a9b99b4b0e12c6b7cdd07f3e1f85f70d1199b 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, 19 Mar 2018 21:05:44 +0100 Subject: [PATCH] bug fix #730 --- TestSuite/errors/err0234.pas | 5 +++++ TestSuite/errors/err0235.pas | 5 +++++ TestSuite/generics16.pas | 12 ++++++++++++ TreeConverter/TreeConversion/syntax_tree_visitor.cs | 6 ++++-- bin/Lng/Eng/SemanticErrors_ib.dat | 1 + bin/Lng/Rus/SemanticErrors_ib.dat | 1 + bin/Lng/Ukr/SemanticErrors_ib.dat | 1 + 7 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 TestSuite/errors/err0234.pas create mode 100644 TestSuite/errors/err0235.pas create mode 100644 TestSuite/generics16.pas diff --git a/TestSuite/errors/err0234.pas b/TestSuite/errors/err0234.pas new file mode 100644 index 000000000..3519b3373 --- /dev/null +++ b/TestSuite/errors/err0234.pas @@ -0,0 +1,5 @@ +type t1 = class end; + +begin + var a := t1&; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0235.pas b/TestSuite/errors/err0235.pas new file mode 100644 index 000000000..75eca695c --- /dev/null +++ b/TestSuite/errors/err0235.pas @@ -0,0 +1,5 @@ +type t1 = class end; + +begin + var a := t1&(t1&); +end. \ No newline at end of file diff --git a/TestSuite/generics16.pas b/TestSuite/generics16.pas new file mode 100644 index 000000000..0a128e6b3 --- /dev/null +++ b/TestSuite/generics16.pas @@ -0,0 +1,12 @@ +type TClass = class(List) + procedure test; + begin + Add(2); + self[0] += 2; + end; +end; +begin + var o := new TClass; + o.test; + assert(o[0] = 4); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index a58ea2c30..adc03472c 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -826,7 +826,8 @@ namespace PascalABCCompiler.TreeConverter //\ssyy expression_node en = ret.visit(expr); //expr.semantic_ex = en; // SSM 3.1.17 кешируем для последующего обращения - + if (en == null) + AddError(get_location(expr), "EXPRESSION_EXPECTED"); //en.loc=get_location(expr); return en; @@ -15338,7 +15339,8 @@ namespace PascalABCCompiler.TreeConverter { if (is_event) AddError(get_location(_var_def_statement), "EVENT_MUST_HAVE_TYPE"); - expression_node cn = convert_strong_to_constant_or_function_call_for_varinit(convert_strong(_var_def_statement.inital_value)); + var ex = convert_strong(_var_def_statement.inital_value); + expression_node cn = convert_strong_to_constant_or_function_call_for_varinit(ex); if (cn is constant_node) (cn as constant_node).SetType(DeduceType(cn.type, get_location(_var_def_statement.inital_value))); inital_value = cn; diff --git a/bin/Lng/Eng/SemanticErrors_ib.dat b/bin/Lng/Eng/SemanticErrors_ib.dat index 784cc229c..258ae561d 100644 --- a/bin/Lng/Eng/SemanticErrors_ib.dat +++ b/bin/Lng/Eng/SemanticErrors_ib.dat @@ -138,6 +138,7 @@ OPERATOR_RETURN_TYPE_UNDEFINED_{0}=Return type of operator {0} is not defined an STRUCT_TYPE_DEFINITION_IN_AUTO_CLASS=Field types in auto classes cannot be record or array definition EXTERNAL_METHOD_SHOULD_BE_STATIC=external-methods should be static ABSTRACT_CLASS_CANNOT_BE_SEALED=Abstract classes can not be sealed +EXPRESSION_EXPECTED=Expression expected %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Unit expected, library found ASSEMBLY_{0}_READING_ERROR=Error by reading assembly '{0}' diff --git a/bin/Lng/Rus/SemanticErrors_ib.dat b/bin/Lng/Rus/SemanticErrors_ib.dat index a3e00dc25..ad347b137 100644 --- a/bin/Lng/Rus/SemanticErrors_ib.dat +++ b/bin/Lng/Rus/SemanticErrors_ib.dat @@ -133,6 +133,7 @@ OPERATOR_RETURN_TYPE_UNDEFINED_{0}=Тип возвращаемого значе STRUCT_TYPE_DEFINITION_IN_AUTO_CLASS=Типы полей авто-класса не могут быть описанием записи или описанием массива с границами EXTERNAL_METHOD_SHOULD_BE_STATIC=external-методы должны быть статическими ABSTRACT_CLASS_CANNOT_BE_SEALED=Абстрактный класс не может иметь атрибут sealed +EXPRESSION_EXPECTED=Ожидалось выражение %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Ожидался модуль, а встречена библиотека ASSEMBLY_{0}_READING_ERROR=Ошибка при чтении сборки '{0}' diff --git a/bin/Lng/Ukr/SemanticErrors_ib.dat b/bin/Lng/Ukr/SemanticErrors_ib.dat index 9768bb580..ee2f5736f 100644 --- a/bin/Lng/Ukr/SemanticErrors_ib.dat +++ b/bin/Lng/Ukr/SemanticErrors_ib.dat @@ -131,6 +131,7 @@ OPERATOR_RETURN_TYPE_UNDEFINED_{0}=Тип возвращаемого значе STRUCT_TYPE_DEFINITION_IN_AUTO_CLASS=Типы полей авто-класса не могут быть описанием записи или описанием массива с границами EXTERNAL_METHOD_SHOULD_BE_STATIC=external-методы должны быть статическими ABSTRACT_CLASS_CANNOT_BE_SEALED=Абстрактный класс не может иметь атрибут sealed +EXPRESSION_EXPECTED=Ожидалось выражение %PREFIX%=COMPILATIONERROR_ UNIT_MODULE_EXPECTED_LIBRARY_FOUND=Очікувався модуль, а зустріли бібліотеку ASSEMBLY_{0}_READING_ERROR=Помилка при читанні збірки '{0}'