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) { @@ -4629,7 +4629,7 @@ la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon) {
Expect(1);
#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) {
lexer.NextToken();

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

@ -2146,7 +2146,7 @@ PrimaryExpr<out Expression pexpr> @@ -2146,7 +2146,7 @@ PrimaryExpr<out Expression pexpr>
| IF (la.kind == Tokens.Identifier && Peek(1).kind == Tokens.DoubleColon)
ident (. type = new TypeReference(t.val); .)
"::" (. 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: */
| ident (. pexpr = new IdentifierExpression(t.val); .)
/*--- parenthesized expression: */

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

@ -26,6 +26,22 @@ namespace ICSharpCode.NRefactory.Tests.AST @@ -26,6 +26,22 @@ namespace ICSharpCode.NRefactory.Tests.AST
public class TypeReferenceExpressionTests
{
#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]
public void IntReferenceExpression()
{

Loading…
Cancel
Save