Browse Source

Added type parameter variances & tokens.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
0d6d9ac4d9
  1. 20
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  2. 857
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs
  3. 7
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay

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

@ -2277,6 +2277,26 @@ namespace ICSharpCode.NRefactory.CSharp @@ -2277,6 +2277,26 @@ namespace ICSharpCode.NRefactory.CSharp
continue;
TypeParameterDeclaration tp = new TypeParameterDeclaration();
List<Location> varianceLocation;
switch (arg.Variance) {
case Variance.Contravariant:
tp.Variance = VarianceModifier.Contravariant;
varianceLocation = LocationsBag.GetLocations (arg);
if (varianceLocation != null)
tp.AddChild (new CSharpTokenNode (Convert (varianceLocation[0]), "out".Length), TypeParameterDeclaration.VarianceRole);
break;
case Variance.Covariant:
tp.Variance = VarianceModifier.Covariant;
varianceLocation = LocationsBag.GetLocations (arg);
if (varianceLocation != null)
tp.AddChild (new CSharpTokenNode (Convert (varianceLocation[0]), "out".Length), TypeParameterDeclaration.VarianceRole);
break;
default:
tp.Variance = VarianceModifier.Invariant;
break;
}
AddAttributeSection (tp, arg.OptAttributes);
switch (arg.Variance) {

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

File diff suppressed because it is too large Load Diff

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

@ -2904,7 +2904,10 @@ type_parameter @@ -2904,7 +2904,10 @@ type_parameter
: opt_attributes opt_type_parameter_variance IDENTIFIER
{
var lt = (Tokenizer.LocatedToken)$3;
$$ = new TypeParameterName (lt.Value, (Attributes)$1, (Variance) $2, lt.Location);
var variance = (Variance) $2;
$$ = new TypeParameterName (lt.Value, (Attributes)$1, variance, lt.Location);
if (variance != Variance.None)
lbag.AddLocation ($$, savedLocation);
}
| error
{
@ -4613,10 +4616,12 @@ type_parameter_variance @@ -4613,10 +4616,12 @@ type_parameter_variance
: OUT
{
$$ = Variance.Covariant;
savedLocation = GetLocation ($1);
}
| IN
{
$$ = Variance.Contravariant;
savedLocation = GetLocation ($1);
}
;

Loading…
Cancel
Save