From ead3e0d612f14f7fdbd7d620beeab34525df95bf Mon Sep 17 00:00:00 2001 From: Markus Palme Date: Sat, 16 Aug 2008 09:37:22 +0000 Subject: [PATCH] added "Infer" keyword; ordered keywords; memberreferenceexpression vs. typereferenceexpression git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3380 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Lexer/VBNet/KeywordList.txt | 65 +- .../Project/Src/Lexer/VBNet/Keywords.cs | 43 +- .../Project/Src/Lexer/VBNet/Tokens.cs | 342 ++- .../Project/Src/Parser/VBNet/Parser.cs | 2736 ++++++++--------- .../Project/Src/Parser/VBNet/VBNET.ATG | 106 +- .../Project/Src/Parser/VBNet/VBNetParser.cs | 44 +- .../NRefactory/Test/Lexer/VBNet/LexerTests.cs | 303 +- .../Expressions/AddressOfExpressionTests.cs | 10 + .../MemberReferenceExpressionTests.cs | 45 +- 9 files changed, 1805 insertions(+), 1889 deletions(-) diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt index 129e5df0d0..e462dce2be 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/KeywordList.txt @@ -21,21 +21,20 @@ LiteralDecimal LiteralDate # SPECIAL_CHARACTERS -Dot = "." Assign = "=" -Comma = "," Colon =":" -Plus = "+" -Minus = "-" -Times = "*" +Comma = "," +ConcatString = "&" Div ="/" DivInteger = "\\" -ConcatString = "&" -Power = "^" -# Question mark is not needed by VB8, but we use it inside the IDE -QuestionMark = "?" +Dot = "." # Exclamation mark = Dictionary access operator (not always a token, sometimes it's a type character) ExclamationMark = "!" +Minus = "-" +Plus = "+" +Power = "^" +QuestionMark = "?" +Times = "*" OpenCurlyBrace = "{" CloseCurlyBrace = "}" @@ -95,10 +94,16 @@ ConcatStringAssign = "&=" "CObj" "Compare" "Const" +"Continue" +"CSByte" "CShort" "CSng" "CStr" "CType" +"CUInt" +"CULng" +"CUShort" +"Custom" "Date" "Decimal" "Declare" @@ -126,6 +131,7 @@ ConcatStringAssign = "&=" "Function" "Get" "GetType" +"Global" "GoSub" "GoTo" "Handles" @@ -133,10 +139,13 @@ ConcatStringAssign = "&=" "Implements" "Imports" "In" +"Infer" "Inherits" "Integer" "Interface" "Is" +"IsNot" +# Note: IsTrue and IsFalse are 'NOT' keywords they're only valid in Operator declarations (like get/set/value are no C# 'keywords') "Let" "Lib" "Like" @@ -150,6 +159,7 @@ ConcatStringAssign = "&=" "MyBase" "MyClass" "Namespace" +"Narrowing" "New" "Next" "Not" @@ -157,8 +167,10 @@ ConcatStringAssign = "&=" "NotInheritable" "NotOverridable" "Object" +"Of" "Off" "On" +"Operator" "Option" "Optional" "Or" @@ -167,6 +179,7 @@ ConcatStringAssign = "&=" "Overridable" "Overrides" "ParamArray" +"Partial" "Preserve" "Private" "Property" @@ -175,9 +188,12 @@ ConcatStringAssign = "&=" "RaiseEvent" "ReadOnly" "ReDim" +# has to be in the keyword list for the output formatter +"Rem" "RemoveHandler" "Resume" "Return" +"SByte" "Select" "Set" "Shadows" @@ -198,42 +214,23 @@ ConcatStringAssign = "&=" "To" "True" "Try" +"TryCast" "TypeOf" +"UInteger" +"ULong" "Unicode" "Until" +"UShort" +"Using" "Variant" "Wend" "When" "While" +"Widening" "With" "WithEvents" "WriteOnly" "Xor" -# Rem never gets passed to the parser because it is handled by the lexer, but it still -# has to be in the keyword list for the output formatter -"Rem" - -# VB.NET 2.0 Keywords: -"Continue" -"Operator" -"Using" -"IsNot" -# Note: IsTrue and IsFalse are 'NOT' keywords they're only valid in Operator declarations (like get/set/value are no C# 'keywords') -"SByte" -"UInteger" -"ULong" -"UShort" -"CSByte" -"CUShort" -"CUInt" -"CULng" -"Global" -"TryCast" -"Of" -"Narrowing" -"Widening" -"Partial" -"Custom" #Sets Null("Nothing") diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs index 76374886fe..dbb388ae48 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Keywords.cs @@ -36,10 +36,16 @@ namespace ICSharpCode.NRefactory.Parser.VB "COBJ", "COMPARE", "CONST", + "CONTINUE", + "CSBYTE", "CSHORT", "CSNG", "CSTR", "CTYPE", + "CUINT", + "CULNG", + "CUSHORT", + "CUSTOM", "DATE", "DECIMAL", "DECLARE", @@ -67,6 +73,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "FUNCTION", "GET", "GETTYPE", + "GLOBAL", "GOSUB", "GOTO", "HANDLES", @@ -74,10 +81,12 @@ namespace ICSharpCode.NRefactory.Parser.VB "IMPLEMENTS", "IMPORTS", "IN", + "INFER", "INHERITS", "INTEGER", "INTERFACE", "IS", + "ISNOT", "LET", "LIB", "LIKE", @@ -91,6 +100,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "MYBASE", "MYCLASS", "NAMESPACE", + "NARROWING", "NEW", "NEXT", "NOT", @@ -98,8 +108,10 @@ namespace ICSharpCode.NRefactory.Parser.VB "NOTINHERITABLE", "NOTOVERRIDABLE", "OBJECT", + "OF", "OFF", "ON", + "OPERATOR", "OPTION", "OPTIONAL", "OR", @@ -108,6 +120,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "OVERRIDABLE", "OVERRIDES", "PARAMARRAY", + "PARTIAL", "PRESERVE", "PRIVATE", "PROPERTY", @@ -116,9 +129,11 @@ namespace ICSharpCode.NRefactory.Parser.VB "RAISEEVENT", "READONLY", "REDIM", + "REM", "REMOVEHANDLER", "RESUME", "RETURN", + "SBYTE", "SELECT", "SET", "SHADOWS", @@ -139,37 +154,23 @@ namespace ICSharpCode.NRefactory.Parser.VB "TO", "TRUE", "TRY", + "TRYCAST", "TYPEOF", + "UINTEGER", + "ULONG", "UNICODE", "UNTIL", + "USHORT", + "USING", "VARIANT", "WEND", "WHEN", "WHILE", + "WIDENING", "WITH", "WITHEVENTS", "WRITEONLY", - "XOR", - "REM", - "CONTINUE", - "OPERATOR", - "USING", - "ISNOT", - "SBYTE", - "UINTEGER", - "ULONG", - "USHORT", - "CSBYTE", - "CUSHORT", - "CUINT", - "CULNG", - "GLOBAL", - "TRYCAST", - "OF", - "NARROWING", - "WIDENING", - "PARTIAL", - "CUSTOM" + "XOR" }; static LookupTable keywords = new LookupTable(false); diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs index 39a1289f7d..0d9348b058 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Tokens.cs @@ -19,19 +19,19 @@ namespace ICSharpCode.NRefactory.Parser.VB public const int LiteralDate = 9; // ----- special character ----- - public const int Dot = 10; - public const int Assign = 11; + public const int Assign = 10; + public const int Colon = 11; public const int Comma = 12; - public const int Colon = 13; - public const int Plus = 14; - public const int Minus = 15; - public const int Times = 16; - public const int Div = 17; - public const int DivInteger = 18; - public const int ConcatString = 19; + public const int ConcatString = 13; + public const int Div = 14; + public const int DivInteger = 15; + public const int Dot = 16; + public const int ExclamationMark = 17; + public const int Minus = 18; + public const int Plus = 19; public const int Power = 20; public const int QuestionMark = 21; - public const int ExclamationMark = 22; + public const int Times = 22; public const int OpenCurlyBrace = 23; public const int CloseCurlyBrace = 24; public const int OpenParenthesis = 25; @@ -84,142 +84,143 @@ namespace ICSharpCode.NRefactory.Parser.VB public const int CObj = 70; public const int Compare = 71; public const int Const = 72; - public const int CShort = 73; - public const int CSng = 74; - public const int CStr = 75; - public const int CType = 76; - public const int Date = 77; - public const int Decimal = 78; - public const int Declare = 79; - public const int Default = 80; - public const int Delegate = 81; - public const int Dim = 82; - public const int DirectCast = 83; - public const int Do = 84; - public const int Double = 85; - public const int Each = 86; - public const int Else = 87; - public const int ElseIf = 88; - public const int End = 89; - public const int EndIf = 90; - public const int Enum = 91; - public const int Erase = 92; - public const int Error = 93; - public const int Event = 94; - public const int Exit = 95; - public const int Explicit = 96; - public const int False = 97; - public const int Finally = 98; - public const int For = 99; - public const int Friend = 100; - public const int Function = 101; - public const int Get = 102; - new public const int GetType = 103; - public const int GoSub = 104; - public const int GoTo = 105; - public const int Handles = 106; - public const int If = 107; - public const int Implements = 108; - public const int Imports = 109; - public const int In = 110; - public const int Inherits = 111; - public const int Integer = 112; - public const int Interface = 113; - public const int Is = 114; - public const int Let = 115; - public const int Lib = 116; - public const int Like = 117; - public const int Long = 118; - public const int Loop = 119; - public const int Me = 120; - public const int Mod = 121; - public const int Module = 122; - public const int MustInherit = 123; - public const int MustOverride = 124; - public const int MyBase = 125; - public const int MyClass = 126; - public const int Namespace = 127; - public const int New = 128; - public const int Next = 129; - public const int Not = 130; - public const int Nothing = 131; - public const int NotInheritable = 132; - public const int NotOverridable = 133; - public const int Object = 134; - public const int Off = 135; - public const int On = 136; - public const int Option = 137; - public const int Optional = 138; - public const int Or = 139; - public const int OrElse = 140; - public const int Overloads = 141; - public const int Overridable = 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 Rem = 187; - public const int Continue = 188; - public const int Operator = 189; - public const int Using = 190; - public const int IsNot = 191; - public const int SByte = 192; + public const int Continue = 73; + public const int CSByte = 74; + public const int CShort = 75; + public const int CSng = 76; + public const int CStr = 77; + public const int CType = 78; + public const int CUInt = 79; + public const int CULng = 80; + public const int CUShort = 81; + public const int Custom = 82; + public const int Date = 83; + public const int Decimal = 84; + public const int Declare = 85; + public const int Default = 86; + public const int Delegate = 87; + public const int Dim = 88; + public const int DirectCast = 89; + public const int Do = 90; + public const int Double = 91; + public const int Each = 92; + public const int Else = 93; + public const int ElseIf = 94; + public const int End = 95; + public const int EndIf = 96; + public const int Enum = 97; + public const int Erase = 98; + public const int Error = 99; + public const int Event = 100; + public const int Exit = 101; + public const int Explicit = 102; + public const int False = 103; + public const int Finally = 104; + public const int For = 105; + public const int Friend = 106; + public const int Function = 107; + public const int Get = 108; + new public const int GetType = 109; + public const int Global = 110; + public const int GoSub = 111; + public const int GoTo = 112; + public const int Handles = 113; + public const int If = 114; + public const int Implements = 115; + public const int Imports = 116; + public const int In = 117; + public const int Infer = 118; + public const int Inherits = 119; + public const int Integer = 120; + public const int Interface = 121; + public const int Is = 122; + public const int IsNot = 123; + public const int Let = 124; + public const int Lib = 125; + public const int Like = 126; + public const int Long = 127; + public const int Loop = 128; + public const int Me = 129; + public const int Mod = 130; + public const int Module = 131; + public const int MustInherit = 132; + public const int MustOverride = 133; + public const int MyBase = 134; + public const int MyClass = 135; + public const int Namespace = 136; + public const int Narrowing = 137; + public const int New = 138; + public const int Next = 139; + public const int Not = 140; + public const int Nothing = 141; + public const int NotInheritable = 142; + public const int NotOverridable = 143; + public const int Object = 144; + public const int Of = 145; + public const int Off = 146; + public const int On = 147; + public const int Operator = 148; + public const int Option = 149; + public const int Optional = 150; + public const int Or = 151; + public const int OrElse = 152; + public const int Overloads = 153; + public const int Overridable = 154; + public const int Overrides = 155; + public const int ParamArray = 156; + public const int Partial = 157; + public const int Preserve = 158; + public const int Private = 159; + public const int Property = 160; + public const int Protected = 161; + public const int Public = 162; + public const int RaiseEvent = 163; + public const int ReadOnly = 164; + public const int ReDim = 165; + public const int Rem = 166; + public const int RemoveHandler = 167; + public const int Resume = 168; + public const int Return = 169; + public const int SByte = 170; + public const int Select = 171; + public const int Set = 172; + public const int Shadows = 173; + public const int Shared = 174; + public const int Short = 175; + public const int Single = 176; + public const int Static = 177; + public const int Step = 178; + public const int Stop = 179; + public const int Strict = 180; + public const int String = 181; + public const int Structure = 182; + public const int Sub = 183; + public const int SyncLock = 184; + public const int Text = 185; + public const int Then = 186; + public const int Throw = 187; + public const int To = 188; + public const int True = 189; + public const int Try = 190; + public const int TryCast = 191; + public const int TypeOf = 192; public const int UInteger = 193; public const int ULong = 194; - public const int UShort = 195; - public const int CSByte = 196; - public const int CUShort = 197; - public const int CUInt = 198; - public const int CULng = 199; - public const int Global = 200; - public const int TryCast = 201; - public const int Of = 202; - public const int Narrowing = 203; - public const int Widening = 204; - public const int Partial = 205; - public const int Custom = 206; + public const int Unicode = 195; + public const int Until = 196; + public const int UShort = 197; + public const int Using = 198; + public const int Variant = 199; + public const int Wend = 200; + public const int When = 201; + public const int While = 202; + public const int Widening = 203; + public const int With = 204; + public const int WithEvents = 205; + public const int WriteOnly = 206; + public const int Xor = 207; - public const int MaxToken = 207; + public const int MaxToken = 208; static BitArray NewSet(params int[] values) { BitArray bitArray = new BitArray(MaxToken); @@ -245,19 +246,19 @@ namespace ICSharpCode.NRefactory.Parser.VB "", "", // ----- special character ----- - ".", "=", - ",", ":", - "+", - "-", - "*", + ",", + "&", "/", "\\", - "&", + ".", + "!", + "-", + "+", "^", "?", - "!", + "*", "{", "}", "(", @@ -309,10 +310,16 @@ namespace ICSharpCode.NRefactory.Parser.VB "CObj", "Compare", "Const", + "Continue", + "CSByte", "CShort", "CSng", "CStr", "CType", + "CUInt", + "CULng", + "CUShort", + "Custom", "Date", "Decimal", "Declare", @@ -340,6 +347,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "Function", "Get", "GetType", + "Global", "GoSub", "GoTo", "Handles", @@ -347,10 +355,12 @@ namespace ICSharpCode.NRefactory.Parser.VB "Implements", "Imports", "In", + "Infer", "Inherits", "Integer", "Interface", "Is", + "IsNot", "Let", "Lib", "Like", @@ -364,6 +374,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "MyBase", "MyClass", "Namespace", + "Narrowing", "New", "Next", "Not", @@ -371,8 +382,10 @@ namespace ICSharpCode.NRefactory.Parser.VB "NotInheritable", "NotOverridable", "Object", + "Of", "Off", "On", + "Operator", "Option", "Optional", "Or", @@ -381,6 +394,7 @@ namespace ICSharpCode.NRefactory.Parser.VB "Overridable", "Overrides", "ParamArray", + "Partial", "Preserve", "Private", "Property", @@ -389,9 +403,11 @@ namespace ICSharpCode.NRefactory.Parser.VB "RaiseEvent", "ReadOnly", "ReDim", + "Rem", "RemoveHandler", "Resume", "Return", + "SByte", "Select", "Set", "Shadows", @@ -412,37 +428,23 @@ namespace ICSharpCode.NRefactory.Parser.VB "To", "True", "Try", + "TryCast", "TypeOf", + "UInteger", + "ULong", "Unicode", "Until", + "UShort", + "Using", "Variant", "Wend", "When", "While", + "Widening", "With", "WithEvents", "WriteOnly", "Xor", - "Rem", - "Continue", - "Operator", - "Using", - "IsNot", - "SByte", - "UInteger", - "ULong", - "UShort", - "CSByte", - "CUShort", - "CUInt", - "CULng", - "Global", - "TryCast", - "Of", - "Narrowing", - "Widening", - "Partial", - "Custom", }; public static string GetTokenString(int token) { diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs index 8a313ebb00..75a9fcf0cd 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs @@ -19,7 +19,7 @@ namespace ICSharpCode.NRefactory.Parser.VB { partial class Parser : AbstractParser { - const int maxT = 207; + const int maxT = 208; const bool T = true; const bool x = false; @@ -38,18 +38,18 @@ partial class Parser : AbstractParser lexer.NextToken(); // get the first token compilationUnit = new CompilationUnit(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } - while (la.kind == 137) { + while (la.kind == 149) { OptionStmt(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - while (la.kind == 109) { + while (la.kind == 116) { ImportsStmt(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } @@ -57,13 +57,13 @@ partial class Parser : AbstractParser #line 239 "VBNET.ATG" IsGlobalAttrTarget()) { GlobalAttributeSection(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } while (StartOf(1)) { NamespaceMemberDecl(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } @@ -73,22 +73,22 @@ IsGlobalAttrTarget()) { void EndOfStmt() { if (la.kind == 1) { lexer.NextToken(); - } else if (la.kind == 13) { + } else if (la.kind == 11) { lexer.NextToken(); - } else SynErr(208); + } else SynErr(209); } void OptionStmt() { #line 244 "VBNET.ATG" INode node = null; bool val = true; - Expect(137); + Expect(149); #line 245 "VBNET.ATG" Location startPos = t.Location; - if (la.kind == 96) { + if (la.kind == 102) { lexer.NextToken(); - if (la.kind == 135 || la.kind == 136) { + if (la.kind == 146 || la.kind == 147) { OptionValue( #line 247 "VBNET.ATG" ref val); @@ -96,9 +96,9 @@ ref val); #line 248 "VBNET.ATG" node = new OptionDeclaration(OptionType.Explicit, val); - } else if (la.kind == 165) { + } else if (la.kind == 180) { lexer.NextToken(); - if (la.kind == 135 || la.kind == 136) { + if (la.kind == 146 || la.kind == 147) { OptionValue( #line 250 "VBNET.ATG" ref val); @@ -113,13 +113,13 @@ ref val); #line 253 "VBNET.ATG" node = new OptionDeclaration(OptionType.CompareBinary, val); - } else if (la.kind == 170) { + } else if (la.kind == 185) { lexer.NextToken(); #line 254 "VBNET.ATG" node = new OptionDeclaration(OptionType.CompareText, val); - } else SynErr(209); - } else SynErr(210); + } else SynErr(210); + } else SynErr(211); EndOfStmt(); #line 259 "VBNET.ATG" @@ -136,7 +136,7 @@ ref val); #line 282 "VBNET.ATG" List usings = new List(); - Expect(109); + Expect(116); #line 286 "VBNET.ATG" Location startPos = t.Location; @@ -170,43 +170,43 @@ out u); void GlobalAttributeSection() { Expect(28); -#line 2194 "VBNET.ATG" +#line 2178 "VBNET.ATG" Location startPos = t.Location; if (la.kind == 50) { lexer.NextToken(); - } else if (la.kind == 122) { + } else if (la.kind == 131) { lexer.NextToken(); - } else SynErr(211); + } else SynErr(212); -#line 2196 "VBNET.ATG" +#line 2180 "VBNET.ATG" string attributeTarget = t.val != null ? t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture) : null; List attributes = new List(); ASTAttribute attribute; - Expect(13); + Expect(11); Attribute( -#line 2200 "VBNET.ATG" +#line 2184 "VBNET.ATG" out attribute); -#line 2200 "VBNET.ATG" +#line 2184 "VBNET.ATG" attributes.Add(attribute); while ( -#line 2201 "VBNET.ATG" +#line 2185 "VBNET.ATG" NotFinalComma()) { if (la.kind == 12) { lexer.NextToken(); if (la.kind == 50) { lexer.NextToken(); - } else if (la.kind == 122) { + } else if (la.kind == 131) { lexer.NextToken(); - } else SynErr(212); - Expect(13); + } else SynErr(213); + Expect(11); } Attribute( -#line 2201 "VBNET.ATG" +#line 2185 "VBNET.ATG" out attribute); -#line 2201 "VBNET.ATG" +#line 2185 "VBNET.ATG" attributes.Add(attribute); } if (la.kind == 12) { @@ -215,7 +215,7 @@ out attribute); Expect(27); EndOfStmt(); -#line 2206 "VBNET.ATG" +#line 2190 "VBNET.ATG" AttributeSection section = new AttributeSection { AttributeTarget = attributeTarget, Attributes = attributes, @@ -234,7 +234,7 @@ out attribute); List attributes = new List(); string qualident; - if (la.kind == 127) { + if (la.kind == 136) { lexer.NextToken(); #line 331 "VBNET.ATG" @@ -274,23 +274,23 @@ m); NonModuleDeclaration( #line 348 "VBNET.ATG" m, attributes); - } else SynErr(213); + } else SynErr(214); } void OptionValue( #line 267 "VBNET.ATG" ref bool val) { - if (la.kind == 136) { + if (la.kind == 147) { lexer.NextToken(); #line 269 "VBNET.ATG" val = true; - } else if (la.kind == 135) { + } else if (la.kind == 146) { lexer.NextToken(); #line 271 "VBNET.ATG" val = false; - } else SynErr(214); + } else SynErr(215); } void ImportClause( @@ -305,7 +305,7 @@ out Using u) { Qualident( #line 308 "VBNET.ATG" out qualident); - if (la.kind == 11) { + if (la.kind == 10) { lexer.NextToken(); TypeName( #line 309 "VBNET.ATG" @@ -324,47 +324,47 @@ out aliasedType); } void Qualident( -#line 2947 "VBNET.ATG" +#line 2931 "VBNET.ATG" out string qualident) { -#line 2949 "VBNET.ATG" +#line 2933 "VBNET.ATG" string name; qualidentBuilder.Length = 0; Identifier(); -#line 2953 "VBNET.ATG" +#line 2937 "VBNET.ATG" qualidentBuilder.Append(t.val); while ( -#line 2954 "VBNET.ATG" +#line 2938 "VBNET.ATG" DotAndIdentOrKw()) { - Expect(10); + Expect(16); IdentifierOrKeyword( -#line 2954 "VBNET.ATG" +#line 2938 "VBNET.ATG" out name); -#line 2954 "VBNET.ATG" +#line 2938 "VBNET.ATG" qualidentBuilder.Append('.'); qualidentBuilder.Append(name); } -#line 2956 "VBNET.ATG" +#line 2940 "VBNET.ATG" qualident = qualidentBuilder.ToString(); } void TypeName( -#line 2067 "VBNET.ATG" +#line 2051 "VBNET.ATG" out TypeReference typeref) { -#line 2068 "VBNET.ATG" +#line 2052 "VBNET.ATG" ArrayList rank = null; NonArrayTypeName( -#line 2070 "VBNET.ATG" +#line 2054 "VBNET.ATG" out typeref, false); ArrayTypeModifiers( -#line 2074 "VBNET.ATG" +#line 2058 "VBNET.ATG" out rank); -#line 2075 "VBNET.ATG" +#line 2059 "VBNET.ATG" if (rank != null && typeref != null) { typeref.RankSpecifier = (int[])rank.ToArray(typeof(int)); } @@ -372,50 +372,50 @@ out rank); } void NamespaceBody() { - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(1)) { NamespaceMemberDecl(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - Expect(89); - Expect(127); + Expect(95); + Expect(136); EndOfStmt(); } void AttributeSection( -#line 2271 "VBNET.ATG" +#line 2255 "VBNET.ATG" out AttributeSection section) { -#line 2273 "VBNET.ATG" +#line 2257 "VBNET.ATG" string attributeTarget = "";List attributes = new List(); ASTAttribute attribute; Expect(28); -#line 2277 "VBNET.ATG" +#line 2261 "VBNET.ATG" Location startPos = t.Location; if ( -#line 2278 "VBNET.ATG" +#line 2262 "VBNET.ATG" IsLocalAttrTarget()) { - if (la.kind == 94) { + if (la.kind == 100) { lexer.NextToken(); -#line 2279 "VBNET.ATG" +#line 2263 "VBNET.ATG" attributeTarget = "event"; - } else if (la.kind == 155) { + } else if (la.kind == 169) { lexer.NextToken(); -#line 2280 "VBNET.ATG" +#line 2264 "VBNET.ATG" attributeTarget = "return"; } else { Identifier(); -#line 2283 "VBNET.ATG" +#line 2267 "VBNET.ATG" string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture); if (val != "field" || val != "method" || val != "module" || val != "param" || @@ -425,23 +425,23 @@ IsLocalAttrTarget()) { attributeTarget = t.val; } - Expect(13); + Expect(11); } Attribute( -#line 2293 "VBNET.ATG" +#line 2277 "VBNET.ATG" out attribute); -#line 2293 "VBNET.ATG" +#line 2277 "VBNET.ATG" attributes.Add(attribute); while ( -#line 2294 "VBNET.ATG" +#line 2278 "VBNET.ATG" NotFinalComma()) { Expect(12); Attribute( -#line 2294 "VBNET.ATG" +#line 2278 "VBNET.ATG" out attribute); -#line 2294 "VBNET.ATG" +#line 2278 "VBNET.ATG" attributes.Add(attribute); } if (la.kind == 12) { @@ -449,7 +449,7 @@ out attribute); } Expect(27); -#line 2298 "VBNET.ATG" +#line 2282 "VBNET.ATG" section = new AttributeSection { AttributeTarget = attributeTarget, Attributes = attributes, @@ -460,73 +460,73 @@ out attribute); } void TypeModifier( -#line 3027 "VBNET.ATG" +#line 3011 "VBNET.ATG" ModifierList m) { switch (la.kind) { - case 149: { + case 162: { lexer.NextToken(); -#line 3028 "VBNET.ATG" +#line 3012 "VBNET.ATG" m.Add(Modifiers.Public, t.Location); break; } - case 148: { + case 161: { lexer.NextToken(); -#line 3029 "VBNET.ATG" +#line 3013 "VBNET.ATG" m.Add(Modifiers.Protected, t.Location); break; } - case 100: { + case 106: { lexer.NextToken(); -#line 3030 "VBNET.ATG" +#line 3014 "VBNET.ATG" m.Add(Modifiers.Internal, t.Location); break; } - case 146: { + case 159: { lexer.NextToken(); -#line 3031 "VBNET.ATG" +#line 3015 "VBNET.ATG" m.Add(Modifiers.Private, t.Location); break; } - case 159: { + case 174: { lexer.NextToken(); -#line 3032 "VBNET.ATG" +#line 3016 "VBNET.ATG" m.Add(Modifiers.Static, t.Location); break; } - case 158: { + case 173: { lexer.NextToken(); -#line 3033 "VBNET.ATG" +#line 3017 "VBNET.ATG" m.Add(Modifiers.New, t.Location); break; } - case 123: { + case 132: { lexer.NextToken(); -#line 3034 "VBNET.ATG" +#line 3018 "VBNET.ATG" m.Add(Modifiers.Abstract, t.Location); break; } - case 132: { + case 142: { lexer.NextToken(); -#line 3035 "VBNET.ATG" +#line 3019 "VBNET.ATG" m.Add(Modifiers.Sealed, t.Location); break; } - case 205: { + case 157: { lexer.NextToken(); -#line 3036 "VBNET.ATG" +#line 3020 "VBNET.ATG" m.Add(Modifiers.Partial, t.Location); break; } - default: SynErr(215); break; + default: SynErr(216); break; } } @@ -564,7 +564,7 @@ newType.Templates); #line 425 "VBNET.ATG" newType.BodyStartLocation = t.Location; - if (la.kind == 111) { + if (la.kind == 119) { ClassBaseType( #line 426 "VBNET.ATG" out typeRef); @@ -572,7 +572,7 @@ out typeRef); #line 426 "VBNET.ATG" newType.BaseTypes.Add(typeRef); } - while (la.kind == 108) { + while (la.kind == 115) { TypeImplementsClause( #line 427 "VBNET.ATG" out baseInterfaces); @@ -583,7 +583,7 @@ out baseInterfaces); ClassBody( #line 428 "VBNET.ATG" newType); - Expect(89); + Expect(95); Expect(68); #line 429 "VBNET.ATG" @@ -595,7 +595,7 @@ newType); break; } - case 122: { + case 131: { lexer.NextToken(); #line 436 "VBNET.ATG" @@ -623,7 +623,7 @@ newType); break; } - case 167: { + case 182: { lexer.NextToken(); #line 452 "VBNET.ATG" @@ -645,7 +645,7 @@ newType.Templates); #line 462 "VBNET.ATG" newType.BodyStartLocation = t.Location; - while (la.kind == 108) { + while (la.kind == 115) { TypeImplementsClause( #line 463 "VBNET.ATG" out baseInterfaces); @@ -662,7 +662,7 @@ newType); break; } - case 91: { + case 97: { lexer.NextToken(); #line 471 "VBNET.ATG" @@ -700,7 +700,7 @@ newType); break; } - case 113: { + case 121: { lexer.NextToken(); #line 490 "VBNET.ATG" @@ -722,7 +722,7 @@ newType.Templates); #line 500 "VBNET.ATG" newType.BodyStartLocation = t.Location; - while (la.kind == 111) { + while (la.kind == 119) { InterfaceBase( #line 501 "VBNET.ATG" out baseInterfaces); @@ -739,7 +739,7 @@ newType); break; } - case 81: { + case 87: { lexer.NextToken(); #line 509 "VBNET.ATG" @@ -749,7 +749,7 @@ newType); delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location); List p = new List(); - if (la.kind == 168) { + if (la.kind == 183) { lexer.NextToken(); Identifier(); @@ -770,7 +770,7 @@ p); #line 518 "VBNET.ATG" delegateDeclr.Parameters = p; } - } else if (la.kind == 101) { + } else if (la.kind == 107) { lexer.NextToken(); Identifier(); @@ -803,7 +803,7 @@ out type); #line 523 "VBNET.ATG" delegateDeclr.ReturnType = type; } - } else SynErr(216); + } else SynErr(217); #line 525 "VBNET.ATG" delegateDeclr.EndLocation = t.EndLocation; @@ -814,7 +814,7 @@ out type); break; } - default: SynErr(217); break; + default: SynErr(218); break; } } @@ -829,7 +829,7 @@ List templates) { #line 357 "VBNET.ATG" la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { lexer.NextToken(); - Expect(202); + Expect(145); TypeParameter( #line 358 "VBNET.ATG" out template); @@ -871,7 +871,7 @@ template); lexer.NextToken(); break; } - case 170: { + case 185: { lexer.NextToken(); break; } @@ -883,7 +883,7 @@ template); lexer.NextToken(); break; } - case 206: { + case 82: { lexer.NextToken(); break; } @@ -899,27 +899,27 @@ template); lexer.NextToken(); break; } - case 145: { + case 158: { lexer.NextToken(); break; } - case 177: { + case 195: { lexer.NextToken(); break; } - case 178: { + case 196: { lexer.NextToken(); break; } - case 135: { + case 146: { lexer.NextToken(); break; } - case 96: { + case 102: { lexer.NextToken(); break; } - default: SynErr(218); break; + default: SynErr(219); break; } } @@ -956,7 +956,7 @@ out constraint); #line 394 "VBNET.ATG" if (constraint != null) { template.Bases.Add(constraint); } - } else SynErr(219); + } else SynErr(220); } void TypeParameterConstraint( @@ -970,12 +970,12 @@ out TypeReference constraint) { #line 400 "VBNET.ATG" constraint = TypeReference.ClassConstraint; - } else if (la.kind == 167) { + } else if (la.kind == 182) { lexer.NextToken(); #line 401 "VBNET.ATG" constraint = TypeReference.StructConstraint; - } else if (la.kind == 128) { + } else if (la.kind == 138) { lexer.NextToken(); #line 402 "VBNET.ATG" @@ -984,7 +984,7 @@ out TypeReference constraint) { TypeName( #line 403 "VBNET.ATG" out constraint); - } else SynErr(220); + } else SynErr(221); } void ClassBaseType( @@ -994,7 +994,7 @@ out TypeReference typeRef) { #line 751 "VBNET.ATG" typeRef = null; - Expect(111); + Expect(119); TypeName( #line 754 "VBNET.ATG" out typeRef); @@ -1009,7 +1009,7 @@ out List baseInterfaces) { baseInterfaces = new List(); TypeReference type = null; - Expect(108); + Expect(115); TypeName( #line 1554 "VBNET.ATG" out type); @@ -1035,7 +1035,7 @@ TypeDeclaration newType) { #line 543 "VBNET.ATG" AttributeSection section; - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(7)) { @@ -1060,7 +1060,7 @@ m); ClassMemberDecl( #line 551 "VBNET.ATG" m, attributes); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } @@ -1072,7 +1072,7 @@ TypeDeclaration newType) { #line 574 "VBNET.ATG" AttributeSection section; - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(7)) { @@ -1097,12 +1097,12 @@ m); ClassMemberDecl( #line 582 "VBNET.ATG" m, attributes); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - Expect(89); - Expect(122); + Expect(95); + Expect(131); #line 585 "VBNET.ATG" newType.EndLocation = t.EndLocation; @@ -1115,7 +1115,7 @@ TypeDeclaration newType) { #line 557 "VBNET.ATG" AttributeSection section; - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(7)) { @@ -1140,12 +1140,12 @@ m); StructureMemberDecl( #line 565 "VBNET.ATG" m, attributes); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - Expect(89); - Expect(167); + Expect(95); + Expect(182); #line 568 "VBNET.ATG" newType.EndLocation = t.EndLocation; @@ -1153,49 +1153,49 @@ m, attributes); } void NonArrayTypeName( -#line 2093 "VBNET.ATG" +#line 2077 "VBNET.ATG" out TypeReference typeref, bool canBeUnbound) { -#line 2095 "VBNET.ATG" +#line 2079 "VBNET.ATG" string name; typeref = null; bool isGlobal = false; if (StartOf(9)) { - if (la.kind == 200) { + if (la.kind == 110) { lexer.NextToken(); - Expect(10); + Expect(16); -#line 2100 "VBNET.ATG" +#line 2084 "VBNET.ATG" isGlobal = true; } QualIdentAndTypeArguments( -#line 2101 "VBNET.ATG" +#line 2085 "VBNET.ATG" out typeref, canBeUnbound); -#line 2102 "VBNET.ATG" +#line 2086 "VBNET.ATG" typeref.IsGlobal = isGlobal; - while (la.kind == 10) { + while (la.kind == 16) { lexer.NextToken(); -#line 2103 "VBNET.ATG" +#line 2087 "VBNET.ATG" TypeReference nestedTypeRef; QualIdentAndTypeArguments( -#line 2104 "VBNET.ATG" +#line 2088 "VBNET.ATG" out nestedTypeRef, canBeUnbound); -#line 2105 "VBNET.ATG" +#line 2089 "VBNET.ATG" typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes); } - } else if (la.kind == 134) { + } else if (la.kind == 144) { lexer.NextToken(); -#line 2108 "VBNET.ATG" +#line 2092 "VBNET.ATG" typeref = new TypeReference("System.Object"); if (la.kind == 21) { lexer.NextToken(); -#line 2112 "VBNET.ATG" +#line 2096 "VBNET.ATG" List typeArguments = new List(1); if (typeref != null) typeArguments.Add(typeref); typeref = new TypeReference("System.Nullable", typeArguments); @@ -1203,21 +1203,21 @@ out nestedTypeRef, canBeUnbound); } } else if (StartOf(10)) { PrimitiveTypeName( -#line 2118 "VBNET.ATG" +#line 2102 "VBNET.ATG" out name); -#line 2118 "VBNET.ATG" +#line 2102 "VBNET.ATG" typeref = new TypeReference(name); if (la.kind == 21) { lexer.NextToken(); -#line 2122 "VBNET.ATG" +#line 2106 "VBNET.ATG" List typeArguments = new List(1); if (typeref != null) typeArguments.Add(typeref); typeref = new TypeReference("System.Nullable", typeArguments); } - } else SynErr(221); + } else SynErr(222); } void EnumBody( @@ -1226,7 +1226,7 @@ TypeDeclaration newType) { #line 590 "VBNET.ATG" FieldDeclaration f; - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(11)) { @@ -1238,12 +1238,12 @@ out f); SetParent(f.Fields, f); compilationUnit.AddChild(f); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - Expect(89); - Expect(91); + Expect(95); + Expect(97); #line 600 "VBNET.ATG" newType.EndLocation = t.EndLocation; @@ -1258,7 +1258,7 @@ out List bases) { TypeReference type; bases = new List(); - Expect(111); + Expect(119); TypeName( #line 1540 "VBNET.ATG" out type); @@ -1280,17 +1280,17 @@ out type); void InterfaceBody( #line 604 "VBNET.ATG" TypeDeclaration newType) { - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } while (StartOf(12)) { InterfaceMemberDecl(); - while (la.kind == 1 || la.kind == 13) { + while (la.kind == 1 || la.kind == 11) { EndOfStmt(); } } - Expect(89); - Expect(113); + Expect(95); + Expect(121); #line 610 "VBNET.ATG" newType.EndLocation = t.EndLocation; @@ -1298,166 +1298,166 @@ TypeDeclaration newType) { } void FormalParameterList( -#line 2308 "VBNET.ATG" +#line 2292 "VBNET.ATG" List parameter) { -#line 2309 "VBNET.ATG" +#line 2293 "VBNET.ATG" ParameterDeclarationExpression p; FormalParameter( -#line 2311 "VBNET.ATG" +#line 2295 "VBNET.ATG" out p); -#line 2311 "VBNET.ATG" +#line 2295 "VBNET.ATG" if (p != null) parameter.Add(p); while (la.kind == 12) { lexer.NextToken(); FormalParameter( -#line 2313 "VBNET.ATG" +#line 2297 "VBNET.ATG" out p); -#line 2313 "VBNET.ATG" +#line 2297 "VBNET.ATG" if (p != null) parameter.Add(p); } } void MemberModifier( -#line 3039 "VBNET.ATG" +#line 3023 "VBNET.ATG" ModifierList m) { switch (la.kind) { - case 123: { + case 132: { lexer.NextToken(); -#line 3040 "VBNET.ATG" +#line 3024 "VBNET.ATG" m.Add(Modifiers.Abstract, t.Location); break; } - case 80: { + case 86: { lexer.NextToken(); -#line 3041 "VBNET.ATG" +#line 3025 "VBNET.ATG" m.Add(Modifiers.Default, t.Location); break; } - case 100: { + case 106: { lexer.NextToken(); -#line 3042 "VBNET.ATG" +#line 3026 "VBNET.ATG" m.Add(Modifiers.Internal, t.Location); break; } - case 158: { + case 173: { lexer.NextToken(); -#line 3043 "VBNET.ATG" +#line 3027 "VBNET.ATG" m.Add(Modifiers.New, t.Location); break; } - case 143: { + case 155: { lexer.NextToken(); -#line 3044 "VBNET.ATG" +#line 3028 "VBNET.ATG" m.Add(Modifiers.Override, t.Location); break; } - case 124: { + case 133: { lexer.NextToken(); -#line 3045 "VBNET.ATG" +#line 3029 "VBNET.ATG" m.Add(Modifiers.Abstract, t.Location); break; } - case 146: { + case 159: { lexer.NextToken(); -#line 3046 "VBNET.ATG" +#line 3030 "VBNET.ATG" m.Add(Modifiers.Private, t.Location); break; } - case 148: { + case 161: { lexer.NextToken(); -#line 3047 "VBNET.ATG" +#line 3031 "VBNET.ATG" m.Add(Modifiers.Protected, t.Location); break; } - case 149: { + case 162: { lexer.NextToken(); -#line 3048 "VBNET.ATG" +#line 3032 "VBNET.ATG" m.Add(Modifiers.Public, t.Location); break; } - case 132: { + case 142: { lexer.NextToken(); -#line 3049 "VBNET.ATG" +#line 3033 "VBNET.ATG" m.Add(Modifiers.Sealed, t.Location); break; } - case 133: { + case 143: { lexer.NextToken(); -#line 3050 "VBNET.ATG" +#line 3034 "VBNET.ATG" m.Add(Modifiers.Sealed, t.Location); break; } - case 159: { + case 174: { lexer.NextToken(); -#line 3051 "VBNET.ATG" +#line 3035 "VBNET.ATG" m.Add(Modifiers.Static, t.Location); break; } - case 142: { + case 154: { lexer.NextToken(); -#line 3052 "VBNET.ATG" +#line 3036 "VBNET.ATG" m.Add(Modifiers.Virtual, t.Location); break; } - case 141: { + case 153: { lexer.NextToken(); -#line 3053 "VBNET.ATG" +#line 3037 "VBNET.ATG" m.Add(Modifiers.Overloads, t.Location); break; } - case 151: { + case 164: { lexer.NextToken(); -#line 3054 "VBNET.ATG" +#line 3038 "VBNET.ATG" m.Add(Modifiers.ReadOnly, t.Location); break; } - case 185: { + case 206: { lexer.NextToken(); -#line 3055 "VBNET.ATG" +#line 3039 "VBNET.ATG" m.Add(Modifiers.WriteOnly, t.Location); break; } - case 184: { + case 205: { lexer.NextToken(); -#line 3056 "VBNET.ATG" +#line 3040 "VBNET.ATG" m.Add(Modifiers.WithEvents, t.Location); break; } - case 82: { + case 88: { lexer.NextToken(); -#line 3057 "VBNET.ATG" +#line 3041 "VBNET.ATG" m.Add(Modifiers.Dim, t.Location); break; } - case 205: { + case 157: { lexer.NextToken(); -#line 3058 "VBNET.ATG" +#line 3042 "VBNET.ATG" m.Add(Modifiers.Partial, t.Location); break; } - default: SynErr(222); break; + default: SynErr(223); break; } } @@ -1481,13 +1481,13 @@ ModifierList m, List attributes) { List templates = new List(); switch (la.kind) { - case 68: case 81: case 91: case 113: case 122: case 167: { + case 68: case 87: case 97: case 121: case 131: case 182: { NonModuleDeclaration( #line 768 "VBNET.ATG" m, attributes); break; } - case 168: { + case 183: { lexer.NextToken(); #line 772 "VBNET.ATG" @@ -1518,8 +1518,8 @@ p); } Expect(26); } - if (la.kind == 106 || la.kind == 108) { - if (la.kind == 108) { + if (la.kind == 113 || la.kind == 115) { + if (la.kind == 115) { ImplementsClause( #line 789 "VBNET.ATG" out implementsClause); @@ -1568,8 +1568,8 @@ IsMustOverride(m)) { Block( #line 825 "VBNET.ATG" out stmt); - Expect(89); - Expect(168); + Expect(95); + Expect(183); #line 827 "VBNET.ATG" } else { @@ -1584,8 +1584,8 @@ out stmt); #line 834 "VBNET.ATG" methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); - } else SynErr(223); - } else if (la.kind == 128) { + } else SynErr(224); + } else if (la.kind == 138) { lexer.NextToken(); if (la.kind == 25) { lexer.NextToken(); @@ -1609,8 +1609,8 @@ p); Block( #line 844 "VBNET.ATG" out stmt); - Expect(89); - Expect(168); + Expect(95); + Expect(183); #line 846 "VBNET.ATG" } else { @@ -1631,10 +1631,10 @@ out stmt); cd.Body.EndLocation = endLocation; compilationUnit.AddChild(cd); - } else SynErr(224); + } else SynErr(225); break; } - case 101: { + case 107: { lexer.NextToken(); #line 867 "VBNET.ATG" @@ -1678,8 +1678,8 @@ out type); type = new TypeReference("System.Object"); } - if (la.kind == 106 || la.kind == 108) { - if (la.kind == 108) { + if (la.kind == 113 || la.kind == 115) { + if (la.kind == 115) { ImplementsClause( #line 885 "VBNET.ATG" out implementsClause); @@ -1734,8 +1734,8 @@ IsMustOverride(m)) { Block( #line 930 "VBNET.ATG" out stmt); - Expect(89); - Expect(101); + Expect(95); + Expect(107); #line 932 "VBNET.ATG" } else { @@ -1747,10 +1747,10 @@ out stmt); methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); - } else SynErr(225); + } else SynErr(226); break; } - case 79: { + case 85: { lexer.NextToken(); #line 946 "VBNET.ATG" @@ -1766,13 +1766,13 @@ out stmt); #line 953 "VBNET.ATG" out charsetModifer); } - if (la.kind == 168) { + if (la.kind == 183) { lexer.NextToken(); Identifier(); #line 956 "VBNET.ATG" name = t.val; - Expect(116); + Expect(125); Expect(3); #line 957 "VBNET.ATG" @@ -1801,13 +1801,13 @@ p); declareDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(declareDeclaration); - } else if (la.kind == 101) { + } else if (la.kind == 107) { lexer.NextToken(); Identifier(); #line 969 "VBNET.ATG" name = t.val; - Expect(116); + Expect(125); Expect(3); #line 970 "VBNET.ATG" @@ -1842,10 +1842,10 @@ out type); declareDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(declareDeclaration); - } else SynErr(226); + } else SynErr(227); break; } - case 94: { + case 100: { lexer.NextToken(); #line 986 "VBNET.ATG" @@ -1874,8 +1874,8 @@ p); } Expect(26); } - } else SynErr(227); - if (la.kind == 108) { + } else SynErr(228); + if (la.kind == 115) { ImplementsClause( #line 998 "VBNET.ATG" out implementsClause); @@ -1893,7 +1893,7 @@ out implementsClause); EndOfStmt(); break; } - case 2: case 48: case 50: case 51: case 52: case 71: case 96: case 135: case 145: case 170: case 177: case 178: { + case 2: case 48: case 50: case 51: case 52: case 71: case 102: case 146: case 158: case 185: case 195: case 196: { #line 1010 "VBNET.ATG" Location startPos = t.Location; @@ -1962,7 +1962,7 @@ constantDeclarators); break; } - case 147: { + case 160: { lexer.NextToken(); #line 1048 "VBNET.ATG" @@ -1995,7 +1995,7 @@ out type); type = new TypeReference("System.Object"); } - if (la.kind == 108) { + if (la.kind == 115) { ImplementsClause( #line 1060 "VBNET.ATG" out implementsClause); @@ -2030,8 +2030,8 @@ IsMustOverride(m)) { AccessorDecls( #line 1086 "VBNET.ATG" out getRegion, out setRegion); - Expect(89); - Expect(147); + Expect(95); + Expect(160); EndOfStmt(); #line 1090 "VBNET.ATG" @@ -2040,15 +2040,15 @@ out getRegion, out setRegion); pDecl.BodyEnd = t.EndLocation; compilationUnit.AddChild(pDecl); - } else SynErr(228); + } else SynErr(229); break; } - case 206: { + case 82: { lexer.NextToken(); #line 1097 "VBNET.ATG" Location startPos = t.Location; - Expect(94); + Expect(100); #line 1099 "VBNET.ATG" m.Check(Modifiers.VBCustomEvents); @@ -2066,7 +2066,7 @@ out getRegion, out setRegion); TypeName( #line 1107 "VBNET.ATG" out type); - if (la.kind == 108) { + if (la.kind == 115) { ImplementsClause( #line 1108 "VBNET.ATG" out implementsClause); @@ -2092,8 +2092,8 @@ out eventAccessorDeclaration); } } - Expect(89); - Expect(94); + Expect(95); + Expect(100); EndOfStmt(); #line 1129 "VBNET.ATG" @@ -2125,12 +2125,12 @@ out eventAccessorDeclaration); break; } - case 189: case 203: case 204: { + case 137: case 148: case 203: { #line 1155 "VBNET.ATG" ConversionType opConversionType = ConversionType.None; - if (la.kind == 203 || la.kind == 204) { - if (la.kind == 204) { + if (la.kind == 137 || la.kind == 203) { + if (la.kind == 203) { lexer.NextToken(); #line 1156 "VBNET.ATG" @@ -2142,7 +2142,7 @@ out eventAccessorDeclaration); opConversionType = ConversionType.Explicit; } } - Expect(189); + Expect(148); #line 1160 "VBNET.ATG" m.Check(Modifiers.VBOperators); @@ -2219,8 +2219,8 @@ out returnType); Block( #line 1185 "VBNET.ATG" out stmt); - Expect(89); - Expect(189); + Expect(95); + Expect(148); EndOfStmt(); #line 1187 "VBNET.ATG" @@ -2242,7 +2242,7 @@ out stmt); break; } - default: SynErr(229); break; + default: SynErr(230); break; } } @@ -2271,7 +2271,7 @@ out section); f.Fields.Add(varDecl); f.StartLocation = varDecl.StartLocation = t.Location; - if (la.kind == 11) { + if (la.kind == 10) { lexer.NextToken(); Expr( #line 741 "VBNET.ATG" @@ -2308,7 +2308,7 @@ out section); #line 629 "VBNET.ATG" mod); } - if (la.kind == 94) { + if (la.kind == 100) { lexer.NextToken(); #line 633 "VBNET.ATG" @@ -2344,7 +2344,7 @@ out type); }; compilationUnit.AddChild(ed); - } else if (la.kind == 168) { + } else if (la.kind == 183) { lexer.NextToken(); #line 651 "VBNET.ATG" @@ -2382,7 +2382,7 @@ p); }; compilationUnit.AddChild(md); - } else if (la.kind == 101) { + } else if (la.kind == 107) { lexer.NextToken(); #line 674 "VBNET.ATG" @@ -2435,7 +2435,7 @@ out type); compilationUnit.AddChild(md); EndOfStmt(); - } else if (la.kind == 147) { + } else if (la.kind == 160) { lexer.NextToken(); #line 702 "VBNET.ATG" @@ -2476,12 +2476,12 @@ out type); pd.StartLocation = startLocation; compilationUnit.AddChild(pd); - } else SynErr(230); + } else SynErr(231); } else if (StartOf(19)) { NonModuleDeclaration( #line 723 "VBNET.ATG" mod, attributes); - } else SynErr(231); + } else SynErr(232); } void Expr( @@ -2501,7 +2501,7 @@ out List baseInterfaces) { TypeReference type = null; string memberName = null; - Expect(108); + Expect(115); NonArrayTypeName( #line 1573 "VBNET.ATG" out type, false); @@ -2533,7 +2533,7 @@ out List handlesClause) { handlesClause = new List(); string name; - Expect(106); + Expect(113); EventMemberSpecifier( #line 1529 "VBNET.ATG" out name); @@ -2552,25 +2552,25 @@ out name); } void Block( -#line 2355 "VBNET.ATG" +#line 2339 "VBNET.ATG" out Statement stmt) { -#line 2358 "VBNET.ATG" +#line 2342 "VBNET.ATG" BlockStatement blockStmt = new BlockStatement(); /* in snippet parsing mode, t might be null */ if (t != null) blockStmt.StartLocation = t.Location; compilationUnit.BlockStart(blockStmt); while (StartOf(20) || -#line 2364 "VBNET.ATG" +#line 2348 "VBNET.ATG" IsEndStmtAhead()) { if ( -#line 2364 "VBNET.ATG" +#line 2348 "VBNET.ATG" IsEndStmtAhead()) { - Expect(89); + Expect(95); EndOfStmt(); -#line 2364 "VBNET.ATG" +#line 2348 "VBNET.ATG" compilationUnit.AddChild(new EndStatement()); } else { Statement(); @@ -2578,7 +2578,7 @@ IsEndStmtAhead()) { } } -#line 2369 "VBNET.ATG" +#line 2353 "VBNET.ATG" stmt = blockStmt; if (t != null) blockStmt.EndLocation = t.EndLocation; compilationUnit.BlockEnd(); @@ -2591,7 +2591,7 @@ out CharsetModifier charsetModifier) { #line 1517 "VBNET.ATG" charsetModifier = CharsetModifier.None; - if (la.kind == 101 || la.kind == 168) { + if (la.kind == 107 || la.kind == 183) { } else if (la.kind == 48) { lexer.NextToken(); @@ -2602,12 +2602,12 @@ out CharsetModifier charsetModifier) { #line 1519 "VBNET.ATG" charsetModifier = CharsetModifier.Auto; - } else if (la.kind == 177) { + } else if (la.kind == 195) { lexer.NextToken(); #line 1520 "VBNET.ATG" charsetModifier = CharsetModifier.Unicode; - } else SynErr(232); + } else SynErr(233); } void IdentifierForFieldDeclaration() { @@ -2616,7 +2616,7 @@ out CharsetModifier charsetModifier) { lexer.NextToken(); break; } - case 170: { + case 185: { lexer.NextToken(); break; } @@ -2640,27 +2640,27 @@ out CharsetModifier charsetModifier) { lexer.NextToken(); break; } - case 145: { + case 158: { lexer.NextToken(); break; } - case 177: { + case 195: { lexer.NextToken(); break; } - case 178: { + case 196: { lexer.NextToken(); break; } - case 135: { + case 146: { lexer.NextToken(); break; } - case 96: { + case 102: { lexer.NextToken(); break; } - default: SynErr(233); break; + default: SynErr(234); break; } } @@ -2749,13 +2749,13 @@ out type); } } - if (la.kind == 11) { + if (la.kind == 10) { lexer.NextToken(); VariableInitializer( #line 1449 "VBNET.ATG" out expr); } - } else SynErr(234); + } else SynErr(235); #line 1452 "VBNET.ATG" VariableDeclaration varDecl = new VariableDeclaration(name, expr, type); @@ -2797,7 +2797,7 @@ List constantDeclaration) { #line 1374 "VBNET.ATG" out type); } - Expect(11); + Expect(10); Expr( #line 1375 "VBNET.ATG" out expr); @@ -2868,7 +2868,7 @@ out section); #line 1320 "VBNET.ATG" out getBlock, attributes); } - } else SynErr(235); + } else SynErr(236); } void EventAccessorDeclaration( @@ -2905,7 +2905,7 @@ p); Block( #line 1274 "VBNET.ATG" out stmt); - Expect(89); + Expect(95); Expect(43); EndOfStmt(); @@ -2914,7 +2914,7 @@ out stmt); eventAccessorDeclaration.Block = (BlockStatement)stmt; eventAccessorDeclaration.Parameters = p; - } else if (la.kind == 153) { + } else if (la.kind == 167) { lexer.NextToken(); if (la.kind == 25) { lexer.NextToken(); @@ -2929,8 +2929,8 @@ p); Block( #line 1282 "VBNET.ATG" out stmt); - Expect(89); - Expect(153); + Expect(95); + Expect(167); EndOfStmt(); #line 1284 "VBNET.ATG" @@ -2938,7 +2938,7 @@ out stmt); eventAccessorDeclaration.Block = (BlockStatement)stmt; eventAccessorDeclaration.Parameters = p; - } else if (la.kind == 150) { + } else if (la.kind == 163) { lexer.NextToken(); if (la.kind == 25) { lexer.NextToken(); @@ -2953,8 +2953,8 @@ p); Block( #line 1290 "VBNET.ATG" out stmt); - Expect(89); - Expect(150); + Expect(95); + Expect(163); EndOfStmt(); #line 1292 "VBNET.ATG" @@ -2962,7 +2962,7 @@ out stmt); eventAccessorDeclaration.Block = (BlockStatement)stmt; eventAccessorDeclaration.Parameters = p; - } else SynErr(236); + } else SynErr(237); } void OverloadableOperator( @@ -2972,56 +2972,56 @@ out OverloadableOperatorType operatorType) { #line 1206 "VBNET.ATG" operatorType = OverloadableOperatorType.None; switch (la.kind) { - case 14: { + case 19: { lexer.NextToken(); #line 1208 "VBNET.ATG" operatorType = OverloadableOperatorType.Add; break; } - case 15: { + case 18: { lexer.NextToken(); #line 1210 "VBNET.ATG" operatorType = OverloadableOperatorType.Subtract; break; } - case 16: { + case 22: { lexer.NextToken(); #line 1212 "VBNET.ATG" operatorType = OverloadableOperatorType.Multiply; break; } - case 17: { + case 14: { lexer.NextToken(); #line 1214 "VBNET.ATG" operatorType = OverloadableOperatorType.Divide; break; } - case 18: { + case 15: { lexer.NextToken(); #line 1216 "VBNET.ATG" operatorType = OverloadableOperatorType.DivideInteger; break; } - case 19: { + case 13: { lexer.NextToken(); #line 1218 "VBNET.ATG" operatorType = OverloadableOperatorType.Concat; break; } - case 117: { + case 126: { lexer.NextToken(); #line 1220 "VBNET.ATG" operatorType = OverloadableOperatorType.Like; break; } - case 121: { + case 130: { lexer.NextToken(); #line 1222 "VBNET.ATG" @@ -3035,14 +3035,14 @@ out OverloadableOperatorType operatorType) { operatorType = OverloadableOperatorType.BitwiseAnd; break; } - case 139: { + case 151: { lexer.NextToken(); #line 1226 "VBNET.ATG" operatorType = OverloadableOperatorType.BitwiseOr; break; } - case 186: { + case 207: { lexer.NextToken(); #line 1228 "VBNET.ATG" @@ -3070,7 +3070,7 @@ out OverloadableOperatorType operatorType) { operatorType = OverloadableOperatorType.ShiftRight; break; } - case 11: { + case 10: { lexer.NextToken(); #line 1236 "VBNET.ATG" @@ -3112,14 +3112,14 @@ out OverloadableOperatorType operatorType) { operatorType = OverloadableOperatorType.GreaterThanOrEqual; break; } - case 76: { + case 78: { lexer.NextToken(); #line 1248 "VBNET.ATG" operatorType = OverloadableOperatorType.CType; break; } - case 2: case 48: case 50: case 51: case 52: case 71: case 96: case 135: case 145: case 170: case 177: case 178: case 206: { + case 2: case 48: case 50: case 51: case 52: case 71: case 82: case 102: case 146: case 158: case 185: case 195: case 196: { Identifier(); #line 1252 "VBNET.ATG" @@ -3134,7 +3134,7 @@ out OverloadableOperatorType operatorType) { break; } - default: SynErr(237); break; + default: SynErr(238); break; } } @@ -3147,7 +3147,7 @@ out PropertyGetRegion getBlock, List attributes) { PropertyAccessorAccessModifier( #line 1329 "VBNET.ATG" out m); - Expect(102); + Expect(108); #line 1331 "VBNET.ATG" Location startLocation = t.Location; @@ -3158,8 +3158,8 @@ out stmt); #line 1334 "VBNET.ATG" getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); - Expect(89); - Expect(102); + Expect(95); + Expect(108); #line 1336 "VBNET.ATG" getBlock.Modifier = m; @@ -3181,7 +3181,7 @@ out PropertySetRegion setBlock, List attributes) { PropertyAccessorAccessModifier( #line 1349 "VBNET.ATG" out m); - Expect(157); + Expect(172); #line 1351 "VBNET.ATG" Location startLocation = t.Location; @@ -3204,8 +3204,8 @@ out stmt); setBlock.Modifier = m; setBlock.Parameters = p; - Expect(89); - Expect(157); + Expect(95); + Expect(172); #line 1361 "VBNET.ATG" setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; @@ -3213,31 +3213,31 @@ out stmt); } void PropertyAccessorAccessModifier( -#line 3061 "VBNET.ATG" +#line 3045 "VBNET.ATG" out Modifiers m) { -#line 3062 "VBNET.ATG" +#line 3046 "VBNET.ATG" m = Modifiers.None; while (StartOf(26)) { - if (la.kind == 149) { + if (la.kind == 162) { lexer.NextToken(); -#line 3064 "VBNET.ATG" +#line 3048 "VBNET.ATG" m |= Modifiers.Public; - } else if (la.kind == 148) { + } else if (la.kind == 161) { lexer.NextToken(); -#line 3065 "VBNET.ATG" +#line 3049 "VBNET.ATG" m |= Modifiers.Protected; - } else if (la.kind == 100) { + } else if (la.kind == 106) { lexer.NextToken(); -#line 3066 "VBNET.ATG" +#line 3050 "VBNET.ATG" m |= Modifiers.Internal; } else { lexer.NextToken(); -#line 3067 "VBNET.ATG" +#line 3051 "VBNET.ATG" m |= Modifiers.Private; } } @@ -3258,22 +3258,22 @@ out arrayModifiers); } void ArrayNameModifier( -#line 2146 "VBNET.ATG" +#line 2130 "VBNET.ATG" out ArrayList arrayModifiers) { -#line 2148 "VBNET.ATG" +#line 2132 "VBNET.ATG" arrayModifiers = null; ArrayTypeModifiers( -#line 2150 "VBNET.ATG" +#line 2134 "VBNET.ATG" out arrayModifiers); } void ObjectCreateExpression( -#line 1935 "VBNET.ATG" +#line 1919 "VBNET.ATG" out Expression oce) { -#line 1937 "VBNET.ATG" +#line 1921 "VBNET.ATG" TypeReference type = null; Expression initializer = null; List arguments = null; @@ -3281,42 +3281,42 @@ out Expression oce) { oce = null; bool canBeNormal; bool canBeReDim; - Expect(128); + Expect(138); if (StartOf(6)) { NonArrayTypeName( -#line 1945 "VBNET.ATG" +#line 1929 "VBNET.ATG" out type, false); if (la.kind == 25) { lexer.NextToken(); NormalOrReDimArgumentList( -#line 1946 "VBNET.ATG" +#line 1930 "VBNET.ATG" out arguments, out canBeNormal, out canBeReDim); Expect(26); if (la.kind == 23 || -#line 1947 "VBNET.ATG" +#line 1931 "VBNET.ATG" la.kind == Tokens.OpenParenthesis) { if ( -#line 1947 "VBNET.ATG" +#line 1931 "VBNET.ATG" la.kind == Tokens.OpenParenthesis) { ArrayTypeModifiers( -#line 1948 "VBNET.ATG" +#line 1932 "VBNET.ATG" out dimensions); CollectionInitializer( -#line 1949 "VBNET.ATG" +#line 1933 "VBNET.ATG" out initializer); } else { CollectionInitializer( -#line 1950 "VBNET.ATG" +#line 1934 "VBNET.ATG" out initializer); } } -#line 1952 "VBNET.ATG" +#line 1936 "VBNET.ATG" if (canBeReDim && !canBeNormal && initializer == null) initializer = new CollectionInitializerExpression(); } } -#line 1956 "VBNET.ATG" +#line 1940 "VBNET.ATG" if (initializer == null) { oce = new ObjectCreateExpression(type, arguments); SetParent(arguments, oce); @@ -3330,36 +3330,36 @@ out initializer); oce = ace; } - if (la.kind == 183) { + if (la.kind == 204) { -#line 1972 "VBNET.ATG" +#line 1956 "VBNET.ATG" NamedArgumentExpression memberInitializer = null; lexer.NextToken(); -#line 1976 "VBNET.ATG" +#line 1960 "VBNET.ATG" CollectionInitializerExpression memberInitializers = new CollectionInitializerExpression(); memberInitializers.StartLocation = la.Location; Expect(23); MemberInitializer( -#line 1980 "VBNET.ATG" +#line 1964 "VBNET.ATG" out memberInitializer); -#line 1981 "VBNET.ATG" +#line 1965 "VBNET.ATG" memberInitializers.CreateExpressions.Add(memberInitializer); while (la.kind == 12) { lexer.NextToken(); MemberInitializer( -#line 1983 "VBNET.ATG" +#line 1967 "VBNET.ATG" out memberInitializer); -#line 1984 "VBNET.ATG" +#line 1968 "VBNET.ATG" memberInitializers.CreateExpressions.Add(memberInitializer); } Expect(24); -#line 1988 "VBNET.ATG" +#line 1972 "VBNET.ATG" memberInitializers.EndLocation = t.Location; if(oce is ObjectCreateExpression) { @@ -3384,7 +3384,7 @@ out initializerExpression); CollectionInitializer( #line 1493 "VBNET.ATG" out initializerExpression); - } else SynErr(238); + } else SynErr(239); } void InitializationRankList( @@ -3398,7 +3398,7 @@ out List rank) { Expr( #line 1473 "VBNET.ATG" out expr); - if (la.kind == 173) { + if (la.kind == 188) { lexer.NextToken(); #line 1474 "VBNET.ATG" @@ -3415,7 +3415,7 @@ out expr); Expr( #line 1479 "VBNET.ATG" out expr); - if (la.kind == 173) { + if (la.kind == 188) { lexer.NextToken(); #line 1480 "VBNET.ATG" @@ -3473,15 +3473,15 @@ out string name) { string eventName; if (StartOf(13)) { Identifier(); - } else if (la.kind == 125) { + } else if (la.kind == 134) { lexer.NextToken(); - } else if (la.kind == 120) { + } else if (la.kind == 129) { lexer.NextToken(); - } else SynErr(239); + } else SynErr(240); #line 1587 "VBNET.ATG" name = t.val; - Expect(10); + Expect(16); IdentifierOrKeyword( #line 1589 "VBNET.ATG" out eventName); @@ -3491,46 +3491,46 @@ out eventName); } void IdentifierOrKeyword( -#line 2994 "VBNET.ATG" +#line 2978 "VBNET.ATG" out string name) { -#line 2996 "VBNET.ATG" +#line 2980 "VBNET.ATG" lexer.NextToken(); name = t.val; } void DisjunctionExpr( -#line 1779 "VBNET.ATG" +#line 1763 "VBNET.ATG" out Expression outExpr) { -#line 1781 "VBNET.ATG" +#line 1765 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; ConjunctionExpr( -#line 1784 "VBNET.ATG" +#line 1768 "VBNET.ATG" out outExpr); - while (la.kind == 139 || la.kind == 140 || la.kind == 186) { - if (la.kind == 139) { + while (la.kind == 151 || la.kind == 152 || la.kind == 207) { + if (la.kind == 151) { lexer.NextToken(); -#line 1787 "VBNET.ATG" +#line 1771 "VBNET.ATG" op = BinaryOperatorType.BitwiseOr; - } else if (la.kind == 140) { + } else if (la.kind == 152) { lexer.NextToken(); -#line 1788 "VBNET.ATG" +#line 1772 "VBNET.ATG" op = BinaryOperatorType.LogicalOr; } else { lexer.NextToken(); -#line 1789 "VBNET.ATG" +#line 1773 "VBNET.ATG" op = BinaryOperatorType.ExclusiveOr; } ConjunctionExpr( -#line 1791 "VBNET.ATG" +#line 1775 "VBNET.ATG" out expr); -#line 1791 "VBNET.ATG" +#line 1775 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); } } @@ -3542,7 +3542,7 @@ out AssignmentOperatorType op) { #line 1599 "VBNET.ATG" op = AssignmentOperatorType.None; switch (la.kind) { - case 11: { + case 10: { lexer.NextToken(); #line 1600 "VBNET.ATG" @@ -3612,7 +3612,7 @@ out AssignmentOperatorType op) { op = AssignmentOperatorType.ShiftRight; break; } - default: SynErr(240); break; + default: SynErr(241); break; } } @@ -3625,619 +3625,588 @@ out Expression pexpr) { SimpleNonInvocationExpression( #line 1616 "VBNET.ATG" out pexpr); - while (la.kind == 10 || la.kind == 22 || la.kind == 25) { - if (la.kind == 10) { + while (la.kind == 16 || la.kind == 17 || la.kind == 25) { + if (la.kind == 16) { lexer.NextToken(); IdentifierOrKeyword( #line 1618 "VBNET.ATG" out name); -#line 1618 "VBNET.ATG" +#line 1619 "VBNET.ATG" pexpr = new MemberReferenceExpression(pexpr, name); - } else if (la.kind == 22) { + if ( +#line 1620 "VBNET.ATG" +la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { + lexer.NextToken(); + Expect(145); + TypeArgumentList( +#line 1621 "VBNET.ATG" +((MemberReferenceExpression)pexpr).TypeArguments); + Expect(26); + } + } else if (la.kind == 17) { lexer.NextToken(); IdentifierOrKeyword( -#line 1619 "VBNET.ATG" +#line 1623 "VBNET.ATG" out name); -#line 1619 "VBNET.ATG" +#line 1623 "VBNET.ATG" pexpr = new BinaryOperatorExpression(pexpr, BinaryOperatorType.DictionaryAccess, new PrimitiveExpression(name, name)); } else { InvocationExpression( -#line 1620 "VBNET.ATG" +#line 1624 "VBNET.ATG" ref pexpr); } } } void SimpleNonInvocationExpression( -#line 1624 "VBNET.ATG" +#line 1628 "VBNET.ATG" out Expression pexpr) { -#line 1626 "VBNET.ATG" +#line 1630 "VBNET.ATG" Expression expr; TypeReference type = null; string name = String.Empty; pexpr = null; if (StartOf(29) || -#line 1679 "VBNET.ATG" +#line 1684 "VBNET.ATG" la.kind == Tokens.If) { if (la.kind == 3) { lexer.NextToken(); -#line 1634 "VBNET.ATG" +#line 1638 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 4) { lexer.NextToken(); -#line 1635 "VBNET.ATG" +#line 1639 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 7) { lexer.NextToken(); -#line 1636 "VBNET.ATG" +#line 1640 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 6) { lexer.NextToken(); -#line 1637 "VBNET.ATG" +#line 1641 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 5) { lexer.NextToken(); -#line 1638 "VBNET.ATG" +#line 1642 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 9) { lexer.NextToken(); -#line 1639 "VBNET.ATG" +#line 1643 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; } else if (la.kind == 8) { lexer.NextToken(); -#line 1640 "VBNET.ATG" +#line 1644 "VBNET.ATG" pexpr = new PrimitiveExpression(t.literalValue, t.val) { LiteralFormat = t.literalFormat }; - } else if (la.kind == 174) { + } else if (la.kind == 189) { lexer.NextToken(); -#line 1642 "VBNET.ATG" +#line 1646 "VBNET.ATG" pexpr = new PrimitiveExpression(true, "true"); - } else if (la.kind == 97) { + } else if (la.kind == 103) { lexer.NextToken(); -#line 1643 "VBNET.ATG" +#line 1647 "VBNET.ATG" pexpr = new PrimitiveExpression(false, "false"); - } else if (la.kind == 131) { + } else if (la.kind == 141) { lexer.NextToken(); -#line 1644 "VBNET.ATG" +#line 1648 "VBNET.ATG" pexpr = new PrimitiveExpression(null, "null"); } else if (la.kind == 25) { lexer.NextToken(); Expr( -#line 1645 "VBNET.ATG" +#line 1649 "VBNET.ATG" out expr); Expect(26); -#line 1645 "VBNET.ATG" +#line 1649 "VBNET.ATG" pexpr = new ParenthesizedExpression(expr); } else if (StartOf(13)) { Identifier(); -#line 1647 "VBNET.ATG" - pexpr = new IdentifierExpression(t.val); - -#line 1648 "VBNET.ATG" - pexpr.StartLocation = t.Location; pexpr.EndLocation = t.EndLocation; +#line 1651 "VBNET.ATG" + pexpr = new IdentifierExpression(t.val); + pexpr.StartLocation = t.Location; pexpr.EndLocation = t.EndLocation; + if ( -#line 1649 "VBNET.ATG" +#line 1654 "VBNET.ATG" la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { lexer.NextToken(); - Expect(202); + Expect(145); TypeArgumentList( -#line 1650 "VBNET.ATG" +#line 1655 "VBNET.ATG" ((IdentifierExpression)pexpr).TypeArguments); Expect(26); } } else if (StartOf(30)) { -#line 1652 "VBNET.ATG" +#line 1657 "VBNET.ATG" string val = String.Empty; if (StartOf(10)) { PrimitiveTypeName( -#line 1653 "VBNET.ATG" +#line 1658 "VBNET.ATG" out val); - } else if (la.kind == 134) { + } else if (la.kind == 144) { lexer.NextToken(); -#line 1653 "VBNET.ATG" +#line 1658 "VBNET.ATG" val = "Object"; - } else SynErr(241); - Expect(10); + } else SynErr(242); + Expect(16); -#line 1654 "VBNET.ATG" +#line 1659 "VBNET.ATG" t.val = ""; Identifier(); -#line 1654 "VBNET.ATG" +#line 1659 "VBNET.ATG" pexpr = new MemberReferenceExpression(new TypeReferenceExpression(val), t.val); - } else if (la.kind == 120) { + } else if (la.kind == 129) { lexer.NextToken(); -#line 1655 "VBNET.ATG" +#line 1660 "VBNET.ATG" pexpr = new ThisReferenceExpression(); - } else if (la.kind == 125 || la.kind == 126) { + } else if (la.kind == 134 || la.kind == 135) { -#line 1656 "VBNET.ATG" +#line 1661 "VBNET.ATG" Expression retExpr = null; - if (la.kind == 125) { + if (la.kind == 134) { lexer.NextToken(); -#line 1657 "VBNET.ATG" +#line 1662 "VBNET.ATG" retExpr = new BaseReferenceExpression(); - } else if (la.kind == 126) { + } else if (la.kind == 135) { lexer.NextToken(); -#line 1658 "VBNET.ATG" +#line 1663 "VBNET.ATG" retExpr = new ClassReferenceExpression(); - } else SynErr(242); - Expect(10); + } else SynErr(243); + Expect(16); IdentifierOrKeyword( -#line 1660 "VBNET.ATG" +#line 1665 "VBNET.ATG" out name); -#line 1660 "VBNET.ATG" +#line 1665 "VBNET.ATG" pexpr = new MemberReferenceExpression(retExpr, name); - } else if (la.kind == 200) { + } else if (la.kind == 110) { lexer.NextToken(); - Expect(10); + Expect(16); Identifier(); -#line 1662 "VBNET.ATG" +#line 1667 "VBNET.ATG" type = new TypeReference(t.val ?? ""); -#line 1664 "VBNET.ATG" +#line 1669 "VBNET.ATG" type.IsGlobal = true; -#line 1665 "VBNET.ATG" +#line 1670 "VBNET.ATG" pexpr = new TypeReferenceExpression(type); - } else if (la.kind == 128) { + } else if (la.kind == 138) { ObjectCreateExpression( -#line 1666 "VBNET.ATG" +#line 1671 "VBNET.ATG" out expr); -#line 1666 "VBNET.ATG" +#line 1671 "VBNET.ATG" pexpr = expr; - } else if (la.kind == 76 || la.kind == 83 || la.kind == 201) { + } else if (la.kind == 78 || la.kind == 89 || la.kind == 191) { -#line 1668 "VBNET.ATG" +#line 1673 "VBNET.ATG" CastType castType = CastType.Cast; - if (la.kind == 83) { + if (la.kind == 89) { lexer.NextToken(); - } else if (la.kind == 76) { + } else if (la.kind == 78) { lexer.NextToken(); -#line 1670 "VBNET.ATG" +#line 1675 "VBNET.ATG" castType = CastType.Conversion; - } else if (la.kind == 201) { + } else if (la.kind == 191) { lexer.NextToken(); -#line 1671 "VBNET.ATG" +#line 1676 "VBNET.ATG" castType = CastType.TryCast; - } else SynErr(243); + } else SynErr(244); Expect(25); Expr( -#line 1673 "VBNET.ATG" +#line 1678 "VBNET.ATG" out expr); Expect(12); TypeName( -#line 1673 "VBNET.ATG" +#line 1678 "VBNET.ATG" out type); Expect(26); -#line 1674 "VBNET.ATG" +#line 1679 "VBNET.ATG" pexpr = new CastExpression(type, expr, castType); } else if (StartOf(31)) { CastTarget( -#line 1675 "VBNET.ATG" +#line 1680 "VBNET.ATG" out type); Expect(25); Expr( -#line 1675 "VBNET.ATG" +#line 1680 "VBNET.ATG" out expr); Expect(26); -#line 1675 "VBNET.ATG" +#line 1680 "VBNET.ATG" pexpr = new CastExpression(type, expr, CastType.PrimitiveConversion); } else if (la.kind == 44) { lexer.NextToken(); Expr( -#line 1676 "VBNET.ATG" +#line 1681 "VBNET.ATG" out expr); -#line 1676 "VBNET.ATG" +#line 1681 "VBNET.ATG" pexpr = new AddressOfExpression(expr); - } else if (la.kind == 103) { + } else if (la.kind == 109) { lexer.NextToken(); Expect(25); GetTypeTypeName( -#line 1677 "VBNET.ATG" +#line 1682 "VBNET.ATG" out type); Expect(26); -#line 1677 "VBNET.ATG" +#line 1682 "VBNET.ATG" pexpr = new TypeOfExpression(type); - } else if (la.kind == 176) { + } else if (la.kind == 192) { lexer.NextToken(); SimpleExpr( -#line 1678 "VBNET.ATG" +#line 1683 "VBNET.ATG" out expr); - Expect(114); + Expect(122); TypeName( -#line 1678 "VBNET.ATG" +#line 1683 "VBNET.ATG" out type); -#line 1678 "VBNET.ATG" +#line 1683 "VBNET.ATG" pexpr = new TypeOfIsExpression(expr, type); } else { ConditionalExpression( -#line 1679 "VBNET.ATG" +#line 1684 "VBNET.ATG" out pexpr); } - } else if (la.kind == 10) { + } else if (la.kind == 16) { lexer.NextToken(); IdentifierOrKeyword( -#line 1683 "VBNET.ATG" +#line 1688 "VBNET.ATG" out name); -#line 1683 "VBNET.ATG" +#line 1688 "VBNET.ATG" pexpr = new MemberReferenceExpression(null, name); - } else SynErr(244); - } - - void InvocationExpression( -#line 1721 "VBNET.ATG" -ref Expression pexpr) { - -#line 1722 "VBNET.ATG" - List typeParameters = new List(); - List parameters = null; - TypeReference type; - Expect(25); - -#line 1726 "VBNET.ATG" - Location start = t.Location; - if (la.kind == 202) { - lexer.NextToken(); - TypeName( -#line 1728 "VBNET.ATG" -out type); - -#line 1728 "VBNET.ATG" - if (type != null) typeParameters.Add(type); - while (la.kind == 12) { - lexer.NextToken(); - TypeName( -#line 1731 "VBNET.ATG" -out type); - -#line 1731 "VBNET.ATG" - if (type != null) typeParameters.Add(type); - } - Expect(26); - if (la.kind == 10) { - lexer.NextToken(); - Identifier(); - -#line 1736 "VBNET.ATG" - pexpr = new MemberReferenceExpression(GetTypeReferenceExpression(pexpr, typeParameters), t.val); - } else if (la.kind == 25) { - lexer.NextToken(); - ArgumentList( -#line 1738 "VBNET.ATG" -out parameters); - Expect(26); - -#line 1741 "VBNET.ATG" - pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); - SetParent(parameters, pexpr); - - } else SynErr(245); - } else if (StartOf(32)) { - ArgumentList( -#line 1745 "VBNET.ATG" -out parameters); - Expect(26); - -#line 1748 "VBNET.ATG" - pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); - SetParent(parameters, pexpr); - - } else SynErr(246); - -#line 1752 "VBNET.ATG" - pexpr.StartLocation = start; pexpr.EndLocation = t.Location; + } else SynErr(245); } void TypeArgumentList( -#line 2182 "VBNET.ATG" +#line 2166 "VBNET.ATG" List typeArguments) { -#line 2184 "VBNET.ATG" +#line 2168 "VBNET.ATG" TypeReference typeref; TypeName( -#line 2186 "VBNET.ATG" +#line 2170 "VBNET.ATG" out typeref); -#line 2186 "VBNET.ATG" +#line 2170 "VBNET.ATG" if (typeref != null) typeArguments.Add(typeref); while (la.kind == 12) { lexer.NextToken(); TypeName( -#line 2189 "VBNET.ATG" +#line 2173 "VBNET.ATG" out typeref); -#line 2189 "VBNET.ATG" +#line 2173 "VBNET.ATG" if (typeref != null) typeArguments.Add(typeref); } } + void InvocationExpression( +#line 1726 "VBNET.ATG" +ref Expression pexpr) { + +#line 1727 "VBNET.ATG" + List parameters = null; + Expect(25); + +#line 1729 "VBNET.ATG" + Location start = t.Location; + ArgumentList( +#line 1730 "VBNET.ATG" +out parameters); + Expect(26); + +#line 1733 "VBNET.ATG" + pexpr = new InvocationExpression(pexpr, parameters); + SetParent(parameters, pexpr); + + +#line 1736 "VBNET.ATG" + pexpr.StartLocation = start; pexpr.EndLocation = t.Location; + } + void PrimitiveTypeName( -#line 3001 "VBNET.ATG" +#line 2985 "VBNET.ATG" out string type) { -#line 3002 "VBNET.ATG" +#line 2986 "VBNET.ATG" type = String.Empty; switch (la.kind) { case 53: { lexer.NextToken(); -#line 3003 "VBNET.ATG" +#line 2987 "VBNET.ATG" type = "Boolean"; break; } - case 77: { + case 83: { lexer.NextToken(); -#line 3004 "VBNET.ATG" +#line 2988 "VBNET.ATG" type = "Date"; break; } case 66: { lexer.NextToken(); -#line 3005 "VBNET.ATG" +#line 2989 "VBNET.ATG" type = "Char"; break; } - case 166: { + case 181: { lexer.NextToken(); -#line 3006 "VBNET.ATG" +#line 2990 "VBNET.ATG" type = "String"; break; } - case 78: { + case 84: { lexer.NextToken(); -#line 3007 "VBNET.ATG" +#line 2991 "VBNET.ATG" type = "Decimal"; break; } case 55: { lexer.NextToken(); -#line 3008 "VBNET.ATG" +#line 2992 "VBNET.ATG" type = "Byte"; break; } - case 160: { + case 175: { lexer.NextToken(); -#line 3009 "VBNET.ATG" +#line 2993 "VBNET.ATG" type = "Short"; break; } - case 112: { + case 120: { lexer.NextToken(); -#line 3010 "VBNET.ATG" +#line 2994 "VBNET.ATG" type = "Integer"; break; } - case 118: { + case 127: { lexer.NextToken(); -#line 3011 "VBNET.ATG" +#line 2995 "VBNET.ATG" type = "Long"; break; } - case 161: { + case 176: { lexer.NextToken(); -#line 3012 "VBNET.ATG" +#line 2996 "VBNET.ATG" type = "Single"; break; } - case 85: { + case 91: { lexer.NextToken(); -#line 3013 "VBNET.ATG" +#line 2997 "VBNET.ATG" type = "Double"; break; } case 193: { lexer.NextToken(); -#line 3014 "VBNET.ATG" +#line 2998 "VBNET.ATG" type = "UInteger"; break; } case 194: { lexer.NextToken(); -#line 3015 "VBNET.ATG" +#line 2999 "VBNET.ATG" type = "ULong"; break; } - case 195: { + case 197: { lexer.NextToken(); -#line 3016 "VBNET.ATG" +#line 3000 "VBNET.ATG" type = "UShort"; break; } - case 192: { + case 170: { lexer.NextToken(); -#line 3017 "VBNET.ATG" +#line 3001 "VBNET.ATG" type = "SByte"; break; } - default: SynErr(247); break; + default: SynErr(246); break; } } void CastTarget( -#line 1757 "VBNET.ATG" +#line 1741 "VBNET.ATG" out TypeReference type) { -#line 1759 "VBNET.ATG" +#line 1743 "VBNET.ATG" type = null; switch (la.kind) { case 60: { lexer.NextToken(); -#line 1761 "VBNET.ATG" +#line 1745 "VBNET.ATG" type = new TypeReference("System.Boolean"); break; } case 61: { lexer.NextToken(); -#line 1762 "VBNET.ATG" +#line 1746 "VBNET.ATG" type = new TypeReference("System.Byte"); break; } - case 196: { + case 74: { lexer.NextToken(); -#line 1763 "VBNET.ATG" +#line 1747 "VBNET.ATG" type = new TypeReference("System.SByte"); break; } case 62: { lexer.NextToken(); -#line 1764 "VBNET.ATG" +#line 1748 "VBNET.ATG" type = new TypeReference("System.Char"); break; } case 63: { lexer.NextToken(); -#line 1765 "VBNET.ATG" +#line 1749 "VBNET.ATG" type = new TypeReference("System.DateTime"); break; } case 65: { lexer.NextToken(); -#line 1766 "VBNET.ATG" +#line 1750 "VBNET.ATG" type = new TypeReference("System.Decimal"); break; } case 64: { lexer.NextToken(); -#line 1767 "VBNET.ATG" +#line 1751 "VBNET.ATG" type = new TypeReference("System.Double"); break; } - case 73: { + case 75: { lexer.NextToken(); -#line 1768 "VBNET.ATG" +#line 1752 "VBNET.ATG" type = new TypeReference("System.Int16"); break; } case 67: { lexer.NextToken(); -#line 1769 "VBNET.ATG" +#line 1753 "VBNET.ATG" type = new TypeReference("System.Int32"); break; } case 69: { lexer.NextToken(); -#line 1770 "VBNET.ATG" +#line 1754 "VBNET.ATG" type = new TypeReference("System.Int64"); break; } - case 197: { + case 81: { lexer.NextToken(); -#line 1771 "VBNET.ATG" +#line 1755 "VBNET.ATG" type = new TypeReference("System.UInt16"); break; } - case 198: { + case 79: { lexer.NextToken(); -#line 1772 "VBNET.ATG" +#line 1756 "VBNET.ATG" type = new TypeReference("System.UInt32"); break; } - case 199: { + case 80: { lexer.NextToken(); -#line 1773 "VBNET.ATG" +#line 1757 "VBNET.ATG" type = new TypeReference("System.UInt64"); break; } case 70: { lexer.NextToken(); -#line 1774 "VBNET.ATG" +#line 1758 "VBNET.ATG" type = new TypeReference("System.Object"); break; } - case 74: { + case 76: { lexer.NextToken(); -#line 1775 "VBNET.ATG" +#line 1759 "VBNET.ATG" type = new TypeReference("System.Single"); break; } - case 75: { + case 77: { lexer.NextToken(); -#line 1776 "VBNET.ATG" +#line 1760 "VBNET.ATG" type = new TypeReference("System.String"); break; } - default: SynErr(248); break; + default: SynErr(247); break; } } void GetTypeTypeName( -#line 2081 "VBNET.ATG" +#line 2065 "VBNET.ATG" out TypeReference typeref) { -#line 2082 "VBNET.ATG" +#line 2066 "VBNET.ATG" ArrayList rank = null; NonArrayTypeName( -#line 2084 "VBNET.ATG" +#line 2068 "VBNET.ATG" out typeref, true); ArrayTypeModifiers( -#line 2085 "VBNET.ATG" +#line 2069 "VBNET.ATG" out rank); -#line 2086 "VBNET.ATG" +#line 2070 "VBNET.ATG" if (rank != null && typeref != null) { typeref.RankSpecifier = (int[])rank.ToArray(typeof(int)); } @@ -4245,10 +4214,10 @@ out rank); } void ConditionalExpression( -#line 1687 "VBNET.ATG" +#line 1692 "VBNET.ATG" out Expression expr) { -#line 1689 "VBNET.ATG" +#line 1694 "VBNET.ATG" ConditionalExpression conditionalExpression = new ConditionalExpression(); BinaryOperatorExpression binaryOperatorExpression = new BinaryOperatorExpression(); conditionalExpression.StartLocation = binaryOperatorExpression.StartLocation = la.Location; @@ -4257,24 +4226,24 @@ out Expression expr) { Expression trueExpr = null; Expression falseExpr = null; - Expect(107); + Expect(114); Expect(25); Expr( -#line 1698 "VBNET.ATG" +#line 1703 "VBNET.ATG" out condition); Expect(12); Expr( -#line 1698 "VBNET.ATG" +#line 1703 "VBNET.ATG" out trueExpr); if (la.kind == 12) { lexer.NextToken(); Expr( -#line 1698 "VBNET.ATG" +#line 1703 "VBNET.ATG" out falseExpr); } Expect(26); -#line 1700 "VBNET.ATG" +#line 1705 "VBNET.ATG" if(falseExpr != null) { conditionalExpression.Condition = condition; @@ -4297,375 +4266,375 @@ out falseExpr); } void ArgumentList( -#line 2013 "VBNET.ATG" +#line 1997 "VBNET.ATG" out List arguments) { -#line 2015 "VBNET.ATG" +#line 1999 "VBNET.ATG" arguments = new List(); Expression expr = null; if (StartOf(27)) { Argument( -#line 2018 "VBNET.ATG" +#line 2002 "VBNET.ATG" out expr); } while (la.kind == 12) { lexer.NextToken(); -#line 2019 "VBNET.ATG" +#line 2003 "VBNET.ATG" arguments.Add(expr ?? Expression.Null); expr = null; if (StartOf(27)) { Argument( -#line 2020 "VBNET.ATG" +#line 2004 "VBNET.ATG" out expr); } -#line 2021 "VBNET.ATG" +#line 2005 "VBNET.ATG" if (expr == null) expr = Expression.Null; } -#line 2023 "VBNET.ATG" +#line 2007 "VBNET.ATG" if (expr != null) arguments.Add(expr); } void ConjunctionExpr( -#line 1795 "VBNET.ATG" +#line 1779 "VBNET.ATG" out Expression outExpr) { -#line 1797 "VBNET.ATG" +#line 1781 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; NotExpr( -#line 1800 "VBNET.ATG" +#line 1784 "VBNET.ATG" out outExpr); while (la.kind == 46 || la.kind == 47) { if (la.kind == 46) { lexer.NextToken(); -#line 1803 "VBNET.ATG" +#line 1787 "VBNET.ATG" op = BinaryOperatorType.BitwiseAnd; } else { lexer.NextToken(); -#line 1804 "VBNET.ATG" +#line 1788 "VBNET.ATG" op = BinaryOperatorType.LogicalAnd; } NotExpr( -#line 1806 "VBNET.ATG" +#line 1790 "VBNET.ATG" out expr); -#line 1806 "VBNET.ATG" +#line 1790 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); } } void NotExpr( -#line 1810 "VBNET.ATG" +#line 1794 "VBNET.ATG" out Expression outExpr) { -#line 1811 "VBNET.ATG" +#line 1795 "VBNET.ATG" UnaryOperatorType uop = UnaryOperatorType.None; - while (la.kind == 130) { + while (la.kind == 140) { lexer.NextToken(); -#line 1812 "VBNET.ATG" +#line 1796 "VBNET.ATG" uop = UnaryOperatorType.Not; } ComparisonExpr( -#line 1813 "VBNET.ATG" +#line 1797 "VBNET.ATG" out outExpr); -#line 1814 "VBNET.ATG" +#line 1798 "VBNET.ATG" if (uop != UnaryOperatorType.None) outExpr = new UnaryOperatorExpression(outExpr, uop); } void ComparisonExpr( -#line 1819 "VBNET.ATG" +#line 1803 "VBNET.ATG" out Expression outExpr) { -#line 1821 "VBNET.ATG" +#line 1805 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; ShiftExpr( -#line 1824 "VBNET.ATG" +#line 1808 "VBNET.ATG" out outExpr); - while (StartOf(33)) { + while (StartOf(32)) { switch (la.kind) { case 28: { lexer.NextToken(); -#line 1827 "VBNET.ATG" +#line 1811 "VBNET.ATG" op = BinaryOperatorType.LessThan; break; } case 27: { lexer.NextToken(); -#line 1828 "VBNET.ATG" +#line 1812 "VBNET.ATG" op = BinaryOperatorType.GreaterThan; break; } case 31: { lexer.NextToken(); -#line 1829 "VBNET.ATG" +#line 1813 "VBNET.ATG" op = BinaryOperatorType.LessThanOrEqual; break; } case 30: { lexer.NextToken(); -#line 1830 "VBNET.ATG" +#line 1814 "VBNET.ATG" op = BinaryOperatorType.GreaterThanOrEqual; break; } case 29: { lexer.NextToken(); -#line 1831 "VBNET.ATG" +#line 1815 "VBNET.ATG" op = BinaryOperatorType.InEquality; break; } - case 11: { + case 10: { lexer.NextToken(); -#line 1832 "VBNET.ATG" +#line 1816 "VBNET.ATG" op = BinaryOperatorType.Equality; break; } - case 117: { + case 126: { lexer.NextToken(); -#line 1833 "VBNET.ATG" +#line 1817 "VBNET.ATG" op = BinaryOperatorType.Like; break; } - case 114: { + case 122: { lexer.NextToken(); -#line 1834 "VBNET.ATG" +#line 1818 "VBNET.ATG" op = BinaryOperatorType.ReferenceEquality; break; } - case 191: { + case 123: { lexer.NextToken(); -#line 1835 "VBNET.ATG" +#line 1819 "VBNET.ATG" op = BinaryOperatorType.ReferenceInequality; break; } } - if (StartOf(34)) { + if (StartOf(33)) { ShiftExpr( -#line 1838 "VBNET.ATG" +#line 1822 "VBNET.ATG" out expr); -#line 1838 "VBNET.ATG" +#line 1822 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } else if (la.kind == 130) { + } else if (la.kind == 140) { lexer.NextToken(); ShiftExpr( -#line 1841 "VBNET.ATG" +#line 1825 "VBNET.ATG" out expr); -#line 1841 "VBNET.ATG" +#line 1825 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, new UnaryOperatorExpression(expr, UnaryOperatorType.Not)); - } else SynErr(249); + } else SynErr(248); } } void ShiftExpr( -#line 1846 "VBNET.ATG" +#line 1830 "VBNET.ATG" out Expression outExpr) { -#line 1848 "VBNET.ATG" +#line 1832 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; ConcatenationExpr( -#line 1851 "VBNET.ATG" +#line 1835 "VBNET.ATG" out outExpr); while (la.kind == 32 || la.kind == 33) { if (la.kind == 32) { lexer.NextToken(); -#line 1854 "VBNET.ATG" +#line 1838 "VBNET.ATG" op = BinaryOperatorType.ShiftLeft; } else { lexer.NextToken(); -#line 1855 "VBNET.ATG" +#line 1839 "VBNET.ATG" op = BinaryOperatorType.ShiftRight; } ConcatenationExpr( -#line 1857 "VBNET.ATG" +#line 1841 "VBNET.ATG" out expr); -#line 1857 "VBNET.ATG" +#line 1841 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); } } void ConcatenationExpr( -#line 1861 "VBNET.ATG" +#line 1845 "VBNET.ATG" out Expression outExpr) { -#line 1862 "VBNET.ATG" +#line 1846 "VBNET.ATG" Expression expr; AdditiveExpr( -#line 1864 "VBNET.ATG" +#line 1848 "VBNET.ATG" out outExpr); - while (la.kind == 19) { + while (la.kind == 13) { lexer.NextToken(); AdditiveExpr( -#line 1864 "VBNET.ATG" +#line 1848 "VBNET.ATG" out expr); -#line 1864 "VBNET.ATG" +#line 1848 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Concat, expr); } } void AdditiveExpr( -#line 1867 "VBNET.ATG" +#line 1851 "VBNET.ATG" out Expression outExpr) { -#line 1869 "VBNET.ATG" +#line 1853 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; ModuloExpr( -#line 1872 "VBNET.ATG" +#line 1856 "VBNET.ATG" out outExpr); - while (la.kind == 14 || la.kind == 15) { - if (la.kind == 14) { + while (la.kind == 18 || la.kind == 19) { + if (la.kind == 19) { lexer.NextToken(); -#line 1875 "VBNET.ATG" +#line 1859 "VBNET.ATG" op = BinaryOperatorType.Add; } else { lexer.NextToken(); -#line 1876 "VBNET.ATG" +#line 1860 "VBNET.ATG" op = BinaryOperatorType.Subtract; } ModuloExpr( -#line 1878 "VBNET.ATG" +#line 1862 "VBNET.ATG" out expr); -#line 1878 "VBNET.ATG" +#line 1862 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); } } void ModuloExpr( -#line 1882 "VBNET.ATG" +#line 1866 "VBNET.ATG" out Expression outExpr) { -#line 1883 "VBNET.ATG" +#line 1867 "VBNET.ATG" Expression expr; IntegerDivisionExpr( -#line 1885 "VBNET.ATG" +#line 1869 "VBNET.ATG" out outExpr); - while (la.kind == 121) { + while (la.kind == 130) { lexer.NextToken(); IntegerDivisionExpr( -#line 1885 "VBNET.ATG" +#line 1869 "VBNET.ATG" out expr); -#line 1885 "VBNET.ATG" +#line 1869 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Modulus, expr); } } void IntegerDivisionExpr( -#line 1888 "VBNET.ATG" +#line 1872 "VBNET.ATG" out Expression outExpr) { -#line 1889 "VBNET.ATG" +#line 1873 "VBNET.ATG" Expression expr; MultiplicativeExpr( -#line 1891 "VBNET.ATG" +#line 1875 "VBNET.ATG" out outExpr); - while (la.kind == 18) { + while (la.kind == 15) { lexer.NextToken(); MultiplicativeExpr( -#line 1891 "VBNET.ATG" +#line 1875 "VBNET.ATG" out expr); -#line 1891 "VBNET.ATG" +#line 1875 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.DivideInteger, expr); } } void MultiplicativeExpr( -#line 1894 "VBNET.ATG" +#line 1878 "VBNET.ATG" out Expression outExpr) { -#line 1896 "VBNET.ATG" +#line 1880 "VBNET.ATG" Expression expr; BinaryOperatorType op = BinaryOperatorType.None; UnaryExpr( -#line 1899 "VBNET.ATG" +#line 1883 "VBNET.ATG" out outExpr); - while (la.kind == 16 || la.kind == 17) { - if (la.kind == 16) { + while (la.kind == 14 || la.kind == 22) { + if (la.kind == 22) { lexer.NextToken(); -#line 1902 "VBNET.ATG" +#line 1886 "VBNET.ATG" op = BinaryOperatorType.Multiply; } else { lexer.NextToken(); -#line 1903 "VBNET.ATG" +#line 1887 "VBNET.ATG" op = BinaryOperatorType.Divide; } UnaryExpr( -#line 1905 "VBNET.ATG" +#line 1889 "VBNET.ATG" out expr); -#line 1905 "VBNET.ATG" +#line 1889 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, op, expr); } } void UnaryExpr( -#line 1909 "VBNET.ATG" +#line 1893 "VBNET.ATG" out Expression uExpr) { -#line 1911 "VBNET.ATG" +#line 1895 "VBNET.ATG" Expression expr; UnaryOperatorType uop = UnaryOperatorType.None; bool isUOp = false; - while (la.kind == 14 || la.kind == 15 || la.kind == 16) { - if (la.kind == 14) { + while (la.kind == 18 || la.kind == 19 || la.kind == 22) { + if (la.kind == 19) { lexer.NextToken(); -#line 1915 "VBNET.ATG" +#line 1899 "VBNET.ATG" uop = UnaryOperatorType.Plus; isUOp = true; - } else if (la.kind == 15) { + } else if (la.kind == 18) { lexer.NextToken(); -#line 1916 "VBNET.ATG" +#line 1900 "VBNET.ATG" uop = UnaryOperatorType.Minus; isUOp = true; } else { lexer.NextToken(); -#line 1917 "VBNET.ATG" +#line 1901 "VBNET.ATG" uop = UnaryOperatorType.Dereference; isUOp = true; } } ExponentiationExpr( -#line 1919 "VBNET.ATG" +#line 1903 "VBNET.ATG" out expr); -#line 1921 "VBNET.ATG" +#line 1905 "VBNET.ATG" if (isUOp) { uExpr = new UnaryOperatorExpression(expr, uop); } else { @@ -4675,107 +4644,107 @@ out expr); } void ExponentiationExpr( -#line 1929 "VBNET.ATG" +#line 1913 "VBNET.ATG" out Expression outExpr) { -#line 1930 "VBNET.ATG" +#line 1914 "VBNET.ATG" Expression expr; SimpleExpr( -#line 1932 "VBNET.ATG" +#line 1916 "VBNET.ATG" out outExpr); while (la.kind == 20) { lexer.NextToken(); SimpleExpr( -#line 1932 "VBNET.ATG" +#line 1916 "VBNET.ATG" out expr); -#line 1932 "VBNET.ATG" +#line 1916 "VBNET.ATG" outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Power, expr); } } void NormalOrReDimArgumentList( -#line 2027 "VBNET.ATG" +#line 2011 "VBNET.ATG" out List arguments, out bool canBeNormal, out bool canBeRedim) { -#line 2029 "VBNET.ATG" +#line 2013 "VBNET.ATG" arguments = new List(); canBeNormal = true; canBeRedim = !IsNamedAssign(); Expression expr = null; if (StartOf(27)) { Argument( -#line 2034 "VBNET.ATG" +#line 2018 "VBNET.ATG" out expr); - if (la.kind == 173) { + if (la.kind == 188) { lexer.NextToken(); -#line 2035 "VBNET.ATG" +#line 2019 "VBNET.ATG" EnsureIsZero(expr); canBeNormal = false; Expr( -#line 2036 "VBNET.ATG" +#line 2020 "VBNET.ATG" out expr); } } while (la.kind == 12) { lexer.NextToken(); -#line 2039 "VBNET.ATG" +#line 2023 "VBNET.ATG" if (expr == null) canBeRedim = false; -#line 2040 "VBNET.ATG" +#line 2024 "VBNET.ATG" arguments.Add(expr ?? Expression.Null); expr = null; -#line 2041 "VBNET.ATG" +#line 2025 "VBNET.ATG" canBeRedim &= !IsNamedAssign(); if (StartOf(27)) { Argument( -#line 2042 "VBNET.ATG" +#line 2026 "VBNET.ATG" out expr); - if (la.kind == 173) { + if (la.kind == 188) { lexer.NextToken(); -#line 2043 "VBNET.ATG" +#line 2027 "VBNET.ATG" EnsureIsZero(expr); canBeNormal = false; Expr( -#line 2044 "VBNET.ATG" +#line 2028 "VBNET.ATG" out expr); } } -#line 2046 "VBNET.ATG" +#line 2030 "VBNET.ATG" if (expr == null) { canBeRedim = false; expr = Expression.Null; } } -#line 2048 "VBNET.ATG" +#line 2032 "VBNET.ATG" if (expr != null) arguments.Add(expr); else canBeRedim = false; } void ArrayTypeModifiers( -#line 2155 "VBNET.ATG" +#line 2139 "VBNET.ATG" out ArrayList arrayModifiers) { -#line 2157 "VBNET.ATG" +#line 2141 "VBNET.ATG" arrayModifiers = new ArrayList(); int i = 0; while ( -#line 2160 "VBNET.ATG" +#line 2144 "VBNET.ATG" IsDims()) { Expect(25); if (la.kind == 12 || la.kind == 26) { RankList( -#line 2162 "VBNET.ATG" +#line 2146 "VBNET.ATG" out i); } -#line 2164 "VBNET.ATG" +#line 2148 "VBNET.ATG" arrayModifiers.Add(i); Expect(26); } -#line 2169 "VBNET.ATG" +#line 2153 "VBNET.ATG" if(arrayModifiers.Count == 0) { arrayModifiers = null; } @@ -4783,25 +4752,25 @@ out i); } void MemberInitializer( -#line 1997 "VBNET.ATG" +#line 1981 "VBNET.ATG" out NamedArgumentExpression memberInitializer) { -#line 1999 "VBNET.ATG" +#line 1983 "VBNET.ATG" memberInitializer = new NamedArgumentExpression(); memberInitializer.StartLocation = la.Location; Expression initExpr = null; string name = null; - Expect(10); + Expect(16); IdentifierOrKeyword( -#line 2004 "VBNET.ATG" +#line 1988 "VBNET.ATG" out name); - Expect(11); + Expect(10); Expr( -#line 2004 "VBNET.ATG" +#line 1988 "VBNET.ATG" out initExpr); -#line 2006 "VBNET.ATG" +#line 1990 "VBNET.ATG" memberInitializer.Name = name; memberInitializer.Expression = initExpr; memberInitializer.EndLocation = t.EndLocation; @@ -4809,112 +4778,112 @@ out initExpr); } void Argument( -#line 2052 "VBNET.ATG" +#line 2036 "VBNET.ATG" out Expression argumentexpr) { -#line 2054 "VBNET.ATG" +#line 2038 "VBNET.ATG" Expression expr; argumentexpr = null; string name; if ( -#line 2058 "VBNET.ATG" +#line 2042 "VBNET.ATG" IsNamedAssign()) { Identifier(); -#line 2058 "VBNET.ATG" +#line 2042 "VBNET.ATG" name = t.val; - Expect(13); Expect(11); + Expect(10); Expr( -#line 2058 "VBNET.ATG" +#line 2042 "VBNET.ATG" out expr); -#line 2060 "VBNET.ATG" +#line 2044 "VBNET.ATG" argumentexpr = new NamedArgumentExpression(name, expr); } else if (StartOf(27)) { Expr( -#line 2063 "VBNET.ATG" +#line 2047 "VBNET.ATG" out argumentexpr); - } else SynErr(250); + } else SynErr(249); } void QualIdentAndTypeArguments( -#line 2129 "VBNET.ATG" +#line 2113 "VBNET.ATG" out TypeReference typeref, bool canBeUnbound) { -#line 2130 "VBNET.ATG" +#line 2114 "VBNET.ATG" string name; typeref = null; Qualident( -#line 2132 "VBNET.ATG" +#line 2116 "VBNET.ATG" out name); -#line 2133 "VBNET.ATG" +#line 2117 "VBNET.ATG" typeref = new TypeReference(name); if ( -#line 2134 "VBNET.ATG" +#line 2118 "VBNET.ATG" la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { lexer.NextToken(); - Expect(202); + Expect(145); if ( -#line 2136 "VBNET.ATG" +#line 2120 "VBNET.ATG" canBeUnbound && (la.kind == Tokens.CloseParenthesis || la.kind == Tokens.Comma)) { -#line 2137 "VBNET.ATG" +#line 2121 "VBNET.ATG" typeref.GenericTypes.Add(NullTypeReference.Instance); while (la.kind == 12) { lexer.NextToken(); -#line 2138 "VBNET.ATG" +#line 2122 "VBNET.ATG" typeref.GenericTypes.Add(NullTypeReference.Instance); } } else if (StartOf(6)) { TypeArgumentList( -#line 2139 "VBNET.ATG" +#line 2123 "VBNET.ATG" typeref.GenericTypes); - } else SynErr(251); + } else SynErr(250); Expect(26); } } void RankList( -#line 2176 "VBNET.ATG" +#line 2160 "VBNET.ATG" out int i) { -#line 2177 "VBNET.ATG" +#line 2161 "VBNET.ATG" i = 0; while (la.kind == 12) { lexer.NextToken(); -#line 2178 "VBNET.ATG" +#line 2162 "VBNET.ATG" ++i; } } void Attribute( -#line 2217 "VBNET.ATG" +#line 2201 "VBNET.ATG" out ASTAttribute attribute) { -#line 2218 "VBNET.ATG" +#line 2202 "VBNET.ATG" string name; List positional = new List(); List named = new List(); - if (la.kind == 200) { + if (la.kind == 110) { lexer.NextToken(); - Expect(10); + Expect(16); } Qualident( -#line 2223 "VBNET.ATG" +#line 2207 "VBNET.ATG" out name); if (la.kind == 25) { AttributeArguments( -#line 2224 "VBNET.ATG" +#line 2208 "VBNET.ATG" positional, named); } -#line 2226 "VBNET.ATG" +#line 2210 "VBNET.ATG" attribute = new ASTAttribute(name, positional, named); SetParent(positional, attribute); SetParent(named, attribute); @@ -4922,37 +4891,37 @@ positional, named); } void AttributeArguments( -#line 2233 "VBNET.ATG" +#line 2217 "VBNET.ATG" List positional, List named) { -#line 2235 "VBNET.ATG" +#line 2219 "VBNET.ATG" bool nameFound = false; string name = ""; Expression expr; Expect(25); if ( -#line 2241 "VBNET.ATG" +#line 2225 "VBNET.ATG" IsNotClosingParenthesis()) { if ( -#line 2243 "VBNET.ATG" +#line 2227 "VBNET.ATG" IsNamedAssign()) { -#line 2243 "VBNET.ATG" +#line 2227 "VBNET.ATG" nameFound = true; IdentifierOrKeyword( -#line 2244 "VBNET.ATG" +#line 2228 "VBNET.ATG" out name); - if (la.kind == 13) { + if (la.kind == 11) { lexer.NextToken(); } - Expect(11); + Expect(10); } Expr( -#line 2246 "VBNET.ATG" +#line 2230 "VBNET.ATG" out expr); -#line 2248 "VBNET.ATG" +#line 2232 "VBNET.ATG" if (expr != null) { if (string.IsNullOrEmpty(name)) { positional.Add(expr); } else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; } @@ -4961,28 +4930,28 @@ out expr); while (la.kind == 12) { lexer.NextToken(); if ( -#line 2256 "VBNET.ATG" +#line 2240 "VBNET.ATG" IsNamedAssign()) { -#line 2256 "VBNET.ATG" +#line 2240 "VBNET.ATG" nameFound = true; IdentifierOrKeyword( -#line 2257 "VBNET.ATG" +#line 2241 "VBNET.ATG" out name); - if (la.kind == 13) { + if (la.kind == 11) { lexer.NextToken(); } - Expect(11); + Expect(10); } else if (StartOf(27)) { -#line 2259 "VBNET.ATG" +#line 2243 "VBNET.ATG" if (nameFound) Error("no positional argument after named argument"); - } else SynErr(252); + } else SynErr(251); Expr( -#line 2260 "VBNET.ATG" +#line 2244 "VBNET.ATG" out expr); -#line 2260 "VBNET.ATG" +#line 2244 "VBNET.ATG" if (expr != null) { if(name == "") positional.Add(expr); else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; } } @@ -4993,10 +4962,10 @@ out expr); } void FormalParameter( -#line 2317 "VBNET.ATG" +#line 2301 "VBNET.ATG" out ParameterDeclarationExpression p) { -#line 2319 "VBNET.ATG" +#line 2303 "VBNET.ATG" AttributeSection section; List attributes = new List(); TypeReference type = null; @@ -5007,36 +4976,36 @@ out ParameterDeclarationExpression p) { while (la.kind == 28) { AttributeSection( -#line 2328 "VBNET.ATG" +#line 2312 "VBNET.ATG" out section); -#line 2328 "VBNET.ATG" +#line 2312 "VBNET.ATG" attributes.Add(section); } - while (StartOf(35)) { + while (StartOf(34)) { ParameterModifier( -#line 2329 "VBNET.ATG" +#line 2313 "VBNET.ATG" mod); } Identifier(); -#line 2330 "VBNET.ATG" +#line 2314 "VBNET.ATG" string parameterName = t.val; if ( -#line 2331 "VBNET.ATG" +#line 2315 "VBNET.ATG" IsDims()) { ArrayTypeModifiers( -#line 2331 "VBNET.ATG" +#line 2315 "VBNET.ATG" out arrayModifiers); } if (la.kind == 49) { lexer.NextToken(); TypeName( -#line 2332 "VBNET.ATG" +#line 2316 "VBNET.ATG" out type); } -#line 2334 "VBNET.ATG" +#line 2318 "VBNET.ATG" if(type != null) { if (arrayModifiers != null) { if (type.RankSpecifier != null) { @@ -5049,14 +5018,14 @@ out type); type = new TypeReference("System.Object", arrayModifiers == null ? null : (int[])arrayModifiers.ToArray(typeof(int))); } - if (la.kind == 11) { + if (la.kind == 10) { lexer.NextToken(); Expr( -#line 2346 "VBNET.ATG" +#line 2330 "VBNET.ATG" out expr); } -#line 2348 "VBNET.ATG" +#line 2332 "VBNET.ATG" mod.Check(); p = new ParameterDeclarationExpression(type, parameterName, mod.Modifier, expr); p.Attributes = attributes; @@ -5064,69 +5033,69 @@ out expr); } void ParameterModifier( -#line 3020 "VBNET.ATG" +#line 3004 "VBNET.ATG" ParamModifierList m) { if (la.kind == 56) { lexer.NextToken(); -#line 3021 "VBNET.ATG" +#line 3005 "VBNET.ATG" m.Add(ParameterModifiers.In); } else if (la.kind == 54) { lexer.NextToken(); -#line 3022 "VBNET.ATG" +#line 3006 "VBNET.ATG" m.Add(ParameterModifiers.Ref); - } else if (la.kind == 138) { + } else if (la.kind == 150) { lexer.NextToken(); -#line 3023 "VBNET.ATG" +#line 3007 "VBNET.ATG" m.Add(ParameterModifiers.Optional); - } else if (la.kind == 144) { + } else if (la.kind == 156) { lexer.NextToken(); -#line 3024 "VBNET.ATG" +#line 3008 "VBNET.ATG" m.Add(ParameterModifiers.Params); - } else SynErr(253); + } else SynErr(252); } void Statement() { -#line 2377 "VBNET.ATG" +#line 2361 "VBNET.ATG" Statement stmt = null; Location startPos = la.Location; string label = String.Empty; - if (la.kind == 1 || la.kind == 13) { + if (la.kind == 1 || la.kind == 11) { } else if ( -#line 2383 "VBNET.ATG" +#line 2367 "VBNET.ATG" IsLabel()) { LabelName( -#line 2383 "VBNET.ATG" +#line 2367 "VBNET.ATG" out label); -#line 2385 "VBNET.ATG" +#line 2369 "VBNET.ATG" compilationUnit.AddChild(new LabelStatement(t.val)); - Expect(13); + Expect(11); Statement(); - } else if (StartOf(36)) { + } else if (StartOf(35)) { EmbeddedStatement( -#line 2388 "VBNET.ATG" +#line 2372 "VBNET.ATG" out stmt); -#line 2388 "VBNET.ATG" +#line 2372 "VBNET.ATG" compilationUnit.AddChild(stmt); - } else if (StartOf(37)) { + } else if (StartOf(36)) { LocalDeclarationStatement( -#line 2389 "VBNET.ATG" +#line 2373 "VBNET.ATG" out stmt); -#line 2389 "VBNET.ATG" +#line 2373 "VBNET.ATG" compilationUnit.AddChild(stmt); - } else SynErr(254); + } else SynErr(253); -#line 2392 "VBNET.ATG" +#line 2376 "VBNET.ATG" if (stmt != null) { stmt.StartLocation = startPos; stmt.EndLocation = t.Location; @@ -5135,30 +5104,30 @@ out stmt); } void LabelName( -#line 2798 "VBNET.ATG" +#line 2782 "VBNET.ATG" out string name) { -#line 2800 "VBNET.ATG" +#line 2784 "VBNET.ATG" name = String.Empty; if (StartOf(13)) { Identifier(); -#line 2802 "VBNET.ATG" +#line 2786 "VBNET.ATG" name = t.val; } else if (la.kind == 5) { lexer.NextToken(); -#line 2803 "VBNET.ATG" +#line 2787 "VBNET.ATG" name = t.val; - } else SynErr(255); + } else SynErr(254); } void EmbeddedStatement( -#line 2432 "VBNET.ATG" +#line 2416 "VBNET.ATG" out Statement statement) { -#line 2434 "VBNET.ATG" +#line 2418 "VBNET.ATG" Statement embeddedStatement = null; statement = null; Expression expr = null; @@ -5166,306 +5135,306 @@ out Statement statement) { List p = null; switch (la.kind) { - case 95: { + case 101: { lexer.NextToken(); -#line 2440 "VBNET.ATG" +#line 2424 "VBNET.ATG" ExitType exitType = ExitType.None; switch (la.kind) { - case 168: { + case 183: { lexer.NextToken(); -#line 2442 "VBNET.ATG" +#line 2426 "VBNET.ATG" exitType = ExitType.Sub; break; } - case 101: { + case 107: { lexer.NextToken(); -#line 2444 "VBNET.ATG" +#line 2428 "VBNET.ATG" exitType = ExitType.Function; break; } - case 147: { + case 160: { lexer.NextToken(); -#line 2446 "VBNET.ATG" +#line 2430 "VBNET.ATG" exitType = ExitType.Property; break; } - case 84: { + case 90: { lexer.NextToken(); -#line 2448 "VBNET.ATG" +#line 2432 "VBNET.ATG" exitType = ExitType.Do; break; } - case 99: { + case 105: { lexer.NextToken(); -#line 2450 "VBNET.ATG" +#line 2434 "VBNET.ATG" exitType = ExitType.For; break; } - case 175: { + case 190: { lexer.NextToken(); -#line 2452 "VBNET.ATG" +#line 2436 "VBNET.ATG" exitType = ExitType.Try; break; } - case 182: { + case 202: { lexer.NextToken(); -#line 2454 "VBNET.ATG" +#line 2438 "VBNET.ATG" exitType = ExitType.While; break; } - case 156: { + case 171: { lexer.NextToken(); -#line 2456 "VBNET.ATG" +#line 2440 "VBNET.ATG" exitType = ExitType.Select; break; } - default: SynErr(256); break; + default: SynErr(255); break; } -#line 2458 "VBNET.ATG" +#line 2442 "VBNET.ATG" statement = new ExitStatement(exitType); break; } - case 175: { + case 190: { TryStatement( -#line 2459 "VBNET.ATG" +#line 2443 "VBNET.ATG" out statement); break; } - case 188: { + case 73: { lexer.NextToken(); -#line 2460 "VBNET.ATG" +#line 2444 "VBNET.ATG" ContinueType continueType = ContinueType.None; - if (la.kind == 84 || la.kind == 99 || la.kind == 182) { - if (la.kind == 84) { + if (la.kind == 90 || la.kind == 105 || la.kind == 202) { + if (la.kind == 90) { lexer.NextToken(); -#line 2460 "VBNET.ATG" +#line 2444 "VBNET.ATG" continueType = ContinueType.Do; - } else if (la.kind == 99) { + } else if (la.kind == 105) { lexer.NextToken(); -#line 2460 "VBNET.ATG" +#line 2444 "VBNET.ATG" continueType = ContinueType.For; } else { lexer.NextToken(); -#line 2460 "VBNET.ATG" +#line 2444 "VBNET.ATG" continueType = ContinueType.While; } } -#line 2460 "VBNET.ATG" +#line 2444 "VBNET.ATG" statement = new ContinueStatement(continueType); break; } - case 172: { + case 187: { lexer.NextToken(); if (StartOf(27)) { Expr( -#line 2462 "VBNET.ATG" +#line 2446 "VBNET.ATG" out expr); } -#line 2462 "VBNET.ATG" +#line 2446 "VBNET.ATG" statement = new ThrowStatement(expr); break; } - case 155: { + case 169: { lexer.NextToken(); if (StartOf(27)) { Expr( -#line 2464 "VBNET.ATG" +#line 2448 "VBNET.ATG" out expr); } -#line 2464 "VBNET.ATG" +#line 2448 "VBNET.ATG" statement = new ReturnStatement(expr); break; } - case 169: { + case 184: { lexer.NextToken(); Expr( -#line 2466 "VBNET.ATG" +#line 2450 "VBNET.ATG" out expr); EndOfStmt(); Block( -#line 2466 "VBNET.ATG" +#line 2450 "VBNET.ATG" out embeddedStatement); - Expect(89); - Expect(169); + Expect(95); + Expect(184); -#line 2467 "VBNET.ATG" +#line 2451 "VBNET.ATG" statement = new LockStatement(expr, embeddedStatement); break; } - case 150: { + case 163: { lexer.NextToken(); Identifier(); -#line 2469 "VBNET.ATG" +#line 2453 "VBNET.ATG" name = t.val; if (la.kind == 25) { lexer.NextToken(); - if (StartOf(32)) { + if (StartOf(37)) { ArgumentList( -#line 2470 "VBNET.ATG" +#line 2454 "VBNET.ATG" out p); } Expect(26); } -#line 2472 "VBNET.ATG" +#line 2456 "VBNET.ATG" statement = new RaiseEventStatement(name, p); SetParent(p, statement); break; } - case 183: { + case 204: { WithStatement( -#line 2476 "VBNET.ATG" +#line 2460 "VBNET.ATG" out statement); break; } case 43: { lexer.NextToken(); -#line 2478 "VBNET.ATG" +#line 2462 "VBNET.ATG" Expression handlerExpr = null; Expr( -#line 2479 "VBNET.ATG" +#line 2463 "VBNET.ATG" out expr); Expect(12); Expr( -#line 2479 "VBNET.ATG" +#line 2463 "VBNET.ATG" out handlerExpr); -#line 2481 "VBNET.ATG" +#line 2465 "VBNET.ATG" statement = new AddHandlerStatement(expr, handlerExpr); break; } - case 153: { + case 167: { lexer.NextToken(); -#line 2484 "VBNET.ATG" +#line 2468 "VBNET.ATG" Expression handlerExpr = null; Expr( -#line 2485 "VBNET.ATG" +#line 2469 "VBNET.ATG" out expr); Expect(12); Expr( -#line 2485 "VBNET.ATG" +#line 2469 "VBNET.ATG" out handlerExpr); -#line 2487 "VBNET.ATG" +#line 2471 "VBNET.ATG" statement = new RemoveHandlerStatement(expr, handlerExpr); break; } - case 182: { + case 202: { lexer.NextToken(); Expr( -#line 2490 "VBNET.ATG" +#line 2474 "VBNET.ATG" out expr); EndOfStmt(); Block( -#line 2491 "VBNET.ATG" +#line 2475 "VBNET.ATG" out embeddedStatement); - Expect(89); - Expect(182); + Expect(95); + Expect(202); -#line 2493 "VBNET.ATG" +#line 2477 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); break; } - case 84: { + case 90: { lexer.NextToken(); -#line 2498 "VBNET.ATG" +#line 2482 "VBNET.ATG" ConditionType conditionType = ConditionType.None; - if (la.kind == 178 || la.kind == 182) { + if (la.kind == 196 || la.kind == 202) { WhileOrUntil( -#line 2501 "VBNET.ATG" +#line 2485 "VBNET.ATG" out conditionType); Expr( -#line 2501 "VBNET.ATG" +#line 2485 "VBNET.ATG" out expr); EndOfStmt(); Block( -#line 2502 "VBNET.ATG" +#line 2486 "VBNET.ATG" out embeddedStatement); - Expect(119); + Expect(128); -#line 2505 "VBNET.ATG" +#line 2489 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, ConditionPosition.Start); - } else if (la.kind == 1 || la.kind == 13) { + } else if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( -#line 2512 "VBNET.ATG" +#line 2496 "VBNET.ATG" out embeddedStatement); - Expect(119); - if (la.kind == 178 || la.kind == 182) { + Expect(128); + if (la.kind == 196 || la.kind == 202) { WhileOrUntil( -#line 2513 "VBNET.ATG" +#line 2497 "VBNET.ATG" out conditionType); Expr( -#line 2513 "VBNET.ATG" +#line 2497 "VBNET.ATG" out expr); } -#line 2515 "VBNET.ATG" +#line 2499 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); - } else SynErr(257); + } else SynErr(256); break; } - case 99: { + case 105: { lexer.NextToken(); -#line 2520 "VBNET.ATG" +#line 2504 "VBNET.ATG" Expression group = null; TypeReference typeReference; string typeName; Location startLocation = t.Location; - if (la.kind == 86) { + if (la.kind == 92) { lexer.NextToken(); LoopControlVariable( -#line 2527 "VBNET.ATG" +#line 2511 "VBNET.ATG" out typeReference, out typeName); - Expect(110); + Expect(117); Expr( -#line 2528 "VBNET.ATG" +#line 2512 "VBNET.ATG" out group); EndOfStmt(); Block( -#line 2529 "VBNET.ATG" +#line 2513 "VBNET.ATG" out embeddedStatement); - Expect(129); + Expect(139); if (StartOf(27)) { Expr( -#line 2530 "VBNET.ATG" +#line 2514 "VBNET.ATG" out expr); } -#line 2532 "VBNET.ATG" +#line 2516 "VBNET.ATG" statement = new ForeachStatement(typeReference, typeName, group, @@ -5477,87 +5446,87 @@ out expr); } else if (StartOf(13)) { -#line 2543 "VBNET.ATG" +#line 2527 "VBNET.ATG" Expression start = null; Expression end = null; Expression step = null; Expression nextExpr = null;List nextExpressions = null; LoopControlVariable( -#line 2548 "VBNET.ATG" +#line 2532 "VBNET.ATG" out typeReference, out typeName); - Expect(11); + Expect(10); Expr( -#line 2549 "VBNET.ATG" +#line 2533 "VBNET.ATG" out start); - Expect(173); + Expect(188); Expr( -#line 2549 "VBNET.ATG" +#line 2533 "VBNET.ATG" out end); - if (la.kind == 163) { + if (la.kind == 178) { lexer.NextToken(); Expr( -#line 2549 "VBNET.ATG" +#line 2533 "VBNET.ATG" out step); } EndOfStmt(); Block( -#line 2550 "VBNET.ATG" +#line 2534 "VBNET.ATG" out embeddedStatement); - Expect(129); + Expect(139); if (StartOf(27)) { Expr( -#line 2553 "VBNET.ATG" +#line 2537 "VBNET.ATG" out nextExpr); -#line 2555 "VBNET.ATG" +#line 2539 "VBNET.ATG" nextExpressions = new List(); nextExpressions.Add(nextExpr); while (la.kind == 12) { lexer.NextToken(); Expr( -#line 2558 "VBNET.ATG" +#line 2542 "VBNET.ATG" out nextExpr); -#line 2558 "VBNET.ATG" +#line 2542 "VBNET.ATG" nextExpressions.Add(nextExpr); } } -#line 2561 "VBNET.ATG" +#line 2545 "VBNET.ATG" statement = new ForNextStatement(typeReference, typeName, start, end, step, embeddedStatement, nextExpressions); SetParent(nextExpressions, statement); - } else SynErr(258); + } else SynErr(257); break; } - case 93: { + case 99: { lexer.NextToken(); Expr( -#line 2566 "VBNET.ATG" +#line 2550 "VBNET.ATG" out expr); -#line 2566 "VBNET.ATG" +#line 2550 "VBNET.ATG" statement = new ErrorStatement(expr); break; } - case 152: { + case 165: { lexer.NextToken(); -#line 2568 "VBNET.ATG" +#line 2552 "VBNET.ATG" bool isPreserve = false; - if (la.kind == 145) { + if (la.kind == 158) { lexer.NextToken(); -#line 2568 "VBNET.ATG" +#line 2552 "VBNET.ATG" isPreserve = true; } ReDimClause( -#line 2569 "VBNET.ATG" +#line 2553 "VBNET.ATG" out expr); -#line 2571 "VBNET.ATG" +#line 2555 "VBNET.ATG" ReDimStatement reDimStatement = new ReDimStatement(isPreserve); statement = reDimStatement; SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); @@ -5565,99 +5534,99 @@ out expr); while (la.kind == 12) { lexer.NextToken(); ReDimClause( -#line 2575 "VBNET.ATG" +#line 2559 "VBNET.ATG" out expr); -#line 2576 "VBNET.ATG" +#line 2560 "VBNET.ATG" SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); } break; } - case 92: { + case 98: { lexer.NextToken(); Expr( -#line 2580 "VBNET.ATG" +#line 2564 "VBNET.ATG" out expr); -#line 2582 "VBNET.ATG" +#line 2566 "VBNET.ATG" EraseStatement eraseStatement = new EraseStatement(); if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr);} while (la.kind == 12) { lexer.NextToken(); Expr( -#line 2585 "VBNET.ATG" +#line 2569 "VBNET.ATG" out expr); -#line 2585 "VBNET.ATG" +#line 2569 "VBNET.ATG" if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr); } } -#line 2586 "VBNET.ATG" +#line 2570 "VBNET.ATG" statement = eraseStatement; break; } - case 164: { + case 179: { lexer.NextToken(); -#line 2588 "VBNET.ATG" +#line 2572 "VBNET.ATG" statement = new StopStatement(); break; } - case 107: { + case 114: { lexer.NextToken(); -#line 2590 "VBNET.ATG" +#line 2574 "VBNET.ATG" Location ifStartLocation = t.Location; Expr( -#line 2590 "VBNET.ATG" +#line 2574 "VBNET.ATG" out expr); - if (la.kind == 171) { + if (la.kind == 186) { lexer.NextToken(); } - if (la.kind == 1 || la.kind == 13) { + if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( -#line 2593 "VBNET.ATG" +#line 2577 "VBNET.ATG" out embeddedStatement); -#line 2595 "VBNET.ATG" +#line 2579 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); ifStatement.StartLocation = ifStartLocation; Location elseIfStart; - while (la.kind == 88 || -#line 2601 "VBNET.ATG" + while (la.kind == 94 || +#line 2585 "VBNET.ATG" IsElseIf()) { if ( -#line 2601 "VBNET.ATG" +#line 2585 "VBNET.ATG" IsElseIf()) { - Expect(87); + Expect(93); -#line 2601 "VBNET.ATG" +#line 2585 "VBNET.ATG" elseIfStart = t.Location; - Expect(107); + Expect(114); } else { lexer.NextToken(); -#line 2602 "VBNET.ATG" +#line 2586 "VBNET.ATG" elseIfStart = t.Location; } -#line 2604 "VBNET.ATG" +#line 2588 "VBNET.ATG" Expression condition = null; Statement block = null; Expr( -#line 2605 "VBNET.ATG" +#line 2589 "VBNET.ATG" out condition); - if (la.kind == 171) { + if (la.kind == 186) { lexer.NextToken(); } EndOfStmt(); Block( -#line 2606 "VBNET.ATG" +#line 2590 "VBNET.ATG" out block); -#line 2608 "VBNET.ATG" +#line 2592 "VBNET.ATG" ElseIfSection elseIfSection = new ElseIfSection(condition, block); elseIfSection.StartLocation = elseIfStart; elseIfSection.EndLocation = t.Location; @@ -5665,143 +5634,143 @@ out block); ifStatement.ElseIfSections.Add(elseIfSection); } - if (la.kind == 87) { + if (la.kind == 93) { lexer.NextToken(); EndOfStmt(); Block( -#line 2617 "VBNET.ATG" +#line 2601 "VBNET.ATG" out embeddedStatement); -#line 2619 "VBNET.ATG" +#line 2603 "VBNET.ATG" ifStatement.FalseStatement.Add(embeddedStatement); } - Expect(89); - Expect(107); + Expect(95); + Expect(114); -#line 2623 "VBNET.ATG" +#line 2607 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else if (StartOf(38)) { -#line 2628 "VBNET.ATG" +#line 2612 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr); ifStatement.StartLocation = ifStartLocation; SingleLineStatementList( -#line 2631 "VBNET.ATG" +#line 2615 "VBNET.ATG" ifStatement.TrueStatement); -#line 2633 "VBNET.ATG" +#line 2617 "VBNET.ATG" SetParent(ifStatement.TrueStatement, ifStatement); - if (la.kind == 87) { + if (la.kind == 93) { lexer.NextToken(); if (StartOf(38)) { SingleLineStatementList( -#line 2637 "VBNET.ATG" +#line 2621 "VBNET.ATG" ifStatement.FalseStatement); } } -#line 2639 "VBNET.ATG" +#line 2623 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; - } else SynErr(259); + } else SynErr(258); break; } - case 156: { + case 171: { lexer.NextToken(); if (la.kind == 58) { lexer.NextToken(); } Expr( -#line 2642 "VBNET.ATG" +#line 2626 "VBNET.ATG" out expr); EndOfStmt(); -#line 2643 "VBNET.ATG" +#line 2627 "VBNET.ATG" List selectSections = new List(); Statement block = null; while (la.kind == 58) { -#line 2647 "VBNET.ATG" +#line 2631 "VBNET.ATG" List caseClauses = null; Location caseLocation = la.Location; lexer.NextToken(); CaseClauses( -#line 2648 "VBNET.ATG" +#line 2632 "VBNET.ATG" out caseClauses); if ( -#line 2648 "VBNET.ATG" +#line 2632 "VBNET.ATG" IsNotStatementSeparator()) { lexer.NextToken(); } EndOfStmt(); -#line 2650 "VBNET.ATG" +#line 2634 "VBNET.ATG" SwitchSection selectSection = new SwitchSection(caseClauses); SetParent(caseClauses, selectSection); selectSection.StartLocation = caseLocation; Block( -#line 2654 "VBNET.ATG" +#line 2638 "VBNET.ATG" out block); -#line 2656 "VBNET.ATG" +#line 2640 "VBNET.ATG" selectSection.Children = block.Children; selectSection.EndLocation = t.EndLocation; selectSections.Add(selectSection); } -#line 2662 "VBNET.ATG" +#line 2646 "VBNET.ATG" statement = new SwitchStatement(expr, selectSections); SetParent(selectSections, statement); - Expect(89); - Expect(156); + Expect(95); + Expect(171); break; } - case 136: { + case 147: { -#line 2666 "VBNET.ATG" +#line 2650 "VBNET.ATG" OnErrorStatement onErrorStatement = null; OnErrorStatement( -#line 2667 "VBNET.ATG" +#line 2651 "VBNET.ATG" out onErrorStatement); -#line 2667 "VBNET.ATG" +#line 2651 "VBNET.ATG" statement = onErrorStatement; break; } - case 105: { + case 112: { -#line 2668 "VBNET.ATG" +#line 2652 "VBNET.ATG" GotoStatement goToStatement = null; GotoStatement( -#line 2669 "VBNET.ATG" +#line 2653 "VBNET.ATG" out goToStatement); -#line 2669 "VBNET.ATG" +#line 2653 "VBNET.ATG" statement = goToStatement; break; } - case 154: { + case 168: { -#line 2670 "VBNET.ATG" +#line 2654 "VBNET.ATG" ResumeStatement resumeStatement = null; ResumeStatement( -#line 2671 "VBNET.ATG" +#line 2655 "VBNET.ATG" out resumeStatement); -#line 2671 "VBNET.ATG" +#line 2655 "VBNET.ATG" statement = resumeStatement; break; } - case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 25: case 44: case 48: case 50: case 51: case 52: case 53: case 55: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 69: case 70: case 71: case 73: case 74: case 75: case 76: case 77: case 78: case 83: case 85: case 96: case 97: case 103: case 112: case 118: case 120: case 125: case 126: case 128: case 131: case 134: case 135: case 145: case 160: case 161: case 166: case 170: case 174: case 176: case 177: case 178: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 201: case 206: { + case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 16: case 25: case 44: case 48: case 50: case 51: case 52: case 53: case 55: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 67: case 69: case 70: case 71: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 89: case 91: case 102: case 103: case 109: case 110: case 120: case 127: case 129: case 134: case 135: case 138: case 141: case 144: case 146: case 158: case 170: case 175: case 176: case 181: case 185: case 189: case 191: case 192: case 193: case 194: case 195: case 196: case 197: { -#line 2674 "VBNET.ATG" +#line 2658 "VBNET.ATG" Expression val = null; AssignmentOperatorType op; @@ -5809,25 +5778,25 @@ out resumeStatement); la.kind == Tokens.Not || la.kind == Tokens.Times; SimpleExpr( -#line 2680 "VBNET.ATG" +#line 2664 "VBNET.ATG" out expr); if (StartOf(39)) { AssignmentOperator( -#line 2682 "VBNET.ATG" +#line 2666 "VBNET.ATG" out op); Expr( -#line 2682 "VBNET.ATG" +#line 2666 "VBNET.ATG" out val); -#line 2682 "VBNET.ATG" +#line 2666 "VBNET.ATG" expr = new AssignmentExpression(expr, op, val); - } else if (la.kind == 1 || la.kind == 13 || la.kind == 87) { + } else if (la.kind == 1 || la.kind == 11 || la.kind == 93) { -#line 2683 "VBNET.ATG" +#line 2667 "VBNET.ATG" if (mustBeAssignment) Error("error in assignment."); - } else SynErr(260); + } else SynErr(259); -#line 2686 "VBNET.ATG" +#line 2670 "VBNET.ATG" // a field reference expression that stands alone is a // invocation expression without parantheses and arguments if(expr is MemberReferenceExpression || expr is IdentifierExpression) { @@ -5840,89 +5809,89 @@ out val); case 57: { lexer.NextToken(); SimpleExpr( -#line 2693 "VBNET.ATG" +#line 2677 "VBNET.ATG" out expr); -#line 2693 "VBNET.ATG" +#line 2677 "VBNET.ATG" statement = new ExpressionStatement(expr); break; } - case 190: { + case 198: { lexer.NextToken(); -#line 2695 "VBNET.ATG" +#line 2679 "VBNET.ATG" Statement block; if ( -#line 2696 "VBNET.ATG" +#line 2680 "VBNET.ATG" Peek(1).kind == Tokens.As) { -#line 2697 "VBNET.ATG" +#line 2681 "VBNET.ATG" LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); VariableDeclarator( -#line 2698 "VBNET.ATG" +#line 2682 "VBNET.ATG" resourceAquisition.Variables); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( -#line 2700 "VBNET.ATG" +#line 2684 "VBNET.ATG" resourceAquisition.Variables); } Block( -#line 2702 "VBNET.ATG" +#line 2686 "VBNET.ATG" out block); -#line 2704 "VBNET.ATG" +#line 2688 "VBNET.ATG" statement = new UsingStatement(resourceAquisition, block); SetParent(resourceAquisition.Variables, resourceAquisition); } else if (StartOf(27)) { Expr( -#line 2707 "VBNET.ATG" +#line 2691 "VBNET.ATG" out expr); Block( -#line 2708 "VBNET.ATG" +#line 2692 "VBNET.ATG" out block); -#line 2709 "VBNET.ATG" +#line 2693 "VBNET.ATG" statement = new UsingStatement(new ExpressionStatement(expr), block); - } else SynErr(261); - Expect(89); - Expect(190); + } else SynErr(260); + Expect(95); + Expect(198); break; } - default: SynErr(262); break; + default: SynErr(261); break; } } void LocalDeclarationStatement( -#line 2400 "VBNET.ATG" +#line 2384 "VBNET.ATG" out Statement statement) { -#line 2402 "VBNET.ATG" +#line 2386 "VBNET.ATG" ModifierList m = new ModifierList(); LocalVariableDeclaration localVariableDeclaration; bool dimfound = false; - while (la.kind == 72 || la.kind == 82 || la.kind == 162) { + while (la.kind == 72 || la.kind == 88 || la.kind == 177) { if (la.kind == 72) { lexer.NextToken(); -#line 2408 "VBNET.ATG" +#line 2392 "VBNET.ATG" m.Add(Modifiers.Const, t.Location); - } else if (la.kind == 162) { + } else if (la.kind == 177) { lexer.NextToken(); -#line 2409 "VBNET.ATG" +#line 2393 "VBNET.ATG" m.Add(Modifiers.Static, t.Location); } else { lexer.NextToken(); -#line 2410 "VBNET.ATG" +#line 2394 "VBNET.ATG" dimfound = true; } } -#line 2413 "VBNET.ATG" +#line 2397 "VBNET.ATG" if(dimfound && (m.Modifier & Modifiers.Const) != 0) { Error("Dim is not allowed on constants."); } @@ -5935,136 +5904,136 @@ out Statement statement) { localVariableDeclaration.StartLocation = t.Location; VariableDeclarator( -#line 2424 "VBNET.ATG" +#line 2408 "VBNET.ATG" localVariableDeclaration.Variables); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( -#line 2425 "VBNET.ATG" +#line 2409 "VBNET.ATG" localVariableDeclaration.Variables); } -#line 2427 "VBNET.ATG" +#line 2411 "VBNET.ATG" SetParent(localVariableDeclaration.Variables, localVariableDeclaration); statement = localVariableDeclaration; } void TryStatement( -#line 2913 "VBNET.ATG" +#line 2897 "VBNET.ATG" out Statement tryStatement) { -#line 2915 "VBNET.ATG" +#line 2899 "VBNET.ATG" Statement blockStmt = null, finallyStmt = null;List catchClauses = null; - Expect(175); + Expect(190); EndOfStmt(); Block( -#line 2918 "VBNET.ATG" +#line 2902 "VBNET.ATG" out blockStmt); - if (la.kind == 59 || la.kind == 89 || la.kind == 98) { + if (la.kind == 59 || la.kind == 95 || la.kind == 104) { CatchClauses( -#line 2919 "VBNET.ATG" +#line 2903 "VBNET.ATG" out catchClauses); } - if (la.kind == 98) { + if (la.kind == 104) { lexer.NextToken(); EndOfStmt(); Block( -#line 2920 "VBNET.ATG" +#line 2904 "VBNET.ATG" out finallyStmt); } - Expect(89); - Expect(175); + Expect(95); + Expect(190); -#line 2923 "VBNET.ATG" +#line 2907 "VBNET.ATG" tryStatement = new TryCatchStatement(blockStmt, catchClauses, finallyStmt); } void WithStatement( -#line 2893 "VBNET.ATG" +#line 2877 "VBNET.ATG" out Statement withStatement) { -#line 2895 "VBNET.ATG" +#line 2879 "VBNET.ATG" Statement blockStmt = null; Expression expr = null; - Expect(183); + Expect(204); -#line 2898 "VBNET.ATG" +#line 2882 "VBNET.ATG" Location start = t.Location; Expr( -#line 2899 "VBNET.ATG" +#line 2883 "VBNET.ATG" out expr); EndOfStmt(); -#line 2901 "VBNET.ATG" +#line 2885 "VBNET.ATG" withStatement = new WithStatement(expr); withStatement.StartLocation = start; Block( -#line 2904 "VBNET.ATG" +#line 2888 "VBNET.ATG" out blockStmt); -#line 2906 "VBNET.ATG" +#line 2890 "VBNET.ATG" ((WithStatement)withStatement).Body = (BlockStatement)blockStmt; - Expect(89); - Expect(183); + Expect(95); + Expect(204); -#line 2909 "VBNET.ATG" +#line 2893 "VBNET.ATG" withStatement.EndLocation = t.Location; } void WhileOrUntil( -#line 2886 "VBNET.ATG" +#line 2870 "VBNET.ATG" out ConditionType conditionType) { -#line 2887 "VBNET.ATG" +#line 2871 "VBNET.ATG" conditionType = ConditionType.None; - if (la.kind == 182) { + if (la.kind == 202) { lexer.NextToken(); -#line 2888 "VBNET.ATG" +#line 2872 "VBNET.ATG" conditionType = ConditionType.While; - } else if (la.kind == 178) { + } else if (la.kind == 196) { lexer.NextToken(); -#line 2889 "VBNET.ATG" +#line 2873 "VBNET.ATG" conditionType = ConditionType.Until; - } else SynErr(263); + } else SynErr(262); } void LoopControlVariable( -#line 2728 "VBNET.ATG" +#line 2712 "VBNET.ATG" out TypeReference type, out string name) { -#line 2729 "VBNET.ATG" +#line 2713 "VBNET.ATG" ArrayList arrayModifiers = null; type = null; Qualident( -#line 2733 "VBNET.ATG" +#line 2717 "VBNET.ATG" out name); if ( -#line 2734 "VBNET.ATG" +#line 2718 "VBNET.ATG" IsDims()) { ArrayTypeModifiers( -#line 2734 "VBNET.ATG" +#line 2718 "VBNET.ATG" out arrayModifiers); } if (la.kind == 49) { lexer.NextToken(); TypeName( -#line 2735 "VBNET.ATG" +#line 2719 "VBNET.ATG" out type); -#line 2735 "VBNET.ATG" +#line 2719 "VBNET.ATG" if (name.IndexOf('.') > 0) { Error("No type def for 'for each' member indexer allowed."); } } -#line 2737 "VBNET.ATG" +#line 2721 "VBNET.ATG" if (type != null) { if(type.RankSpecifier != null && arrayModifiers != null) { Error("array rank only allowed one time"); @@ -6076,111 +6045,111 @@ out type); } void ReDimClause( -#line 2807 "VBNET.ATG" +#line 2791 "VBNET.ATG" out Expression expr) { SimpleNonInvocationExpression( -#line 2809 "VBNET.ATG" +#line 2793 "VBNET.ATG" out expr); ReDimClauseInternal( -#line 2810 "VBNET.ATG" +#line 2794 "VBNET.ATG" ref expr); } void SingleLineStatementList( -#line 2714 "VBNET.ATG" +#line 2698 "VBNET.ATG" List list) { -#line 2715 "VBNET.ATG" +#line 2699 "VBNET.ATG" Statement embeddedStatement = null; - if (la.kind == 89) { + if (la.kind == 95) { lexer.NextToken(); -#line 2717 "VBNET.ATG" +#line 2701 "VBNET.ATG" embeddedStatement = new EndStatement(); - } else if (StartOf(36)) { + } else if (StartOf(35)) { EmbeddedStatement( -#line 2718 "VBNET.ATG" +#line 2702 "VBNET.ATG" out embeddedStatement); - } else SynErr(264); + } else SynErr(263); -#line 2719 "VBNET.ATG" +#line 2703 "VBNET.ATG" if (embeddedStatement != null) list.Add(embeddedStatement); - while (la.kind == 13) { + while (la.kind == 11) { lexer.NextToken(); - while (la.kind == 13) { + while (la.kind == 11) { lexer.NextToken(); } - if (la.kind == 89) { + if (la.kind == 95) { lexer.NextToken(); -#line 2721 "VBNET.ATG" +#line 2705 "VBNET.ATG" embeddedStatement = new EndStatement(); - } else if (StartOf(36)) { + } else if (StartOf(35)) { EmbeddedStatement( -#line 2722 "VBNET.ATG" +#line 2706 "VBNET.ATG" out embeddedStatement); - } else SynErr(265); + } else SynErr(264); -#line 2723 "VBNET.ATG" +#line 2707 "VBNET.ATG" if (embeddedStatement != null) list.Add(embeddedStatement); } } void CaseClauses( -#line 2846 "VBNET.ATG" +#line 2830 "VBNET.ATG" out List caseClauses) { -#line 2848 "VBNET.ATG" +#line 2832 "VBNET.ATG" caseClauses = new List(); CaseLabel caseClause = null; CaseClause( -#line 2851 "VBNET.ATG" +#line 2835 "VBNET.ATG" out caseClause); -#line 2851 "VBNET.ATG" +#line 2835 "VBNET.ATG" if (caseClause != null) { caseClauses.Add(caseClause); } while (la.kind == 12) { lexer.NextToken(); CaseClause( -#line 2852 "VBNET.ATG" +#line 2836 "VBNET.ATG" out caseClause); -#line 2852 "VBNET.ATG" +#line 2836 "VBNET.ATG" if (caseClause != null) { caseClauses.Add(caseClause); } } } void OnErrorStatement( -#line 2748 "VBNET.ATG" +#line 2732 "VBNET.ATG" out OnErrorStatement stmt) { -#line 2750 "VBNET.ATG" +#line 2734 "VBNET.ATG" stmt = null; GotoStatement goToStatement = null; - Expect(136); - Expect(93); + Expect(147); + Expect(99); if ( -#line 2756 "VBNET.ATG" +#line 2740 "VBNET.ATG" IsNegativeLabelName()) { - Expect(105); - Expect(15); + Expect(112); + Expect(18); Expect(5); -#line 2758 "VBNET.ATG" +#line 2742 "VBNET.ATG" long intLabel = Int64.Parse(t.val); if(intLabel != 1) { Error("invalid label in on error statement."); } stmt = new OnErrorStatement(new GotoStatement((intLabel * -1).ToString())); - } else if (la.kind == 105) { + } else if (la.kind == 112) { GotoStatement( -#line 2764 "VBNET.ATG" +#line 2748 "VBNET.ATG" out goToStatement); -#line 2766 "VBNET.ATG" +#line 2750 "VBNET.ATG" string val = goToStatement.Label; // if value is numeric, make sure that is 0 @@ -6193,92 +6162,92 @@ out goToStatement); } stmt = new OnErrorStatement(goToStatement); - } else if (la.kind == 154) { + } else if (la.kind == 168) { lexer.NextToken(); - Expect(129); + Expect(139); -#line 2780 "VBNET.ATG" +#line 2764 "VBNET.ATG" stmt = new OnErrorStatement(new ResumeStatement(true)); - } else SynErr(266); + } else SynErr(265); } void GotoStatement( -#line 2786 "VBNET.ATG" +#line 2770 "VBNET.ATG" out GotoStatement goToStatement) { -#line 2788 "VBNET.ATG" +#line 2772 "VBNET.ATG" string label = String.Empty; - Expect(105); + Expect(112); LabelName( -#line 2791 "VBNET.ATG" +#line 2775 "VBNET.ATG" out label); -#line 2793 "VBNET.ATG" +#line 2777 "VBNET.ATG" goToStatement = new GotoStatement(label); } void ResumeStatement( -#line 2835 "VBNET.ATG" +#line 2819 "VBNET.ATG" out ResumeStatement resumeStatement) { -#line 2837 "VBNET.ATG" +#line 2821 "VBNET.ATG" resumeStatement = null; string label = String.Empty; if ( -#line 2840 "VBNET.ATG" +#line 2824 "VBNET.ATG" IsResumeNext()) { - Expect(154); - Expect(129); + Expect(168); + Expect(139); -#line 2841 "VBNET.ATG" +#line 2825 "VBNET.ATG" resumeStatement = new ResumeStatement(true); - } else if (la.kind == 154) { + } else if (la.kind == 168) { lexer.NextToken(); if (StartOf(40)) { LabelName( -#line 2842 "VBNET.ATG" +#line 2826 "VBNET.ATG" out label); } -#line 2842 "VBNET.ATG" +#line 2826 "VBNET.ATG" resumeStatement = new ResumeStatement(label); - } else SynErr(267); + } else SynErr(266); } void ReDimClauseInternal( -#line 2813 "VBNET.ATG" +#line 2797 "VBNET.ATG" ref Expression expr) { -#line 2814 "VBNET.ATG" +#line 2798 "VBNET.ATG" List arguments; bool canBeNormal; bool canBeRedim; string name; - while (la.kind == 10 || -#line 2817 "VBNET.ATG" + while (la.kind == 16 || +#line 2801 "VBNET.ATG" la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { - if (la.kind == 10) { + if (la.kind == 16) { lexer.NextToken(); IdentifierOrKeyword( -#line 2816 "VBNET.ATG" +#line 2800 "VBNET.ATG" out name); -#line 2816 "VBNET.ATG" +#line 2800 "VBNET.ATG" expr = new MemberReferenceExpression(expr, name); } else { InvocationExpression( -#line 2818 "VBNET.ATG" +#line 2802 "VBNET.ATG" ref expr); } } Expect(25); NormalOrReDimArgumentList( -#line 2821 "VBNET.ATG" +#line 2805 "VBNET.ATG" out arguments, out canBeNormal, out canBeRedim); Expect(26); -#line 2823 "VBNET.ATG" +#line 2807 "VBNET.ATG" expr = new InvocationExpression(expr, arguments); SetParent(arguments, expr); if (canBeRedim == false || canBeNormal && (la.kind == Tokens.Dot || la.kind == Tokens.OpenParenthesis)) { @@ -6291,98 +6260,98 @@ out arguments, out canBeNormal, out canBeRedim); } void CaseClause( -#line 2856 "VBNET.ATG" +#line 2840 "VBNET.ATG" out CaseLabel caseClause) { -#line 2858 "VBNET.ATG" +#line 2842 "VBNET.ATG" Expression expr = null; Expression sexpr = null; BinaryOperatorType op = BinaryOperatorType.None; caseClause = null; - if (la.kind == 87) { + if (la.kind == 93) { lexer.NextToken(); -#line 2864 "VBNET.ATG" +#line 2848 "VBNET.ATG" caseClause = new CaseLabel(); } else if (StartOf(41)) { - if (la.kind == 114) { + if (la.kind == 122) { lexer.NextToken(); } switch (la.kind) { case 28: { lexer.NextToken(); -#line 2868 "VBNET.ATG" +#line 2852 "VBNET.ATG" op = BinaryOperatorType.LessThan; break; } case 27: { lexer.NextToken(); -#line 2869 "VBNET.ATG" +#line 2853 "VBNET.ATG" op = BinaryOperatorType.GreaterThan; break; } case 31: { lexer.NextToken(); -#line 2870 "VBNET.ATG" +#line 2854 "VBNET.ATG" op = BinaryOperatorType.LessThanOrEqual; break; } case 30: { lexer.NextToken(); -#line 2871 "VBNET.ATG" +#line 2855 "VBNET.ATG" op = BinaryOperatorType.GreaterThanOrEqual; break; } - case 11: { + case 10: { lexer.NextToken(); -#line 2872 "VBNET.ATG" +#line 2856 "VBNET.ATG" op = BinaryOperatorType.Equality; break; } case 29: { lexer.NextToken(); -#line 2873 "VBNET.ATG" +#line 2857 "VBNET.ATG" op = BinaryOperatorType.InEquality; break; } - default: SynErr(268); break; + default: SynErr(267); break; } Expr( -#line 2875 "VBNET.ATG" +#line 2859 "VBNET.ATG" out expr); -#line 2877 "VBNET.ATG" +#line 2861 "VBNET.ATG" caseClause = new CaseLabel(op, expr); } else if (StartOf(27)) { Expr( -#line 2879 "VBNET.ATG" +#line 2863 "VBNET.ATG" out expr); - if (la.kind == 173) { + if (la.kind == 188) { lexer.NextToken(); Expr( -#line 2879 "VBNET.ATG" +#line 2863 "VBNET.ATG" out sexpr); } -#line 2881 "VBNET.ATG" +#line 2865 "VBNET.ATG" caseClause = new CaseLabel(expr, sexpr); - } else SynErr(269); + } else SynErr(268); } void CatchClauses( -#line 2928 "VBNET.ATG" +#line 2912 "VBNET.ATG" out List catchClauses) { -#line 2930 "VBNET.ATG" +#line 2914 "VBNET.ATG" catchClauses = new List(); TypeReference type = null; Statement blockStmt = null; @@ -6394,27 +6363,27 @@ out List catchClauses) { if (StartOf(13)) { Identifier(); -#line 2938 "VBNET.ATG" +#line 2922 "VBNET.ATG" name = t.val; if (la.kind == 49) { lexer.NextToken(); TypeName( -#line 2938 "VBNET.ATG" +#line 2922 "VBNET.ATG" out type); } } - if (la.kind == 181) { + if (la.kind == 201) { lexer.NextToken(); Expr( -#line 2939 "VBNET.ATG" +#line 2923 "VBNET.ATG" out expr); } EndOfStmt(); Block( -#line 2941 "VBNET.ATG" +#line 2925 "VBNET.ATG" out blockStmt); -#line 2942 "VBNET.ATG" +#line 2926 "VBNET.ATG" catchClauses.Add(new CatchClause(type, name, blockStmt, expr)); } } @@ -6441,19 +6410,19 @@ out blockStmt); case 7: s = "LiteralSingle expected"; break; case 8: s = "LiteralDecimal expected"; break; case 9: s = "LiteralDate expected"; break; - case 10: s = "\".\" expected"; break; - case 11: s = "\"=\" expected"; break; + case 10: s = "\"=\" expected"; break; + case 11: s = "\":\" expected"; break; case 12: s = "\",\" expected"; break; - case 13: s = "\":\" expected"; break; - case 14: s = "\"+\" expected"; break; - case 15: s = "\"-\" expected"; break; - case 16: s = "\"*\" expected"; break; - case 17: s = "\"/\" expected"; break; - case 18: s = "\"\\\\\" expected"; break; - case 19: s = "\"&\" expected"; break; + case 13: s = "\"&\" expected"; break; + case 14: s = "\"/\" expected"; break; + case 15: s = "\"\\\\\" expected"; break; + case 16: s = "\".\" expected"; break; + case 17: s = "\"!\" expected"; break; + case 18: s = "\"-\" expected"; break; + case 19: s = "\"+\" expected"; break; case 20: s = "\"^\" expected"; break; case 21: s = "\"?\" expected"; break; - case 22: s = "\"!\" expected"; break; + case 22: s = "\"*\" expected"; break; case 23: s = "\"{\" expected"; break; case 24: s = "\"}\" expected"; break; case 25: s = "\"(\" expected"; break; @@ -6504,203 +6473,202 @@ out blockStmt); case 70: s = "\"CObj\" expected"; break; case 71: s = "\"Compare\" expected"; break; case 72: s = "\"Const\" expected"; break; - case 73: s = "\"CShort\" expected"; break; - case 74: s = "\"CSng\" expected"; break; - case 75: s = "\"CStr\" expected"; break; - case 76: s = "\"CType\" expected"; break; - case 77: s = "\"Date\" expected"; break; - case 78: s = "\"Decimal\" expected"; break; - case 79: s = "\"Declare\" expected"; break; - case 80: s = "\"Default\" expected"; break; - case 81: s = "\"Delegate\" expected"; break; - case 82: s = "\"Dim\" expected"; break; - case 83: s = "\"DirectCast\" expected"; break; - case 84: s = "\"Do\" expected"; break; - case 85: s = "\"Double\" expected"; break; - case 86: s = "\"Each\" expected"; break; - case 87: s = "\"Else\" expected"; break; - case 88: s = "\"ElseIf\" expected"; break; - case 89: s = "\"End\" expected"; break; - case 90: s = "\"EndIf\" expected"; break; - case 91: s = "\"Enum\" expected"; break; - case 92: s = "\"Erase\" expected"; break; - case 93: s = "\"Error\" expected"; break; - case 94: s = "\"Event\" expected"; break; - case 95: s = "\"Exit\" expected"; break; - case 96: s = "\"Explicit\" expected"; break; - case 97: s = "\"False\" expected"; break; - case 98: s = "\"Finally\" expected"; break; - case 99: s = "\"For\" expected"; break; - case 100: s = "\"Friend\" expected"; break; - case 101: s = "\"Function\" expected"; break; - case 102: s = "\"Get\" expected"; break; - case 103: s = "\"GetType\" expected"; break; - case 104: s = "\"GoSub\" expected"; break; - case 105: s = "\"GoTo\" expected"; break; - case 106: s = "\"Handles\" expected"; break; - case 107: s = "\"If\" expected"; break; - case 108: s = "\"Implements\" expected"; break; - case 109: s = "\"Imports\" expected"; break; - case 110: s = "\"In\" expected"; break; - case 111: s = "\"Inherits\" expected"; break; - case 112: s = "\"Integer\" expected"; break; - case 113: s = "\"Interface\" expected"; break; - case 114: s = "\"Is\" expected"; break; - case 115: s = "\"Let\" expected"; break; - case 116: s = "\"Lib\" expected"; break; - case 117: s = "\"Like\" expected"; break; - case 118: s = "\"Long\" expected"; break; - case 119: s = "\"Loop\" expected"; break; - case 120: s = "\"Me\" expected"; break; - case 121: s = "\"Mod\" expected"; break; - case 122: s = "\"Module\" expected"; break; - case 123: s = "\"MustInherit\" expected"; break; - case 124: s = "\"MustOverride\" expected"; break; - case 125: s = "\"MyBase\" expected"; break; - case 126: s = "\"MyClass\" expected"; break; - case 127: s = "\"Namespace\" expected"; break; - case 128: s = "\"New\" expected"; break; - case 129: s = "\"Next\" expected"; break; - case 130: s = "\"Not\" expected"; break; - case 131: s = "\"Nothing\" expected"; break; - case 132: s = "\"NotInheritable\" expected"; break; - case 133: s = "\"NotOverridable\" expected"; break; - case 134: s = "\"Object\" expected"; break; - case 135: s = "\"Off\" expected"; break; - case 136: s = "\"On\" expected"; break; - case 137: s = "\"Option\" expected"; break; - case 138: s = "\"Optional\" expected"; break; - case 139: s = "\"Or\" expected"; break; - case 140: s = "\"OrElse\" expected"; break; - case 141: s = "\"Overloads\" expected"; break; - case 142: s = "\"Overridable\" expected"; break; - case 143: s = "\"Overrides\" expected"; break; - case 144: s = "\"ParamArray\" expected"; break; - case 145: s = "\"Preserve\" expected"; break; - case 146: s = "\"Private\" expected"; break; - case 147: s = "\"Property\" expected"; break; - case 148: s = "\"Protected\" expected"; break; - case 149: s = "\"Public\" expected"; break; - case 150: s = "\"RaiseEvent\" expected"; break; - case 151: s = "\"ReadOnly\" expected"; break; - case 152: s = "\"ReDim\" expected"; break; - case 153: s = "\"RemoveHandler\" expected"; break; - case 154: s = "\"Resume\" expected"; break; - case 155: s = "\"Return\" expected"; break; - case 156: s = "\"Select\" expected"; break; - case 157: s = "\"Set\" expected"; break; - case 158: s = "\"Shadows\" expected"; break; - case 159: s = "\"Shared\" expected"; break; - case 160: s = "\"Short\" expected"; break; - case 161: s = "\"Single\" expected"; break; - case 162: s = "\"Static\" expected"; break; - case 163: s = "\"Step\" expected"; break; - case 164: s = "\"Stop\" expected"; break; - case 165: s = "\"Strict\" expected"; break; - case 166: s = "\"String\" expected"; break; - case 167: s = "\"Structure\" expected"; break; - case 168: s = "\"Sub\" expected"; break; - case 169: s = "\"SyncLock\" expected"; break; - case 170: s = "\"Text\" expected"; break; - case 171: s = "\"Then\" expected"; break; - case 172: s = "\"Throw\" expected"; break; - case 173: s = "\"To\" expected"; break; - case 174: s = "\"True\" expected"; break; - case 175: s = "\"Try\" expected"; break; - case 176: s = "\"TypeOf\" expected"; break; - case 177: s = "\"Unicode\" expected"; break; - case 178: s = "\"Until\" expected"; break; - case 179: s = "\"Variant\" expected"; break; - case 180: s = "\"Wend\" expected"; break; - case 181: s = "\"When\" expected"; break; - case 182: s = "\"While\" expected"; break; - case 183: s = "\"With\" expected"; break; - case 184: s = "\"WithEvents\" expected"; break; - case 185: s = "\"WriteOnly\" expected"; break; - case 186: s = "\"Xor\" expected"; break; - case 187: s = "\"Rem\" expected"; break; - case 188: s = "\"Continue\" expected"; break; - case 189: s = "\"Operator\" expected"; break; - case 190: s = "\"Using\" expected"; break; - case 191: s = "\"IsNot\" expected"; break; - case 192: s = "\"SByte\" expected"; break; + case 73: s = "\"Continue\" expected"; break; + case 74: s = "\"CSByte\" expected"; break; + case 75: s = "\"CShort\" expected"; break; + case 76: s = "\"CSng\" expected"; break; + case 77: s = "\"CStr\" expected"; break; + case 78: s = "\"CType\" expected"; break; + case 79: s = "\"CUInt\" expected"; break; + case 80: s = "\"CULng\" expected"; break; + case 81: s = "\"CUShort\" expected"; break; + case 82: s = "\"Custom\" expected"; break; + case 83: s = "\"Date\" expected"; break; + case 84: s = "\"Decimal\" expected"; break; + case 85: s = "\"Declare\" expected"; break; + case 86: s = "\"Default\" expected"; break; + case 87: s = "\"Delegate\" expected"; break; + case 88: s = "\"Dim\" expected"; break; + case 89: s = "\"DirectCast\" expected"; break; + case 90: s = "\"Do\" expected"; break; + case 91: s = "\"Double\" expected"; break; + case 92: s = "\"Each\" expected"; break; + case 93: s = "\"Else\" expected"; break; + case 94: s = "\"ElseIf\" expected"; break; + case 95: s = "\"End\" expected"; break; + case 96: s = "\"EndIf\" expected"; break; + case 97: s = "\"Enum\" expected"; break; + case 98: s = "\"Erase\" expected"; break; + case 99: s = "\"Error\" expected"; break; + case 100: s = "\"Event\" expected"; break; + case 101: s = "\"Exit\" expected"; break; + case 102: s = "\"Explicit\" expected"; break; + case 103: s = "\"False\" expected"; break; + case 104: s = "\"Finally\" expected"; break; + case 105: s = "\"For\" expected"; break; + case 106: s = "\"Friend\" expected"; break; + case 107: s = "\"Function\" expected"; break; + case 108: s = "\"Get\" expected"; break; + case 109: s = "\"GetType\" expected"; break; + case 110: s = "\"Global\" expected"; break; + case 111: s = "\"GoSub\" expected"; break; + case 112: s = "\"GoTo\" expected"; break; + case 113: s = "\"Handles\" expected"; break; + case 114: s = "\"If\" expected"; break; + case 115: s = "\"Implements\" expected"; break; + case 116: s = "\"Imports\" expected"; break; + case 117: s = "\"In\" expected"; break; + case 118: s = "\"Infer\" expected"; break; + case 119: s = "\"Inherits\" expected"; break; + case 120: s = "\"Integer\" expected"; break; + case 121: s = "\"Interface\" expected"; break; + case 122: s = "\"Is\" expected"; break; + case 123: s = "\"IsNot\" expected"; break; + case 124: s = "\"Let\" expected"; break; + case 125: s = "\"Lib\" expected"; break; + case 126: s = "\"Like\" expected"; break; + case 127: s = "\"Long\" expected"; break; + case 128: s = "\"Loop\" expected"; break; + case 129: s = "\"Me\" expected"; break; + case 130: s = "\"Mod\" expected"; break; + case 131: s = "\"Module\" expected"; break; + case 132: s = "\"MustInherit\" expected"; break; + case 133: s = "\"MustOverride\" expected"; break; + case 134: s = "\"MyBase\" expected"; break; + case 135: s = "\"MyClass\" expected"; break; + case 136: s = "\"Namespace\" expected"; break; + case 137: s = "\"Narrowing\" expected"; break; + case 138: s = "\"New\" expected"; break; + case 139: s = "\"Next\" expected"; break; + case 140: s = "\"Not\" expected"; break; + case 141: s = "\"Nothing\" expected"; break; + case 142: s = "\"NotInheritable\" expected"; break; + case 143: s = "\"NotOverridable\" expected"; break; + case 144: s = "\"Object\" expected"; break; + case 145: s = "\"Of\" expected"; break; + case 146: s = "\"Off\" expected"; break; + case 147: s = "\"On\" expected"; break; + case 148: s = "\"Operator\" expected"; break; + case 149: s = "\"Option\" expected"; break; + case 150: s = "\"Optional\" expected"; break; + case 151: s = "\"Or\" expected"; break; + case 152: s = "\"OrElse\" expected"; break; + case 153: s = "\"Overloads\" expected"; break; + case 154: s = "\"Overridable\" expected"; break; + case 155: s = "\"Overrides\" expected"; break; + case 156: s = "\"ParamArray\" expected"; break; + case 157: s = "\"Partial\" expected"; break; + case 158: s = "\"Preserve\" expected"; break; + case 159: s = "\"Private\" expected"; break; + case 160: s = "\"Property\" expected"; break; + case 161: s = "\"Protected\" expected"; break; + case 162: s = "\"Public\" expected"; break; + case 163: s = "\"RaiseEvent\" expected"; break; + case 164: s = "\"ReadOnly\" expected"; break; + case 165: s = "\"ReDim\" expected"; break; + case 166: s = "\"Rem\" expected"; break; + case 167: s = "\"RemoveHandler\" expected"; break; + case 168: s = "\"Resume\" expected"; break; + case 169: s = "\"Return\" expected"; break; + case 170: s = "\"SByte\" expected"; break; + case 171: s = "\"Select\" expected"; break; + case 172: s = "\"Set\" expected"; break; + case 173: s = "\"Shadows\" expected"; break; + case 174: s = "\"Shared\" expected"; break; + case 175: s = "\"Short\" expected"; break; + case 176: s = "\"Single\" expected"; break; + case 177: s = "\"Static\" expected"; break; + case 178: s = "\"Step\" expected"; break; + case 179: s = "\"Stop\" expected"; break; + case 180: s = "\"Strict\" expected"; break; + case 181: s = "\"String\" expected"; break; + case 182: s = "\"Structure\" expected"; break; + case 183: s = "\"Sub\" expected"; break; + case 184: s = "\"SyncLock\" expected"; break; + case 185: s = "\"Text\" expected"; break; + case 186: s = "\"Then\" expected"; break; + case 187: s = "\"Throw\" expected"; break; + case 188: s = "\"To\" expected"; break; + case 189: s = "\"True\" expected"; break; + case 190: s = "\"Try\" expected"; break; + case 191: s = "\"TryCast\" expected"; break; + case 192: s = "\"TypeOf\" expected"; break; case 193: s = "\"UInteger\" expected"; break; case 194: s = "\"ULong\" expected"; break; - case 195: s = "\"UShort\" expected"; break; - case 196: s = "\"CSByte\" expected"; break; - case 197: s = "\"CUShort\" expected"; break; - case 198: s = "\"CUInt\" expected"; break; - case 199: s = "\"CULng\" expected"; break; - case 200: s = "\"Global\" expected"; break; - case 201: s = "\"TryCast\" expected"; break; - case 202: s = "\"Of\" expected"; break; - case 203: s = "\"Narrowing\" expected"; break; - case 204: s = "\"Widening\" expected"; break; - case 205: s = "\"Partial\" expected"; break; - case 206: s = "\"Custom\" expected"; break; - case 207: s = "??? expected"; break; - case 208: s = "invalid EndOfStmt"; break; - case 209: s = "invalid OptionStmt"; break; + case 195: s = "\"Unicode\" expected"; break; + case 196: s = "\"Until\" expected"; break; + case 197: s = "\"UShort\" expected"; break; + case 198: s = "\"Using\" expected"; break; + case 199: s = "\"Variant\" expected"; break; + case 200: s = "\"Wend\" expected"; break; + case 201: s = "\"When\" expected"; break; + case 202: s = "\"While\" expected"; break; + case 203: s = "\"Widening\" expected"; break; + case 204: s = "\"With\" expected"; break; + case 205: s = "\"WithEvents\" expected"; break; + case 206: s = "\"WriteOnly\" expected"; break; + case 207: s = "\"Xor\" expected"; break; + case 208: s = "??? expected"; break; + case 209: s = "invalid EndOfStmt"; break; case 210: s = "invalid OptionStmt"; break; - case 211: s = "invalid GlobalAttributeSection"; break; + case 211: s = "invalid OptionStmt"; break; case 212: s = "invalid GlobalAttributeSection"; break; - case 213: s = "invalid NamespaceMemberDecl"; break; - case 214: s = "invalid OptionValue"; break; - case 215: s = "invalid TypeModifier"; break; - case 216: s = "invalid NonModuleDeclaration"; break; + case 213: s = "invalid GlobalAttributeSection"; break; + case 214: s = "invalid NamespaceMemberDecl"; break; + case 215: s = "invalid OptionValue"; break; + case 216: s = "invalid TypeModifier"; break; case 217: s = "invalid NonModuleDeclaration"; break; - case 218: s = "invalid Identifier"; break; - case 219: s = "invalid TypeParameterConstraints"; break; - case 220: s = "invalid TypeParameterConstraint"; break; - case 221: s = "invalid NonArrayTypeName"; break; - case 222: s = "invalid MemberModifier"; break; - case 223: s = "invalid StructureMemberDecl"; break; + case 218: s = "invalid NonModuleDeclaration"; break; + case 219: s = "invalid Identifier"; break; + case 220: s = "invalid TypeParameterConstraints"; break; + case 221: s = "invalid TypeParameterConstraint"; break; + case 222: s = "invalid NonArrayTypeName"; break; + case 223: s = "invalid MemberModifier"; break; case 224: s = "invalid StructureMemberDecl"; break; case 225: s = "invalid StructureMemberDecl"; break; case 226: s = "invalid StructureMemberDecl"; break; case 227: s = "invalid StructureMemberDecl"; break; case 228: s = "invalid StructureMemberDecl"; break; case 229: s = "invalid StructureMemberDecl"; break; - case 230: s = "invalid InterfaceMemberDecl"; break; + case 230: s = "invalid StructureMemberDecl"; break; case 231: s = "invalid InterfaceMemberDecl"; break; - case 232: s = "invalid Charset"; break; - case 233: s = "invalid IdentifierForFieldDeclaration"; break; - case 234: s = "invalid VariableDeclaratorPartAfterIdentifier"; break; - case 235: s = "invalid AccessorDecls"; break; - case 236: s = "invalid EventAccessorDeclaration"; break; - case 237: s = "invalid OverloadableOperator"; break; - case 238: s = "invalid VariableInitializer"; break; - case 239: s = "invalid EventMemberSpecifier"; break; - case 240: s = "invalid AssignmentOperator"; break; - case 241: s = "invalid SimpleNonInvocationExpression"; break; + case 232: s = "invalid InterfaceMemberDecl"; break; + case 233: s = "invalid Charset"; break; + case 234: s = "invalid IdentifierForFieldDeclaration"; break; + case 235: s = "invalid VariableDeclaratorPartAfterIdentifier"; break; + case 236: s = "invalid AccessorDecls"; break; + case 237: s = "invalid EventAccessorDeclaration"; break; + case 238: s = "invalid OverloadableOperator"; break; + case 239: s = "invalid VariableInitializer"; break; + case 240: s = "invalid EventMemberSpecifier"; break; + case 241: s = "invalid AssignmentOperator"; break; case 242: s = "invalid SimpleNonInvocationExpression"; break; case 243: s = "invalid SimpleNonInvocationExpression"; break; case 244: s = "invalid SimpleNonInvocationExpression"; break; - case 245: s = "invalid InvocationExpression"; break; - case 246: s = "invalid InvocationExpression"; break; - case 247: s = "invalid PrimitiveTypeName"; break; - case 248: s = "invalid CastTarget"; break; - case 249: s = "invalid ComparisonExpr"; break; - case 250: s = "invalid Argument"; break; - case 251: s = "invalid QualIdentAndTypeArguments"; break; - case 252: s = "invalid AttributeArguments"; break; - case 253: s = "invalid ParameterModifier"; break; - case 254: s = "invalid Statement"; break; - case 255: s = "invalid LabelName"; break; + case 245: s = "invalid SimpleNonInvocationExpression"; break; + case 246: s = "invalid PrimitiveTypeName"; break; + case 247: s = "invalid CastTarget"; break; + case 248: s = "invalid ComparisonExpr"; break; + case 249: s = "invalid Argument"; break; + case 250: s = "invalid QualIdentAndTypeArguments"; break; + case 251: s = "invalid AttributeArguments"; break; + case 252: s = "invalid ParameterModifier"; break; + case 253: s = "invalid Statement"; break; + case 254: s = "invalid LabelName"; break; + case 255: s = "invalid EmbeddedStatement"; break; case 256: s = "invalid EmbeddedStatement"; break; case 257: s = "invalid EmbeddedStatement"; break; case 258: s = "invalid EmbeddedStatement"; break; case 259: s = "invalid EmbeddedStatement"; break; case 260: s = "invalid EmbeddedStatement"; break; case 261: s = "invalid EmbeddedStatement"; break; - case 262: s = "invalid EmbeddedStatement"; break; - case 263: s = "invalid WhileOrUntil"; break; + case 262: s = "invalid WhileOrUntil"; break; + case 263: s = "invalid SingleLineStatementList"; break; case 264: s = "invalid SingleLineStatementList"; break; - case 265: s = "invalid SingleLineStatementList"; break; - case 266: s = "invalid OnErrorStatement"; break; - case 267: s = "invalid ResumeStatement"; break; + case 265: s = "invalid OnErrorStatement"; break; + case 266: s = "invalid ResumeStatement"; break; + case 267: s = "invalid CaseClause"; break; case 268: s = "invalid CaseClause"; break; - case 269: s = "invalid CaseClause"; break; default: s = "error " + errorNumber; break; } @@ -6713,48 +6681,48 @@ out blockStmt); } static bool[,] set = { - {T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,T, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,T, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, T,x,x,x, x,x,T,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, T,x,x,x, x,x,T,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, T,x,x,x, x,x,x,T, T,T,T,x, x,x,x,x, x,x,x,T, x,x,T,x, T,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,T, x,x,x,x, x,T,T,T, x,T,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, T,T,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,x, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, T,T,T,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,T,T,T, x,x,T,T, T,T,x,T, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,T,x,x, x,x,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,T,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,T,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,T,x,x, x,T,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,T,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,x,T, x,T,T,x, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, x,x,x,x, x,x,x,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, T,x,T,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,T,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,T,x, x,x,T,x, x,x,T,x, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, T,T,x,x, x,x,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,x,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,x, x,x,x,T, T,T,x,x, x,T,x,x, T,T,x,T, T,T,x,T, x,x,x,T, x,T,x,T, x,x,x,x, T,x,x,x, x,x,T,x, T,x,x,x, x,T,T,x, T,x,x,T, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, T,T,T,T, T,x,x,x, T,T,x,x, T,x,T,x, x,T,T,x, T,x,T,T, T,T,T,x, x,x,T,T, x,x,x,x, T,x,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x}, - {x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x} + {T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,T,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,T, x,x,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,T,x, x,T,x,x, x,x,x,x, x,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,x,x,x, x,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, T,x,x,x, x,x,x,x, x,x,T,x, x,T,T,T, T,x,x,x, x,x,x,x, x,T,x,x, T,x,T,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,T,x,x, x,T,x,x, x,x,T,T, x,x,T,x, T,x,x,x, x,T,T,T, x,T,T,T, T,T,T,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,T, x,T,T,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,T,T, x,T,x,T, x,T,T,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,T,T, x,T,x,T, T,T,T,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,T,T, x,T,x,T, T,T,T,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,T,T,T, T,T,T,T, T,T,x,T, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,x,x, T,T,T,T, x,x,x,x, x,x,T,T, x,T,T,T, x,T,x,x, x,T,T,x, T,x,T,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,x, T,x,x,x, x,x}, + {x,T,T,T, T,T,T,T, T,T,T,T, T,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,T,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,x,x, T,T,T,T, x,x,x,T, x,x,T,T, x,T,T,T, x,T,x,x, x,T,T,x, T,x,T,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,x, T,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, T,x,T,T, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,x,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, T,T,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, T,x,T,T, x,x,T,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,x,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, T,T,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,x,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,T,T,T, T,T,x,T, x,T,T,x, x,x,T,T, T,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, T,x,T,T, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,x,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,T,T, x,x,x,x, x,x,T,T, x,T,T,T, x,T,x,x, x,T,T,x, T,x,T,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,x, T,x,x,x, x,x}, + {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, T,x,x,x, T,x,T,T, x,x,T,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, T,x,T,T, T,T,x,T, x,x,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,x,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, T,T,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, T,x,T,T, T,T,x,T, x,T,x,x, T,T,T,T, T,T,T,T, x,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,x,x,x, x,T,T,T, x,x,x,T, x,x,T,T, x,T,T,T, x,T,x,x, x,T,T,x, T,x,T,x, x,x,x,x, T,x,x,x, x,x,x,T, x,T,x,x, x,x,T,T, x,x,T,x, x,T,x,x, T,x,T,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,T,T, T,T,T,x, x,x,T,x, T,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x}, + {x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x} }; } // end Parser diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG index c8f9450d13..3172ea8437 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG @@ -23,19 +23,19 @@ TOKENS LiteralDate /* ----- special character ----- */ - "." "=" - "," ":" - "+" - "-" - "*" + "," + "&" "/" "\\" - "&" + "." + "!" + "-" + "+" "^" "?" - "!" + "*" "{" "}" "(" @@ -88,10 +88,16 @@ TOKENS "CObj" "Compare" "Const" + "Continue" + "CSByte" "CShort" "CSng" "CStr" "CType" + "CUInt" + "CULng" + "CUShort" + "Custom" "Date" "Decimal" "Declare" @@ -119,6 +125,7 @@ TOKENS "Function" "Get" "GetType" + "Global" "GoSub" "GoTo" "Handles" @@ -126,10 +133,12 @@ TOKENS "Implements" "Imports" "In" + "Infer" "Inherits" "Integer" "Interface" "Is" + "IsNot" "Let" "Lib" "Like" @@ -143,6 +152,7 @@ TOKENS "MyBase" "MyClass" "Namespace" + "Narrowing" "New" "Next" "Not" @@ -150,8 +160,10 @@ TOKENS "NotInheritable" "NotOverridable" "Object" + "Of" "Off" "On" + "Operator" "Option" "Optional" "Or" @@ -160,6 +172,7 @@ TOKENS "Overridable" "Overrides" "ParamArray" + "Partial" "Preserve" "Private" "Property" @@ -168,9 +181,11 @@ TOKENS "RaiseEvent" "ReadOnly" "ReDim" + "Rem" "RemoveHandler" "Resume" "Return" + "SByte" "Select" "Set" "Shadows" @@ -191,40 +206,25 @@ TOKENS "To" "True" "Try" + "TryCast" "TypeOf" + "UInteger" + "ULong" "Unicode" "Until" + "UShort" + "Using" "Variant" "Wend" "When" "While" + "Widening" "With" "WithEvents" "WriteOnly" "Xor" - "Rem" - "Continue" - "Operator" - "Using" - "IsNot" - "SByte" - "UInteger" - "ULong" - "UShort" - "CSByte" - "CUShort" - "CUInt" - "CULng" - "Global" - "TryCast" - "Of" - "Narrowing" - "Widening" - "Partial" - "Custom" /* END AUTOGENERATED TOKENS SECTION */ - PRODUCTIONS VBNET @@ -1615,9 +1615,13 @@ SimpleExpr = SimpleNonInvocationExpression { - "." IdentifierOrKeyword (. pexpr = new MemberReferenceExpression(pexpr, name); .) - | "!" IdentifierOrKeyword (. pexpr = new BinaryOperatorExpression(pexpr, BinaryOperatorType.DictionaryAccess, new PrimitiveExpression(name, name)); .) - | InvocationExpression + "." IdentifierOrKeyword + (. pexpr = new MemberReferenceExpression(pexpr, name); .) + [ IF (la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) + "(" "Of" TypeArgumentList<((MemberReferenceExpression)pexpr).TypeArguments> ")" + ] + | "!" IdentifierOrKeyword (. pexpr = new BinaryOperatorExpression(pexpr, BinaryOperatorType.DictionaryAccess, new PrimitiveExpression(name, name)); .) + | InvocationExpression } . @@ -1644,8 +1648,9 @@ SimpleNonInvocationExpression | "Nothing" (.pexpr = new PrimitiveExpression(null, "null"); .) | /* 11.4.2 */ "(" Expr ")" (. pexpr = new ParenthesizedExpression(expr); .) | /* 11.4.4 */ Identifier - (. pexpr = new IdentifierExpression(t.val); .) - (. pexpr.StartLocation = t.Location; pexpr.EndLocation = t.EndLocation; .) + (. pexpr = new IdentifierExpression(t.val); + pexpr.StartLocation = t.Location; pexpr.EndLocation = t.EndLocation; + .) [ IF (la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) "(" "Of" TypeArgumentList<((IdentifierExpression)pexpr).TypeArguments> ")" ] @@ -1719,36 +1724,15 @@ ConditionalExpression . InvocationExpression -(. List typeParameters = new List(); - List parameters = null; - TypeReference type; .) +(. List parameters = null; .) = "(" (. Location start = t.Location; .) - ( "Of" - TypeName (. if (type != null) typeParameters.Add(type); .) - { - "," - TypeName (. if (type != null) typeParameters.Add(type); .) - } - ")" - ( - "." Identifier - (. pexpr = new MemberReferenceExpression(GetTypeReferenceExpression(pexpr, typeParameters), t.val); .) - | "(" - ArgumentList - ")" - (. - pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); - SetParent(parameters, pexpr); - .) - ) - | ArgumentList - ")" - (. - pexpr = CreateInvocationExpression(pexpr, parameters, typeParameters); - SetParent(parameters, pexpr); - .) - ) + ArgumentList + ")" + (. + pexpr = new InvocationExpression(pexpr, parameters); + SetParent(parameters, pexpr); + .) (. pexpr.StartLocation = start; pexpr.EndLocation = t.Location; .) . diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs index 9bc9f51f2e..06aa74906a 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNetParser.cs @@ -209,34 +209,6 @@ namespace ICSharpCode.NRefactory.Parser.VB return m.Contains(Modifiers.Abstract); } - TypeReferenceExpression GetTypeReferenceExpression(Expression expr, List genericTypes) - { - TypeReferenceExpression tre = expr as TypeReferenceExpression; - if (tre != null) { - return new TypeReferenceExpression(new TypeReference(tre.TypeReference.Type, tre.TypeReference.PointerNestingLevel, tre.TypeReference.RankSpecifier, genericTypes)); - } - StringBuilder b = new StringBuilder(); - if (!WriteFullTypeName(b, expr)) { - // there is some TypeReferenceExpression hidden in the expression - while (expr is MemberReferenceExpression) { - expr = ((MemberReferenceExpression)expr).TargetObject; - } - tre = expr as TypeReferenceExpression; - if (tre != null) { - TypeReference typeRef = tre.TypeReference; - if (typeRef.GenericTypes.Count == 0) { - typeRef = typeRef.Clone(); - typeRef.Type += "." + b.ToString(); - typeRef.GenericTypes.AddRange(genericTypes); - } else { - typeRef = new InnerClassTypeReference(typeRef, b.ToString(), genericTypes); - } - return new TypeReferenceExpression(typeRef); - } - } - return new TypeReferenceExpression(new TypeReference(b.ToString(), 0, null, genericTypes)); - } - /* Writes the type name represented through the expression into the string builder. */ /* Returns true when the expression was converted successfully, returns false when */ /* There was an unknown expression (e.g. TypeReferenceExpression) in it */ @@ -271,21 +243,7 @@ namespace ICSharpCode.NRefactory.Parser.VB if (!(expr is PrimitiveExpression) || (expr as PrimitiveExpression).StringValue != "0") Error("lower bound of array must be zero"); } - - InvocationExpression CreateInvocationExpression(Expression target, List parameters, List typeArguments) - { - if (typeArguments != null && typeArguments.Count > 0) { - if (target is IdentifierExpression) { - ((IdentifierExpression)target).TypeArguments = typeArguments; - } else if (target is MemberReferenceExpression) { - ((MemberReferenceExpression)target).TypeArguments = typeArguments; - } else { - Error("Type arguments only allowed on IdentifierExpression and MemberReferenceExpression"); - } - } - return new InvocationExpression(target, parameters); - } - + /// /// Adds a child item to a collection stored in the parent node. /// Also set's the item's parent to . diff --git a/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs b/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs index c60f092a64..dee861f1c4 100644 --- a/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs +++ b/src/Libraries/NRefactory/Test/Lexer/VBNet/LexerTests.cs @@ -1,13 +1,7 @@ -// -// -// -// -// $Revision$ -// - using System; using System.IO; using NUnit.Framework; + using ICSharpCode.NRefactory.Parser; using ICSharpCode.NRefactory.Parser.VB; using ICSharpCode.NRefactory.PrettyPrinter; @@ -23,17 +17,17 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB } [Test] - public void TestDot() + public void TestAssign() { - ILexer lexer = GenerateLexer(new StringReader(".")); - Assert.AreEqual(Tokens.Dot, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("=")); + Assert.AreEqual(Tokens.Assign, lexer.NextToken().kind); } [Test] - public void TestAssign() + public void TestColon() { - ILexer lexer = GenerateLexer(new StringReader("=")); - Assert.AreEqual(Tokens.Assign, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader(":")); + Assert.AreEqual(Tokens.Colon, lexer.NextToken().kind); } [Test] @@ -44,52 +38,52 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB } [Test] - public void TestColon() + public void TestConcatString() { - ILexer lexer = GenerateLexer(new StringReader(":")); - Assert.AreEqual(Tokens.Colon, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("&")); + Assert.AreEqual(Tokens.ConcatString, lexer.NextToken().kind); } [Test] - public void TestPlus() + public void TestDiv() { - ILexer lexer = GenerateLexer(new StringReader("+")); - Assert.AreEqual(Tokens.Plus, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("/")); + Assert.AreEqual(Tokens.Div, lexer.NextToken().kind); } [Test] - public void TestMinus() + public void TestDivInteger() { - ILexer lexer = GenerateLexer(new StringReader("-")); - Assert.AreEqual(Tokens.Minus, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("\\")); + Assert.AreEqual(Tokens.DivInteger, lexer.NextToken().kind); } [Test] - public void TestTimes() + public void TestDot() { - ILexer lexer = GenerateLexer(new StringReader("*")); - Assert.AreEqual(Tokens.Times, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader(".")); + Assert.AreEqual(Tokens.Dot, lexer.NextToken().kind); } [Test] - public void TestDiv() + public void TestExclamationMark() { - ILexer lexer = GenerateLexer(new StringReader("/")); - Assert.AreEqual(Tokens.Div, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("!")); + Assert.AreEqual(Tokens.ExclamationMark, lexer.NextToken().kind); } [Test] - public void TestDivInteger() + public void TestMinus() { - ILexer lexer = GenerateLexer(new StringReader("\\")); - Assert.AreEqual(Tokens.DivInteger, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("-")); + Assert.AreEqual(Tokens.Minus, lexer.NextToken().kind); } [Test] - public void TestConcatString() + public void TestPlus() { - ILexer lexer = GenerateLexer(new StringReader("&")); - Assert.AreEqual(Tokens.ConcatString, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("+")); + Assert.AreEqual(Tokens.Plus, lexer.NextToken().kind); } [Test] @@ -107,10 +101,10 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB } [Test] - public void TestExclamationMark() + public void TestTimes() { - ILexer lexer = GenerateLexer(new StringReader("!")); - Assert.AreEqual(Tokens.ExclamationMark, lexer.NextToken().kind); + ILexer lexer = GenerateLexer(new StringReader("*")); + Assert.AreEqual(Tokens.Times, lexer.NextToken().kind); } [Test] @@ -434,6 +428,18 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Const, lexer.NextToken().kind); } [Test()] + public void TestContinue() + { + ILexer lexer = GenerateLexer(new StringReader("Continue")); + Assert.AreEqual(Tokens.Continue, lexer.NextToken().kind); + } + [Test()] + public void TestCSByte() + { + ILexer lexer = GenerateLexer(new StringReader("CSByte")); + Assert.AreEqual(Tokens.CSByte, lexer.NextToken().kind); + } + [Test()] public void TestCShort() { ILexer lexer = GenerateLexer(new StringReader("CShort")); @@ -458,6 +464,30 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.CType, lexer.NextToken().kind); } [Test()] + public void TestCUInt() + { + ILexer lexer = GenerateLexer(new StringReader("CUInt")); + Assert.AreEqual(Tokens.CUInt, lexer.NextToken().kind); + } + [Test()] + public void TestCULng() + { + ILexer lexer = GenerateLexer(new StringReader("CULng")); + Assert.AreEqual(Tokens.CULng, lexer.NextToken().kind); + } + [Test()] + public void TestCUShort() + { + ILexer lexer = GenerateLexer(new StringReader("CUShort")); + Assert.AreEqual(Tokens.CUShort, lexer.NextToken().kind); + } + [Test()] + public void TestCustom() + { + ILexer lexer = GenerateLexer(new StringReader("Custom")); + Assert.AreEqual(Tokens.Custom, lexer.NextToken().kind); + } + [Test()] public void TestDate() { ILexer lexer = GenerateLexer(new StringReader("Date")); @@ -620,6 +650,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.GetType, lexer.NextToken().kind); } [Test()] + public void TestGlobal() + { + ILexer lexer = GenerateLexer(new StringReader("Global")); + Assert.AreEqual(Tokens.Global, lexer.NextToken().kind); + } + [Test()] public void TestGoSub() { ILexer lexer = GenerateLexer(new StringReader("GoSub")); @@ -662,6 +698,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.In, lexer.NextToken().kind); } [Test()] + public void TestInfer() + { + ILexer lexer = GenerateLexer(new StringReader("Infer")); + Assert.AreEqual(Tokens.Infer, lexer.NextToken().kind); + } + [Test()] public void TestInherits() { ILexer lexer = GenerateLexer(new StringReader("Inherits")); @@ -686,6 +728,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Is, lexer.NextToken().kind); } [Test()] + public void TestIsNot() + { + ILexer lexer = GenerateLexer(new StringReader("IsNot")); + Assert.AreEqual(Tokens.IsNot, lexer.NextToken().kind); + } + [Test()] public void TestLet() { ILexer lexer = GenerateLexer(new StringReader("Let")); @@ -764,6 +812,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Namespace, lexer.NextToken().kind); } [Test()] + public void TestNarrowing() + { + ILexer lexer = GenerateLexer(new StringReader("Narrowing")); + Assert.AreEqual(Tokens.Narrowing, lexer.NextToken().kind); + } + [Test()] public void TestNew() { ILexer lexer = GenerateLexer(new StringReader("New")); @@ -806,6 +860,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Object, lexer.NextToken().kind); } [Test()] + public void TestOf() + { + ILexer lexer = GenerateLexer(new StringReader("Of")); + Assert.AreEqual(Tokens.Of, lexer.NextToken().kind); + } + [Test()] public void TestOff() { ILexer lexer = GenerateLexer(new StringReader("Off")); @@ -818,6 +878,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.On, lexer.NextToken().kind); } [Test()] + public void TestOperator() + { + ILexer lexer = GenerateLexer(new StringReader("Operator")); + Assert.AreEqual(Tokens.Operator, lexer.NextToken().kind); + } + [Test()] public void TestOption() { ILexer lexer = GenerateLexer(new StringReader("Option")); @@ -866,6 +932,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.ParamArray, lexer.NextToken().kind); } [Test()] + public void TestPartial() + { + ILexer lexer = GenerateLexer(new StringReader("Partial")); + Assert.AreEqual(Tokens.Partial, lexer.NextToken().kind); + } + [Test()] public void TestPreserve() { ILexer lexer = GenerateLexer(new StringReader("Preserve")); @@ -913,6 +985,7 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB ILexer lexer = GenerateLexer(new StringReader("ReDim")); Assert.AreEqual(Tokens.ReDim, lexer.NextToken().kind); } + [Test()] public void TestRemoveHandler() { @@ -932,6 +1005,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Return, lexer.NextToken().kind); } [Test()] + public void TestSByte() + { + ILexer lexer = GenerateLexer(new StringReader("SByte")); + Assert.AreEqual(Tokens.SByte, lexer.NextToken().kind); + } + [Test()] public void TestSelect() { ILexer lexer = GenerateLexer(new StringReader("Select")); @@ -1052,12 +1131,30 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Try, lexer.NextToken().kind); } [Test()] + public void TestTryCast() + { + ILexer lexer = GenerateLexer(new StringReader("TryCast")); + Assert.AreEqual(Tokens.TryCast, lexer.NextToken().kind); + } + [Test()] public void TestTypeOf() { ILexer lexer = GenerateLexer(new StringReader("TypeOf")); Assert.AreEqual(Tokens.TypeOf, lexer.NextToken().kind); } [Test()] + public void TestUInteger() + { + ILexer lexer = GenerateLexer(new StringReader("UInteger")); + Assert.AreEqual(Tokens.UInteger, lexer.NextToken().kind); + } + [Test()] + public void TestULong() + { + ILexer lexer = GenerateLexer(new StringReader("ULong")); + Assert.AreEqual(Tokens.ULong, lexer.NextToken().kind); + } + [Test()] public void TestUnicode() { ILexer lexer = GenerateLexer(new StringReader("Unicode")); @@ -1070,6 +1167,18 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.Until, lexer.NextToken().kind); } [Test()] + public void TestUShort() + { + ILexer lexer = GenerateLexer(new StringReader("UShort")); + Assert.AreEqual(Tokens.UShort, lexer.NextToken().kind); + } + [Test()] + public void TestUsing() + { + ILexer lexer = GenerateLexer(new StringReader("Using")); + Assert.AreEqual(Tokens.Using, lexer.NextToken().kind); + } + [Test()] public void TestVariant() { ILexer lexer = GenerateLexer(new StringReader("Variant")); @@ -1094,6 +1203,12 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB Assert.AreEqual(Tokens.While, lexer.NextToken().kind); } [Test()] + public void TestWidening() + { + ILexer lexer = GenerateLexer(new StringReader("Widening")); + Assert.AreEqual(Tokens.Widening, lexer.NextToken().kind); + } + [Test()] public void TestWith() { ILexer lexer = GenerateLexer(new StringReader("With")); @@ -1117,119 +1232,5 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.VB ILexer lexer = GenerateLexer(new StringReader("Xor")); Assert.AreEqual(Tokens.Xor, lexer.NextToken().kind); } - [Test()] - public void TestContinue() - { - ILexer lexer = GenerateLexer(new StringReader("Continue")); - Assert.AreEqual(Tokens.Continue, lexer.NextToken().kind); - } - [Test()] - public void TestOperator() - { - ILexer lexer = GenerateLexer(new StringReader("Operator")); - Assert.AreEqual(Tokens.Operator, lexer.NextToken().kind); - } - [Test()] - public void TestUsing() - { - ILexer lexer = GenerateLexer(new StringReader("Using")); - Assert.AreEqual(Tokens.Using, lexer.NextToken().kind); - } - [Test()] - public void TestIsNot() - { - ILexer lexer = GenerateLexer(new StringReader("IsNot")); - Assert.AreEqual(Tokens.IsNot, lexer.NextToken().kind); - } - [Test()] - public void TestSByte() - { - ILexer lexer = GenerateLexer(new StringReader("SByte")); - Assert.AreEqual(Tokens.SByte, lexer.NextToken().kind); - } - [Test()] - public void TestUInteger() - { - ILexer lexer = GenerateLexer(new StringReader("UInteger")); - Assert.AreEqual(Tokens.UInteger, lexer.NextToken().kind); - } - [Test()] - public void TestULong() - { - ILexer lexer = GenerateLexer(new StringReader("ULong")); - Assert.AreEqual(Tokens.ULong, lexer.NextToken().kind); - } - [Test()] - public void TestUShort() - { - ILexer lexer = GenerateLexer(new StringReader("UShort")); - Assert.AreEqual(Tokens.UShort, lexer.NextToken().kind); - } - [Test()] - public void TestCSByte() - { - ILexer lexer = GenerateLexer(new StringReader("CSByte")); - Assert.AreEqual(Tokens.CSByte, lexer.NextToken().kind); - } - [Test()] - public void TestCUShort() - { - ILexer lexer = GenerateLexer(new StringReader("CUShort")); - Assert.AreEqual(Tokens.CUShort, lexer.NextToken().kind); - } - [Test()] - public void TestCUInt() - { - ILexer lexer = GenerateLexer(new StringReader("CUInt")); - Assert.AreEqual(Tokens.CUInt, lexer.NextToken().kind); - } - [Test()] - public void TestCULng() - { - ILexer lexer = GenerateLexer(new StringReader("CULng")); - Assert.AreEqual(Tokens.CULng, lexer.NextToken().kind); - } - [Test()] - public void TestGlobal() - { - ILexer lexer = GenerateLexer(new StringReader("Global")); - Assert.AreEqual(Tokens.Global, lexer.NextToken().kind); - } - [Test()] - public void TestTryCast() - { - ILexer lexer = GenerateLexer(new StringReader("TryCast")); - Assert.AreEqual(Tokens.TryCast, lexer.NextToken().kind); - } - [Test()] - public void TestOf() - { - ILexer lexer = GenerateLexer(new StringReader("Of")); - Assert.AreEqual(Tokens.Of, lexer.NextToken().kind); - } - [Test()] - public void TestNarrowing() - { - ILexer lexer = GenerateLexer(new StringReader("Narrowing")); - Assert.AreEqual(Tokens.Narrowing, lexer.NextToken().kind); - } - [Test()] - public void TestWidening() - { - ILexer lexer = GenerateLexer(new StringReader("Widening")); - Assert.AreEqual(Tokens.Widening, lexer.NextToken().kind); - } - [Test()] - public void TestPartial() - { - ILexer lexer = GenerateLexer(new StringReader("Partial")); - Assert.AreEqual(Tokens.Partial, lexer.NextToken().kind); - } - [Test()] - public void TestCustom() - { - ILexer lexer = GenerateLexer(new StringReader("Custom")); - Assert.AreEqual(Tokens.Custom, lexer.NextToken().kind); - } } } diff --git a/src/Libraries/NRefactory/Test/Parser/Expressions/AddressOfExpressionTests.cs b/src/Libraries/NRefactory/Test/Parser/Expressions/AddressOfExpressionTests.cs index cacbb8881c..d73593aca3 100644 --- a/src/Libraries/NRefactory/Test/Parser/Expressions/AddressOfExpressionTests.cs +++ b/src/Libraries/NRefactory/Test/Parser/Expressions/AddressOfExpressionTests.cs @@ -38,6 +38,16 @@ namespace ICSharpCode.NRefactory.Tests.Ast Assert.AreEqual("X", ((IdentifierExpression)ae.Expression).TypeArguments[0].Type); } + [Test] + public void MemberReferenceAddressOfExpressionTest() + { + AddressOfExpression ae = ParseUtilVBNet.ParseExpression("AddressOf Me.t(Of X)"); + Assert.IsNotNull(ae); + Assert.IsInstanceOfType(typeof(MemberReferenceExpression), ae.Expression); + Assert.AreEqual("t", ((MemberReferenceExpression)ae.Expression).MemberName, "t"); + Assert.IsInstanceOfType(typeof(ThisReferenceExpression), ((MemberReferenceExpression)ae.Expression).TargetObject); + } + #endregion #region C# diff --git a/src/Libraries/NRefactory/Test/Parser/Expressions/MemberReferenceExpressionTests.cs b/src/Libraries/NRefactory/Test/Parser/Expressions/MemberReferenceExpressionTests.cs index 439f6554a6..e9abbd45a7 100644 --- a/src/Libraries/NRefactory/Test/Parser/Expressions/MemberReferenceExpressionTests.cs +++ b/src/Libraries/NRefactory/Test/Parser/Expressions/MemberReferenceExpressionTests.cs @@ -103,11 +103,9 @@ namespace ICSharpCode.NRefactory.Tests.Ast { MemberReferenceExpression fre = ParseUtilVBNet.ParseExpression("SomeClass(of string).myField"); Assert.AreEqual("myField", fre.MemberName); - Assert.IsTrue(fre.TargetObject is TypeReferenceExpression); - TypeReference tr = ((TypeReferenceExpression)fre.TargetObject).TypeReference; - Assert.AreEqual("SomeClass", tr.Type); - Assert.AreEqual(1, tr.GenericTypes.Count); - Assert.AreEqual("System.String", tr.GenericTypes[0].SystemType); + Assert.IsInstanceOfType(typeof(IdentifierExpression), fre.TargetObject); + TypeReference tr = ((IdentifierExpression)fre.TargetObject).TypeArguments[0]; + Assert.AreEqual("String", tr.Type); } [Test] @@ -115,11 +113,12 @@ namespace ICSharpCode.NRefactory.Tests.Ast { MemberReferenceExpression fre = ParseUtilVBNet.ParseExpression("System.Subnamespace.SomeClass(of string).myField"); Assert.AreEqual("myField", fre.MemberName); - Assert.IsTrue(fre.TargetObject is TypeReferenceExpression); - TypeReference tr = ((TypeReferenceExpression)fre.TargetObject).TypeReference; - Assert.AreEqual("System.Subnamespace.SomeClass", tr.Type); - Assert.AreEqual(1, tr.GenericTypes.Count); - Assert.AreEqual("System.String", tr.GenericTypes[0].SystemType); + Assert.IsInstanceOfType(typeof(MemberReferenceExpression), fre.TargetObject); + + MemberReferenceExpression inner = (MemberReferenceExpression)fre.TargetObject; + Assert.AreEqual("SomeClass", inner.MemberName); + Assert.AreEqual(1, inner.TypeArguments.Count); + Assert.AreEqual("System.String", inner.TypeArguments[0].SystemType); } [Test] @@ -127,13 +126,12 @@ namespace ICSharpCode.NRefactory.Tests.Ast { MemberReferenceExpression fre = ParseUtilVBNet.ParseExpression("Global.System.Subnamespace.SomeClass(of string).myField"); Assert.AreEqual("myField", fre.MemberName); - Assert.IsTrue(fre.TargetObject is TypeReferenceExpression); - TypeReference tr = ((TypeReferenceExpression)fre.TargetObject).TypeReference; - Assert.IsFalse(tr is InnerClassTypeReference); - Assert.AreEqual("System.Subnamespace.SomeClass", tr.Type); - Assert.AreEqual(1, tr.GenericTypes.Count); - Assert.AreEqual("System.String", tr.GenericTypes[0].SystemType); - Assert.IsTrue(tr.IsGlobal); + Assert.IsInstanceOfType(typeof(MemberReferenceExpression), fre.TargetObject); + MemberReferenceExpression inner = (MemberReferenceExpression)fre.TargetObject; + + Assert.AreEqual("SomeClass", inner.MemberName); + Assert.AreEqual(1, inner.TypeArguments.Count); + Assert.AreEqual("System.String", inner.TypeArguments[0].SystemType); } [Test] @@ -141,15 +139,12 @@ namespace ICSharpCode.NRefactory.Tests.Ast { MemberReferenceExpression fre = ParseUtilVBNet.ParseExpression("MyType(of string).InnerClass(of integer).myField"); Assert.AreEqual("myField", fre.MemberName); - Assert.IsTrue(fre.TargetObject is TypeReferenceExpression); - InnerClassTypeReference ic = (InnerClassTypeReference)((TypeReferenceExpression)fre.TargetObject).TypeReference; - Assert.AreEqual("InnerClass", ic.Type); - Assert.AreEqual(1, ic.GenericTypes.Count); - Assert.AreEqual("System.Int32", ic.GenericTypes[0].SystemType); - Assert.AreEqual("MyType", ic.BaseType.Type); - Assert.AreEqual(1, ic.BaseType.GenericTypes.Count); - Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].SystemType); + Assert.IsInstanceOfType(typeof(MemberReferenceExpression), fre.TargetObject); + + MemberReferenceExpression inner = (MemberReferenceExpression)fre.TargetObject; + Assert.AreEqual("InnerClass", inner.MemberName); } + #endregion } }