From c4b314821fe8caa686fce45bf4c10f679c82713f 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, 29 May 2016 11:27:25 +0200 Subject: [PATCH] bug fix #173 --- TestSuite/extensionmethods14.pas | 2 -- TestSuite/extensionmethods17.pas | 7 +++++++ TestSuite/with1.pas | 17 +++++++++++++++ .../TreeConversion/syntax_tree_visitor.cs | 21 +++++++++++-------- 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 TestSuite/extensionmethods17.pas create mode 100644 TestSuite/with1.pas diff --git a/TestSuite/extensionmethods14.pas b/TestSuite/extensionmethods14.pas index 645da79d3..d02d8e741 100644 --- a/TestSuite/extensionmethods14.pas +++ b/TestSuite/extensionmethods14.pas @@ -11,8 +11,6 @@ end; begin - //var a := Arr(1,2,3); - //System.Linq.Enumerable.Select(a,x->x); - жаль - пока не работает. Закомментил чтобы тесты не падали var a := Arr(1,2,3); var seq := System.Linq.Enumerable.Select(a,x->x*2); //a.Reverse.Print; diff --git a/TestSuite/extensionmethods17.pas b/TestSuite/extensionmethods17.pas new file mode 100644 index 000000000..ccd98e2e2 --- /dev/null +++ b/TestSuite/extensionmethods17.pas @@ -0,0 +1,7 @@ +begin + var s := '1234'; + var fnc: char->boolean := char.IsDigit; + assert(s.All(fnc) = true); + assert(s.All&(char.IsDigit) = true); + assert(s.All&(char.IsControl) = false); +end. \ No newline at end of file diff --git a/TestSuite/with1.pas b/TestSuite/with1.pas new file mode 100644 index 000000000..fc3249344 --- /dev/null +++ b/TestSuite/with1.pas @@ -0,0 +1,17 @@ +type TClass = class + a: integer; +end; + +begin + var obj := new TClass; + with obj do + begin + a := 2; + assert(a = 2); + end; + var lst := Lst(1,2,3); + with lst do + begin + assert(Count = 3); + end; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 938f869aa..3dd8602db 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -8538,22 +8538,25 @@ namespace PascalABCCompiler.TreeConverter } case general_node_type.function_node: { - //TODO: Передается пустой СЃРїРёСЃРѕРє выражений. - /* - function_node fn=convertion_data_and_alghoritms.select_function(new expressions_list(), - si_right,get_location(id_right)); - return create_static_method_call(fn,get_location(id_right),tn,false); - */ - //if (!(si_right.sym_info is common_in_function_function_node)) if (dn is compiled_function_node) { if ((dn as compiled_function_node).ConnectedToType == tn) - AddError(new UndefinedNameReference(id_right.name, get_location(id_right))); + { + if (si_right.Next != null) + return create_static_expression(tn, id_right, si_right.Next); + else + AddError(new UndefinedNameReference(id_right.name, get_location(id_right))); + } } else if (dn is common_namespace_function_node) { if ((dn as common_namespace_function_node).ConnectedToType == tn) - AddError(new UndefinedNameReference(id_right.name, get_location(id_right))); + { + if (si_right.Next != null) + return create_static_expression(tn, id_right, si_right.Next); + else + AddError(new UndefinedNameReference(id_right.name, get_location(id_right))); + } } if (dn.semantic_node_type == semantic_node_type.indefinite_definition_node) {