Browse Source

Updated mcs/fixed some code completion cases.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
7e5380551b
  1. 11
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 13
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 35
      ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs
  4. 21
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  5. 3
      ICSharpCode.NRefactory.CSharp/Parser/TypeSystemConvertVisitor.cs
  6. 3
      ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs
  7. 3
      ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs
  8. 3
      ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs
  9. 13
      ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs
  10. 3
      ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs
  11. 2
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs
  12. 43
      ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs
  13. 2
      ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs
  14. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs
  15. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs
  16. 4
      ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs
  17. 5211
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs
  18. 37
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay
  19. 4
      ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs
  20. 3
      ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs
  21. 10
      ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs
  22. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs
  23. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs
  24. 142
      ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs
  25. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs
  26. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs
  27. 66
      ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs
  28. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs
  29. 13
      ICSharpCode.NRefactory.CSharp/Parser/mcs/flowanalysis.cs
  30. 141
      ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs
  31. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs
  32. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs
  33. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs
  34. 78
      ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs
  35. 65
      ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs
  36. 10
      ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs
  37. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs
  38. 6
      ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs
  39. 11
      ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs
  40. 13
      ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs
  41. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs
  42. 90
      ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs
  43. 1
      ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs
  44. 38
      ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs
  45. 22
      ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs
  46. 12
      ICSharpCode.NRefactory.CSharp/Resolver/Log.cs
  47. 19
      ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj
  48. 129
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  49. 3
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj
  50. 22
      ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj
  51. 2
      ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj
  52. 51
      NRefactory.sln

11
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -609,7 +609,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -609,7 +609,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
location = document.GetLocation (offset);
var xp = GetExpressionAtCursor ();
AstNode node;
Tuple<ResolveResult, CSharpResolver> rr;
if (xp != null) {
@ -1762,13 +1761,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1762,13 +1761,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (expr == null) {
var forStmt = tmpUnit.GetNodeAt<ForStatement> (location.Line, location.Column - 3);
if (forStmt != null && forStmt.Condition is ErrorExpression) {
if (forStmt != null && forStmt.EmbeddedStatement.IsNull) {
expr = forStmt;
if (forStmt.EmbeddedStatement.IsNull) {
var id = new IdentifierExpression ("stub");
forStmt.EmbeddedStatement = new BlockStatement () { Statements = { new ExpressionStatement (id) }};
expr = id;
}
var id = new IdentifierExpression ("stub");
forStmt.EmbeddedStatement = new BlockStatement () { Statements = { new ExpressionStatement (id) }};
expr = id;
baseUnit = tmpUnit;
}
}

13
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -321,8 +321,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -321,8 +321,21 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
memberLocation = new TextLocation (1, 1);
}
using (var stream = new System.IO.StringReader (wrapper.ToString ())) {
try {
var parser = new CSharpParser ();
return parser.Parse (stream, wrapInClass ? memberLocation.Line - 2 : 0);
} catch (Exception){
Console.WriteLine ("------");
Console.WriteLine ("------");
Console.WriteLine ("------");
Console.WriteLine ("------");
Console.WriteLine ("------");
Console.WriteLine (wrapper);
Console.WriteLine ("------");
Console.WriteLine ("------");
Console.WriteLine ("------");
throw;
}
}
}

35
ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -1375,22 +1375,22 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1375,22 +1375,22 @@ namespace ICSharpCode.NRefactory.CSharp
WriteModifiers (typeDeclaration.ModifierTokens);
BraceStyle braceStyle;
switch (typeDeclaration.ClassType) {
case ClassType.Enum:
WriteKeyword ("enum");
braceStyle = policy.EnumBraceStyle;
break;
case ClassType.Interface:
WriteKeyword ("interface");
braceStyle = policy.InterfaceBraceStyle;
break;
case ClassType.Struct:
WriteKeyword ("struct");
braceStyle = policy.StructBraceStyle;
break;
default:
WriteKeyword ("class");
braceStyle = policy.ClassBraceStyle;
break;
case ClassType.Enum:
WriteKeyword ("enum");
braceStyle = policy.EnumBraceStyle;
break;
case ClassType.Interface:
WriteKeyword ("interface");
braceStyle = policy.InterfaceBraceStyle;
break;
case ClassType.Struct:
WriteKeyword ("struct");
braceStyle = policy.StructBraceStyle;
break;
default:
WriteKeyword ("class");
braceStyle = policy.ClassBraceStyle;
break;
}
WriteIdentifier (typeDeclaration.Name);
WriteTypeParameters (typeDeclaration.TypeParameters);
@ -1406,6 +1406,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1406,6 +1406,9 @@ namespace ICSharpCode.NRefactory.CSharp
OpenBrace (braceStyle);
if (typeDeclaration.ClassType == ClassType.Enum) {
bool first = true;
if (!typeDeclaration.LBraceToken.IsNull) {
}
foreach (var member in typeDeclaration.Members) {
if (first) {
first = false;

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

@ -1430,16 +1430,16 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1430,16 +1430,16 @@ namespace ICSharpCode.NRefactory.CSharp
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location [0]), 1), ForStatement.Roles.LPar);
AddStatementOrList (result, forStatement.InitStatement, ForStatement.InitializerRole);
AddStatementOrList (result, forStatement.Initializer, ForStatement.InitializerRole);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location [1]), 1), ForStatement.Roles.Semicolon);
if (forStatement.Test != null)
result.AddChild ((Expression)forStatement.Test.Accept (this), ForStatement.Roles.Condition);
if (forStatement.Condition != null)
result.AddChild ((Expression)forStatement.Condition.Accept (this), ForStatement.Roles.Condition);
if (location != null && location.Count >= 3)
result.AddChild (new CSharpTokenNode (Convert (location [2]), 1), ForStatement.Roles.Semicolon);
AddStatementOrList (result, forStatement.Increment, ForStatement.IteratorRole);
AddStatementOrList (result, forStatement.Iterator, ForStatement.IteratorRole);
if (location != null && location.Count >= 4)
result.AddChild (new CSharpTokenNode (Convert (location [3]), 1), ForStatement.Roles.RPar);
@ -2667,7 +2667,10 @@ namespace ICSharpCode.NRefactory.CSharp @@ -2667,7 +2667,10 @@ namespace ICSharpCode.NRefactory.CSharp
initializer.AddChild (new CSharpTokenNode (Convert (arrayCreationExpression.Initializers.Location), 1), ArrayCreateExpression.Roles.LBrace);
var commaLocations = LocationsBag.GetLocations (arrayCreationExpression.Initializers.Elements);
for (int i = 0; i < arrayCreationExpression.Initializers.Count; i++) {
initializer.AddChild ((Expression)arrayCreationExpression.Initializers[i].Accept (this), ArrayInitializerExpression.Roles.Expression);
var init = arrayCreationExpression.Initializers[i];
if (init == null)
continue;
initializer.AddChild ((Expression)init.Accept (this), ArrayInitializerExpression.Roles.Expression);
if (commaLocations != null && i < commaLocations.Count) {
initializer.AddChild (new CSharpTokenNode (Convert (commaLocations [i]), 1), IndexerExpression.Roles.Comma);
}
@ -3452,7 +3455,13 @@ namespace ICSharpCode.NRefactory.CSharp @@ -3452,7 +3455,13 @@ namespace ICSharpCode.NRefactory.CSharp
public CompilationUnit Parse (string program)
{
return Parse (new StringReader (program));
try {
return Parse (new StringReader (program));
} catch (Exception) {
Console.WriteLine ("------");
Console.WriteLine (program);
return null;
}
}
public CompilationUnit Parse (Stream stream, int line = 0)

3
ICSharpCode.NRefactory.CSharp/Parser/TypeSystemConvertVisitor.cs

@ -910,7 +910,8 @@ namespace ICSharpCode.NRefactory.CSharp @@ -910,7 +910,8 @@ namespace ICSharpCode.NRefactory.CSharp
}
return t;
}
Debug.WriteLine("Unknown node used as type: " + type);
if (!type.IsNull)
Debug.WriteLine("Unknown node used as type: " + type);
return SharedTypes.UnknownType;
}
#endregion

3
ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs

@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
// Marek Safar (marek.safar@gmail.com)
//
// Dual licensed under the terms of the MIT X11 or GNU GPL
// Copyright 2003-2008 Novell, Inc.
// Copyright 2003-2011 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;

3
ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs

@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
// Marek Safar (marek.safar@gmail.com)
//
// Dual licensed under the terms of the MIT X11 or GNU GPL
// Copyright 2003-2008 Novell, Inc.
// Copyright 2003-2011 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;

3
ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs

@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
// Marek Safar (marek.safar@gmail.com)
//
// Copyright 2001, 2002, 2003 Ximian, Inc.
// Copyright 2004 Novell, Inc.
// Copyright 2004-2011 Novell, Inc.
// Copyright 2011 Xamarin Inc
//

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

