Browse Source

Handled undocumented expressions.

newNRvisualizers
Mike Krüger 15 years ago
parent
commit
9fedc310ac
  1. 4
      ICSharpCode.NRefactory/CSharp/Ast/DepthFirstAstVisitor.cs
  2. 25
      ICSharpCode.NRefactory/CSharp/Ast/Expressions/UndocumentedExpression.cs
  3. 2
      ICSharpCode.NRefactory/CSharp/Ast/IAstVisitor.cs
  4. 28
      ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs
  5. 67
      ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs
  6. 1298
      ICSharpCode.NRefactory/CSharp/Parser/mcs/cs-parser.cs
  7. 25
      ICSharpCode.NRefactory/CSharp/Parser/mcs/expression.cs
  8. 18
      ICSharpCode.NRefactory/CSharp/Parser/mcs/visit.cs
  9. 5
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs
  10. 2
      ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

4
ICSharpCode.NRefactory/CSharp/Ast/DepthFirstAstVisitor.cs

@ -565,9 +565,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -565,9 +565,9 @@ namespace ICSharpCode.NRefactory.CSharp
return VisitChildren (defaultValueExpression, data);
}
public virtual S VisitArgListExpression (ArgListExpression argListExpression, T data)
public virtual S VisitUndocumentedExpression (UndocumentedExpression undocumentedExpression, T data)
{
return VisitChildren (argListExpression, data);
return VisitChildren (undocumentedExpression, data);
}
public virtual S VisitArrayInitializerExpression (ArrayInitializerExpression arrayInitializerExpression, T data)

25
ICSharpCode.NRefactory/CSharp/Ast/Expressions/ArgListExpression.cs → ICSharpCode.NRefactory/CSharp/Ast/Expressions/UndocumentedExpression.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
//
// ArgListExpression.cs
// UndocumentedExpression.cs
//
// Author:
// Mike Krüger <mkrueger@novell.com>
@ -28,16 +28,25 @@ using System.Collections.Generic; @@ -28,16 +28,25 @@ using System.Collections.Generic;
namespace ICSharpCode.NRefactory.CSharp
{
public enum UndocumentedExpressionType
{
ArgListAccess, // __arglist
ArgList, // __arglist (a1, a2, ..., an)
RefValue, // __refvalue (expr , type)
RefType, // __reftype (expr)
MakeRef // __makeref (expr)
}
/// <summary>
/// Represents the undocumented __arglist keyword.
/// Represents undocumented expressions.
/// </summary>
public class ArgListExpression : Expression
public class UndocumentedExpression : Expression
{
public bool IsAccess { // access is __arglist, otherwise it's __arglist (a1, a2, ..., an)
public UndocumentedExpressionType UndocumentedExpressionType {
get; set;
}
public CSharpTokenNode ArgListToken {
public CSharpTokenNode UndocumentedToken {
get { return GetChildByRole (Roles.Keyword); }
}
@ -55,13 +64,13 @@ namespace ICSharpCode.NRefactory.CSharp @@ -55,13 +64,13 @@ namespace ICSharpCode.NRefactory.CSharp
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitArgListExpression (this, data);
return visitor.VisitUndocumentedExpression (this, data);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
ArgListExpression o = other as ArgListExpression;
return o != null && this.IsAccess == o.IsAccess && this.Arguments.DoMatch(o.Arguments, match);
UndocumentedExpression o = other as UndocumentedExpression;
return o != null && this.UndocumentedExpressionType == o.UndocumentedExpressionType && this.Arguments.DoMatch(o.Arguments, match);
}
}
}

2
ICSharpCode.NRefactory/CSharp/Ast/IAstVisitor.cs

@ -11,7 +11,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -11,7 +11,7 @@ namespace ICSharpCode.NRefactory.CSharp
public interface IAstVisitor<in T, out S>
{
S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data);
S VisitArgListExpression(ArgListExpression argListExpression, T data);
S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data);
S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data);
S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data);
S VisitAsExpression(AsExpression asExpression, T data);

28
ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs

