From 05eb6c0a319c893fbbbaf438580a1957800e3800 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: Thu, 3 May 2018 21:02:18 +0200 Subject: [PATCH] performance improvements in intellisense --- .../ParserTools/DefaultLanguageInformation.cs | 7 ++ TestSuite/intellisense_tests/arrays6.pas | 114 ++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 TestSuite/intellisense_tests/arrays6.pas diff --git a/ParserTools/ParserTools/DefaultLanguageInformation.cs b/ParserTools/ParserTools/DefaultLanguageInformation.cs index 6c24d6392..730c386de 100644 --- a/ParserTools/ParserTools/DefaultLanguageInformation.cs +++ b/ParserTools/ParserTools/DefaultLanguageInformation.cs @@ -2584,6 +2584,7 @@ namespace PascalABCCompiler.Parsers { keyword = KeywordKind.CommonKeyword; } + else keyword = KeywordKind.None; } @@ -2680,6 +2681,12 @@ namespace PascalABCCompiler.Parsers { bound = i + 1; TestForKeyword(Text, i, ref bound, punkt_sym, out keyw); + for (int j = tmp; j > bound; j--) + { + sb.Insert(0, Text[j]); + } + i = bound; + continue; } else if (i >= 0 && Text[i] == '\'') return ""; i = tmp; diff --git a/TestSuite/intellisense_tests/arrays6.pas b/TestSuite/intellisense_tests/arrays6.pas new file mode 100644 index 000000000..cf8bf934c --- /dev/null +++ b/TestSuite/intellisense_tests/arrays6.pas @@ -0,0 +1,114 @@ + +procedure Test; +var b1 : set of byte := [-1..3]; + b2 : array[1..5] of integer := (1,2,3,4,5); + b3 : array of real := (2.4,3.5,1.2); + b4 : array[1..3] of set of char := (['a','j'],['l','b','c'],[]); + +begin + var a1 : set of byte := [-1..3]; + assert(a1=[0..3]); + assert(2 in a1); + var a2 : array[1..5] of integer := (1,2,3,4,5); + assert(a2[3] = 3); + var a3 : array of real := (2.4,3.5,1.2); + assert(a3[1] = 3.5); + var a4 : array[1..3,1..2] of integer := ((1,2),(2,3),(3,4)); + assert(a4[2,2] = 3); + var a5 : array[0..2] of set of char := (['a','j'],['l','b','c'],[]); + assert(a5[0] = ['a','j']); + assert(a5[2]=[]); + assert(b1 = [0..3]); + assert(1 in b1); + assert(b2[2] = 2); + assert(b3[2] = 1.2); + assert(b4[1] = ['a','j']); + Include(b1,4); assert(b1=[0..4]); + Exclude(b1,4); assert(b1=[0..3]); + assert(2 in b1); +end; + +procedure Test2; +var b1 : set of byte := [-1..3]; + b2 : array[1..5] of integer := (1,2,3,4,5); + b3 : array of real := (2.4,3.5,1.2); + b4 : array[1..3] of set of char := (['a','j'],['l','b','c'],[]); + +procedure Nested; +begin + var a1 : set of byte := [-1..3]; + assert(a1=[0..3]); + assert(2 in a1); + var a2 : array[1..5] of integer := (1,2,3,4,5); + assert(a2[3] = 3); + var a3 : array of real := (2.4,3.5,1.2); + assert(a3[1] = 3.5); + var a4 : array[1..3,1..2] of integer := ((1,2),(2,3),(3,4)); + assert(a4{@var a4: array[1..3,1..2] of integer;@}[2,2] = 3); + var a5 : array[0..2] of set of char := (['a','j'],['l','b','c'],[]); + assert(a5[0] = ['a','j']); + assert(a5[2]=[]); + assert(b1{@var b1: set of byte;@} = [0..3]); + assert(1 in b1); + assert(b2[2] = 2); + assert(b3[2] = 1.2); + assert(b4{@var b4: array[1..3] of set of char;@}[1] = ['a','j']); + Include(b1,4); assert(b1=[0..4]); + Exclude(b1,4); assert(b1=[0..3]); + assert(2 in b1); +end; + +begin + var a1 : set of byte := [-1..3]; + assert(a1=[0..3]); + assert(2 in a1); + var a2 : array[1..5] of integer := (1,2,3,4,5); + assert(a2[3] = 3); + var a3 : array of real := (2.4,3.5,1.2); + assert(a3[1] = 3.5); + var a4 : array[1..3,1..2] of integer := ((1,2),(2,3),(3,4)); + assert(a4[2,2] = 3); + var a5 : array[0..2] of set of char := (['a','j'],['l','b','c'],[]); + assert(a5[0] = ['a','j']); + assert(a5[2]=[]); + assert(b1 = [0..3]); + assert(1 in b1); + assert(b2[2] = 2); + assert(b3[2] = 1.2); + assert(b4[1] = ['a','j']); + Include(b1,4); assert(b1=[0..4]); + Exclude(b1,4); assert(b1=[0..3]); + assert(2 in b1); + Nested{@procedure Nested();@}; +end; + +var b1 : set of byte := [-1..3]; + b2 : array[1..5] of integer := (1,2,3,4,5); + b3 : array of real := (2.4,3.5,1.2); + b4 : array[1..3] of set of char := (['a','j'],['l','b','c'],[]); + +begin + var a5 : array[0..2] of set of char := (['a','j'],['l','b','c'],[]); + assert(a5[0] = ['a','j']); + assert(a5[2]=[]); + var a1 : set of byte := [-1..3]; + assert(a1=[0..3]); + assert(2 in a1); + var a2 : array[1..5] of integer := (1,2,3,4,5); + assert(a2[3] = 3); + var a3 : array of real := (2.4,3.5,1.2); + assert(a3[1] = 3.5); + var a4 : array[1..3,1..2] of integer := ((1,2),(2,3),(3,4)); + assert(a4[2,2] = 3); + + assert(b1 = [0..3]); + assert(1 in b1); + assert(b2[2] = 2); + assert(b3[2] = 1.2); + assert(b4[1] = ['a','j']); + Include(b1,4); assert(b1=[0..4]); + Exclude(b1,4); assert(b1=[0..3]); + assert(2 in b1); + Test; + Test2; +end. \ No newline at end of file