Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2015-06-05 23:06:16 +0300
committerDaniel Grunwald <daniel@danielgrunwald.de>2015-06-05 23:06:16 +0300
commitbca19467216413851d9ffd2d1135d159a030fa42 (patch)
tree5ffb47f5927c5bc8a2f42a570bd98a91bba4e64b /ICSharpCode.NRefactory.CSharp
parent4e9eb9bbe86354878ece5a62ec723bdfa3d4191b (diff)
Add support for varargs methods ('__arglist') to NR type system.
Diffstat (limited to 'ICSharpCode.NRefactory.CSharp')
-rw-r--r--ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs7
-rw-r--r--ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs2
-rw-r--r--ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs4
3 files changed, 10 insertions, 3 deletions
diff --git a/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs b/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs
index 5b52a37a..e3761bc8 100644
--- a/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs
+++ b/ICSharpCode.NRefactory.CSharp/Ast/PrimitiveType.cs
@@ -113,10 +113,13 @@ namespace ICSharpCode.NRefactory.CSharp
public override ITypeReference ToTypeReference(NameLookupMode lookupMode, InterningProvider interningProvider = null)
{
KnownTypeCode typeCode = GetTypeCodeForPrimitiveType(this.Keyword);
- if (typeCode == KnownTypeCode.None)
+ if (typeCode == KnownTypeCode.None) {
+ if (this.Keyword == "__arglist")
+ return SpecialType.ArgList;
return new UnknownType(null, this.Keyword);
- else
+ } else {
return KnownTypeReference.Get(typeCode);
+ }
}
public static KnownTypeCode GetTypeCodeForPrimitiveType(string keyword)
diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
index d9930697..04225cde 100644
--- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
+++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
@@ -2574,6 +2574,8 @@ namespace ICSharpCode.NRefactory.CSharp
}
if (p.TypeExpression != null) // lambdas may have no types (a, b) => ...
parameterDeclarationExpression.AddChild(ConvertToType(p.TypeExpression), Roles.Type);
+ else if (p is ArglistParameter)
+ parameterDeclarationExpression.AddChild(new PrimitiveType("__arglist"), Roles.Type);
if (p.Name != null)
parameterDeclarationExpression.AddChild(Identifier.Create(p.Name, Convert(p.Location)), Roles.Identifier);
if (p.HasDefaultValue) {
diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
index 1982e172..340b290e 100644
--- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
+++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
@@ -1730,9 +1730,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
IType resultType;
switch (undocumentedExpression.UndocumentedExpressionType) {
case UndocumentedExpressionType.ArgListAccess:
- case UndocumentedExpressionType.ArgList:
resultType = resolver.Compilation.FindType(typeof(RuntimeArgumentHandle));
break;
+ case UndocumentedExpressionType.ArgList:
+ resultType = SpecialType.ArgList;
+ break;
case UndocumentedExpressionType.RefValue:
var tre = undocumentedExpression.Arguments.ElementAtOrDefault(1) as TypeReferenceExpression;
if (tre != null)