Browse Source

Fixed some dot locations.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
e07b8fa3fe
  1. 22
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  2. 1371
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs
  3. 47
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay
  4. 13
      ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs
  5. 7
      ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs

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

@ -134,10 +134,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -134,10 +134,7 @@ namespace ICSharpCode.NRefactory.CSharp
var memberType = new MemberType ();
memberType.AddChild (ConvertToType (ma.LeftExpression), MemberType.TargetRole);
var location = LocationsBag.GetLocations (ma);
if (location != null)
memberType.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberType.Roles.Dot);
memberType.AddChild (new CSharpTokenNode (Convert (ma.DotLocation), 1), MemberType.Roles.Dot);
memberType.MemberNameToken = Identifier.Create (ma.Name, Convert (ma.Location));
@ -292,10 +289,8 @@ namespace ICSharpCode.NRefactory.CSharp @@ -292,10 +289,8 @@ namespace ICSharpCode.NRefactory.CSharp
namespaceDecl.InsertChildBefore (insertPos, newIdent, NamespaceDeclaration.Roles.Identifier);
insertPos = newIdent;
var location = LocationsBag.GetLocations (memberName);
if (location != null) {
var dotToken = new CSharpTokenNode (Convert (location[0]), 1);
if (!memberName.DotLocation.IsNull) {
var dotToken = new CSharpTokenNode (Convert (memberName.DotLocation), 1);
namespaceDecl.InsertChildBefore (insertPos, dotToken, NamespaceDeclaration.Roles.Dot);
insertPos = dotToken;
}
@ -342,9 +337,8 @@ namespace ICSharpCode.NRefactory.CSharp @@ -342,9 +337,8 @@ namespace ICSharpCode.NRefactory.CSharp
t.IsDoubleColon = memberName.IsDoubleColon;
t.AddChild (ConvertImport (memberName.Left), MemberType.TargetRole);
var location = LocationsBag.GetLocations (memberName);
if (location != null)
t.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberType.Roles.Dot);
if (!memberName.DotLocation.IsNull)
t.AddChild (new CSharpTokenNode (Convert (memberName.DotLocation), 1), MemberType.Roles.Dot);
t.AddChild (Identifier.Create (memberName.Name, Convert(memberName.Location)), MemberType.Roles.Identifier);
AddTypeArguments (t, memberName.TypeArguments);
@ -1914,9 +1908,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1914,9 +1908,9 @@ namespace ICSharpCode.NRefactory.CSharp
var leftExpr = memberAccess.LeftExpression.Accept (this);
result.AddChild ((Expression)leftExpr, MemberReferenceExpression.Roles.TargetExpression);
}
var location = LocationsBag.GetLocations (memberAccess);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberReferenceExpression.Roles.Dot);
if (!memberAccess.DotLocation.IsNull) {
result.AddChild (new CSharpTokenNode (Convert (memberAccess.DotLocation), 1), MemberReferenceExpression.Roles.Dot);
}
}
result.AddChild (Identifier.Create (memberAccess.Name, Convert (memberAccess.Location)), MemberReferenceExpression.Roles.Identifier);

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

File diff suppressed because it is too large Load Diff

47
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay

