Browse Source

Fixed SD2-752: Exception when classes use "global::" as base class reference

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1275 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
73a9ab7d0c
  1. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  2. 2
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  3. 16
      src/Libraries/NRefactory/Test/Parser/Expressions/TypeReferenceExpressionTests.cs

2
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

@ -4629,7 +4629,7 @@ la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon) {
Expect(1); Expect(1);
#line 2149 "cs.ATG" #line 2149 "cs.ATG"
if (type.Type == "global") { type.IsGlobal = true; type.Type = t.val; } else type.Type += "." + t.val; if (type.Type == "global") { type.IsGlobal = true; type.Type = (t.val ?? "?"); } else type.Type += "." + (t.val ?? "?");
} else if (la.kind == 1) { } else if (la.kind == 1) {
lexer.NextToken(); lexer.NextToken();

2
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -2146,7 +2146,7 @@ PrimaryExpr<out Expression pexpr>
| IF (la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon) | IF (la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon)
ident (. type = new TypeReference(t.val); .) ident (. type = new TypeReference(t.val); .)
"::" (. pexpr = new TypeReferenceExpression(type); .) "::" (. pexpr = new TypeReferenceExpression(type); .)
ident (. if (type.Type == "global") { type.IsGlobal = true; type.Type = t.val; } else type.Type += "." + t.val; .) ident (. if (type.Type == "global") { type.IsGlobal = true; type.Type = (t.val ?? "?"); } else type.Type += "." + (t.val ?? "?"); .)
/*--- simple name: */ /*--- simple name: */
| ident (. pexpr = new IdentifierExpression(t.val); .) | ident (. pexpr = new IdentifierExpression(t.val); .)
/*--- parenthesized expression: */ /*--- parenthesized expression: */

16
src/Libraries/NRefactory/Test/Parser/Expressions/TypeReferenceExpressionTests.cs

@ -26,6 +26,22 @@ namespace ICSharpCode.NRefactory.Tests.AST
public class TypeReferenceExpressionTests public class TypeReferenceExpressionTests
{ {
#region C# #region C#
[Test]
public void GlobalTypeReferenceExpression()
{
TypeReferenceExpression tr = ParseUtilCSharp.ParseExpression<TypeReferenceExpression>("global::System");
Assert.AreEqual("System", tr.TypeReference.Type);
Assert.IsTrue(tr.TypeReference.IsGlobal);
}
[Test]
public void GlobalTypeReferenceExpressionWithoutTypeName()
{
TypeReferenceExpression tr = ParseUtilCSharp.ParseExpression<TypeReferenceExpression>("global::", true);
Assert.AreEqual("?", tr.TypeReference.Type);
Assert.IsTrue(tr.TypeReference.IsGlobal);
}
[Test] [Test]
public void IntReferenceExpression() public void IntReferenceExpression()
{ {

Loading…
Cancel
Save