Browse Source

- reintroduced Identifier-Blocks

- having problems with member variable declarations

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/vbnet@6133 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 16 years ago
parent
commit
20cbf34bd8
  1. 14
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg
  2. 4
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.cs
  3. 1188
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs
  4. 1
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame
  5. 18
      src/Libraries/NRefactory/Test/Lexer/VBNet/LexerContextTests.cs
  6. 11
      src/Main/Base/Test/VBExpressionFinderTests.cs
  7. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetExpressionFinder.cs

14
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.atg

@ -314,14 +314,13 @@ TypeDeclaration = @@ -314,14 +314,13 @@ TypeDeclaration =
( ClassOrModuleOrStructureTypeDeclaration |
DelegateTypeDeclaration )
.
ClassOrModuleOrStructureTypeDeclaration =
(. PushContext(Context.TypeDeclaration, la, t); .)
( "Module" | "Class" | "Structure" ) (. PushContext(Context.Identifier, la, t); .) (.OnEachPossiblePath: SetIdentifierExpected(la); .) ANY (. PopContext(); .)
[ "(" "Of" [ "Out" | "In" ] IdentifierExceptOut [ (. PushContext(Context.Type, la, t); .) "As" GenericConstraintList (. PopContext(); .) ] { "," [ "Out" | "In" ] IdentifierExceptOut [ (. PushContext(Context.Type, la, t); .) "As" GenericConstraintList (. PopContext(); .) ] } ")" ] { ANY } [ StatementTerminator ]
[ "(" "Of" [ "Out" | "In" ] IdentifierExceptOut [ (. PushContext(Context.Type, la, t); .) "As" GenericConstraintList (. PopContext(); .) ] { "," [ "Out" | "In" ] IdentifierExceptOut [ (. PushContext(Context.Type, la, t); .) "As" GenericConstraintList (. PopContext(); .) ] } ")" ] StatementTerminator
[ "Inherits" { ANY } StatementTerminator ]
[ "Implements" { ANY } StatementTerminator ]
(. PushContext(Context.TypeDeclaration, la, t); .)
{ MemberDeclaration }
(. isMissingModifier = true; Console.WriteLine("is true"); .) { MemberDeclaration (. isMissingModifier = true; .) } (. isMissingModifier = false; Console.WriteLine("is false"); .)
"End" ( "Module" | "Class" | "Structure" ) StatementTerminator
(. PopContext(); .)
.
@ -341,8 +340,8 @@ DelegateTypeDeclaration = @@ -341,8 +340,8 @@ DelegateTypeDeclaration =
.
MemberDeclaration =
(. PushContext(Context.Member, la, t); .)
{ AttributeBlock } { MemberModifier }
(. PushContext(Context.Member, la, t); isMissingModifier = true; .)
{ AttributeBlock } { MemberModifier (. isMissingModifier = false; .) } (. isMissingModifier = false; .)
(
MemberVariableOrConstantDeclaration |
SubOrFunctionDeclaration |
@ -363,11 +362,13 @@ SubOrFunctionDeclaration = @@ -363,11 +362,13 @@ SubOrFunctionDeclaration =
.
ExternalMemberDeclaration =
(. isMissingModifier = false; .)
"Declare" [ "Ansi" | "Unicode" | "Auto" ] ( "Sub" | "Function" ) (. PushContext(Context.Identifier, la, t); .) (.OnEachPossiblePath: SetIdentifierExpected(la); .) Identifier (. PopContext(); .)
"Lib" LiteralString [ "Alias" LiteralString ] [ "(" [ ParameterList ] ")" ] [ (. PushContext(Context.Type, la, t); .) "As" TypeName (. PopContext(); .) ] StatementTerminator
.
EventMemberDeclaration =
(. isMissingModifier = false; .)
"Event" (. PushContext(Context.Identifier, la, t); .) (.OnEachPossiblePath: SetIdentifierExpected(la); .) Identifier (. PopContext(); .) ( (. PushContext(Context.Type, la, t); .) "As" TypeName (. PopContext(); .) | [ "(" [ ParameterList ] ")" ] )
[ "Implements" TypeName /*"." IdentifierOrKeyword*/ { "," TypeName /*"." IdentifierOrKeyword*/ } ]
/* the TypeName production already allows the "." IdentifierOrKeyword syntax, so to avoid an ambiguous grammer we just leave that out */
@ -375,6 +376,7 @@ EventMemberDeclaration = @@ -375,6 +376,7 @@ EventMemberDeclaration =
.
CustomEventMemberDeclaration =
(. isMissingModifier = false; .)
"Custom" EventMemberDeclaration
{
{ AttributeBlock } ( "AddHandler" | "RemoveHandler" | "RaiseEvent" ) "(" ParameterList ")"

4
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/ExpressionFinder.cs

@ -129,6 +129,10 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -129,6 +129,10 @@ namespace ICSharpCode.NRefactory.Parser.VB
get { return wasQualifierTokenAtStart; }
}
public bool IsMissingModifier {
get { return isMissingModifier; }
}
public List<Token> Errors {
get { return errors; }
}

1188
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

1
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/PushParser.frame

@ -39,6 +39,7 @@ partial class ExpressionFinder { @@ -39,6 +39,7 @@ partial class ExpressionFinder {
bool readXmlIdentifier = false;
bool identifierExpected = false;
bool nextTokenIsStartOfImportsOrAccessExpression = false;
bool isMissingModifier = false;
List<Token> errors = new List<Token>();
public ExpressionFinder()

18
src/Libraries/NRefactory/Test/Lexer/VBNet/LexerContextTests.cs

@ -39,9 +39,9 @@ exit Global @@ -39,9 +39,9 @@ exit Global
End Class
",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -77,9 +77,9 @@ exit Global @@ -77,9 +77,9 @@ exit Global
End Class
",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -130,9 +130,9 @@ End Class @@ -130,9 +130,9 @@ End Class
@"enter Global
enter Attribute
exit Attribute
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -167,9 +167,9 @@ End Class @@ -167,9 +167,9 @@ End Class
@"enter Global
enter Attribute
exit Attribute
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -202,9 +202,9 @@ exit Global @@ -202,9 +202,9 @@ exit Global
End Class
",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Attribute
exit Attribute
@ -240,9 +240,9 @@ exit Global @@ -240,9 +240,9 @@ exit Global
End Class
",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -286,9 +286,9 @@ exit Global @@ -286,9 +286,9 @@ exit Global
End Class
",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -354,9 +354,9 @@ exit Global @@ -354,9 +354,9 @@ exit Global
End Sub
End Class",
@"enter Global
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier
@ -430,9 +430,9 @@ End Module", @@ -430,9 +430,9 @@ End Module",
exit Importable
enter Importable
exit Importable
enter TypeDeclaration
enter Identifier
exit Identifier
enter TypeDeclaration
enter Member
enter Identifier
exit Identifier

11
src/Main/Base/Test/VBExpressionFinderTests.cs

@ -153,6 +153,17 @@ End Module", "(", 1, "", ExpressionContext.Parameter); @@ -153,6 +153,17 @@ End Module", "(", 1, "", ExpressionContext.Parameter);
{
ContextTest(program4, "Dim ", "Dim".Length, ExpressionContext.MethodBody);
}
[Test, Ignore]
public void ContextInModule()
{
ContextTest(@"Module Test
End Module", @"Module Test
", @"Module Test
".Length, ExpressionContext.TypeDeclaration);
}
#endregion
#region FindFull

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/VBNet/VBNetExpressionFinder.cs

@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet @@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
var block = p.CurrentBlock;
ExpressionContext context = p.IsIdentifierExpected ? ExpressionContext.IdentifierExpected : GetContext(block);
ExpressionContext context = p.IsIdentifierExpected && !p.IsMissingModifier ? ExpressionContext.IdentifierExpected : GetContext(block);
if (t.Location < targetPosition) {
p.InformToken(t);
@ -81,6 +81,8 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet @@ -81,6 +81,8 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
try {
expectedSet = p.GetExpectedSet();
if (p.IsMissingModifier)
expectedSet.Set(Tokens.Identifier, false);
} catch (InvalidOperationException) {
expectedSet = null;
}

Loading…
Cancel
Save