@ -565,8 +565,9 @@ qualified_identifier @@ -565,8 +565,9 @@ qualified_identifier
| qualified_identifier DOT IDENTIFIER
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberName ((MemberName) $1, lt.Value, lt.Location);
lbag.AddLocation ($$, GetLocation ($2));
$$ = new MemberName ((MemberName) $1, lt.Value, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| error
{
@ -780,7 +781,7 @@ attribute @@ -780,7 +781,7 @@ attribute
}
Arguments [] arguments = (Arguments []) $3;
ATypeNameExpression expr = mname.GetTypeExpression (lbag);
ATypeNameExpression expr = mname.GetTypeExpression ();
$$ = new Attribute (current_attr_target, expr, arguments, mname.Location, lexer.IsEscapedIdentifier (mname));
if (arguments != null) {
lbag.AddLocation ($$, savedAttrParenOpenLocation, savedAttrParenCloseLocation);
@ -2732,8 +2733,9 @@ member_name @@ -2732,8 +2733,9 @@ member_name
| namespace_or_type_name DOT IDENTIFIER opt_type_argument_list
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $4, lt.Location);
lbag.AddLocation ($$, GetLocation ($2));
$$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
;
@ -2967,17 +2969,17 @@ type_expression @@ -2967,17 +2969,17 @@ type_expression
MemberName name = (MemberName) $1;
if ($2 != null) {
$$ = new ComposedCast (name.GetTypeExpression (lbag), (ComposedTypeSpecifier) $2);
$$ = new ComposedCast (name.GetTypeExpression (), (ComposedTypeSpecifier) $2);
} else {
if (name.Left == null && name.Name == "var")
$$ = new VarExpr (name.Location);
else
$$ = name.GetTypeExpression (lbag);
$$ = name.GetTypeExpression ();
}
}
| namespace_or_type_name pointer_stars
{
$$ = new ComposedCast (((MemberName) $1).GetTypeExpression (lbag), (ComposedTypeSpecifier) $2);
$$ = new ComposedCast (((MemberName) $1).GetTypeExpression (), (ComposedTypeSpecifier) $2);
}
| builtin_types opt_nullable
{
@ -3140,20 +3142,23 @@ member_access @@ -3140,20 +3142,23 @@ member_access
: primary_expression DOT IDENTIFIER opt_type_argument_list
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location);
lbag.AddLocation ($$, GetLocation ($2));
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| builtin_types DOT IDENTIFIER opt_type_argument_list
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location);
lbag.AddLocation ($$, GetLocation ($2));
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| BASE DOT IDENTIFIER opt_type_argument_list
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location);
lbag.AddLocation ($$, GetLocation ($2));
$$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| qualified_alias_member IDENTIFIER opt_type_argument_list
{
@ -3719,22 +3724,28 @@ unbound_type_name @@ -3719,22 +3724,28 @@ unbound_type_name
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, lt.Location);
$$ = new MemberAccess ((Expression) $1, lt.Value, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| unbound_type_name DOT IDENTIFIER generic_dimension
{
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location);
$$ = new MemberAccess ((Expression) $1, lt.Value, (int) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
| namespace_or_type_name DOT IDENTIFIER generic_dimension
{
var te = ((MemberName) $1).GetTypeExpression (lbag);
var te = ((MemberName) $1).GetTypeExpression ();
if (te.HasTypeArguments)
Error_TypeExpected (GetLocation ($4));
var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess (te, lt.Value, (int) $4, lt.Location);
$$ = new MemberAccess (te, lt.Value, (int) $4, lt.Location) {
DotLocation = GetLocation ($2)
};
}
;

13
ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs

@ -49,6 +49,12 @@ namespace Mono.CSharp { @@ -49,6 +49,12 @@ namespace Mono.CSharp {
public bool IsDoubleColon { get { return is_double_colon; } }
#if FULL_AST
public Location DotLocation {
get;
set;
}
#endif
private MemberName (MemberName left, string name, bool is_double_colon,
Location loc)
{
@ -138,7 +144,7 @@ namespace Mono.CSharp { @@ -138,7 +144,7 @@ namespace Mono.CSharp {
return name;
}
public ATypeNameExpression GetTypeExpression (LocationsBag locations = null)
public ATypeNameExpression GetTypeExpression ()
{
if (Left == null) {
if (TypeArguments != null)
@ -155,8 +161,9 @@ namespace Mono.CSharp { @@ -155,8 +161,9 @@ namespace Mono.CSharp {
Expression lexpr = Left.GetTypeExpression ();
var result = new MemberAccess (lexpr, Name, TypeArguments, Location);
if (locations != null)
locations.AddLocation (result, locations.GetLocations (this));
#if FULL_AST
result.DotLocation = DotLocation;
#endif
return result;
}

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

@ -7763,6 +7763,13 @@ namespace Mono.CSharp @@ -7763,6 +7763,13 @@ namespace Mono.CSharp
{
protected Expression expr;
#if FULL_AST
public Location DotLocation {
get;
set;
}
#endif
public MemberAccess (Expression expr, string id)
: base (id, expr.Location)
{

Loading…
Cancel
Save