From ec110dca07d23fc99c3d34f884ac30d4bdb028a0 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 12 Dec 2021 13:49:48 +0100 Subject: [PATCH] fix pascalabcnet/pascalabcnetide#65 --- CodeCompletion/SymTable.cs | 2 +- TestSuite/intellisense_tests/generics26.pas | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 TestSuite/intellisense_tests/generics26.pas diff --git a/CodeCompletion/SymTable.cs b/CodeCompletion/SymTable.cs index 0da4bb374..7e83e3a12 100644 --- a/CodeCompletion/SymTable.cs +++ b/CodeCompletion/SymTable.cs @@ -2327,7 +2327,7 @@ namespace CodeCompletion ElementScope inst_param = null; if ((parameter.sc as TypeScope).IsGeneric) inst_param = new ElementScope(new SymInfo(parameter.si.name, parameter.si.kind, parameter.si.description), (parameter.sc as TypeScope).GetInstance(gen_args), parameter.topScope); - else if (parameter.param_kind == parametr_kind.params_parametr && (parameter.sc as TypeScope).IsArray && (parameter.sc as TypeScope).GetElementType().IsGenericParameter && gen_args[i - 1].IsArray) + else if (parameter.param_kind == parametr_kind.params_parametr && (parameter.sc as TypeScope).IsArray && (parameter.sc as TypeScope).GetElementType().IsGenericParameter && i - 1 < gen_args.Count && gen_args[i - 1].IsArray) { gen_args[i - 1] = gen_args[i - 1].GetElementType(); inst_param = new ElementScope(new SymInfo(parameter.si.name, parameter.si.kind, parameter.si.description), (parameter.sc as TypeScope).GetInstance(gen_args), parameter.topScope); diff --git a/TestSuite/intellisense_tests/generics26.pas b/TestSuite/intellisense_tests/generics26.pas new file mode 100644 index 000000000..d819b77d9 --- /dev/null +++ b/TestSuite/intellisense_tests/generics26.pas @@ -0,0 +1,17 @@ +begin + var x0{@var x0: array[,] of string;@} := Matr&(1, 1, 'abc'); + + var x1{@var x1: sequence of string;@} := x0.ColSeq(0); // sequence of integer + var x2{@var x2: sequence of string;@} := x0.RowSeq(0); // sequence of integer + + var x3{@var x3: array of array of string;@} := x0.Cols(); // sequence of IEnumerable + var x4{@var x4: array of array of string;@} := x0.Rows(); // sequence of IEnumerable + + var x5{@var x5: sequence of string;@} := x0.ElementsByCol(); // sequence of string [правильно] + var x6{@var x6: sequence of string;@} := x0.ElementsByRow(); // sequence of string [правильно] + + var x8{@var x8: sequence of byte;@} := x0.OfType&(); + + var x9{@var x9: array[,] of string;@} := x0.Println(); + +end. \ No newline at end of file