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
var memberType = new MemberType (); var memberType = new MemberType ();
memberType.AddChild (ConvertToType (ma.LeftExpression), MemberType.TargetRole); memberType.AddChild (ConvertToType (ma.LeftExpression), MemberType.TargetRole);
memberType.AddChild (new CSharpTokenNode (Convert (ma.DotLocation), 1), MemberType.Roles.Dot);
var location = LocationsBag.GetLocations (ma);
if (location != null)
memberType.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberType.Roles.Dot);
memberType.MemberNameToken = Identifier.Create (ma.Name, Convert (ma.Location)); memberType.MemberNameToken = Identifier.Create (ma.Name, Convert (ma.Location));
@ -292,10 +289,8 @@ namespace ICSharpCode.NRefactory.CSharp
namespaceDecl.InsertChildBefore (insertPos, newIdent, NamespaceDeclaration.Roles.Identifier); namespaceDecl.InsertChildBefore (insertPos, newIdent, NamespaceDeclaration.Roles.Identifier);
insertPos = newIdent; insertPos = newIdent;
var location = LocationsBag.GetLocations (memberName); if (!memberName.DotLocation.IsNull) {
var dotToken = new CSharpTokenNode (Convert (memberName.DotLocation), 1);
if (location != null) {
var dotToken = new CSharpTokenNode (Convert (location[0]), 1);
namespaceDecl.InsertChildBefore (insertPos, dotToken, NamespaceDeclaration.Roles.Dot); namespaceDecl.InsertChildBefore (insertPos, dotToken, NamespaceDeclaration.Roles.Dot);
insertPos = dotToken; insertPos = dotToken;
} }
@ -342,9 +337,8 @@ namespace ICSharpCode.NRefactory.CSharp
t.IsDoubleColon = memberName.IsDoubleColon; t.IsDoubleColon = memberName.IsDoubleColon;
t.AddChild (ConvertImport (memberName.Left), MemberType.TargetRole); t.AddChild (ConvertImport (memberName.Left), MemberType.TargetRole);
var location = LocationsBag.GetLocations (memberName); if (!memberName.DotLocation.IsNull)
if (location != null) t.AddChild (new CSharpTokenNode (Convert (memberName.DotLocation), 1), MemberType.Roles.Dot);
t.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberType.Roles.Dot);
t.AddChild (Identifier.Create (memberName.Name, Convert(memberName.Location)), MemberType.Roles.Identifier); t.AddChild (Identifier.Create (memberName.Name, Convert(memberName.Location)), MemberType.Roles.Identifier);
AddTypeArguments (t, memberName.TypeArguments); AddTypeArguments (t, memberName.TypeArguments);
@ -1914,9 +1908,9 @@ namespace ICSharpCode.NRefactory.CSharp
var leftExpr = memberAccess.LeftExpression.Accept (this); var leftExpr = memberAccess.LeftExpression.Accept (this);
result.AddChild ((Expression)leftExpr, MemberReferenceExpression.Roles.TargetExpression); result.AddChild ((Expression)leftExpr, MemberReferenceExpression.Roles.TargetExpression);
} }
var location = LocationsBag.GetLocations (memberAccess); if (!memberAccess.DotLocation.IsNull) {
if (location != null) result.AddChild (new CSharpTokenNode (Convert (memberAccess.DotLocation), 1), MemberReferenceExpression.Roles.Dot);
result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberReferenceExpression.Roles.Dot); }
} }
result.AddChild (Identifier.Create (memberAccess.Name, Convert (memberAccess.Location)), MemberReferenceExpression.Roles.Identifier); 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
| qualified_identifier DOT IDENTIFIER | qualified_identifier DOT IDENTIFIER
{ {
var lt = (Tokenizer.LocatedToken) $3; var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberName ((MemberName) $1, lt.Value, lt.Location); $$ = new MemberName ((MemberName) $1, lt.Value, lt.Location) {
lbag.AddLocation ($$, GetLocation ($2)); DotLocation = GetLocation ($2)
};
} }
| error | error
{ {
@ -780,7 +781,7 @@ attribute
} }
Arguments [] arguments = (Arguments []) $3; 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)); $$ = new Attribute (current_attr_target, expr, arguments, mname.Location, lexer.IsEscapedIdentifier (mname));
if (arguments != null) { if (arguments != null) {
lbag.AddLocation ($$, savedAttrParenOpenLocation, savedAttrParenCloseLocation); lbag.AddLocation ($$, savedAttrParenOpenLocation, savedAttrParenCloseLocation);
@ -2732,8 +2733,9 @@ member_name
| namespace_or_type_name DOT IDENTIFIER opt_type_argument_list | namespace_or_type_name DOT IDENTIFIER opt_type_argument_list
{ {
var lt = (Tokenizer.LocatedToken) $3; var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $4, lt.Location); $$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $4, lt.Location) {
lbag.AddLocation ($$, GetLocation ($2)); DotLocation = GetLocation ($2)
};
} }
; ;
@ -2967,17 +2969,17 @@ type_expression
MemberName name = (MemberName) $1; MemberName name = (MemberName) $1;
if ($2 != null) { if ($2 != null) {
$$ = new ComposedCast (name.GetTypeExpression (lbag), (ComposedTypeSpecifier) $2); $$ = new ComposedCast (name.GetTypeExpression (), (ComposedTypeSpecifier) $2);
} else { } else {
if (name.Left == null && name.Name == "var") if (name.Left == null && name.Name == "var")
$$ = new VarExpr (name.Location); $$ = new VarExpr (name.Location);
else else
$$ = name.GetTypeExpression (lbag); $$ = name.GetTypeExpression ();
} }
} }
| namespace_or_type_name pointer_stars | 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 | builtin_types opt_nullable
{ {
@ -3140,20 +3142,23 @@ member_access
: primary_expression DOT IDENTIFIER opt_type_argument_list : primary_expression DOT IDENTIFIER opt_type_argument_list
{ {
var lt = (Tokenizer.LocatedToken) $3; var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location) {
lbag.AddLocation ($$, GetLocation ($2)); DotLocation = GetLocation ($2)
};
} }
| builtin_types DOT IDENTIFIER opt_type_argument_list | builtin_types DOT IDENTIFIER opt_type_argument_list
{ {
var lt = (Tokenizer.LocatedToken) $3; var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location) {
lbag.AddLocation ($$, GetLocation ($2)); DotLocation = GetLocation ($2)
};
} }
| BASE DOT IDENTIFIER opt_type_argument_list | BASE DOT IDENTIFIER opt_type_argument_list
{ {
var lt = (Tokenizer.LocatedToken) $3; var lt = (Tokenizer.LocatedToken) $3;
$$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location); $$ = new MemberAccess (new BaseThis (GetLocation ($1)), lt.Value, (TypeArguments) $4, lt.Location) {
lbag.AddLocation ($$, GetLocation ($2)); DotLocation = GetLocation ($2)
};
} }
| qualified_alias_member IDENTIFIER opt_type_argument_list | qualified_alias_member IDENTIFIER opt_type_argument_list
{ {
@ -3719,22 +3724,28 @@ unbound_type_name
{ {
var lt = (Tokenizer.LocatedToken) $3; 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 | unbound_type_name DOT IDENTIFIER generic_dimension
{ {
var lt = (Tokenizer.LocatedToken) $3; 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 | namespace_or_type_name DOT IDENTIFIER generic_dimension
{ {
var te = ((MemberName) $1).GetTypeExpression (lbag); var te = ((MemberName) $1).GetTypeExpression ();
if (te.HasTypeArguments) if (te.HasTypeArguments)
Error_TypeExpected (GetLocation ($4)); Error_TypeExpected (GetLocation ($4));
var lt = (Tokenizer.LocatedToken) $3; 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 {
public bool IsDoubleColon { get { return is_double_colon; } } 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, private MemberName (MemberName left, string name, bool is_double_colon,
Location loc) Location loc)
{ {
@ -138,7 +144,7 @@ namespace Mono.CSharp {
return name; return name;
} }
public ATypeNameExpression GetTypeExpression (LocationsBag locations = null) public ATypeNameExpression GetTypeExpression ()
{ {
if (Left == null) { if (Left == null) {
if (TypeArguments != null) if (TypeArguments != null)
@ -155,8 +161,9 @@ namespace Mono.CSharp {
Expression lexpr = Left.GetTypeExpression (); Expression lexpr = Left.GetTypeExpression ();
var result = new MemberAccess (lexpr, Name, TypeArguments, Location); var result = new MemberAccess (lexpr, Name, TypeArguments, Location);
if (locations != null) #if FULL_AST
locations.AddLocation (result, locations.GetLocations (this)); result.DotLocation = DotLocation;
#endif
return result; return result;
} }

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

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

Loading…
Cancel
Save