@ -468,15 +468,29 @@ namespace ICSharpCode.NRefactory.CSharp @@ -468,15 +468,29 @@ namespace ICSharpCode.NRefactory.CSharp
return EndNode(anonymousMethodExpression);
}
public object VisitArgListExpression(ArgListExpression argListExpression, object data)
{
StartNode(argListExpression);
WriteKeyword("__arglist");
if (!argListExpression.IsAccess) {
public object VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, object data)
{
StartNode(undocumentedExpression);
switch (undocumentedExpression.UndocumentedExpressionType) {
case UndocumentedExpressionType.ArgList:
case UndocumentedExpressionType.ArgListAccess:
WriteKeyword("__arglist");
break;
case UndocumentedExpressionType.MakeRef:
WriteKeyword("__makeref");
break;
case UndocumentedExpressionType.RefType:
WriteKeyword("__reftype");
break;
case UndocumentedExpressionType.RefValue:
WriteKeyword("__refvalue");
break;
}
if (undocumentedExpression.Arguments.Count > 0) {
Space(policy.SpaceBeforeMethodCallParentheses);
WriteCommaSeparatedListInParenthesis(argListExpression.Arguments, policy.SpaceWithinMethodCallParentheses);
WriteCommaSeparatedListInParenthesis(undocumentedExpression.Arguments, policy.SpaceWithinMethodCallParentheses);
}
return EndNode(argListExpression);
return EndNode(undocumentedExpression);
}
public object VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, object data)

67
ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

@ -2320,27 +2320,80 @@ namespace ICSharpCode.NRefactory.CSharp @@ -2320,27 +2320,80 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (ArglistAccess argListAccessExpression)
{
var result = new ArgListExpression ();
result.IsAccess = true;
result.AddChild (new CSharpTokenNode (Convert (argListAccessExpression.Location), "__arglist".Length), ArgListExpression.Roles.Keyword);
var result = new UndocumentedExpression () {
UndocumentedExpressionType = UndocumentedExpressionType.ArgListAccess
};
result.AddChild (new CSharpTokenNode (Convert (argListAccessExpression.Location), "__arglist".Length), UndocumentedExpression.Roles.Keyword);
return result;
}
#region Undocumented expressions
public override object Visit (Arglist argListExpression)
{
var result = new ArgListExpression ();
result.AddChild (new CSharpTokenNode (Convert (argListExpression.Location), "__arglist".Length), ArgListExpression.Roles.Keyword);
var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.ArgListAccess };
result.AddChild (new CSharpTokenNode (Convert (argListExpression.Location), "__arglist".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (argListExpression);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ArgListExpression.Roles.LPar);
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), UndocumentedExpression.Roles.LPar);
AddArguments (result, location, argListExpression.Arguments);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), ArgListExpression.Roles.RPar);
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), UndocumentedExpression.Roles.RPar);
return result;
}
public override object Visit (MakeRefExpr makeRefExpr)
{
var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefValue };
result.AddChild (new CSharpTokenNode (Convert (makeRefExpr.Location), "__makeref".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (makeRefExpr);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), UndocumentedExpression.Roles.LPar);
if (makeRefExpr.Expr != null)
result.AddChild ((Expression)makeRefExpr.Expr.Accept (this), UndocumentedExpression.Roles.Argument);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), UndocumentedExpression.Roles.RPar);
return result;
}
public override object Visit (RefTypeExpr refTypeExpr)
{
var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefValue };
result.AddChild (new CSharpTokenNode (Convert (refTypeExpr.Location), "__reftype".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (refTypeExpr);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), UndocumentedExpression.Roles.LPar);
if (refTypeExpr.Expr != null)
result.AddChild ((Expression)refTypeExpr.Expr.Accept (this), UndocumentedExpression.Roles.Argument);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), UndocumentedExpression.Roles.RPar);
return result;
}
public override object Visit (RefValueExpr refValueExpr)
{
var result = new UndocumentedExpression () { UndocumentedExpressionType = UndocumentedExpressionType.RefValue };
result.AddChild (new CSharpTokenNode (Convert (refValueExpr.Location), "__refvalue".Length), UndocumentedExpression.Roles.Keyword);
var location = LocationsBag.GetLocations (refValueExpr);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), UndocumentedExpression.Roles.LPar);
if (refValueExpr.Expr != null)
result.AddChild ((Expression)refValueExpr.Expr.Accept (this), UndocumentedExpression.Roles.Argument);
if (refValueExpr.FullNamedExpression != null)
result.AddChild ((Expression)refValueExpr.FullNamedExpression.Accept (this), UndocumentedExpression.Roles.Argument);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), UndocumentedExpression.Roles.RPar);
return result;
}
#endregion
public override object Visit (TypeOf typeOfExpression)
{
var result = new TypeOfExpression ();

1298
ICSharpCode.NRefactory/CSharp/Parser/mcs/cs-parser.cs

File diff suppressed because it is too large Load Diff

25
ICSharpCode.NRefactory/CSharp/Parser/mcs/expression.cs

@ -7113,10 +7113,12 @@ namespace Mono.CSharp @@ -7113,10 +7113,12 @@ namespace Mono.CSharp
}
}
class RefValueExpr : ShimExpression
public class RefValueExpr : ShimExpression
{
FullNamedExpression texpr;
public FullNamedExpression FullNamedExpression { get { return texpr; }}
public RefValueExpr (Expression expr, FullNamedExpression texpr, Location loc)
: base (expr)
{
@ -7143,9 +7145,14 @@ namespace Mono.CSharp @@ -7143,9 +7145,14 @@ namespace Mono.CSharp
ec.Emit (OpCodes.Refanyval, type);
ec.EmitLoadFromPtr (type);
}
public override object Accept (StructuralVisitor visitor)
{
return visitor.Visit (this);
}
}
class RefTypeExpr : ShimExpression
public class RefTypeExpr : ShimExpression
{
public RefTypeExpr (Expression expr, Location loc)
: base (expr)
@ -7176,9 +7183,14 @@ namespace Mono.CSharp @@ -7176,9 +7183,14 @@ namespace Mono.CSharp
if (m != null)
ec.Emit (OpCodes.Call, m);
}
public override object Accept (StructuralVisitor visitor)
{
return visitor.Visit (this);
}
}
class MakeRefExpr : ShimExpression
public class MakeRefExpr : ShimExpression
{
public MakeRefExpr (Expression expr, Location loc)
: base (expr)
@ -7199,6 +7211,11 @@ namespace Mono.CSharp @@ -7199,6 +7211,11 @@ namespace Mono.CSharp
((IMemoryLocation) expr).AddressOf (ec, AddressOp.Load);
ec.Emit (OpCodes.Mkrefany, expr.Type);
}
public override object Accept (StructuralVisitor visitor)
{
return visitor.Visit (this);
}
}
/// <summary>

