Browse Source

Fixed SD2-558 (Override as variable name) and the first half of SD2-559 (Jagged arrays don't parse)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@744 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
7eabc20547
  1. 1
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt
  2. 1
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs
  3. 130
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs
  4. 2025
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  5. 32
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  6. 8
      src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs
  7. 29
      src/Libraries/NRefactory/Test/Parser/Statements/LocalVariableDeclarationTests.cs

1
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt

@ -163,7 +163,6 @@ ConcatStringAssign = "&=" @@ -163,7 +163,6 @@ ConcatStringAssign = "&="
"OrElse"
"Overloads"
"Overridable"
"Override"
"Overrides"
"ParamArray"
"Preserve"

1
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs

@ -106,7 +106,6 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -106,7 +106,6 @@ namespace ICSharpCode.NRefactory.Parser.VB
"ORELSE",
"OVERLOADS",
"OVERRIDABLE",
"OVERRIDE",
"OVERRIDES",
"PARAMARRAY",
"PRESERVE",

130
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs

@ -153,72 +153,71 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -153,72 +153,71 @@ namespace ICSharpCode.NRefactory.Parser.VB
public const int OrElse = 139;
public const int Overloads = 140;
public const int Overridable = 141;
public const int Override = 142;
public const int Overrides = 143;
public const int ParamArray = 144;
public const int Preserve = 145;
public const int Private = 146;
public const int Property = 147;
public const int Protected = 148;
public const int Public = 149;
public const int RaiseEvent = 150;
public const int ReadOnly = 151;
public const int ReDim = 152;
public const int RemoveHandler = 153;
public const int Resume = 154;
public const int Return = 155;
public const int Select = 156;
public const int Set = 157;
public const int Shadows = 158;
public const int Shared = 159;
public const int Short = 160;
public const int Single = 161;
public const int Static = 162;
public const int Step = 163;
public const int Stop = 164;
public const int Strict = 165;
public const int String = 166;
public const int Structure = 167;
public const int Sub = 168;
public const int SyncLock = 169;
public const int Text = 170;
public const int Then = 171;
public const int Throw = 172;
public const int To = 173;
public const int True = 174;
public const int Try = 175;
public const int TypeOf = 176;
public const int Unicode = 177;
public const int Until = 178;
public const int Variant = 179;
public const int Wend = 180;
public const int When = 181;
public const int While = 182;
public const int With = 183;
public const int WithEvents = 184;
public const int WriteOnly = 185;
public const int Xor = 186;
public const int Continue = 187;
public const int Operator = 188;
public const int Using = 189;
public const int IsNot = 190;
public const int SByte = 191;
public const int UInteger = 192;
public const int ULong = 193;
public const int UShort = 194;
public const int CSByte = 195;
public const int CUShort = 196;
public const int CUInt = 197;
public const int CULng = 198;
public const int Global = 199;
public const int TryCast = 200;
public const int Of = 201;
public const int Narrowing = 202;
public const int Widening = 203;
public const int Partial = 204;
public const int Custom = 205;
public const int Overrides = 142;
public const int ParamArray = 143;
public const int Preserve = 144;
public const int Private = 145;
public const int Property = 146;
public const int Protected = 147;
public const int Public = 148;
public const int RaiseEvent = 149;
public const int ReadOnly = 150;
public const int ReDim = 151;
public const int RemoveHandler = 152;
public const int Resume = 153;
public const int Return = 154;
public const int Select = 155;
public const int Set = 156;
public const int Shadows = 157;
public const int Shared = 158;
public const int Short = 159;
public const int Single = 160;
public const int Static = 161;
public const int Step = 162;
public const int Stop = 163;
public const int Strict = 164;
public const int String = 165;
public const int Structure = 166;
public const int Sub = 167;
public const int SyncLock = 168;
public const int Text = 169;
public const int Then = 170;
public const int Throw = 171;
public const int To = 172;
public const int True = 173;
public const int Try = 174;
public const int TypeOf = 175;
public const int Unicode = 176;
public const int Until = 177;
public const int Variant = 178;
public const int Wend = 179;
public const int When = 180;
public const int While = 181;
public const int With = 182;
public const int WithEvents = 183;
public const int WriteOnly = 184;
public const int Xor = 185;
public const int Continue = 186;
public const int Operator = 187;
public const int Using = 188;
public const int IsNot = 189;
public const int SByte = 190;
public const int UInteger = 191;
public const int ULong = 192;
public const int UShort = 193;
public const int CSByte = 194;
public const int CUShort = 195;
public const int CUInt = 196;
public const int CULng = 197;
public const int Global = 198;
public const int TryCast = 199;
public const int Of = 200;
public const int Narrowing = 201;
public const int Widening = 202;
public const int Partial = 203;
public const int Custom = 204;
public const int maxToken = 206;
public const int maxToken = 205;
static BitArray NewSet(params int[] values)
{
BitArray bitArray = new BitArray(maxToken);
@ -376,7 +375,6 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -376,7 +375,6 @@ namespace ICSharpCode.NRefactory.Parser.VB
"OrElse",
"Overloads",
"Overridable",
"Override",
"Overrides",
"ParamArray",
"Preserve",

2025
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

32
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -406,7 +406,6 @@ TOKENS @@ -406,7 +406,6 @@ TOKENS
"OrElse"
"Overloads"
"Overridable"
"Override"
"Overrides"
"ParamArray"
"Preserve"
@ -472,6 +471,7 @@ TOKENS @@ -472,6 +471,7 @@ TOKENS
"Custom"
/* END AUTOGENERATED TOKENS SECTION */
PRODUCTIONS
VBNET
@ -1525,8 +1525,8 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration> @@ -1525,8 +1525,8 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
TypeReference type = null;ArrayList rank = null;ArrayList dimension = null;
.) =
Identifier (. string name = t.val; .)
[ IF(IsDims()) ArrayNameModifier<out rank> ]
[ IF(IsSize()) ArrayInitializationModifier<out dimension> ]
[ IF(IsDims()) ArrayNameModifier<out rank> ]
(
IF (IsObjectCreation()) "As" ObjectCreateExpression<out expr>
(.
@ -1539,23 +1539,31 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration> @@ -1539,23 +1539,31 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
|
[ "As" TypeName<out type> ]
(.
if (type != null && rank != null) {
if (type != null && dimension != null) {
if(type.RankSpecifier != null) {
Error("array rank only allowed one time");
} else {
type.RankSpecifier = (int[])rank.ToArray(typeof(int));
for (int i = 0; i < dimension.Count; i++)
dimension[i] = Expression.AddInteger((Expression)dimension[i], 1);
ArrayList creationParameters = new ArrayList();
creationParameters.Add(new ArrayCreationParameter(dimension));
if (rank != null) {
type.RankSpecifier = (int[])rank.ToArray(typeof(int));
}
expr = new ArrayCreateExpression(type, creationParameters);
type = type.Clone();
if (rank == null) {
type.RankSpecifier = new int[] { dimension.Count - 1 };
} else {
rank.Insert(0, dimension.Count - 1);
type.RankSpecifier = (int[])rank.ToArray(typeof(int));
}
}
} else if (type != null && dimension != null) {
} else if (type != null && rank != null) {
if(type.RankSpecifier != null) {
Error("array rank only allowed one time");
} else {
for (int i = 0; i < dimension.Count; i++)
dimension[i] = Expression.AddInteger((Expression)dimension[i], 1);
rank = new ArrayList();
rank.Add(new ArrayCreationParameter(dimension));
expr = new ArrayCreateExpression(type, rank);
type = type.Clone();
type.RankSpecifier = new int[] { dimension.Count - 1 };
type.RankSpecifier = (int[])rank.ToArray(typeof(int));
}
}
.)

8
src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="none" email=""/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
@ -840,12 +840,6 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB @@ -840,12 +840,6 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB
Assert.AreEqual(Tokens.Overridable, lexer.NextToken().kind);
}
[Test()]
public void TestOverride()
{
ILexer lexer = GenerateLexer(new StringReader("Override"));
Assert.AreEqual(Tokens.Override, lexer.NextToken().kind);
}
[Test()]
public void TestOverrides()
{
ILexer lexer = GenerateLexer(new StringReader("Overrides"));

29
src/Libraries/NRefactory/Test/Parser/Statements/LocalVariableDeclarationTests.cs

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
// <file>
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -211,6 +211,16 @@ namespace ICSharpCode.NRefactory.Tests.AST @@ -211,6 +211,16 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.AreEqual(5, ((PrimitiveExpression)lvd.Variables[0].Initializer).Value);
}
public void VBNetLocalVariableNamedOverrideDeclarationTest()
{
LocalVariableDeclaration lvd = ParseUtilVBNet.ParseStatement<LocalVariableDeclaration>("Dim override As Integer = 5");
Assert.AreEqual(1, lvd.Variables.Count);
Assert.AreEqual("override", lvd.Variables[0].Name);
TypeReference type = lvd.GetTypeForVariable(0);
Assert.AreEqual("Integer", type.Type);
Assert.AreEqual(5, ((PrimitiveExpression)lvd.Variables[0].Initializer).Value);
}
[Test]
public void VBNetLocalArrayDeclarationTest()
{
@ -221,12 +231,29 @@ namespace ICSharpCode.NRefactory.Tests.AST @@ -221,12 +231,29 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.AreEqual("Integer", type.Type);
Assert.AreEqual(new int[] { 0 } , type.RankSpecifier);
ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer;
Assert.IsFalse(ace.CreateType.IsArrayType);
Assert.AreEqual(1, ace.Parameters.Count);
ArrayCreationParameter acp = (ArrayCreationParameter)ace.Parameters[0];
Assert.AreEqual(1, acp.Expressions.Count);
Assert.AreEqual(11, ((PrimitiveExpression)acp.Expressions[0]).Value);
}
[Test]
public void VBNetLocalJaggedArrayDeclarationTest()
{
LocalVariableDeclaration lvd = ParseUtilVBNet.ParseStatement<LocalVariableDeclaration>("Dim a(10)() As Integer");
Assert.AreEqual(1, lvd.Variables.Count);
Assert.AreEqual("a", lvd.Variables[0].Name);
TypeReference type = lvd.GetTypeForVariable(0);
Assert.AreEqual("Integer", type.Type);
Assert.AreEqual(new int[] { 0, 0 } , type.RankSpecifier);
ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer;
Assert.AreEqual(new int[] {0}, ace.CreateType.RankSpecifier);
Assert.AreEqual(1, ace.Parameters.Count);
ArrayCreationParameter acp = (ArrayCreationParameter)ace.Parameters[0];
Assert.AreEqual(1, acp.Expressions.Count);
Assert.AreEqual(11, ((PrimitiveExpression)acp.Expressions[0]).Value);
}
[Test]
public void VBNetComplexGenericLocalVariableDeclarationTest()

Loading…
Cancel
Save