diff options
author | Daniel Grunwald <daniel@danielgrunwald.de> | 2015-06-05 23:06:16 +0300 |
---|---|---|
committer | Daniel Grunwald <daniel@danielgrunwald.de> | 2015-06-05 23:06:16 +0300 |
commit | bca19467216413851d9ffd2d1135d159a030fa42 (patch) | |
tree | 5ffb47f5927c5bc8a2f42a570bd98a91bba4e64b /ICSharpCode.NRefactory.CSharp | |
parent | 4e9eb9bbe86354878ece5a62ec723bdfa3d4191b (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.cs | 7 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs | 2 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs | 4 |
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) |