@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc.
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;
@ -342,7 +343,7 @@ namespace Mono.CSharp { @@ -342,7 +343,7 @@ namespace Mono.CSharp {
type = target_type;
if (!(target is IAssignMethod)) {
Error_ValueAssignment (ec, loc);
Error_ValueAssignment (ec, source);
return null;
}
@ -484,6 +485,16 @@ namespace Mono.CSharp { @@ -484,6 +485,16 @@ namespace Mono.CSharp {
{
}
protected override Expression DoResolve (ResolveContext ec)
{
var expr = base.DoResolve (ec);
var vr = target as VariableReference;
if (vr != null && vr.VariableInfo != null)
vr.VariableInfo.IsEverAssigned = false;
return expr;
}
public void UpdateSource (Expression source)
{
base.source = source;

3
ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;
@ -963,7 +964,7 @@ namespace Mono.CSharp { @@ -963,7 +964,7 @@ namespace Mono.CSharp {
if (j == 0) {
if ((Type == predefined.IndexerName || Type == predefined.Conditional) && arg_expr is Constant) {
string v = ((Constant) arg_expr).GetValue () as string;
if (!Tokenizer.IsValidIdentifier (v) || Tokenizer.IsKeyword (v)) {
if (!Tokenizer.IsValidIdentifier (v) || (Type == predefined.IndexerName && Tokenizer.IsKeyword (v))) {
context.Module.Compiler.Report.Error (633, arg_expr.Location,
"The argument to the `{0}' attribute must be a valid identifier", GetSignatureForError ());
return;

2
ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
// Marek Safar (marek.safar@seznam.cz)
//
// Copyright 2002, 2003 Ximian, Inc.
// Copyright 2003-2008, Novell, Inc.
// Copyright 2003-2011, Novell, Inc.
//
using System;

43
ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
// Dual licensed under the terms of the MIT X11 or GNU GPL
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2004-2011 Novell, Inc
// Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
//
@ -1576,7 +1576,9 @@ namespace Mono.CSharp @@ -1576,7 +1576,9 @@ namespace Mono.CSharp
GetSignatureForError (), iface_type.GetSignatureForError ());
return false;
}
}
if (iface_type.IsGenericOrParentIsGeneric) {
if (spec.Interfaces != null) {
foreach (var prev_iface in iface_exprs) {
if (prev_iface == iface_type)
@ -2843,44 +2845,41 @@ namespace Mono.CSharp @@ -2843,44 +2845,41 @@ namespace Mono.CSharp
public override bool IsUnmanagedType ()
{
if (fields == null)
return true;
if (has_unmanaged_check_done)
return is_unmanaged;
if (requires_delayed_unmanagedtype_check)
return true;
requires_delayed_unmanagedtype_check = true;
if (Parent != null && Parent.IsGeneric) {
has_unmanaged_check_done = true;
return false;
}
foreach (FieldBase f in fields) {
if (f.IsStatic)
continue;
if (fields != null) {
requires_delayed_unmanagedtype_check = true;
// It can happen when recursive unmanaged types are defined
// struct S { S* s; }
TypeSpec mt = f.MemberType;
if (mt == null) {
return true;
}
foreach (FieldBase f in fields) {
if (f.IsStatic)
continue;
while (mt.IsPointer)
mt = TypeManager.GetElementType (mt);
// It can happen when recursive unmanaged types are defined
// struct S { S* s; }
TypeSpec mt = f.MemberType;
if (mt == null) {
return true;
}
if (mt.IsUnmanaged)
continue;
if (mt.IsGenericOrParentIsGeneric || mt.IsGenericParameter) {
has_unmanaged_check_done = true;
return false;
}
if (TypeManager.IsUnmanagedType (mt))
continue;
has_unmanaged_check_done = true;
return false;
}
has_unmanaged_check_done = true;
is_unmanaged = true;
return true;
}

2
ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc.
// Copyright 2004 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;
@ -975,7 +976,6 @@ namespace Mono.CSharp @@ -975,7 +976,6 @@ namespace Mono.CSharp
instance.Emit (ec);
temp.Store (ec);
temp.AddressOf (ec, AddressOp.Load);
temp.Release (ec);
}
return ReferenceContainer.MakeType (ec.Module, instance_type);

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/complete.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc.
// Copyright 2003-2009 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
// Completion* classes derive from ExpressionStatement as this allows
// them to pass through the parser in many conditions that require

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/constant.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
//
// Copyright 2001-2003 Ximian, Inc.
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;

4
ICSharpCode.NRefactory.CSharp/Parser/mcs/convert.cs

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc.
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
// Copyright 2011 Xamarin Inc (http://www.xamarin.com)
//
using System;
@ -818,7 +818,7 @@ namespace Mono.CSharp { @@ -818,7 +818,7 @@ namespace Mono.CSharp {
/// Finds "most encompassed type" according to the spec (13.4.2)
/// amongst the methods in the MethodGroupExpr
/// </summary>
public static TypeSpec FindMostEncompassedType (IEnumerable<TypeSpec> types)
public static TypeSpec FindMostEncompassedType (IList<TypeSpec> types)
{
TypeSpec best = null;
EmptyExpression expr;

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

File diff suppressed because it is too large Load Diff

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

@ -3381,11 +3381,11 @@ element_access @@ -3381,11 +3381,11 @@ element_access
$$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2));
lbag.AddLocation ($$, GetLocation ($4));
}
| primary_expression OPEN_BRACKET_EXPR expression_list_arguments error
| primary_expression OPEN_BRACKET_EXPR expression_list_arguments error
{
$$ = new ElementAccess ((Expression) $1, (Arguments) $3, GetLocation ($2));
}
| primary_expression OPEN_BRACKET_EXPR error
| primary_expression OPEN_BRACKET_EXPR error
{
$$ = new ElementAccess ((Expression) $1, null, GetLocation ($2));
}
@ -5273,6 +5273,9 @@ for_statement @@ -5273,6 +5273,9 @@ for_statement
{
start_block (GetLocation ($2));
current_block.IsCompilerGenerated = true;
For f = new For (GetLocation ($1));
current_block.AddStatement (f);
$$ = f;
}
for_statement_cont
{
@ -5283,28 +5286,26 @@ for_statement @@ -5283,28 +5286,26 @@ for_statement
// Has to use be extra rule to recover started block
for_statement_cont
: opt_for_initializer SEMICOLON
{
((For) $0).Initializer = (Statement) $1;
}
opt_for_condition SEMICOLON
{
((For) $0).Condition = (BooleanExpression) $4;
}
opt_for_iterator CLOSE_PARENS
embedded_statement
{
if ($7 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation ($7));
For f = new For ((Statement) $1, (BooleanExpression) $3, (Statement) $5, (Statement) $7, GetLocation ($-2));
current_block.AddStatement (f);
lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2), GetLocation ($4), GetLocation ($6));
$$ = end_block (GetLocation ($2));
((For) $0).Iterator = (Statement) $7;
}
| opt_for_initializer SEMICOLON error
embedded_statement
{
For f = new For ((Statement) $1, ErrorExpression.Create (0, lexer.Location, "Syntax error"), null, null, GetLocation ($-2));
current_block.AddStatement (f);
lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2));
if ($10 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation ($10));
For f = ((For) $0);
f.Statement = (Statement) $10;
lbag.AddStatement (f, current_block.StartLocation, GetLocation ($2), GetLocation ($5), GetLocation ($8));
Error_SyntaxError (yyToken);
$$ = end_block (GetLocation ($2));
}
| error

4
ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs

@ -424,10 +424,6 @@ namespace Mono.CSharp @@ -424,10 +424,6 @@ namespace Mono.CSharp
else
tab_size = 8;
//
// FIXME: This could be `Location.Push' but we have to
// find out why the MS compiler allows this
//
Mono.CSharp.Location.Push (file, file);
}

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

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
//
@ -1346,7 +1347,7 @@ namespace Mono.CSharp { @@ -1346,7 +1347,7 @@ namespace Mono.CSharp {
} else {
Report.Error (102, symbol.Location,
"The type `{0}' already contains a definition for `{1}'",
GetSignatureForError (), symbol.MemberName.Name);
GetSignatureForError (), name);
}
return false;

10
ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs

@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
//
// Copyright 2001 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2009 Novell, Inc (http://www.novell.com)
// Copyright 2011 Xamarin Inc
//
using System;
@ -176,20 +177,21 @@ namespace Mono.CSharp { @@ -176,20 +177,21 @@ namespace Mono.CSharp {
TypeManager.CheckTypeVariance (ret_type, Variance.Covariant, this);
InvokeBuilder = new Method (this, null, ReturnType, MethodModifiers, new MemberName (InvokeMethodName), p, null);
var resolved_rt = new TypeExpression (ret_type, Location);
InvokeBuilder = new Method (this, null, resolved_rt, MethodModifiers, new MemberName (InvokeMethodName), p, null);
InvokeBuilder.Define ();
//
// Don't emit async method for compiler generated delegates (e.g. dynamic site containers)
//
if (!IsCompilerGenerated) {
DefineAsyncMethods (Parameters.CallingConvention);
DefineAsyncMethods (Parameters.CallingConvention, resolved_rt);
}
return true;
}
void DefineAsyncMethods (CallingConventions cc)
void DefineAsyncMethods (CallingConventions cc, TypeExpression returnType)
{
var iasync_result = Module.PredefinedTypes.IAsyncResult;
var async_callback = Module.PredefinedTypes.AsyncCallback;
@ -280,7 +282,7 @@ namespace Mono.CSharp { @@ -280,7 +282,7 @@ namespace Mono.CSharp {
//
// Create method, define parameters, register parameters with type system
//
EndInvokeBuilder = new Method (this, null, ReturnType, MethodModifiers, new MemberName ("EndInvoke"), end_parameters, null);
EndInvokeBuilder = new Method (this, null, returnType, MethodModifiers, new MemberName ("EndInvoke"), end_parameters, null);
EndInvokeBuilder.Define ();
}

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
// Dual licensed under the terms of the MIT X11 or GNU GPL
//
// Copyright 2004 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
//

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004, 2005, 2006, 2007, 2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

142
ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs

@ -316,9 +316,20 @@ namespace Mono.CSharp { @@ -316,9 +316,20 @@ namespace Mono.CSharp {
TypeManager.CSharpName (type), name);
}
protected static void Error_ValueAssignment (ResolveContext ec, Location loc)
public void Error_ValueAssignment (ResolveContext rc, Expression rhs)
{
ec.Report.Error (131, loc, "The left-hand side of an assignment must be a variable, a property or an indexer");
if (rhs == EmptyExpression.LValueMemberAccess || rhs == EmptyExpression.LValueMemberOutAccess) {
rc.Report.SymbolRelatedToPreviousError (type);
if (rc.CurrentInitializerVariable != null) {
rc.Report.Error (1918, loc, "Members of value type `{0}' cannot be assigned using a property `{1}' object initializer",
type.GetSignatureForError (), GetSignatureForError ());
} else {
rc.Report.Error (1612, loc, "Cannot modify a value type return value of `{0}'. Consider storing the value in a temporary variable",
GetSignatureForError ());
}
} else {
rc.Report.Error (131, loc, "The left-hand side of an assignment must be a variable, a property or an indexer");
}
}
protected void Error_VoidPointerOperation (ResolveContext rc)
@ -391,7 +402,7 @@ namespace Mono.CSharp { @@ -391,7 +402,7 @@ namespace Mono.CSharp {
throw;
ec.Report.Error (584, loc, "Internal compiler error: {0}", ex.Message);
return EmptyExpression.Null; // TODO: Add location
return ErrorExpression.Instance; // TODO: Add location
}
}
@ -432,7 +443,7 @@ namespace Mono.CSharp { @@ -432,7 +443,7 @@ namespace Mono.CSharp {
if (out_access)
ec.Report.Error (1510, loc, "A ref or out argument must be an assignable variable");
else
Error_ValueAssignment (ec, loc);
Error_ValueAssignment (ec, right_side);
}
return null;
}
@ -629,15 +640,11 @@ namespace Mono.CSharp { @@ -629,15 +640,11 @@ namespace Mono.CSharp {
}
var r = new OverloadResolver (ctors, OverloadResolver.Restrictions.NoBaseMembers, loc);
var ctor = r.ResolveMember<MethodSpec> (rc, ref args);
if (ctor == null)
return null;
if ((ctor.Modifiers & Modifiers.PROTECTED) != 0 && !rc.HasSet (ResolveContext.Options.BaseInitializer)) {
MemberExpr.CheckProtectedMemberAccess (rc, ctor, ctor.DeclaringType, loc);
if (!rc.HasSet (ResolveContext.Options.BaseInitializer)) {
r.InstanceQualifier = new ConstructorInstanceQualifier (type);
}
return ctor;
return r.ResolveMember<MethodSpec> (rc, ref args);
}
[Flags]
@ -884,18 +891,6 @@ namespace Mono.CSharp { @@ -884,18 +891,6 @@ namespace Mono.CSharp {
Report.Error (214, loc, "Pointers and fixed size buffers may only be used in an unsafe context");
}
protected void Error_CannotModifyIntermediateExpressionValue (ResolveContext ec)
{
ec.Report.SymbolRelatedToPreviousError (type);
if (ec.CurrentInitializerVariable != null) {
ec.Report.Error (1918, loc, "Members of value type `{0}' cannot be assigned using a property `{1}' object initializer",
TypeManager.CSharpName (type), GetSignatureForError ());
} else {
ec.Report.Error (1612, loc, "Cannot modify a value type return value of `{0}'. Consider storing the value in a temporary variable",
GetSignatureForError ());
}
}
//
// Converts `source' to an int, uint, long or ulong.
//
@ -2676,7 +2671,7 @@ namespace Mono.CSharp { @@ -2676,7 +2671,7 @@ namespace Mono.CSharp {
/// This class denotes an expression which evaluates to a member
/// of a struct or a class.
/// </summary>
public abstract class MemberExpr : Expression
public abstract class MemberExpr : Expression, OverloadResolver.IInstanceQualifier
{
//
// An instance expression associated with this member, if it's a
@ -2716,6 +2711,12 @@ namespace Mono.CSharp { @@ -2716,6 +2711,12 @@ namespace Mono.CSharp {
get;
}
TypeSpec OverloadResolver.IInstanceQualifier.InstanceType {
get {
return InstanceExpression.Type;
}
}
//
// Converts best base candidate for virtual method starting from QueriedBaseType
//
@ -2780,32 +2781,41 @@ namespace Mono.CSharp { @@ -2780,32 +2781,41 @@ namespace Mono.CSharp {
return method;
}
protected void CheckProtectedMemberAccess<T> (ResolveContext rc, T member) where T : MemberSpec
protected void CheckProtectedMemberAccess (ResolveContext rc, MemberSpec member)
{
if (InstanceExpression == null)
return;
if ((member.Modifiers & Modifiers.PROTECTED) != 0 && !(InstanceExpression is This)) {
CheckProtectedMemberAccess (rc, member, InstanceExpression.Type, loc);
if (!CheckProtectedMemberAccess (rc, member, InstanceExpression.Type)) {
Error_ProtectedMemberAccess (rc, member, InstanceExpression.Type, loc);
}
}
}
public static void CheckProtectedMemberAccess<T> (ResolveContext rc, T member, TypeSpec qualifier, Location loc) where T : MemberSpec
bool OverloadResolver.IInstanceQualifier.CheckProtectedMemberAccess (ResolveContext rc, MemberSpec member)
{
if (InstanceExpression == null)
return true;
return InstanceExpression is This || CheckProtectedMemberAccess (rc, member, InstanceExpression.Type);
}
public static bool CheckProtectedMemberAccess<T> (ResolveContext rc, T member, TypeSpec qualifier) where T : MemberSpec
{
var ct = rc.CurrentType;
if (ct == qualifier)
return;
return true;
if ((member.Modifiers & Modifiers.INTERNAL) != 0 && member.DeclaringType.MemberDefinition.IsInternalAsPublic (ct.MemberDefinition.DeclaringAssembly))
return;
return true;
qualifier = qualifier.GetDefinition ();
if (ct != qualifier && !IsSameOrBaseQualifier (ct, qualifier)) {
rc.Report.SymbolRelatedToPreviousError (member);
rc.Report.Error (1540, loc,
"Cannot access protected member `{0}' via a qualifier of type `{1}'. The qualifier must be of type `{2}' or derived from it",
member.GetSignatureForError (), qualifier.GetSignatureForError (), ct.GetSignatureForError ());
return false;
}
return true;
}
public override bool ContainsEmitWithAwait ()
@ -2858,6 +2868,14 @@ namespace Mono.CSharp { @@ -2858,6 +2868,14 @@ namespace Mono.CSharp {
rc.Report.Error (205, loc, "Cannot call an abstract base member `{0}'", name);
}
public static void Error_ProtectedMemberAccess (ResolveContext rc, MemberSpec member, TypeSpec qualifier, Location loc)
{
rc.Report.SymbolRelatedToPreviousError (member);
rc.Report.Error (1540, loc,
"Cannot access protected member `{0}' via a qualifier of type `{1}'. The qualifier must be of type `{2}' or derived from it",
member.GetSignatureForError (), qualifier.GetSignatureForError (), rc.CurrentType.GetSignatureForError ());
}
//
// Implements identicial simple name and type-name
//
@ -2919,6 +2937,7 @@ namespace Mono.CSharp { @@ -2919,6 +2937,7 @@ namespace Mono.CSharp {
"An object reference is required to access non-static member `{0}'",
GetSignatureForError ());
InstanceExpression = new CompilerGeneratedThis (type, loc).Resolve (rc);
return false;
}
@ -2968,9 +2987,6 @@ namespace Mono.CSharp { @@ -2968,9 +2987,6 @@ namespace Mono.CSharp {
// Additional checks for l-value member access
//
if (rhs != null) {
//
// TODO: It should be recursive but that would break csc compatibility
//
if (InstanceExpression is UnboxCast) {
rc.Report.Error (445, InstanceExpression.Location, "Cannot modify the result of an unboxing conversion");
}
@ -3378,6 +3394,7 @@ namespace Mono.CSharp { @@ -3378,6 +3394,7 @@ namespace Mono.CSharp {
var r = new OverloadResolver (Methods, type_arguments, restr, loc);
if ((restr & OverloadResolver.Restrictions.NoBaseMembers) == 0) {
r.BaseMembersProvider = this;
r.InstanceQualifier = this;
}
if (cerrors != null)
@ -3406,8 +3423,6 @@ namespace Mono.CSharp { @@ -3406,8 +3423,6 @@ namespace Mono.CSharp {
}
ResolveInstanceExpression (ec, null);
if (InstanceExpression != null)
CheckProtectedMemberAccess (ec, best_candidate);
}
var base_override = CandidateToBaseOverride (ec, best_candidate);
@ -3473,6 +3488,22 @@ namespace Mono.CSharp { @@ -3473,6 +3488,22 @@ namespace Mono.CSharp {
#endregion
}
struct ConstructorInstanceQualifier : OverloadResolver.IInstanceQualifier
{
public ConstructorInstanceQualifier (TypeSpec type)
: this ()
{
InstanceType = type;
}
public TypeSpec InstanceType { get; private set; }
public bool CheckProtectedMemberAccess (ResolveContext rc, MemberSpec member)
{
return MemberExpr.CheckProtectedMemberAccess (rc, member, InstanceType);
}
}
public struct OverloadResolver
{
[Flags]
@ -3501,6 +3532,12 @@ namespace Mono.CSharp { @@ -3501,6 +3532,12 @@ namespace Mono.CSharp {
bool TypeInferenceFailed (ResolveContext rc, MemberSpec best);
}
public interface IInstanceQualifier
{
TypeSpec InstanceType { get; }
bool CheckProtectedMemberAccess (ResolveContext rc, MemberSpec member);
}
sealed class NoBaseMembers : IBaseMembersProvider
{
public static readonly IBaseMembersProvider Instance = new NoBaseMembers ();
@ -3540,6 +3577,7 @@ namespace Mono.CSharp { @@ -3540,6 +3577,7 @@ namespace Mono.CSharp {
TypeArguments type_arguments;
IBaseMembersProvider base_provider;
IErrorHandler custom_errors;
IInstanceQualifier instance_qualifier;
Restrictions restrictions;
MethodGroupExpr best_candidate_extension_group;
TypeSpec best_candidate_return_type;
@ -3617,6 +3655,15 @@ namespace Mono.CSharp { @@ -3617,6 +3655,15 @@ namespace Mono.CSharp {
}
}
public IInstanceQualifier InstanceQualifier {
get {
return instance_qualifier;
}
set {
instance_qualifier = value;
}
}
bool IsProbingOnly {
get {
return (restrictions & Restrictions.ProbingOnly) != 0;
@ -4446,6 +4493,11 @@ namespace Mono.CSharp { @@ -4446,6 +4493,11 @@ namespace Mono.CSharp {
if (rc.IsRuntimeBinder && !member.DeclaringType.IsAccessible (rc))
continue;
if ((member.Modifiers & (Modifiers.PROTECTED | Modifiers.STATIC)) == Modifiers.PROTECTED &&
instance_qualifier != null && !instance_qualifier.CheckProtectedMemberAccess (rc, member)) {
continue;
}
}
IParametersMember pm = member as IParametersMember;
@ -4585,6 +4637,9 @@ namespace Mono.CSharp { @@ -4585,6 +4637,9 @@ namespace Mono.CSharp {
if (error_mode)
break;
if (lambda_conv_msgs != null && !lambda_conv_msgs.IsEmpty)
break;
lambda_conv_msgs = null;
error_mode = true;
}
@ -4747,6 +4802,12 @@ namespace Mono.CSharp { @@ -4747,6 +4802,12 @@ namespace Mono.CSharp {
return;
}
if ((best_candidate.Modifiers & (Modifiers.PROTECTED | Modifiers.STATIC)) == Modifiers.PROTECTED &&
InstanceQualifier != null && !InstanceQualifier.CheckProtectedMemberAccess (rc, best_candidate)) {
MemberExpr.Error_ProtectedMemberAccess (rc, best_candidate, InstanceQualifier.InstanceType, loc);
}
//
// For candidates which match on parameters count report more details about incorrect arguments
//
@ -5617,8 +5678,9 @@ namespace Mono.CSharp { @@ -5617,8 +5678,9 @@ namespace Mono.CSharp {
return CreateExpressionFactoryCall (ec, "Property", args);
}
public Expression CreateSetterTypeOfExpression ()
public Expression CreateSetterTypeOfExpression (ResolveContext rc)
{
DoResolveLValue (rc, null);
return new TypeOfMethod (Setter, loc);
}
@ -5838,7 +5900,7 @@ namespace Mono.CSharp { @@ -5838,7 +5900,7 @@ namespace Mono.CSharp {
// if the property/indexer returns a value type, and we try to set a field in it
if (right_side == EmptyExpression.LValueMemberAccess || right_side == EmptyExpression.LValueMemberOutAccess) {
Error_CannotModifyIntermediateExpressionValue (ec);
Error_ValueAssignment (ec, right_side);
}
if (eclass == ExprClass.Unresolved) {

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/enum.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2003 Novell, Inc (http://www.novell.com)
// Copyright 2011 Xamarin Inc
//
using System;

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2011 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

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

@ -5422,6 +5422,11 @@ namespace Mono.CSharp @@ -5422,6 +5422,11 @@ namespace Mono.CSharp
return list.ArgumentTypes;
}
public override string GetSignatureForError ()
{
return mg.GetSignatureForError ();
}
//
// If a member is a method or event, or if it is a constant, field or property of either a delegate type
// or the type dynamic, then the member is invocable
@ -5653,7 +5658,7 @@ namespace Mono.CSharp @@ -5653,7 +5658,7 @@ namespace Mono.CSharp
// Check whether the type of type parameter can be constructed. BaseType can be a struct for method overrides
// where type parameter constraint is inflated to struct
//
if ((tparam.SpecialConstraint & (SpecialConstraint.Struct | SpecialConstraint.Constructor)) == 0 && !tparam.BaseType.IsStruct) {
if ((tparam.SpecialConstraint & (SpecialConstraint.Struct | SpecialConstraint.Constructor)) == 0 && !TypeSpec.IsValueType (tparam)) {
ec.Report.Error (304, loc,
"Cannot create an instance of the variable type `{0}' because it does not have the new() constraint",
TypeManager.CSharpName (type));
@ -6783,7 +6788,8 @@ namespace Mono.CSharp @@ -6783,7 +6788,8 @@ namespace Mono.CSharp
array_element_type = best_type_inference.InferredTypeArguments[0];
best_type_inference = null;
if (array_element_type == null || array_element_type == InternalType.MethodGroup || array_element_type == InternalType.AnonymousMethod ||
if (array_element_type == null ||
array_element_type == InternalType.NullLiteral || array_element_type == InternalType.MethodGroup || array_element_type == InternalType.AnonymousMethod ||
arguments.Count != rank.Dimension) {
ec.Report.Error (826, loc,
"The type of an implicitly typed array cannot be inferred from the initializer. Try specifying array type explicitly");
@ -8420,7 +8426,7 @@ namespace Mono.CSharp @@ -8420,7 +8426,7 @@ namespace Mono.CSharp
return res.Resolve (ec);
}
public override Expression DoResolveLValue (ResolveContext ec, Expression right_side)
public override Expression DoResolveLValue (ResolveContext ec, Expression rhs)
{
Expr = Expr.Resolve (ec);
if (Expr == null)
@ -8432,7 +8438,12 @@ namespace Mono.CSharp @@ -8432,7 +8438,12 @@ namespace Mono.CSharp
if (res == null)
return null;
return res.ResolveLValue (ec, right_side);
bool lvalue_instance = rhs != null && type.IsStruct && (Expr is Invocation || Expr is PropertyExpr);
if (lvalue_instance) {
Expr.Error_ValueAssignment (ec, EmptyExpression.LValueMemberAccess);
}
return res.ResolveLValue (ec, rhs);
}
public override void Emit (EmitContext ec)
@ -8887,6 +8898,7 @@ namespace Mono.CSharp @@ -8887,6 +8898,7 @@ namespace Mono.CSharp
} else {
var res = new OverloadResolver (indexers, OverloadResolver.Restrictions.None, loc);
res.BaseMembersProvider = this;
res.InstanceQualifier = this;
// TODO: Do I need 2 argument sets?
best_candidate = res.ResolveMember<IndexerSpec> (rc, ref arguments);
@ -8919,7 +8931,6 @@ namespace Mono.CSharp @@ -8919,7 +8931,6 @@ namespace Mono.CSharp
if (right_side != null)
ResolveInstanceExpression (rc, right_side);
CheckProtectedMemberAccess (rc, best_candidate);
return this;
}
@ -9642,12 +9653,21 @@ namespace Mono.CSharp @@ -9642,12 +9653,21 @@ namespace Mono.CSharp
if (fe != null)
args.Add (new Argument (fe.CreateTypeOfExpression ()));
else
args.Add (new Argument (((PropertyExpr)target).CreateSetterTypeOfExpression ()));
args.Add (new Argument (((PropertyExpr) target).CreateSetterTypeOfExpression (ec)));
string mname;
Expression arg_expr;
var cinit = source as CollectionOrObjectInitializers;
if (cinit == null) {
mname = "Bind";
arg_expr = source.CreateExpressionTree (ec);
} else {
mname = cinit.IsEmpty || cinit.Initializers[0] is ElementInitializer ? "MemberBind" : "ListBind";
arg_expr = cinit.CreateExpressionTree (ec, !cinit.IsEmpty);
}
args.Add (new Argument (source.CreateExpressionTree (ec)));
return CreateExpressionFactoryCall (ec,
source is CollectionOrObjectInitializers ? "ListBind" : "Bind",
args);
args.Add (new Argument (arg_expr));
return CreateExpressionFactoryCall (ec, mname, args);
}
protected override Expression DoResolve (ResolveContext ec)
@ -9812,6 +9832,12 @@ namespace Mono.CSharp @@ -9812,6 +9832,12 @@ namespace Mono.CSharp
this.initializers = initializers;
this.loc = loc;
}
public IList<Expression> Initializers {
get {
return initializers;
}
}
public bool IsEmpty {
get {
@ -9825,12 +9851,6 @@ namespace Mono.CSharp @@ -9825,12 +9851,6 @@ namespace Mono.CSharp
}
}
public IList<Expression> Initializers {
get {
return initializers;
}
}
protected override void CloneTo (CloneContext clonectx, Expression target)
{
CollectionOrObjectInitializers t = (CollectionOrObjectInitializers) target;
@ -9851,6 +9871,11 @@ namespace Mono.CSharp @@ -9851,6 +9871,11 @@ namespace Mono.CSharp
}
public override Expression CreateExpressionTree (ResolveContext ec)
{
return CreateExpressionTree (ec, false);
}
public Expression CreateExpressionTree (ResolveContext ec, bool inferType)
{
var expr_initializers = new ArrayInitializer (initializers.Count, loc);
foreach (Expression e in initializers) {
@ -9859,7 +9884,10 @@ namespace Mono.CSharp @@ -9859,7 +9884,10 @@ namespace Mono.CSharp
expr_initializers.Add (expr);
}
return new ImplicitlyTypedArrayCreation (expr_initializers, loc);
if (inferType)
return new ImplicitlyTypedArrayCreation (expr_initializers, loc);
return new ArrayCreation (new TypeExpression (ec.Module.PredefinedTypes.MemberBinding.Resolve (), loc), expr_initializers, loc);
}
protected override Expression DoResolve (ResolveContext ec)
@ -10035,7 +10063,7 @@ namespace Mono.CSharp @@ -10035,7 +10063,7 @@ namespace Mono.CSharp
Arguments args = new Arguments (2);
args.Add (new Argument (base.CreateExpressionTree (ec)));
if (!initializers.IsEmpty)
args.Add (new Argument (initializers.CreateExpressionTree (ec)));
args.Add (new Argument (initializers.CreateExpressionTree (ec, initializers.IsCollectionInitializer)));
return CreateExpressionFactoryCall (ec,
initializers.IsCollectionInitializer ? "ListInit" : "MemberInit",
@ -10278,7 +10306,7 @@ namespace Mono.CSharp @@ -10278,7 +10306,7 @@ namespace Mono.CSharp
type = e.Type;
if (type.Kind == MemberKind.Void || type == InternalType.NullLiteral || type == InternalType.AnonymousMethod || type.IsPointer) {
Error_InvalidInitializer (ec, e.GetSignatureForError ());
Error_InvalidInitializer (ec, type.GetSignatureForError ());
return null;
}

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

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

@ -1348,11 +1348,6 @@ namespace Mono.CSharp @@ -1348,11 +1348,6 @@ namespace Mono.CSharp
VariableInfo[] sub_info;
bool is_ever_assigned;
public bool IsEverAssigned {
get { return is_ever_assigned; }
}
protected VariableInfo (string name, TypeSpec type, int offset)
{
this.Name = name;
@ -1449,6 +1444,8 @@ namespace Mono.CSharp @@ -1449,6 +1444,8 @@ namespace Mono.CSharp
return true;
}
public bool IsEverAssigned { get; set; }
public bool IsStructFieldAssigned (ResolveContext ec, string name)
{
return !ec.DoFlowAnalysis || ec.CurrentBranching.IsStructFieldAssigned (this, name);
@ -1483,7 +1480,7 @@ namespace Mono.CSharp @@ -1483,7 +1480,7 @@ namespace Mono.CSharp
else
vector.SetRange (Offset, Length);
is_ever_assigned = true;
IsEverAssigned = true;
}
public void SetStructFieldAssigned (MyBitVector vector, string field_name)
@ -1503,12 +1500,12 @@ namespace Mono.CSharp @@ -1503,12 +1500,12 @@ namespace Mono.CSharp
vector[Offset + field_idx] = true;
}
is_ever_assigned = true;
IsEverAssigned = true;
//
// Each field must be assigned
//
for (int i = Offset + 1; i <= TypeInfo.Length + Offset; i++) {
for (int i = Offset + 1; i <= TypeInfo.TotalLength + Offset; i++) {
if (!vector[i])
return;
}

141
ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs

@ -129,10 +129,15 @@ namespace Mono.CSharp { @@ -129,10 +129,15 @@ namespace Mono.CSharp {
if (TypeSpec.IsBaseClass (ba, bb, false) || TypeSpec.IsBaseClass (bb, ba, false))
return true;
Error_ConflictingConstraints (context, spec, ba, bb, loc);
return false;
}
public static void Error_ConflictingConstraints (IMemberContext context, TypeParameterSpec tp, TypeSpec ba, TypeSpec bb, Location loc)
{
context.Module.Compiler.Report.Error (455, loc,
"Type parameter `{0}' inherits conflicting constraints `{1}' and `{2}'",
spec.Name, ba.GetSignatureForError (), bb.GetSignatureForError ());
return false;
tp.Name, ba.GetSignatureForError (), bb.GetSignatureForError ());
}
public void CheckGenericConstraints (IMemberContext context, bool obsoleteCheck)
@ -808,7 +813,17 @@ namespace Mono.CSharp { @@ -808,7 +813,17 @@ namespace Mono.CSharp {
// class A : B<int> { override void Foo<U> () {} }
// class B<T> { virtual void Foo<U> () where U : T {} }
//
return HasSpecialStruct || TypeSpec.IsValueType (BaseType);
if (HasSpecialStruct)
return true;
if (targs != null) {
foreach (var ta in targs) {
if (TypeSpec.IsValueType (ta))
return true;
}
}
return false;
}
}
@ -853,21 +868,6 @@ namespace Mono.CSharp { @@ -853,21 +868,6 @@ namespace Mono.CSharp {
#endregion
public void ChangeTypeArgumentToBaseType (int index)
{
BaseType = targs [index];
if (targs.Length == 1) {
targs = null;
} else {
var copy = new TypeSpec[targs.Length - 1];
if (index > 0)
Array.Copy (targs, copy, index);
Array.Copy (targs, index + 1, copy, index, targs.Length - index - 1);
targs = copy;
}
}
public string DisplayDebugInfo ()
{
var s = GetSignatureForError ();
@ -900,11 +900,18 @@ namespace Mono.CSharp { @@ -900,11 +900,18 @@ namespace Mono.CSharp {
var types = targs;
if (HasTypeConstraint) {
Array.Resize (ref types, types.Length + 1);
for (int i = 0; i < types.Length - 1; ++i) {
types[i] = types[i].BaseType;
}
types[types.Length - 1] = BaseType;
} else {
types = types.Select (l => l.BaseType).ToArray ();
}
if (types != null)
return Convert.FindMostEncompassedType (types.Select (l => l.BaseType));
return Convert.FindMostEncompassedType (types);
return BaseType;
}
@ -2256,35 +2263,25 @@ namespace Mono.CSharp { @@ -2256,35 +2263,25 @@ namespace Mono.CSharp {
// Check the interfaces constraints
//
if (tparam.Interfaces != null) {
if (atype.IsNullableType) {
if (mc == null)
return false;
foreach (TypeSpec iface in tparam.Interfaces) {
var dep = iface.GetMissingDependencies ();
if (dep != null) {
if (mc == null)
return false;
mc.Module.Compiler.Report.Error (313, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. The nullable type `{0}' never satisfies interface constraint",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError ());
ok = false;
} else {
foreach (TypeSpec iface in tparam.Interfaces) {
var dep = iface.GetMissingDependencies ();
if (dep != null) {
if (mc == null)
return false;
ImportedTypeDefinition.Error_MissingDependency (mc, dep, loc);
ok = false;
ImportedTypeDefinition.Error_MissingDependency (mc, dep, loc);
ok = false;
// return immediately to avoid duplicate errors because we are scanning
// expanded interface list
return false;
}
// return immediately to avoid duplicate errors because we are scanning
// expanded interface list
if (!CheckConversion (mc, context, atype, tparam, iface, loc)) {
if (mc == null)
return false;
}
if (!CheckConversion (mc, context, atype, tparam, iface, loc)) {
if (mc == null)
return false;
ok = false;
}
ok = false;
}
}
}
@ -2343,24 +2340,29 @@ namespace Mono.CSharp { @@ -2343,24 +2340,29 @@ namespace Mono.CSharp {
if (atype.IsGenericParameter) {
var tps = (TypeParameterSpec) atype;
if (Convert.ImplicitTypeParameterConversion (null, tps, ttype) != null)
return true;
if (tps.TypeArguments != null) {
foreach (var targ in tps.TypeArguments) {
if (TypeSpecComparer.Override.IsEqual (targ, ttype))
return true;
}
}
//
// LAMESPEC: Identity conversion with inflated type parameter
// It's not clear from the spec what rule should apply to inherited
// inflated type parameter. The specification allows only type parameter
// conversion but that's clearly not enough
//
if (tps.HasTypeConstraint && tps.BaseType == ttype)
if (Convert.ImplicitTypeParameterConversion (null, tps, ttype) != null)
return true;
} else if (TypeSpec.IsValueType (atype)) {
if (Convert.ImplicitBoxingConversion (null, atype, ttype) != null)
return true;
if (atype.IsNullableType) {
//
// LAMESPEC: Only identity or base type ValueType or Object satisfy nullable type
//
if (TypeSpec.IsBaseClass (atype, ttype, false))
return true;
} else {
if (Convert.ImplicitBoxingConversion (null, atype, ttype) != null)
return true;
}
} else {
var expr = new EmptyExpression (atype);
if (Convert.ImplicitStandardConversionExists (expr, ttype))
if (Convert.ImplicitReferenceConversionExists (atype, ttype) || Convert.ImplicitBoxingConversion (null, atype, ttype) != null)
return true;
}
@ -2379,9 +2381,21 @@ namespace Mono.CSharp { @@ -2379,9 +2381,21 @@ namespace Mono.CSharp {
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing or type parameter conversion from `{0}' to `{3}'",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
} else if (TypeSpec.IsValueType (atype)) {
mc.Module.Compiler.Report.Error (315, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing conversion from `{0}' to `{3}'",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
if (atype.IsNullableType) {
if (ttype.IsInterface) {
mc.Module.Compiler.Report.Error (313, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. The nullable type `{0}' never satisfies interface constraint `{3}'",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
} else {
mc.Module.Compiler.Report.Error (312, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. The nullable type `{0}' does not satisfy constraint `{3}'",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
}
} else {
mc.Module.Compiler.Report.Error (315, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no boxing conversion from `{0}' to `{3}'",
atype.GetSignatureForError (), tparam.GetSignatureForError (), context.GetSignatureForError (), ttype.GetSignatureForError ());
}
} else {
mc.Module.Compiler.Report.Error (311, loc,
"The type `{0}' cannot be used as type parameter `{1}' in the generic type or method `{2}'. There is no implicit reference conversion from `{0}' to `{3}'",
@ -2710,8 +2724,13 @@ namespace Mono.CSharp { @@ -2710,8 +2724,13 @@ namespace Mono.CSharp {
var mi = Delegate.GetInvokeMethod (t_i);
TypeSpec rtype = mi.ReturnType;
if (tic.IsReturnTypeNonDependent (ec, mi, rtype))
score -= tic.OutputTypeInference (ec, arguments [i].Expr, t_i);
if (tic.IsReturnTypeNonDependent (ec, mi, rtype)) {
// It can be null for default arguments
if (arguments[i] == null)
continue;
score -= tic.OutputTypeInference (ec, arguments[i].Expr, t_i);
}
}

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
// Dual licensed under the terms of the MIT X11 or GNU GPL
//
// Copyright 2007-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
#if STATIC

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// Dual licensed under the terms of the MIT X11 or GNU GPL
//
// Copyright 2007-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// Marek Safar (marek.safar@seznam.cz)
//
// Copyright 2001 Ximian, Inc.
// Copyright 2011 Xamarin Inc
//
//
// Notice that during parsing we create objects of type Literal, but the

78
ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2010 Novell, Inc
// Copyright 2011 Xamarin Inc
//
//
@ -1177,10 +1178,14 @@ namespace Mono.CSharp { @@ -1177,10 +1178,14 @@ namespace Mono.CSharp {
if (name_entry.MemberDefinition.CLSAttributeValue == false)
continue;
IParametersMember p_a = name_entry as IParametersMember;
if (p_a != null && !name_entry.IsAccessor) {
if (!is_imported_type) {
IParametersMember p_a = null;
if (!is_imported_type) {
p_a = name_entry as IParametersMember;
if (p_a != null && !name_entry.IsAccessor) {
var p_a_pd = p_a.Parameters;
//
// Check differing overloads in @container
//
for (int ii = i + 1; ii < entry.Value.Count; ++ii) {
var checked_entry = entry.Value[ii];
IParametersMember p_b = checked_entry as IParametersMember;
@ -1195,24 +1200,7 @@ namespace Mono.CSharp { @@ -1195,24 +1200,7 @@ namespace Mono.CSharp {
var res = ParametersCompiled.IsSameClsSignature (p_a.Parameters, p_b.Parameters);
if (res != 0) {
var last = GetLaterDefinedMember (checked_entry, name_entry);
if (last == checked_entry.MemberDefinition) {
report.SymbolRelatedToPreviousError (name_entry);
} else {
report.SymbolRelatedToPreviousError (checked_entry);
}
if ((res & 1) != 0) {
report.Warning (3006, 1, last.Location,
"Overloaded method `{0}' differing only in ref or out, or in array rank, is not CLS-compliant",
name_entry.GetSignatureForError ());
}
if ((res & 2) != 0) {
report.Warning (3007, 1, last.Location,
"Overloaded method `{0}' differing only by unnamed array types is not CLS-compliant",
name_entry.GetSignatureForError ());
}
ReportOverloadedMethodClsDifference (name_entry, checked_entry, res, report);
}
}
}
@ -1230,11 +1218,26 @@ namespace Mono.CSharp { @@ -1230,11 +1218,26 @@ namespace Mono.CSharp {
} else {
bool same_names_only = true;
foreach (var f in found) {
if (f.Name == name_entry.Name)
continue;
if (f.Name == name_entry.Name) {
if (p_a != null) {
IParametersMember p_b = f as IParametersMember;
if (p_b == null)
continue;
if (p_a.Parameters.Count != p_b.Parameters.Count)
continue;
if (f.IsAccessor)
continue;
var res = ParametersCompiled.IsSameClsSignature (p_a.Parameters, p_b.Parameters);
if (res != 0) {
ReportOverloadedMethodClsDifference (f, name_entry, res, report);
}
}
// if (f.IsAccessor && name_entry.IsAccessor)
// continue;
continue;
}
same_names_only = false;
if (!is_imported_type) {
@ -1273,12 +1276,37 @@ namespace Mono.CSharp { @@ -1273,12 +1276,37 @@ namespace Mono.CSharp {
if (mc_b == null)
return mc_a;
if (a.DeclaringType.MemberDefinition != b.DeclaringType.MemberDefinition)
return mc_b;
if (mc_a.Location.File != mc_a.Location.File)
return mc_b;
return mc_b.Location.Row > mc_a.Location.Row ? mc_b : mc_a;
}
static void ReportOverloadedMethodClsDifference (MemberSpec a, MemberSpec b, int res, Report report)
{
var last = GetLaterDefinedMember (a, b);
if (last == a.MemberDefinition) {
report.SymbolRelatedToPreviousError (b);
} else {
report.SymbolRelatedToPreviousError (a);
}
if ((res & 1) != 0) {
report.Warning (3006, 1, last.Location,
"Overloaded method `{0}' differing only in ref or out, or in array rank, is not CLS-compliant",
last.GetSignatureForError ());
}
if ((res & 2) != 0) {
report.Warning (3007, 1, last.Location,
"Overloaded method `{0}' differing only by unnamed array types is not CLS-compliant",
last.GetSignatureForError ());
}
}
public bool CheckExistingMembersOverloads (MemberCore member, AParametersCollection parameters)
{
var name = GetLookupName (member);

65
ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc.
//
using System;
@ -1102,7 +1103,7 @@ namespace Mono.CSharp { @@ -1102,7 +1103,7 @@ namespace Mono.CSharp {
base_tparam.InflateConstraints (inflator, local_tparam);
//
// Check all type argument constraints for possible collision
// Check all type argument constraints for possible collision or unification
// introduced by inflating inherited constraints in this context
//
// Conflict example:
@ -1111,31 +1112,67 @@ namespace Mono.CSharp { @@ -1111,31 +1112,67 @@ namespace Mono.CSharp {
// class B : A<int> { override void Foo<U> {} }
//
var local_tparam_targs = local_tparam.TypeArguments;
if (local_tparam_targs != null) {
if (local_tparam_targs != null) {
for (int ii = 0; ii < local_tparam_targs.Length; ++ii) {
var ta = local_tparam_targs [ii];
if (!ta.IsClass && !ta.IsStruct)
continue;
if (Constraints.CheckConflictingInheritedConstraint (local_tparam, ta, this, Location)) {
local_tparam.ChangeTypeArgumentToBaseType (ii);
TypeSpec[] unique_tparams = null;
for (int iii = ii + 1; iii < local_tparam_targs.Length; ++iii) {
//
// Remove any identical or unified constraint types
//
var tparam_checked = local_tparam_targs[iii];
if (TypeSpecComparer.IsEqual (ta, tparam_checked) || TypeSpec.IsBaseClass (ta, tparam_checked, false)) {
unique_tparams = new TypeSpec[local_tparam_targs.Length - 1];
Array.Copy (local_tparam_targs, 0, unique_tparams, 0, iii);
Array.Copy (local_tparam_targs, iii + 1, unique_tparams, iii, local_tparam_targs.Length - iii - 1);
} else if (!TypeSpec.IsBaseClass (tparam_checked, ta, false)) {
Constraints.Error_ConflictingConstraints (this, local_tparam, ta, tparam_checked, Location);
}
}
if (unique_tparams != null) {
local_tparam_targs = unique_tparams;
local_tparam.TypeArguments = local_tparam_targs;
continue;
}
Constraints.CheckConflictingInheritedConstraint (local_tparam, ta, this, Location);
}
}
continue;
}
if (MethodData != null && MethodData.implementing != null) {
var base_tp = MethodData.implementing.Constraints[i];
if (!tp.Type.HasSameConstraintsImplementation (base_tp)) {
Report.SymbolRelatedToPreviousError (MethodData.implementing);
Report.Error (425, Location,
"The constraints for type parameter `{0}' of method `{1}' must match the constraints for type parameter `{2}' of interface method `{3}'. Consider using an explicit interface implementation instead",
tp.GetSignatureForError (), GetSignatureForError (), base_tp.GetSignatureForError (), MethodData.implementing.GetSignatureForError ());
}
}
if (base_tparams == null && MethodData != null && MethodData.implementing != null) {
CheckImplementingMethodConstraints (Parent, spec, MethodData.implementing);
}
}
public static bool CheckImplementingMethodConstraints (TypeContainer container, MethodSpec method, MethodSpec baseMethod)
{
var tparams = method.Constraints;
var base_tparams = baseMethod.Constraints;
for (int i = 0; i < tparams.Length; ++i) {
if (!tparams[i].HasSameConstraintsImplementation (base_tparams[i])) {
container.Compiler.Report.SymbolRelatedToPreviousError (method);
container.Compiler.Report.SymbolRelatedToPreviousError (baseMethod);
// Using container location because the interface can be implemented
// by base class
container.Compiler.Report.Error (425, container.Location,
"The constraints for type parameter `{0}' of method `{1}' must match the constraints for type parameter `{2}' of interface method `{3}'. Consider using an explicit interface implementation instead",
tparams[i].GetSignatureForError (), method.GetSignatureForError (),
base_tparams[i].GetSignatureForError (), baseMethod.GetSignatureForError ());
return false;
}
}
return true;
}
public override void Accept (StructuralVisitor visitor)
@ -1209,7 +1246,7 @@ namespace Mono.CSharp { @@ -1209,7 +1246,7 @@ namespace Mono.CSharp {
PredefinedAttribute pa = Module.PredefinedAttributes.Extension;
if (!pa.IsDefined) {
Report.Error (1110, Location,
"`{0}': Extension methods cannot be declared without a reference to System.Core.dll assembly. Add the assembly reference or remove `this' modifer from the first parameter",
"`{0}': Extension methods require `System.Runtime.CompilerServices.ExtensionAttribute' type to be available. Are you missing an assembly reference?",
GetSignatureForError ());
}

10
ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
//
// Copyright 2001 Ximian, Inc.
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;
using System.Collections.Generic;
@ -987,10 +988,8 @@ namespace Mono.CSharp { @@ -987,10 +988,8 @@ namespace Mono.CSharp {
if (namespace_using_table != null)
return namespace_using_table;
if (using_clauses == null) {
namespace_using_table = empty_namespaces;
return namespace_using_table;
}
if (using_clauses == null)
return empty_namespaces;
var list = new List<Namespace> (using_clauses.Count);
@ -1002,6 +1001,9 @@ namespace Mono.CSharp { @@ -1002,6 +1001,9 @@ namespace Mono.CSharp {
list.Add (using_ns);
}
if (Compiler.Settings.StatementMode)
return list.ToArray ();
namespace_using_table = list.ToArray ();
return namespace_using_table;
}

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

6
ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
//
using System;
@ -955,10 +956,7 @@ namespace Mono.CSharp { @@ -955,10 +956,7 @@ namespace Mono.CSharp {
int count = parameters.Length;
for (int i = 0; i < count; i++){
var p = parameters [i];
if (p == null)
continue;
has_params |= (p.ModFlags & Parameter.Modifier.PARAMS) != 0;
has_params |= (parameters [i].ModFlags & Parameter.Modifier.PARAMS) != 0;
}
}

11
ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;
@ -598,6 +599,10 @@ namespace Mono.CSharp { @@ -598,6 +599,10 @@ namespace Mono.CSharp {
if (!TypeSpecComparer.Override.IsEqual (mi.ReturnType, base_method.ReturnType))
return false;
if (mi.IsGeneric && !Method.CheckImplementingMethodConstraints (container, base_method, mi)) {
return true;
}
}
if (base_method != null) {
@ -686,7 +691,7 @@ namespace Mono.CSharp { @@ -686,7 +691,7 @@ namespace Mono.CSharp {
if (candidate.IsStatic) {
Report.Error (736, container.Location,
"`{0}' does not implement interface member `{1}' and the best implementing candidate `{2}' is static",
container.GetSignatureForError (), mi.GetSignatureForError (), TypeManager.CSharpSignature (candidate));
container.GetSignatureForError (), mi.GetSignatureForError (), candidate.GetSignatureForError ());
} else if ((candidate.Modifiers & Modifiers.PUBLIC) == 0) {
Report.Error (737, container.Location,
"`{0}' does not implement interface member `{1}' and the best implementing candidate `{2}' in not public",
@ -694,8 +699,8 @@ namespace Mono.CSharp { @@ -694,8 +699,8 @@ namespace Mono.CSharp {
} else {
Report.Error (738, container.Location,
"`{0}' does not implement interface member `{1}' and the best implementing candidate `{2}' return type `{3}' does not match interface member return type `{4}'",
container.GetSignatureForError (), mi.GetSignatureForError (), TypeManager.CSharpSignature (candidate),
TypeManager.CSharpName (candidate.ReturnType), TypeManager.CSharpName (mi.ReturnType));
container.GetSignatureForError (), mi.GetSignatureForError (), candidate.GetSignatureForError (),
candidate.ReturnType.GetSignatureForError (), mi.ReturnType.GetSignatureForError ());
}
} else {
Report.Error (535, container.Location, "`{0}' does not implement interface member `{1}'",

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

@ -9,6 +9,7 @@ @@ -9,6 +9,7 @@
//
// Copyright 2001, 2002, 2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2004-2008 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;
@ -781,6 +782,16 @@ namespace Mono.CSharp @@ -781,6 +782,16 @@ namespace Mono.CSharp
if (!DefineAccessors ())
return false;
if (AccessorSecond == null) {
PropertyMethod pm;
if (AccessorFirst is GetMethod)
pm = new SetMethod (this, 0, ParametersCompiled.EmptyReadOnlyParameters, null, Location);
else
pm = new GetMethod (this, 0, null, Location);
Parent.AddMember (pm);
}
if (!CheckBase ())
return false;
@ -876,7 +887,7 @@ namespace Mono.CSharp @@ -876,7 +887,7 @@ namespace Mono.CSharp
abstract class EventFieldAccessor : AEventAccessor
{
protected EventFieldAccessor (EventField method, string prefix)
: base (method, prefix, null, Location.Null)
: base (method, prefix, null, method.Location)
{
}

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2008 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;

90
ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs

@ -476,47 +476,52 @@ namespace Mono.CSharp { @@ -476,47 +476,52 @@ namespace Mono.CSharp {
}
}
public class For : Statement {
public Expression Test { get; private set; }
public Statement InitStatement { get; private set; }
public Statement Increment { get; private set; }
public Statement Statement { get; private set; }
public class For : Statement
{
bool infinite, empty;
public For (Statement init_statement,
Expression test,
Statement increment,
Statement statement,
Location l)
{
InitStatement = init_statement;
Test = test;
Increment = increment;
Statement = statement;
public For (Location l)
{
loc = l;
}
public Statement Initializer {
get; set;
}
public Expression Condition {
get; set;
}
public Statement Iterator {
get; set;
}
public Statement Statement {
get; set;
}
public override bool Resolve (BlockContext ec)
{
bool ok = true;
if (InitStatement != null){
if (!InitStatement.Resolve (ec))
if (Initializer != null) {
if (!Initializer.Resolve (ec))
ok = false;
}
if (Test != null){
Test = Test.Resolve (ec);
if (Test == null)
if (Condition != null) {
Condition = Condition.Resolve (ec);
if (Condition == null)
ok = false;
else if (Test is Constant){
bool value = !((Constant) Test).IsDefaultValue;
else if (Condition is Constant) {
bool value = !((Constant) Condition).IsDefaultValue;
if (value == false){
if (!Statement.ResolveUnreachable (ec, true))
return false;
if ((Increment != null) &&
!Increment.ResolveUnreachable (ec, false))
if ((Iterator != null) &&
!Iterator.ResolveUnreachable (ec, false))
return false;
empty = true;
return true;
@ -537,12 +542,12 @@ namespace Mono.CSharp { @@ -537,12 +542,12 @@ namespace Mono.CSharp {
ok = false;
ec.EndFlowBranching ();
if (Increment != null){
if (Iterator != null){
if (ec.CurrentBranching.CurrentUsageVector.IsUnreachable) {
if (!Increment.ResolveUnreachable (ec, !was_unreachable))
if (!Iterator.ResolveUnreachable (ec, !was_unreachable))
ok = false;
} else {
if (!Increment.Resolve (ec))
if (!Iterator.Resolve (ec))
ok = false;
}
}
@ -557,11 +562,11 @@ namespace Mono.CSharp { @@ -557,11 +562,11 @@ namespace Mono.CSharp {
protected override void DoEmit (EmitContext ec)
{
if (InitStatement != null)
InitStatement.Emit (ec);
if (Initializer != null)
Initializer.Emit (ec);
if (empty) {
Test.EmitSideEffect (ec);
Condition.EmitSideEffect (ec);
return;
}
@ -578,24 +583,24 @@ namespace Mono.CSharp { @@ -578,24 +583,24 @@ namespace Mono.CSharp {
Statement.Emit (ec);
ec.MarkLabel (ec.LoopBegin);
Increment.Emit (ec);
Iterator.Emit (ec);
ec.MarkLabel (test);
//
// If test is null, there is no test, and we are just
// an infinite loop
//
if (Test != null){
if (Condition != null){
//
// The Resolve code already catches the case for
// Test == Constant (false) so we know that
// this is true
//
if (Test is Constant) {
Test.EmitSideEffect (ec);
if (Condition is Constant) {
Condition.EmitSideEffect (ec);
ec.Emit (OpCodes.Br, loop);
} else {
Test.EmitBranchable (ec, loop, true);
Condition.EmitBranchable (ec, loop, true);
}
} else
@ -610,12 +615,12 @@ namespace Mono.CSharp { @@ -610,12 +615,12 @@ namespace Mono.CSharp {
{
For target = (For) t;
if (InitStatement != null)
target.InitStatement = InitStatement.Clone (clonectx);
if (Test != null)
target.Test = Test.Clone (clonectx);
if (Increment != null)
target.Increment = Increment.Clone (clonectx);
if (Initializer != null)
target.Initializer = Initializer.Clone (clonectx);
if (Condition != null)
target.Condition = Condition.Clone (clonectx);
if (Iterator != null)
target.Iterator = Iterator.Clone (clonectx);
target.Statement = Statement.Clone (clonectx);
}
@ -1403,6 +1408,9 @@ namespace Mono.CSharp { @@ -1403,6 +1408,9 @@ namespace Mono.CSharp {
void CreateEvaluatorVariable (BlockContext bc, LocalVariable li)
{
if (bc.Report.Errors != 0)
return;
var container = bc.CurrentMemberDefinition.Parent;
Field f = new Field (container, new TypeExpression (li.Type, li.Location), Modifiers.PUBLIC | Modifiers.STATIC,

1
ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
//
// Copyright 2001 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2009 Novell, Inc
// Copyright 2011 Xamarin Inc
//
using System;

38
ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs

@ -8,7 +8,8 @@ @@ -8,7 +8,8 @@
// Dual licensed under the terms of the MIT X11 or GNU GPL
//
// Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
// Copyright 2003-2008 Novell, Inc.
// Copyright 2003-2011 Novell, Inc.
// Copyright 2011 Xamarin Inc
//
using System;
@ -208,6 +209,7 @@ namespace Mono.CSharp @@ -208,6 +209,7 @@ namespace Mono.CSharp
public readonly PredefinedType MethodBase;
public readonly PredefinedType MethodInfo;
public readonly PredefinedType ConstructorInfo;
public readonly PredefinedType MemberBinding;
//
// C# 4.0
@ -256,6 +258,7 @@ namespace Mono.CSharp @@ -256,6 +258,7 @@ namespace Mono.CSharp
Expression = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression");
ExpressionGeneric = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "Expression", 1);
MemberBinding = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "MemberBinding");
ParameterExpression = new PredefinedType (module, MemberKind.Class, "System.Linq.Expressions", "ParameterExpression");
FieldInfo = new PredefinedType (module, MemberKind.Class, "System.Reflection", "FieldInfo");
MethodBase = new PredefinedType (module, MemberKind.Class, "System.Reflection", "MethodBase");
@ -841,31 +844,6 @@ namespace Mono.CSharp @@ -841,31 +844,6 @@ namespace Mono.CSharp
{
return mb.GetSignatureForError ();
}
//
// Whether a type is unmanaged. This is used by the unsafe code (25.2)
//
public static bool IsUnmanagedType (TypeSpec t)
{
var ds = t.MemberDefinition as DeclSpace;
if (ds != null)
return ds.IsUnmanagedType ();
if (t.Kind == MemberKind.Void)
return true;
// Someone did the work of checking if the ElementType of t is unmanaged. Let's not repeat it.
if (t.IsPointer)
return IsUnmanagedType (GetElementType (t));
if (!TypeSpec.IsValueType (t))
return false;
if (t.IsNested && t.DeclaringType.IsGenericOrParentIsGeneric)
return false;
return true;
}
public static bool IsFamilyAccessible (TypeSpec type, TypeSpec parent)
{
@ -931,12 +909,12 @@ namespace Mono.CSharp @@ -931,12 +909,12 @@ namespace Mono.CSharp
/// </summary>
public static bool VerifyUnmanaged (ModuleContainer rc, TypeSpec t, Location loc)
{
while (t.IsPointer)
t = GetElementType (t);
if (IsUnmanagedType (t))
if (t.IsUnmanaged)
return true;
while (t.IsPointer)
t = ((ElementTypeSpec) t).Element;
rc.Compiler.Report.SymbolRelatedToPreviousError (t);
rc.Compiler.Report.Error (208, loc,
"Cannot take the address of, get the size of, or declare a pointer to a managed type `{0}'",

22
ICSharpCode.NRefactory.CSharp/Parser/mcs/typespec.cs

@ -284,6 +284,28 @@ namespace Mono.CSharp @@ -284,6 +284,28 @@ namespace Mono.CSharp
}
}
//
// Whether a type is unmanaged. This is used by the unsafe code
//
public bool IsUnmanaged {
get {
if (IsPointer)
return ((ElementTypeSpec) this).Element.IsUnmanaged;
var ds = MemberDefinition as DeclSpace;
if (ds != null)
return ds.IsUnmanagedType ();
if (Kind == MemberKind.Void)
return true;
if (IsNested && DeclaringType.IsGenericOrParentIsGeneric)
return false;
return IsValueType (this);
}
}
public MemberCache MemberCache {
get {
if (cache == null || (state & StateFlags.PendingMemberCacheMembers) != 0)

12
ICSharpCode.NRefactory.CSharp/Resolver/Log.cs

@ -40,19 +40,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -40,19 +40,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
// [Conditional(logEnabled ? "DEBUG" : "LOG_DISABLED")]
internal static void WriteLine(string text)
{
Debug.WriteLine(text);
// Debug.WriteLine(text);
}
// [Conditional(logEnabled ? "DEBUG" : "LOG_DISABLED")]
internal static void WriteLine(string format, params object[] args)
{
Debug.WriteLine(format, args);
// Debug.WriteLine(format, args);
}
// [Conditional(logEnabled ? "DEBUG" : "LOG_DISABLED")]
internal static void WriteCollection<T>(string text, IEnumerable<T> lines)
{
#if DEBUG
/* #if DEBUG
T[] arr = lines.ToArray();
if (arr.Length == 0) {
Debug.WriteLine(text + "<empty collection>");
@ -62,19 +62,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -62,19 +62,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Debug.WriteLine(new string(' ', text.Length) + (arr[i] != null ? arr[i].ToString() : "<null>"));
}
}
#endif
#endif*/
}
// [Conditional(logEnabled ? "DEBUG" : "LOG_DISABLED")]
public static void Indent()
{
Debug.Indent();
// Debug.Indent();
}
// [Conditional(logEnabled ? "DEBUG" : "LOG_DISABLED")]
public static void Unindent()
{
Debug.Unindent();
// Debug.Unindent();
}
}
}

19
ICSharpCode.NRefactory.Demo/ICSharpCode.NRefactory.Demo.csproj

@ -1,14 +1,15 @@ @@ -1,14 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>WinExe</OutputType>
<RootNamespace>ICSharpCode.NRefactory.Demo</RootNamespace>
<AssemblyName>ICSharpCode.NRefactory.Demo</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
<ProductVersion>10.0.0</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<PlatformTarget>x86</PlatformTarget>
@ -32,6 +33,18 @@ @@ -32,6 +33,18 @@
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">

129
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -28,6 +28,8 @@ @@ -28,6 +28,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.NRefactory.CSharp.Completion;
@ -36,6 +38,7 @@ using System.Linq; @@ -36,6 +38,7 @@ using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Editor;
using System.Diagnostics;
using System.Text;
namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
@ -217,49 +220,38 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -217,49 +220,38 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
AutoSelect = engine.AutoSelect,
DefaultCompletionString = engine.DefaultCompletionString
};
/*
TestWorkbenchWindow tww = new TestWorkbenchWindow ();
TestViewContent sev = new TestViewContent ();
DotNetProject project = new DotNetAssemblyProject ("C#");
project.FileName = GetTempFile (".csproj");
}
Tuple<ReadOnlyDocument, CSharpCompletionEngine> GetContent (string text, CompilationUnit compilationUnit)
{
var doc = new ReadOnlyDocument (text);
var pctx = new SimpleProjectContent ();
var parsedFile = new TypeSystemConvertVisitor (pctx, "program.cs").Convert (compilationUnit);
pctx.UpdateProjectContent (null, parsedFile);
var engine = new CSharpCompletionEngine (doc, new TestFactory ());
string file = GetTempFile (".cs");
project.AddFile (file);
var ctx = new CompositeTypeResolveContext ( new [] { pctx, CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore });
engine.ctx = ctx;
engine.EolMarker = Environment.NewLine;
engine.FormattingPolicy = new CSharpFormattingOptions ();
engine.CSharpParsedFile = parsedFile;
engine.ProjectContent = pctx;
engine.Unit = compilationUnit;
return Tuple.Create (doc, engine);
}
static CompletionDataList CreateProvider (string text, CompilationUnit compilationUnit, CSharpCompletionEngine engine, ReadOnlyDocument doc, TextLocation loc)
{
var cursorPosition = doc.GetOffset (loc);
TypeSystemService.Load (project);
var dom = TypeSystemService.GetContext (project);
TypeSystemService.ForceUpdate (dom);
var content = TypeSystemService.GetProjectContext (project);
var parsedDocument = TypeSystemService.ParseFile (content, file, "text/x-csharp", parsedText);
((SimpleProjectContent)content).UpdateProjectContent (null, parsedDocument);
var data = engine.GetCompletionData (cursorPosition, true);
sev.Project = project;
sev.ContentName = file;
sev.Text = editorText;
sev.CursorPosition = cursorPosition;
tww.ViewContent = sev;
TestDocument doc = new TestDocument (tww);
doc.HiddenParsedDocument = parsedDocument;
doc.HiddenProjectContent = content;
doc.HiddenContext = dom;
foreach (var e in doc.ParsedDocument.Errors)
Console.WriteLine (e);
var textEditorCompletion = new CSharpCompletionTextEditorExtension (doc);
int triggerWordLength = 1;
CodeCompletionContext completionContext = new CodeCompletionContext ();
textEditorCompletion.CompletionWidget = new TestCompletionWidget (doc.Editor) {
CurrentCodeCompletionContext = completionContext
return new CompletionDataList () {
Data = data,
AutoCompleteEmptyMatch = engine.AutoCompleteEmptyMatch,
AutoSelect = engine.AutoSelect,
DefaultCompletionString = engine.DefaultCompletionString
};
completionContext.TriggerOffset = sev.CursorPosition;
int line, column;
sev.GetLineColumnFromPosition (sev.CursorPosition, out line, out column);
completionContext.TriggerLine = line;
completionContext.TriggerLineOffset = column - 1;
TypeSystemService.Unload (project);
if (isCtrlSpace)
return textEditorCompletion.CodeCompletionCommand (completionContext) as CompletionDataList;
return textEditorCompletion.HandleCodeCompletion (completionContext, editorText[cursorPosition - 1] , ref triggerWordLength) as CompletionDataList;*/
}
public static void CheckObjectMembers (CompletionDataList provider)
@ -282,6 +274,65 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion @@ -282,6 +274,65 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
Assert.IsNotNull (provider.Find ("ReferenceEquals"), "Method 'System.Object.ReferenceEquals' not found.");
}
class TestLocVisitor : ICSharpCode.NRefactory.CSharp.DepthFirstAstVisitor<object, object>
{
public List<Tuple<TextLocation, string>> output = new List<Tuple<TextLocation, string>> ();
public override object VisitMemberReferenceExpression (MemberReferenceExpression memberReferenceExpression, object data)
{
output.Add (Tuple.Create (memberReferenceExpression.MemberNameToken.StartLocation, memberReferenceExpression.MemberName));
return base.VisitMemberReferenceExpression (memberReferenceExpression, data);
}
public override object VisitIdentifierExpression (IdentifierExpression identifierExpression, object data)
{
output.Add (Tuple.Create (identifierExpression.StartLocation, identifierExpression.Identifier));
return base.VisitIdentifierExpression (identifierExpression, data);
}
}
[Ignore("TODO")]
[Test()]
public void TestLoadAllTests ()
{
int found = 0;
int missing = 0;
int exceptions = 0;
int i = 0;
foreach (var file in Directory.EnumerateFiles ("/Users/mike/work/mono/mcs/tests", "*.cs")) {
if (i++>2)
break;
if (i <= 2)
continue;
var text = File.ReadAllText (file, Encoding.Default);
try {
var unit = new CSharpParser ().Parse (text);
var cnt = GetContent (text, unit);
var visitor = new TestLocVisitor ();
unit.AcceptVisitor (visitor);
foreach (var loc in visitor.output) {
var provider = CreateProvider (text, unit, cnt.Item2, cnt.Item1, loc.Item1);
if (provider.Find (loc.Item2) != null) {
found++;
} else {
missing++;
}
}
} catch (Exception e) {
Console.WriteLine ("Exception in:" +file);
exceptions++;
}
}
Console.WriteLine ("Found:" + found);
Console.WriteLine ("Missing:" + missing);
Console.WriteLine ("Exceptions:" + exceptions);
if (missing > 0)
Assert.Fail ();
}
[Test()]
public void TestSimpleCodeCompletion ()
{

3
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -219,9 +219,6 @@ @@ -219,9 +219,6 @@
<ItemGroup>
<Folder Include="CSharp\" />
<Folder Include="CSharp\Parser\" />
<Folder Include="CSharp\Parser\" />
<Folder Include="CSharp\Parser\" />
<Folder Include="CSharp\Parser\" />
<Folder Include="CSharp\CodeCompletion\" />
<Folder Include="CSharp\ContextAction\" />
</ItemGroup>

22
ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<ProjectGuid>{7B82B671-419F-45F4-B778-D9286F996EFA}</ProjectGuid>
@ -7,12 +7,13 @@ @@ -7,12 +7,13 @@
<OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.NRefactory.VB</RootNamespace>
<AssemblyName>ICSharpCode.NRefactory.VB</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<AppDesignerFolder>Properties</AppDesignerFolder>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<ProductVersion>10.0.0</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -179,20 +180,9 @@ @@ -179,20 +180,9 @@
<Compile Include="Visitors\CSharpToVBConverterVisitor.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Ast" />
<Folder Include="Ast\General" />
<Folder Include="Ast\GlobalScope" />
<Folder Include="Ast\Expressions" />
<Folder Include="Ast\TypeMembers" />
<Folder Include="Ast\Statements" />
<Folder Include="Ast\TypeName" />
<Folder Include="Lexer" />
<Folder Include="Lexer\Special" />
<Folder Include="OutputVisitor" />
<Folder Include="Parser" />
<Folder Include="PrettyPrinter" />
<Folder Include="PrettyPrinter\VBNet" />
<Folder Include="Visitors" />
<Folder Include="Ast\" />
<Folder Include="Lexer\" />
<Folder Include="PrettyPrinter\" />
</ItemGroup>
<ItemGroup>
<None Include="Lexer\ExpressionFinder.atg">

2
ICSharpCode.NRefactory/ICSharpCode.NRefactory.csproj

@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
<RunCodeAnalysis>False</RunCodeAnalysis>
<CodeAnalysisRules>-Microsoft.Design#CA1026;-Microsoft.Security#CA2104</CodeAnalysisRules>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>..\ICSharpCode.NRefactory.snk</AssemblyOriginatorKeyFile>
<AssemblyOriginatorKeyFile>snk</AssemblyOriginatorKeyFile>
<DelaySign>False</DelaySign>
<AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode>
</PropertyGroup>

51
NRefactory.sln

@ -1,7 +1,6 @@ @@ -1,7 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.1.0.7887-beta
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DC98210E-1646-483B-819A-2BB8272461E4}"
ProjectSection(SolutionItems) = preProject
README = README
@ -20,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.Demo @@ -20,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.Demo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.CSharp", "ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj", "{53DCA265-3C3C-42F9-B647-F72BA678122B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.GtkDemo", "ICSharpCode.NRefactory.GtkDemo\ICSharpCode.NRefactory.GtkDemo.csproj", "{A7EEF7F8-238F-459D-95A9-96467539641D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -36,6 +37,14 @@ Global @@ -36,6 +37,14 @@ Global
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|Any CPU.Build.0 = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.ActiveCfg = Release|Any CPU
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}.Release|x86.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.ActiveCfg = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.Build.0 = Release|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63D3B27A-D966-4902-90B3-30290E1692F1}.Debug|x86.ActiveCfg = Debug|x86
@ -52,14 +61,6 @@ Global @@ -52,14 +61,6 @@ Global
{7B82B671-419F-45F4-B778-D9286F996EFA}.Release|Any CPU.Build.0 = Release|Any CPU
{7B82B671-419F-45F4-B778-D9286F996EFA}.Release|x86.ActiveCfg = Release|Any CPU
{7B82B671-419F-45F4-B778-D9286F996EFA}.Release|x86.Build.0 = Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.Build.0 = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = net_4_0_Release|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Debug|x86.ActiveCfg = Debug|x86
@ -68,19 +69,29 @@ Global @@ -68,19 +69,29 @@ Global
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|Any CPU.Build.0 = Release|Any CPU
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.ActiveCfg = Release|x86
{9C19E629-C93E-4ACB-9A4B-13072B5AEF9D}.Release|x86.Build.0 = Release|x86
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.Build.0 = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Debug|x86.ActiveCfg = Debug|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.Build.0 = Release|Any CPU
{53DCA265-3C3C-42F9-B647-F72BA678122B}.Release|x86.ActiveCfg = Release|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Debug|x86.ActiveCfg = Debug|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Debug|x86.Build.0 = Debug|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Release|Any CPU.Build.0 = Release|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Release|x86.ActiveCfg = Release|Any CPU
{A7EEF7F8-238F-459D-95A9-96467539641D}.Release|x86.Build.0 = Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.ActiveCfg = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x86.Build.0 = net_4_0_Debug|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.ActiveCfg = net_4_0_Release|Any CPU
{D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Release|x86.Build.0 = net_4_0_Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
GlobalSection(NestedProjects) = preSolution
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj
StartupItem = ICSharpCode.NRefactory.GtkDemo\ICSharpCode.NRefactory.GtkDemo.csproj
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Loading…
Cancel
Save