18
ICSharpCode.NRefactory/CSharp/Parser/mcs/visit.cs

@ -605,10 +605,26 @@ namespace Mono.CSharp @@ -605,10 +605,26 @@ namespace Mono.CSharp
{
return null;
}
public virtual object Visit (Linq.ThenByDescending thenByDescending)
{
return null;
}
// undocumented expressions
public virtual object Visit (RefValueExpr refValueExpr)
{
return null;
}
public virtual object Visit (RefTypeExpr refTypeExpr)
{
return null;
}
public virtual object Visit (MakeRefExpr makeRefExpr)
{
return null;
}
}
}

5
ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

@ -497,9 +497,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -497,9 +497,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
throw new NotImplementedException();
}
public override ResolveResult VisitArgListExpression(ArgListExpression argListExpression, object data)
public object VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, object data)
{
ScanChildren(argListExpression);
// TODO: ?
ScanChildren(undocumentedExpression);
return new ResolveResult(resolver.Context.GetClass(typeof(RuntimeArgumentHandle)) ?? SharedTypes.UnknownType);
}

2
ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

@ -67,7 +67,6 @@ @@ -67,7 +67,6 @@
<Compile Include="CSharp\Ast\AstLocation.cs" />
<Compile Include="CSharp\Ast\AstType.cs" />
<Compile Include="CSharp\Ast\Expressions\AnonymousMethodExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\ArgListExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\AsExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\AssignmentExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\BaseReferenceExpression.cs" />
@ -352,6 +351,7 @@ @@ -352,6 +351,7 @@
<Compile Include="CSharp\Ast\GeneralScope\ExternAliasDeclaration.cs" />
<Compile Include="CSharp\Formatter\CSharpFormattingOptions.cs" />
<Compile Include="CSharp\Ast\Expressions\AnonymousTypeCreateExpression.cs" />
<Compile Include="CSharp\Ast\Expressions\UndocumentedExpression.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="CSharp\" />

Loading…
Cancel
Save