diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
index 4ecd624577..0f6e79eab3 100644
--- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
+++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
@@ -2874,7 +2874,7 @@ namespace ICSharpCode.NRefactory.CSharp
#region Undocumented expressions
public override object Visit (Arglist argListExpression)
{
- var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.ArgListAccess };
+ var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.ArgList };
result.AddChild (new CSharpTokenNode (Convert (argListExpression.Location), "__arglist".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (argListExpression);
if (location != null)
@@ -2889,7 +2889,7 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (MakeRefExpr makeRefExpr)
{
- var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefValue };
+ var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.MakeRef };
result.AddChild (new CSharpTokenNode (Convert (makeRefExpr.Location), "__makeref".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (makeRefExpr);
if (location != null)
@@ -2903,7 +2903,7 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (RefTypeExpr refTypeExpr)
{
- var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefValue };
+ var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefType };
result.AddChild (new CSharpTokenNode (Convert (refTypeExpr.Location), "__reftype".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (refTypeExpr);
if (location != null)
diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/UndocumentedExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/UndocumentedExpressionTests.cs
new file mode 100644
index 0000000000..08c0080247
--- /dev/null
+++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/UndocumentedExpressionTests.cs
@@ -0,0 +1,132 @@
+// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using NUnit.Framework;
+
+namespace ICSharpCode.NRefactory.CSharp.Parser.Expression
+{
+ [TestFixture]
+ public class UndocumentedExpressionTests
+ {
+ [Test, Ignore("Name on ParameterDeclaration is missing")]
+ public void ArglistAccess()
+ {
+ ParseUtilCSharp.AssertTypeMember(
+ @"public static int GetArgCount(__arglist)
+ {
+ ArgIterator argIterator = new ArgIterator(__arglist);
+ return argIterator.GetRemainingCount();
+ }",
+ new MethodDeclaration {
+ Modifiers = Modifiers.Public | Modifiers.Static,
+ ReturnType = new PrimitiveType("int"),
+ Name = "GetArgCount",
+ Parameters = {
+ new ParameterDeclaration(AstType.Null, "__arglist")
+ },
+ Body = new BlockStatement {
+ new VariableDeclarationStatement(
+ new SimpleType("ArgIterator"),
+ "argIterator",
+ new ObjectCreateExpression(
+ new SimpleType("ArgIterator"),
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.ArgListAccess
+ })
+ ),
+ new ReturnStatement(new IdentifierExpression("argIterator").Invoke("GetRemainingCount"))
+ }});
+ }
+
+ [Test]
+ public void ArglistCall()
+ {
+ ParseUtilCSharp.AssertExpression(
+ "GetArgCount(__arglist(a, b, c))",
+ new IdentifierExpression("GetArgCount").Invoke(
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.ArgList,
+ Arguments = {
+ new IdentifierExpression("a"),
+ new IdentifierExpression("b"),
+ new IdentifierExpression("c")
+ }
+ }));
+ }
+
+ [Test]
+ public void MakeTypedRef()
+ {
+ ParseUtilCSharp.AssertStatement(
+ "TypedReference tr = __makeref(o);",
+ new VariableDeclarationStatement(
+ new SimpleType("TypedReference"),
+ "tr",
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.MakeRef,
+ Arguments = { new IdentifierExpression("o") }
+ }));
+ }
+
+ [Test]
+ public void RefType()
+ {
+ ParseUtilCSharp.AssertExpression(
+ "t = __reftype(tr)",
+ new AssignmentExpression(
+ new IdentifierExpression("t"),
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.RefType,
+ Arguments = { new IdentifierExpression("tr") }
+ }));
+ }
+
+ [Test]
+ public void GetRefValue()
+ {
+ ParseUtilCSharp.AssertExpression(
+ "o = __refvalue(tr, object)",
+ new AssignmentExpression(
+ new IdentifierExpression("o"),
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.RefValue,
+ Arguments = {
+ new IdentifierExpression("tr"),
+ new TypeReferenceExpression(new PrimitiveType("object"))
+ }
+ }));
+ }
+
+ [Test]
+ public void SetRefValue()
+ {
+ ParseUtilCSharp.AssertExpression(
+ "__refvalue(tr, object) = o",
+ new AssignmentExpression(
+ new UndocumentedExpression {
+ UndocumentedExpressionType = UndocumentedExpressionType.RefValue,
+ Arguments = {
+ new IdentifierExpression("tr"),
+ new TypeReferenceExpression(new PrimitiveType("object"))
+ }
+ },
+ new IdentifierExpression("o")));
+ }
+ }
+}
diff --git a/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj b/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
index a48926970b..b8be571139 100644
--- a/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
+++ b/ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
@@ -84,6 +84,7 @@
+