Browse Source

Fixed SD2-559: Jagged arrays don't parse

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@747 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
91104f4152
  1. 36
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs
  2. 28
      src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs
  3. 16
      src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorStatements.cs
  4. 70
      src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs
  5. 8
      src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMOutputVisitor.cs
  6. 15
      src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs
  7. 32
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ArrayCreateExpression.cs
  8. 72
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ArrayInitializerExpression.cs
  9. 13
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/InvocationExpression.cs
  10. 11
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ObjectCreateExpression.cs
  11. 17
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeLevel/ConstructorInitializer.cs
  12. 5
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs
  13. 17
      src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/Statements/RaiseEventStatement.cs
  14. 985
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  15. 80
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  16. 1442
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  17. 45
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  18. 15
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs
  19. 3
      src/Libraries/NRefactory/Project/Src/Parser/Visitors/IASTVisitor.cs
  20. 6
      src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs
  21. 8
      src/Libraries/NRefactory/Test/Output/CodeDOM/InvocationExpressionTest.cs
  22. 20
      src/Libraries/NRefactory/Test/Parser/Expressions/ArrayCreateExpressionTests.cs
  23. 16
      src/Libraries/NRefactory/Test/Parser/Statements/LocalVariableDeclarationTests.cs
  24. 15
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  25. 12
      src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs
  26. 9
      src/SharpDevelop.WithTests.sln

36
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/ConvertBuffer.cs

@ -48,25 +48,29 @@ namespace Grunwald.BooBinding
string fileName = window.ViewContent.FileName ?? window.ViewContent.UntitledName; string fileName = window.ViewContent.FileName ?? window.ViewContent.UntitledName;
module = Parser.ParseModule(compileUnit, r, ApplySettings(fileName, errors, warnings), out specials); module = Parser.ParseModule(compileUnit, r, ApplySettings(fileName, errors, warnings), out specials);
} }
if (errors.Count > 0) { foreach (CompilerError error in errors) {
foreach (CompilerError error in errors) { errorBuilder.AppendLine(error.ToString());
errorBuilder.AppendLine(error.ToString()); }
if (warnings.Count > 0) {
foreach (CompilerWarning warning in warnings) {
errorBuilder.AppendLine(warning.ToString());
} }
} else { }
if (warnings.Count > 0) { using (StringWriter w = new StringWriter()) {
foreach (CompilerWarning warning in warnings) { foreach (CompilerError error in errors) {
errorBuilder.AppendLine(warning.ToString()); w.WriteLine("ERROR: " + error.ToString());
}
} }
using (StringWriter w = new StringWriter()) { if (errors.Count > 0)
BooPrinterVisitorWithComments printer = new BooPrinterVisitorWithComments(specials, w); w.WriteLine();
printer.OnModule(module); foreach (CompilerWarning warning in warnings) {
printer.Finish(); w.WriteLine("# WARNING: " + warning.ToString());
FileService.NewFile("Generated.boo", "Boo", w.ToString());
} }
} if (warnings.Count > 0)
if (errorBuilder.Length > 0) { w.WriteLine();
MessageService.ShowMessage(errorBuilder.ToString()); BooPrinterVisitorWithComments printer = new BooPrinterVisitorWithComments(specials, w);
printer.OnModule(module);
printer.Finish();
FileService.NewFile("Generated.boo", "Boo", w.ToString());
} }
} }
} }

28
src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs

@ -430,31 +430,29 @@ namespace NRefactoryToBooConverter
if (!arrayCreateExpression.ArrayInitializer.IsNull) { if (!arrayCreateExpression.ArrayInitializer.IsNull) {
return arrayCreateExpression.ArrayInitializer.AcceptVisitor(this, data); return arrayCreateExpression.ArrayInitializer.AcceptVisitor(this, data);
} }
ArrayCreationParameter acp = (ArrayCreationParameter)arrayCreateExpression.Parameters[0]; string builtInName = (arrayCreateExpression.Arguments.Count > 1) ? "matrix" : "array";
string builtInName = (acp.Expressions.Count == 1) ? "array" : "matrix";
B.MethodInvocationExpression mie = new B.MethodInvocationExpression(GetLexicalInfo(arrayCreateExpression), B.MethodInvocationExpression mie = new B.MethodInvocationExpression(GetLexicalInfo(arrayCreateExpression),
MakeReferenceExpression(builtInName)); MakeReferenceExpression(builtInName));
if (arrayCreateExpression.Parameters.Count > 1) { TypeReference elementType = arrayCreateExpression.CreateType.Clone();
arrayCreateExpression.CreateType.RankSpecifier = new int[arrayCreateExpression.Parameters.Count - 1]; int[] newRank = new int[elementType.RankSpecifier.Length - 1];
mie.Arguments.Add(WrapTypeReference(arrayCreateExpression.CreateType)); for (int i = 0; i < newRank.Length; i++)
newRank[i] = elementType.RankSpecifier[i + 1];
elementType.RankSpecifier = newRank;
if (newRank.Length == 0) {
mie.Arguments.Add(MakeReferenceExpression(elementType.SystemType));
} else { } else {
mie.Arguments.Add(MakeReferenceExpression(arrayCreateExpression.CreateType.SystemType)); mie.Arguments.Add(WrapTypeReference(elementType));
} }
if (acp.Expressions.Count == 1) { if (arrayCreateExpression.Arguments.Count == 1) {
mie.Arguments.Add(ConvertExpression((Expression)acp.Expressions[0])); mie.Arguments.Add(ConvertExpression(arrayCreateExpression.Arguments[0]));
} else { } else {
B.ArrayLiteralExpression dims = new B.ArrayLiteralExpression(GetLexicalInfo(acp)); B.ArrayLiteralExpression dims = new B.ArrayLiteralExpression(GetLexicalInfo(arrayCreateExpression));
ConvertExpressions(acp.Expressions, dims.Items); ConvertExpressions(arrayCreateExpression.Arguments, dims.Items);
mie.Arguments.Add(dims); mie.Arguments.Add(dims);
} }
return mie; return mie;
} }
public object Visit(ArrayCreationParameter arrayCreationParameter, object data)
{
throw new ApplicationException("Visited ArrayCreationParameter.");
}
public object Visit(ArrayInitializerExpression aie, object data) public object Visit(ArrayInitializerExpression aie, object data)
{ {
B.ArrayLiteralExpression dims = new B.ArrayLiteralExpression(GetLexicalInfo(aie)); B.ArrayLiteralExpression dims = new B.ArrayLiteralExpression(GetLexicalInfo(aie));

16
src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorStatements.cs

@ -320,6 +320,8 @@ namespace NRefactoryToBooConverter
// ??1 = array(Type, newBounds) // ??1 = array(Type, newBounds)
// Array.Copy(a, ??1, System.Math.Min(a.Length, ??1.Length)) // Array.Copy(a, ??1, System.Math.Min(a.Length, ??1.Length))
// a = ??1 // a = ??1
if (reDimStatement.IsPreserve)
AddError(reDimStatement, "Redim Preserve is not supported.");
ArrayList list = new ArrayList(); ArrayList list = new ArrayList();
foreach (InvocationExpression o in reDimStatement.ReDimClauses) { foreach (InvocationExpression o in reDimStatement.ReDimClauses) {
if (o.TypeArguments != null && o.TypeArguments.Count > 0) { if (o.TypeArguments != null && o.TypeArguments.Count > 0) {
@ -337,18 +339,10 @@ namespace NRefactoryToBooConverter
} else if (!r.IsArrayType) { } else if (!r.IsArrayType) {
AddError(o, identifier.Identifier + " is not an array."); AddError(o, identifier.Identifier + " is not an array.");
} else { } else {
r = r.Clone(); ArrayCreateExpression ace = new ArrayCreateExpression(r);
ArrayList bounds = new ArrayList(o.Arguments); foreach (Expression boundExpr in o.Arguments) {
for (int i = 0; i < bounds.Count; i++) { ace.Arguments.Add(Expression.AddInteger((Expression)boundExpr, 1));
bounds[i] = Expression.AddInteger((Expression)bounds[i], 1);
} }
ArrayList acps = new ArrayList();
acps.Add(new ArrayCreationParameter(bounds));
for (int i = 1; i < r.RankSpecifier.Length; i++) {
acps.Add(new ArrayCreationParameter(r.RankSpecifier[i]));
}
r.RankSpecifier = null;
ArrayCreateExpression ace = new ArrayCreateExpression(r, acps);
ace.StartLocation = o.StartLocation; ace.StartLocation = o.StartLocation;
B.Expression expr = new B.ReferenceExpression(GetLexicalInfo(identifier), identifier.Identifier); B.Expression expr = new B.ReferenceExpression(GetLexicalInfo(identifier), identifier.Identifier);
expr = new B.BinaryExpression(GetLexicalInfo(reDimStatement), B.BinaryOperatorType.Assign, expr, ConvertExpression(ace)); expr = new B.BinaryExpression(GetLexicalInfo(reDimStatement), B.BinaryOperatorType.Assign, expr, ConvertExpression(ace));

70
src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs

@ -135,6 +135,32 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} }
public object Visit(TypeReference typeReference, object data) public object Visit(TypeReference typeReference, object data)
{
PrintTypeReferenceWithoutArray(typeReference);
if (typeReference.IsArrayType) {
PrintArrayRank(typeReference.RankSpecifier, 0);
}
return null;
}
void PrintArrayRank(int[] rankSpecifier, int startRankIndex)
{
for (int i = startRankIndex; i < rankSpecifier.Length; ++i) {
outputFormatter.PrintToken(Tokens.OpenSquareBracket);
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
for (int j = 0; j < rankSpecifier[i]; ++j) {
outputFormatter.PrintToken(Tokens.Comma);
}
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.CloseSquareBracket);
}
}
void PrintTypeReferenceWithoutArray(TypeReference typeReference)
{ {
if (typeReference.IsGlobal) { if (typeReference.IsGlobal) {
outputFormatter.PrintText("global::"); outputFormatter.PrintText("global::");
@ -144,7 +170,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
} else if (typeReference.SystemType == "System.Nullable" && typeReference.GenericTypes != null } else if (typeReference.SystemType == "System.Nullable" && typeReference.GenericTypes != null
&& typeReference.GenericTypes.Count == 1) && typeReference.GenericTypes.Count == 1)
{ {
nodeTracker.TrackedVisit(typeReference.GenericTypes[0], data); nodeTracker.TrackedVisit(typeReference.GenericTypes[0], null);
outputFormatter.PrintText("?"); outputFormatter.PrintText("?");
} else { } else {
if (typeReference.SystemType.Length > 0) { if (typeReference.SystemType.Length > 0) {
@ -161,22 +187,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
for (int i = 0; i < typeReference.PointerNestingLevel; ++i) { for (int i = 0; i < typeReference.PointerNestingLevel; ++i) {
outputFormatter.PrintToken(Tokens.Times); outputFormatter.PrintToken(Tokens.Times);
} }
if (typeReference.IsArrayType) {
for (int i = 0; i < typeReference.RankSpecifier.Length; ++i) {
outputFormatter.PrintToken(Tokens.OpenSquareBracket);
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
for (int j = 0; j < typeReference.RankSpecifier[i]; ++j) {
outputFormatter.PrintToken(Tokens.Comma);
}
if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space();
}
outputFormatter.PrintToken(Tokens.CloseSquareBracket);
}
}
return null;
} }
public object Visit(InnerClassTypeReference typeReference, object data) public object Visit(InnerClassTypeReference typeReference, object data)
@ -2219,20 +2229,26 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
{ {
outputFormatter.PrintToken(Tokens.New); outputFormatter.PrintToken(Tokens.New);
outputFormatter.Space(); outputFormatter.Space();
nodeTracker.TrackedVisit(arrayCreateExpression.CreateType, data); PrintTypeReferenceWithoutArray(arrayCreateExpression.CreateType);
for (int i = 0; i < arrayCreateExpression.Parameters.Count; ++i) {
if (arrayCreateExpression.Arguments.Count > 0) {
outputFormatter.PrintToken(Tokens.OpenSquareBracket); outputFormatter.PrintToken(Tokens.OpenSquareBracket);
if (this.prettyPrintOptions.SpacesWithinBrackets) { if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space(); outputFormatter.Space();
} }
nodeTracker.TrackedVisit((INode)arrayCreateExpression.Parameters[i], data); for (int i = 0; i < arrayCreateExpression.Arguments.Count; ++i) {
if (i > 0) PrintFormattedComma();
nodeTracker.TrackedVisit(arrayCreateExpression.Arguments[i], data);
}
if (this.prettyPrintOptions.SpacesWithinBrackets) { if (this.prettyPrintOptions.SpacesWithinBrackets) {
outputFormatter.Space(); outputFormatter.Space();
} }
outputFormatter.PrintToken(Tokens.CloseSquareBracket); outputFormatter.PrintToken(Tokens.CloseSquareBracket);
PrintArrayRank(arrayCreateExpression.CreateType.RankSpecifier, 1);
} else {
PrintArrayRank(arrayCreateExpression.CreateType.RankSpecifier, 0);
} }
if (!arrayCreateExpression.ArrayInitializer.IsNull) { if (!arrayCreateExpression.ArrayInitializer.IsNull) {
outputFormatter.Space(); outputFormatter.Space();
nodeTracker.TrackedVisit(arrayCreateExpression.ArrayInitializer, data); nodeTracker.TrackedVisit(arrayCreateExpression.ArrayInitializer, data);
@ -2299,18 +2315,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
return null; return null;
} }
public object Visit(ArrayCreationParameter arrayCreationParameter, object data)
{
if (arrayCreationParameter.IsExpressionList) {
AppendCommaSeparatedList(arrayCreationParameter.Expressions);
} else {
for (int j = 0; j < arrayCreationParameter.Dimensions; ++j) {
outputFormatter.PrintToken(Tokens.Comma);
}
}
return null;
}
#endregion #endregion
#endregion #endregion

8
src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMOutputVisitor.cs

@ -805,12 +805,8 @@ namespace ICSharpCode.NRefactory.Parser
public override object Visit(ArrayCreateExpression arrayCreateExpression, object data) public override object Visit(ArrayCreateExpression arrayCreateExpression, object data)
{ {
if (arrayCreateExpression.ArrayInitializer == null) { if (arrayCreateExpression.ArrayInitializer == null) {
if (arrayCreateExpression.Rank != null && arrayCreateExpression.Rank.Length > 0) {
return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType.Type),
arrayCreateExpression.Rank[0]);
}
return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType.Type), return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType.Type),
0); arrayCreateExpression.Arguments[0].AcceptVisitor(this, data) as CodeExpression);
} }
return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType.Type), return new CodeArrayCreateExpression(ConvType(arrayCreateExpression.CreateType.Type),
GetExpressionList(arrayCreateExpression.ArrayInitializer.CreateExpressions)); GetExpressionList(arrayCreateExpression.ArrayInitializer.CreateExpressions));
@ -955,7 +951,7 @@ namespace ICSharpCode.NRefactory.Parser
} }
} }
CodeExpression[] GetExpressionList(ArrayList expressionList) CodeExpression[] GetExpressionList(IList expressionList)
{ {
if (expressionList == null) { if (expressionList == null) {
return new CodeExpression[0]; return new CodeExpression[0];

15
src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs

@ -2244,9 +2244,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.Space(); outputFormatter.Space();
nodeTracker.TrackedVisit(arrayCreateExpression.CreateType, data); nodeTracker.TrackedVisit(arrayCreateExpression.CreateType, data);
for (int i = 0; i < arrayCreateExpression.Parameters.Count; ++i) { for (int i = 0; i < arrayCreateExpression.Arguments.Count; ++i) {
outputFormatter.PrintToken(Tokens.OpenParenthesis); outputFormatter.PrintToken(Tokens.OpenParenthesis);
nodeTracker.TrackedVisit((INode)arrayCreateExpression.Parameters[i], data); nodeTracker.TrackedVisit((INode)arrayCreateExpression.Arguments[i], data);
outputFormatter.PrintToken(Tokens.CloseParenthesis); outputFormatter.PrintToken(Tokens.CloseParenthesis);
} }
@ -2295,17 +2295,6 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
return null; return null;
} }
public object Visit(ArrayCreationParameter arrayCreationParameter, object data)
{
if (arrayCreationParameter.IsExpressionList) {
AppendCommaSeparatedList(arrayCreationParameter.Expressions);
} else {
for (int j = 0; j < arrayCreationParameter.Dimensions; ++j) {
outputFormatter.PrintToken(Tokens.Comma);
}
}
return null;
}
#endregion #endregion
#endregion #endregion

32
src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ArrayCreateExpression.cs

@ -7,19 +7,14 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Collections; using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
// TODO: Overwork array create expression.
// what is rank ?
// is ArrayCreationParameter really needed ?
public class ArrayCreateExpression : Expression public class ArrayCreateExpression : Expression
{ {
TypeReference createType; TypeReference createType;
// List<Expression> parameters; List<Expression> arguments;
ArrayList parameters;
int[] rank = new int[0];
ArrayInitializerExpression arrayInitializer = null; // Array Initializer OR NULL ArrayInitializerExpression arrayInitializer = null; // Array Initializer OR NULL
public TypeReference CreateType { public TypeReference CreateType {
@ -31,21 +26,12 @@ namespace ICSharpCode.NRefactory.Parser.AST
} }
} }
public ArrayList Parameters { public List<Expression> Arguments {
get { get {
return parameters; return arguments;
} }
set { set {
parameters = value == null ? new ArrayList(1) : value; arguments = value ?? new List<Expression>(1);
}
}
public int[] Rank {
get {
return rank;
}
set {
rank = value == null ? new int[0] : value;
} }
} }
@ -62,7 +48,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
{ {
} }
public ArrayCreateExpression(TypeReference createType, ArrayList parameters) : this (createType, parameters, null) public ArrayCreateExpression(TypeReference createType, List<Expression> parameters) : this (createType, parameters, null)
{ {
} }
@ -70,10 +56,10 @@ namespace ICSharpCode.NRefactory.Parser.AST
{ {
} }
public ArrayCreateExpression(TypeReference createType, ArrayList parameters, ArrayInitializerExpression arrayInitializer) public ArrayCreateExpression(TypeReference createType, List<Expression> parameters, ArrayInitializerExpression arrayInitializer)
{ {
this.CreateType = createType; this.CreateType = createType;
this.Parameters = parameters; this.Arguments = parameters;
this.ArrayInitializer = arrayInitializer; this.ArrayInitializer = arrayInitializer;
} }
@ -86,7 +72,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
{ {
return String.Format("[ArrayCreateExpression: CreateType={0}, Parameters={1}, ArrayInitializer={2}]", return String.Format("[ArrayCreateExpression: CreateType={0}, Parameters={1}, ArrayInitializer={2}]",
createType, createType,
GetCollectionString(parameters), GetCollectionString(arguments),
arrayInitializer); arrayInitializer);
} }
} }

72
src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ArrayInitializerExpression.cs

@ -7,14 +7,13 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Collections; using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST { namespace ICSharpCode.NRefactory.Parser.AST {
public class ArrayInitializerExpression : Expression public class ArrayInitializerExpression : Expression
{ {
// List<Expression> createExpressions = new List<Expression>(1); List<Expression> createExpressions;
ArrayList createExpressions;
public new static ArrayInitializerExpression Null { public new static ArrayInitializerExpression Null {
get { get {
@ -24,31 +23,28 @@ namespace ICSharpCode.NRefactory.Parser.AST {
public static ArrayInitializerExpression CheckNull(ArrayInitializerExpression arrayInitializerExpression) public static ArrayInitializerExpression CheckNull(ArrayInitializerExpression arrayInitializerExpression)
{ {
return arrayInitializerExpression == null ? NullArrayInitializerExpression.Instance : arrayInitializerExpression; return arrayInitializerExpression ?? NullArrayInitializerExpression.Instance;
} }
public ArrayList CreateExpressions { public List<Expression> CreateExpressions {
get { get {
return createExpressions; return createExpressions;
} }
set { set {
createExpressions = value == null ? new ArrayList(1) : value; createExpressions = value ?? new List<Expression>(1);
} }
} }
public ArrayInitializerExpression() public ArrayInitializerExpression()
{ {
createExpressions = new ArrayList(1); createExpressions = new List<Expression>(1);
} }
public ArrayInitializerExpression(ArrayList createExpressions) public ArrayInitializerExpression(List<Expression> createExpressions)
{ {
this.createExpressions = createExpressions; this.createExpressions = createExpressions;
} }
public override object AcceptVisitor(IASTVisitor visitor, object data) public override object AcceptVisitor(IASTVisitor visitor, object data)
{ {
return visitor.Visit(this, data); return visitor.Visit(this, data);
@ -92,58 +88,4 @@ namespace ICSharpCode.NRefactory.Parser.AST {
return String.Format("[NullArrayInitializerExpression]"); return String.Format("[NullArrayInitializerExpression]");
} }
} }
public class ArrayCreationParameter : Expression
{
// List<Expression> expressions = new List<Expression>(1);
ArrayList expressions = new ArrayList(1);
int dimensions = -1;
public bool IsExpressionList {
get {
return expressions != null;
}
}
public ArrayList Expressions {
get {
return expressions;
}
set {
expressions = value;
}
}
public int Dimensions {
get {
return dimensions;
}
set {
dimensions = value;
}
}
public ArrayCreationParameter(ArrayList expressions)
{
this.expressions = expressions;
}
public ArrayCreationParameter(int dimensions)
{
this.dimensions = dimensions;
}
public override object AcceptVisitor(IASTVisitor visitor, object data)
{
return visitor.Visit(this, data);
}
public override string ToString()
{
return String.Format("[ArrayCreationParameter: Dimensions={0}, Expressions={1}",
dimensions,
GetCollectionString(expressions));
}
}
} }

13
src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/InvocationExpression.cs

@ -15,8 +15,7 @@ namespace ICSharpCode.NRefactory.Parser.AST {
public class InvocationExpression : Expression public class InvocationExpression : Expression
{ {
Expression targetObject; Expression targetObject;
// List<Expression> arguments; List<Expression> arguments;
ArrayList arguments;
List<TypeReference> typeArguments; List<TypeReference> typeArguments;
public Expression TargetObject { public Expression TargetObject {
@ -28,12 +27,12 @@ namespace ICSharpCode.NRefactory.Parser.AST {
} }
} }
public ArrayList Arguments { public List<Expression> Arguments {
get { get {
return arguments; return arguments;
} }
set { set {
arguments = value == null ? new ArrayList(1) : value; arguments = value ?? new List<Expression>(1);
} }
} }
@ -46,13 +45,13 @@ namespace ICSharpCode.NRefactory.Parser.AST {
} }
} }
public InvocationExpression(Expression targetObject, ArrayList parameters) public InvocationExpression(Expression targetObject, List<Expression> parameters)
{ {
this.TargetObject = targetObject; this.TargetObject = targetObject;
this.Arguments = parameters; this.Arguments = parameters;
} }
public InvocationExpression(Expression targetObject, ArrayList parameters, List<TypeReference> typeParameters) public InvocationExpression(Expression targetObject, List<Expression> parameters, List<TypeReference> typeParameters)
{ {
this.TargetObject = targetObject; this.TargetObject = targetObject;
this.Arguments = parameters; this.Arguments = parameters;
@ -62,7 +61,7 @@ namespace ICSharpCode.NRefactory.Parser.AST {
public InvocationExpression(Expression targetObject) public InvocationExpression(Expression targetObject)
{ {
this.TargetObject = targetObject; this.TargetObject = targetObject;
this.arguments = new ArrayList(1); this.arguments = new List<Expression>(1);
} }
public override object AcceptVisitor(IASTVisitor visitor, object data) public override object AcceptVisitor(IASTVisitor visitor, object data)

11
src/Libraries/NRefactory/Project/Src/Parser/AST/General/Expressions/ObjectCreateExpression.cs

@ -7,15 +7,14 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Collections; using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
public class ObjectCreateExpression : Expression public class ObjectCreateExpression : Expression
{ {
TypeReference createType; TypeReference createType;
// List<Expression> parameters; List<Expression> parameters;
ArrayList parameters;
public TypeReference CreateType { public TypeReference CreateType {
get { get {
@ -26,16 +25,16 @@ namespace ICSharpCode.NRefactory.Parser.AST
} }
} }
public ArrayList Parameters { public List<Expression> Parameters {
get { get {
return parameters; return parameters;
} }
set { set {
parameters = value == null ? new ArrayList(1) : value; parameters = value ?? new List<Expression>(1);
} }
} }
public ObjectCreateExpression(TypeReference createType, ArrayList parameters) public ObjectCreateExpression(TypeReference createType, List<Expression> parameters)
{ {
this.CreateType = createType; this.CreateType = createType;
this.Parameters = parameters; this.Parameters = parameters;

17
src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeLevel/ConstructorInitializer.cs

@ -6,11 +6,11 @@
// </file> // </file>
using System; using System;
using System.Collections; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
public enum ConstructorInitializerType { public enum ConstructorInitializerType {
None, None,
Base, Base,
@ -20,8 +20,7 @@ using System;
public class ConstructorInitializer : AbstractNode, INullable public class ConstructorInitializer : AbstractNode, INullable
{ {
ConstructorInitializerType constructorInitializerType = ConstructorInitializerType.None; ConstructorInitializerType constructorInitializerType = ConstructorInitializerType.None;
// List<Expression> arguments = new List<Expression>(1); List<Expression> arguments = new List<Expression>(1);
ArrayList arguments = new ArrayList(1);
public ConstructorInitializerType ConstructorInitializerType { public ConstructorInitializerType ConstructorInitializerType {
get { get {
@ -32,12 +31,12 @@ using System;
} }
} }
public ArrayList Arguments { public List<Expression> Arguments {
get { get {
return arguments; return arguments;
} }
set { set {
arguments = value == null ? new ArrayList(1) : value; arguments = value ?? new List<Expression>(1);
} }
} }

5
src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs

@ -285,7 +285,10 @@ namespace ICSharpCode.NRefactory.Parser.AST
if (IsArrayType) { if (IsArrayType) {
foreach (int rank in rankSpecifier) { foreach (int rank in rankSpecifier) {
b.Append('['); b.Append('[');
b.Append(',', rank); if (rank < 0)
b.Append('`', -rank);
else
b.Append(',', rank);
b.Append(']'); b.Append(']');
} }
} }

17
src/Libraries/NRefactory/Project/Src/Parser/AST/VBNet/Statements/RaiseEventStatement.cs

@ -7,15 +7,14 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Collections; using System.Collections.Generic;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
public class RaiseEventStatement : Statement public class RaiseEventStatement : Statement
{ {
string eventName = ""; string eventName = "";
// List<Expression> parameters = new List<Expression>(1); List<Expression> arguments = new List<Expression>(1);
ArrayList arguments = new ArrayList(1);
public string EventName { public string EventName {
get { get {
@ -26,7 +25,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
eventName = value; eventName = value;
} }
} }
public ArrayList Arguments { public List<Expression> Arguments {
get { get {
return arguments; return arguments;
} }
@ -36,11 +35,11 @@ namespace ICSharpCode.NRefactory.Parser.AST
} }
} }
public RaiseEventStatement(string eventName, ArrayList parameters) public RaiseEventStatement(string eventName, List<Expression> arguments)
{ {
Debug.Assert(eventName != null); Debug.Assert(eventName != null);
this.eventName = eventName; this.eventName = eventName;
this.arguments = parameters ?? new ArrayList(); this.arguments = arguments ?? new List<Expression>();
} }
public override object AcceptVisitor(IASTVisitor visitor, object data) public override object AcceptVisitor(IASTVisitor visitor, object data)
@ -50,9 +49,9 @@ namespace ICSharpCode.NRefactory.Parser.AST
public override string ToString() public override string ToString()
{ {
return String.Format("[RaiseEventStatement: EventName={0}, Parameters={1}]", return String.Format("[RaiseEventStatement: EventName={0}, Parameters={1}]",
EventName, EventName,
GetCollectionString(arguments)); GetCollectionString(arguments));
} }
} }
} }

985
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

File diff suppressed because it is too large Load Diff

80
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -1779,7 +1779,14 @@ ArrayInitializer<out Expression outExpr>
.) .)
= =
"{" "{"
[ VariableInitializer<out expr> (. if (expr != null) { initializer.CreateExpressions.Add(expr); } .) { IF (NotFinalComma()) "," VariableInitializer<out expr> (. if (expr != null) { initializer.CreateExpressions.Add(expr); } .) } [ "," ] ] [ VariableInitializer<out expr>
(. if (expr != null) { initializer.CreateExpressions.Add(expr); } .)
{ IF (NotFinalComma())
"," VariableInitializer<out expr>
(. if (expr != null) { initializer.CreateExpressions.Add(expr); } .)
}
[ "," ]
]
"}" (. outExpr = initializer; .) "}" (. outExpr = initializer; .)
. .
@ -2159,47 +2166,36 @@ PrimaryExpr<out Expression pexpr>
{ "," Expr<out expr> (. if (expr != null) { indices.Add(expr); } .) } { "," Expr<out expr> (. if (expr != null) { indices.Add(expr); } .) }
"]" (. retExpr = new IndexerExpression(retExpr, indices); .) "]" (. retExpr = new IndexerExpression(retExpr, indices); .)
) (. pexpr = retExpr; .) ) (. pexpr = retExpr; .)
| "new" NonArrayType<out type> (. ArrayList parameters = new ArrayList(); .) | "new" NonArrayType<out type>
/*--- delegate / object creation expression: */ (. List<Expression> parameters = new List<Expression>(); .)
/* Note: a delegate creation expression allow only a single Expr * /*--- delegate / object creation expression: */
* not an argument list, but this is not distinguished here */ /* Note: a delegate creation expression allow only a single Expr */
( /* not an argument list, but this is not distinguished here */
"(" (. ObjectCreateExpression oce = new ObjectCreateExpression(type, parameters); .)
[ Argument<out expr> (. if (expr != null) { parameters.Add(expr); } .)
{ "," Argument<out expr> (. if (expr != null) { parameters.Add(expr); } .) }
]
")" (. pexpr = oce; .)
/*--- array creation expression: */
| (. isArrayCreation = true; ArrayCreateExpression ace = new ArrayCreateExpression(type); pexpr = ace; .)
"[" (. int dims = 0;
ArrayList rank = new ArrayList();
ArrayList parameterExpression = new ArrayList(); .)
( (
Expr<out expr> (. if (expr != null) { parameterExpression.Add(expr); } .) "(" (. ObjectCreateExpression oce = new ObjectCreateExpression(type, parameters); .)
{ [ Argument<out expr> (. if (expr != null) { parameters.Add(expr); } .)
"," Expr<out expr> (. if (expr != null) { parameterExpression.Add(expr); } .) { "," Argument<out expr> (. if (expr != null) { parameters.Add(expr); } .) }
} ]
"]" (. parameters.Add(new ArrayCreationParameter(parameterExpression)); ")" (. pexpr = oce; .)
ace.Parameters = parameters; .) | "[" /*--- array creation expression: */
{ (. isArrayCreation = true; ArrayCreateExpression ace = new ArrayCreateExpression(type); pexpr = ace; .)
IF (IsDims()) "[" (.dims =0;.) (. int dims = 0; List<int> ranks = new List<int>(); .)
{ "," (.dims++;.) } (.rank.Add(dims); (
parameters.Add(new ArrayCreationParameter(dims)); { "," (. dims += 1; .) }
.) "]" (. ranks.Add(dims); dims = 0; .)
"]" { "[" { "," (. ++dims; .) } "]" (. ranks.Add(dims); dims = 0; .) }
} (. if (rank.Count > 0) { (. ace.CreateType.RankSpecifier = ranks.ToArray(); .)
ace.Rank = (int[])rank.ToArray(typeof (int)); ArrayInitializer<out expr> (. ace.ArrayInitializer = (ArrayInitializerExpression)expr; .)
} | Expr<out expr> (. if (expr != null) parameters.Add(expr); .)
.) { "," (. dims += 1; .)
[ ArrayInitializer<out expr> (. ace.ArrayInitializer = (ArrayInitializerExpression)expr; .) ] Expr<out expr> (. if (expr != null) parameters.Add(expr); .)
}
| { "," (.dims++;.) } (. "]" (. ranks.Add(dims); ace.Arguments = parameters; dims = 0; .)
parameters.Add(new ArrayCreationParameter(dims)); { "[" { "," (. ++dims; .) } "]" (. ranks.Add(dims); dims = 0; .) }
.) (. ace.CreateType.RankSpecifier = ranks.ToArray(); .)
"]" { IF (IsDims()) "[" (.dims =0;.) { "," (.dims++;.) } (.parameters.Add(new ArrayCreationParameter(dims)); .) "]" } ArrayInitializer<out expr> (. ace.ArrayInitializer = (ArrayInitializerExpression)expr; ace.Parameters = parameters; .) [ ArrayInitializer<out expr> (. ace.ArrayInitializer = (ArrayInitializerExpression)expr; .) ]
)
) )
/* | ArrayInitializer<out expr> (. if (!type.IsArrayType) { Error("() or [] expected"); } pexpr = new ArrayCreateExpression(type, (ArrayInitializerExpression)expr); .)*/
)
| "typeof" "(" | "typeof" "("
( (
IF (NotVoidPointer()) "void" (. type = new TypeReference("void"); .) IF (NotVoidPointer()) "void" (. type = new TypeReference("void"); .)
@ -2228,12 +2224,12 @@ PrimaryExpr<out Expression pexpr>
"." ident "." ident
(. pexpr = new FieldReferenceExpression(GetTypeReferenceExpression(pexpr, typeList), t.val);.) (. pexpr = new FieldReferenceExpression(GetTypeReferenceExpression(pexpr, typeList), t.val);.)
/*--- invocation expression: */ /*--- invocation expression: */
| "(" (. ArrayList parameters = new ArrayList(); .) | "(" (. List<Expression> parameters = new List<Expression>(); .)
[ Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .) [ Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .)
{ "," Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .) { "," Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .)
} ] ")" (. pexpr = new InvocationExpression(pexpr, parameters); .) } ] ")" (. pexpr = new InvocationExpression(pexpr, parameters); .)
| ( IF (IsGenericFollowedBy(Tokens.OpenParenthesis)) TypeArgumentList<out typeList, false> ) | ( IF (IsGenericFollowedBy(Tokens.OpenParenthesis)) TypeArgumentList<out typeList, false> )
"(" (. ArrayList parameters = new ArrayList(); .) "(" (. List<Expression> parameters = new List<Expression>(); .)
[ Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .) [ Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .)
{ "," Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .) { "," Argument<out expr> (. if (expr != null) {parameters.Add(expr);} .)
} ] ")" (. pexpr = new InvocationExpression(pexpr, parameters, typeList); .) } ] ")" (. pexpr = new InvocationExpression(pexpr, parameters, typeList); .)

1442
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

45
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -1522,7 +1522,7 @@ ConstantDeclarator<List<VariableDeclaration> constantDeclaration>
VariableDeclarator<List<VariableDeclaration> fieldDeclaration> VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
(. (.
Expression expr = null; Expression expr = null;
TypeReference type = null;ArrayList rank = null;ArrayList dimension = null; TypeReference type = null;ArrayList rank = null;List<Expression> dimension = null;
.) = .) =
Identifier (. string name = t.val; .) Identifier (. string name = t.val; .)
[ IF(IsSize()) ArrayInitializationModifier<out dimension> ] [ IF(IsSize()) ArrayInitializationModifier<out dimension> ]
@ -1544,20 +1544,14 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
Error("array rank only allowed one time"); Error("array rank only allowed one time");
} else { } else {
for (int i = 0; i < dimension.Count; i++) for (int i = 0; i < dimension.Count; i++)
dimension[i] = Expression.AddInteger((Expression)dimension[i], 1); dimension[i] = Expression.AddInteger(dimension[i], 1);
ArrayList creationParameters = new ArrayList();
creationParameters.Add(new ArrayCreationParameter(dimension));
if (rank != null) {
type.RankSpecifier = (int[])rank.ToArray(typeof(int));
}
expr = new ArrayCreateExpression(type, creationParameters);
type = type.Clone();
if (rank == null) { if (rank == null) {
type.RankSpecifier = new int[] { dimension.Count - 1 }; type.RankSpecifier = new int[] { dimension.Count - 1 };
} else { } else {
rank.Insert(0, dimension.Count - 1); rank.Insert(0, dimension.Count - 1);
type.RankSpecifier = (int[])rank.ToArray(typeof(int)); type.RankSpecifier = (int[])rank.ToArray(typeof(int));
} }
expr = new ArrayCreateExpression(type, dimension);
} }
} else if (type != null && rank != null) { } else if (type != null && rank != null) {
if(type.RankSpecifier != null) { if(type.RankSpecifier != null) {
@ -1573,7 +1567,7 @@ VariableDeclarator<List<VariableDeclaration> fieldDeclaration>
. .
/* 6.8 */ /* 6.8 */
ArrayInitializationModifier<out ArrayList arrayModifiers> ArrayInitializationModifier<out List<Expression> arrayModifiers>
(. (.
arrayModifiers = null; arrayModifiers = null;
.) = .) =
@ -1581,12 +1575,12 @@ ArrayInitializationModifier<out ArrayList arrayModifiers>
. .
/* 7.5.4.3 */ /* 7.5.4.3 */
InitializationRankList<out ArrayList rank> InitializationRankList<out List<Expression> rank>
(. (.
rank = null; rank = null;
Expression expr = null; Expression expr = null;
.) = .) =
Expr<out expr> (. rank = new ArrayList(); if (expr != null) { rank.Add(expr); } .) Expr<out expr> (. rank = new List<Expression>(); if (expr != null) { rank.Add(expr); } .)
{ {
"," Expr<out expr> (. if (expr != null) { rank.Add(expr); } .) "," Expr<out expr> (. if (expr != null) { rank.Add(expr); } .)
} }
@ -1807,7 +1801,7 @@ InvocationOrMemberReferenceExpression<ref Expression pexpr>
InvocationExpression<ref Expression pexpr> InvocationExpression<ref Expression pexpr>
(. List<TypeReference> typeParameters = new List<TypeReference>(); (. List<TypeReference> typeParameters = new List<TypeReference>();
ArrayList parameters = null; List<Expression> parameters = null;
TypeReference type; .) TypeReference type; .)
= =
"(" (. Point start = t.Location; .) "(" (. Point start = t.Location; .)
@ -1978,27 +1972,34 @@ ObjectCreateExpression<out Expression oce>
(. (.
TypeReference type = null; TypeReference type = null;
Expression initializer = null; Expression initializer = null;
ArrayList arguments = null; List<Expression> arguments = null;
ArrayList dimensions = null;
oce = null; oce = null;
.) = .) =
"New" NonArrayTypeName<out type, false> "New" NonArrayTypeName<out type, false>
["(" [ ArgumentList<out arguments> ] ")" ] ["(" [ ArgumentList<out arguments> ] ")" ]
[ ArrayInitializer<out initializer> ] [ IF (la.kind == Tokens.OpenParenthesis)
ArrayTypeModifiers<out dimensions>
ArrayInitializer<out initializer>
| ArrayInitializer<out initializer> ]
(. (.
if (initializer == null) { if (initializer == null) {
oce = new ObjectCreateExpression(type, arguments); oce = new ObjectCreateExpression(type, arguments);
} else { } else {
if (dimensions == null) dimensions = new ArrayList();
dimensions.Insert(0, (arguments == null) ? 0 : Math.Max(arguments.Count - 1, 0));
type.RankSpecifier = (int[])dimensions.ToArray(typeof(int));
ArrayCreateExpression ace = new ArrayCreateExpression(type, initializer as ArrayInitializerExpression); ArrayCreateExpression ace = new ArrayCreateExpression(type, initializer as ArrayInitializerExpression);
ace.Parameters = arguments; ace.Arguments = arguments;
oce = ace; oce = ace;
} }
.) .)
. .
/* 9.3.2 */ /* 9.3.2 */
ArgumentList<out ArrayList arguments> ArgumentList<out List<Expression> arguments>
(. (.
arguments = new ArrayList(); arguments = new List<Expression>();
Expression expr = null; Expression expr = null;
.) = .) =
[ [
@ -2373,7 +2374,8 @@ EmbeddedStatement<out Statement statement>
Statement embeddedStatement = null; Statement embeddedStatement = null;
statement = null; statement = null;
Expression expr = null; Expression expr = null;
string name = String.Empty;ArrayList p = null; string name = String.Empty;
List<Expression> p = null;
.) = .) =
"Exit" (. ExitType exitType = ExitType.None; .) "Exit" (. ExitType exitType = ExitType.None; .)
( (
@ -2616,8 +2618,9 @@ EmbeddedStatement<out Statement statement>
string resourcename = t.val, typeName; string resourcename = t.val, typeName;
Statement resourceAquisition = null, block = null; Statement resourceAquisition = null, block = null;
.) "As" ( .) "As" (
"New" Qualident<out typeName>
"New" Qualident<out typeName> (. ArrayList initializer = null; .) ["(" [ ArgumentList<out initializer> ] ")" ] (. List<Expression> initializer = null; .)
["(" [ ArgumentList<out initializer> ] ")" ]
(. (.
resourceAquisition = new LocalVariableDeclaration(new VariableDeclaration(resourcename, new ArrayInitializerExpression(initializer), new TypeReference(typeName))); resourceAquisition = new LocalVariableDeclaration(new VariableDeclaration(resourcename, new ArrayInitializerExpression(initializer), new TypeReference(typeName)));

15
src/Libraries/NRefactory/Project/Src/Parser/Visitors/AbstractASTVisitor.cs

@ -1010,11 +1010,11 @@ namespace ICSharpCode.NRefactory.Parser
{ {
Debug.Assert(arrayCreateExpression != null); Debug.Assert(arrayCreateExpression != null);
Debug.Assert(arrayCreateExpression.CreateType != null); Debug.Assert(arrayCreateExpression.CreateType != null);
Debug.Assert(arrayCreateExpression.Parameters != null); Debug.Assert(arrayCreateExpression.Arguments != null);
Debug.Assert(arrayCreateExpression.ArrayInitializer != null); Debug.Assert(arrayCreateExpression.ArrayInitializer != null);
arrayCreateExpression.CreateType.AcceptVisitor(this, data); arrayCreateExpression.CreateType.AcceptVisitor(this, data);
foreach (Expression p in arrayCreateExpression.Parameters) { foreach (Expression p in arrayCreateExpression.Arguments) {
Debug.Assert(p != null); Debug.Assert(p != null);
p.AcceptVisitor(this, data); p.AcceptVisitor(this, data);
} }
@ -1139,17 +1139,6 @@ namespace ICSharpCode.NRefactory.Parser
stackAllocExpression.Expression.AcceptVisitor(this, data); stackAllocExpression.Expression.AcceptVisitor(this, data);
return data; return data;
} }
public virtual object Visit(ArrayCreationParameter arrayCreationParameter, object data)
{
Debug.Assert(arrayCreationParameter != null);
Debug.Assert(arrayCreationParameter.Expressions != null);
foreach (Expression expr in arrayCreationParameter.Expressions) {
Debug.Assert(expr != null);
expr.AcceptVisitor(this, data);
}
return data;
}
#endregion #endregion
} }
} }

3
src/Libraries/NRefactory/Project/Src/Parser/Visitors/IASTVisitor.cs

@ -127,8 +127,5 @@ namespace ICSharpCode.NRefactory.Parser
object Visit(DirectionExpression directionExpression, object data); object Visit(DirectionExpression directionExpression, object data);
object Visit(ArrayInitializerExpression arrayInitializerExpression, object data); object Visit(ArrayInitializerExpression arrayInitializerExpression, object data);
object Visit(ConditionalExpression conditionalExpression, object data); object Visit(ConditionalExpression conditionalExpression, object data);
object Visit(ArrayCreationParameter arrayCreationParameter, object data);
} }
} }

6
src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs

@ -96,6 +96,12 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
TestStatement("object[,,] a = new object[1, 2, 3];"); TestStatement("object[,,] a = new object[1, 2, 3];");
} }
[Test]
public void JaggedArrayRank()
{
TestStatement("object[,][,,] a = new object[1, 2][,,];");
}
[Test] [Test]
public void ArrayInitializer() public void ArrayInitializer()
{ {

8
src/Libraries/NRefactory/Test/Output/CodeDOM/InvocationExpressionTest.cs

@ -6,7 +6,7 @@
// </file> // </file>
using System; using System;
using System.Collections; using System.Collections.Generic;
using System.CodeDom; using System.CodeDom;
using NUnit.Framework; using NUnit.Framework;
using ICSharpCode.NRefactory.Parser; using ICSharpCode.NRefactory.Parser;
@ -22,7 +22,7 @@ namespace ICSharpCode.NRefactory.Tests.Output.CodeDom.Tests
{ {
// InitializeComponents(); // InitializeComponents();
IdentifierExpression identifier = new IdentifierExpression("InitializeComponents"); IdentifierExpression identifier = new IdentifierExpression("InitializeComponents");
InvocationExpression invocation = new InvocationExpression(identifier, new ArrayList()); InvocationExpression invocation = new InvocationExpression(identifier, new List<Expression>());
object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null); object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null);
Assert.IsTrue(output is CodeMethodInvokeExpression); Assert.IsTrue(output is CodeMethodInvokeExpression);
CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output; CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output;
@ -35,7 +35,7 @@ namespace ICSharpCode.NRefactory.Tests.Output.CodeDom.Tests
{ {
// InitializeComponents(); // InitializeComponents();
FieldReferenceExpression field = new FieldReferenceExpression(new ThisReferenceExpression(), "InitializeComponents"); FieldReferenceExpression field = new FieldReferenceExpression(new ThisReferenceExpression(), "InitializeComponents");
InvocationExpression invocation = new InvocationExpression(field, new ArrayList()); InvocationExpression invocation = new InvocationExpression(field, new List<Expression>());
object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null); object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null);
Assert.IsTrue(output is CodeMethodInvokeExpression); Assert.IsTrue(output is CodeMethodInvokeExpression);
CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output; CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output;
@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.Tests.Output.CodeDom.Tests
FieldReferenceExpression field = new FieldReferenceExpression(new IdentifierExpression("System"), "Drawing"); FieldReferenceExpression field = new FieldReferenceExpression(new IdentifierExpression("System"), "Drawing");
field = new FieldReferenceExpression(field, "Color"); field = new FieldReferenceExpression(field, "Color");
field = new FieldReferenceExpression(field, "FromArgb"); field = new FieldReferenceExpression(field, "FromArgb");
InvocationExpression invocation = new InvocationExpression(field, new ArrayList()); InvocationExpression invocation = new InvocationExpression(field, new List<Expression>());
object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null); object output = invocation.AcceptVisitor(new CodeDOMVisitor(), null);
Assert.IsTrue(output is CodeMethodInvokeExpression); Assert.IsTrue(output is CodeMethodInvokeExpression);
CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output; CodeMethodInvokeExpression mie = (CodeMethodInvokeExpression)output;

20
src/Libraries/NRefactory/Test/Parser/Expressions/ArrayCreateExpressionTests.cs

@ -1,4 +1,4 @@
// <file> // <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright> // <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license> // <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/> // <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
@ -22,13 +22,8 @@ namespace ICSharpCode.NRefactory.Tests.AST
{ {
ArrayCreateExpression ace = ParseUtilCSharp.ParseExpression<ArrayCreateExpression>("new int[5]"); ArrayCreateExpression ace = ParseUtilCSharp.ParseExpression<ArrayCreateExpression>("new int[5]");
Assert.AreEqual("int", ace.CreateType.Type); Assert.AreEqual("int", ace.CreateType.Type);
Assert.AreEqual(1, ace.Parameters.Count); Assert.AreEqual(1, ace.Arguments.Count);
// TODO: overwork ArrayCreateExpression. Assert.AreEqual(new int[] {0}, ace.CreateType.RankSpecifier);
// Assert.AreEqual(null, ace.ArrayInitializer);
//
// Assert.IsTrue(ace.Parameters[0] is PrimitiveExpression);
// PrimitiveExpression pe = (PrimitiveExpression)ace.Parameters[0];
// Assert.AreEqual(5, (int)pe.Value);
} }
#endregion #endregion
@ -39,13 +34,8 @@ namespace ICSharpCode.NRefactory.Tests.AST
ArrayCreateExpression ace = ParseUtilVBNet.ParseExpression<ArrayCreateExpression>("new Integer() {1, 2, 3, 4}"); ArrayCreateExpression ace = ParseUtilVBNet.ParseExpression<ArrayCreateExpression>("new Integer() {1, 2, 3, 4}");
Assert.AreEqual("Integer", ace.CreateType.Type); Assert.AreEqual("Integer", ace.CreateType.Type);
Assert.AreEqual(0, ace.Parameters.Count); Assert.AreEqual(0, ace.Arguments.Count);
// TODO: overwork ArrayCreateExpression. Assert.AreEqual(new int[] {0}, ace.CreateType.RankSpecifier);
// Assert.AreEqual(null, ace.ArrayInitializer);
//
// Assert.IsTrue(ace.Parameters[0] is PrimitiveExpression);
// PrimitiveExpression pe = (PrimitiveExpression)ace.Parameters[0];
// Assert.AreEqual(5, (int)pe.Value);
} }
#endregion #endregion

16
src/Libraries/NRefactory/Test/Parser/Statements/LocalVariableDeclarationTests.cs

@ -231,11 +231,9 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.AreEqual("Integer", type.Type); Assert.AreEqual("Integer", type.Type);
Assert.AreEqual(new int[] { 0 } , type.RankSpecifier); Assert.AreEqual(new int[] { 0 } , type.RankSpecifier);
ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer; ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer;
Assert.IsFalse(ace.CreateType.IsArrayType); Assert.AreEqual(new int[] { 0 } , ace.CreateType.RankSpecifier);
Assert.AreEqual(1, ace.Parameters.Count); Assert.AreEqual(1, ace.Arguments.Count);
ArrayCreationParameter acp = (ArrayCreationParameter)ace.Parameters[0]; Assert.AreEqual(11, ((PrimitiveExpression)ace.Arguments[0]).Value);
Assert.AreEqual(1, acp.Expressions.Count);
Assert.AreEqual(11, ((PrimitiveExpression)acp.Expressions[0]).Value);
} }
[Test] [Test]
@ -248,11 +246,9 @@ namespace ICSharpCode.NRefactory.Tests.AST
Assert.AreEqual("Integer", type.Type); Assert.AreEqual("Integer", type.Type);
Assert.AreEqual(new int[] { 0, 0 } , type.RankSpecifier); Assert.AreEqual(new int[] { 0, 0 } , type.RankSpecifier);
ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer; ArrayCreateExpression ace = (ArrayCreateExpression)lvd.Variables[0].Initializer;
Assert.AreEqual(new int[] {0}, ace.CreateType.RankSpecifier); Assert.AreEqual(new int[] {0, 0}, ace.CreateType.RankSpecifier);
Assert.AreEqual(1, ace.Parameters.Count); Assert.AreEqual(1, ace.Arguments.Count);
ArrayCreationParameter acp = (ArrayCreationParameter)ace.Parameters[0]; Assert.AreEqual(11, ((PrimitiveExpression)ace.Arguments[0]).Value);
Assert.AreEqual(1, acp.Expressions.Count);
Assert.AreEqual(11, ((PrimitiveExpression)acp.Expressions[0]).Value);
} }
[Test] [Test]

15
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -100,7 +100,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null; return null;
} }
public IMethod FindOverload(List<IMethod> methods, IReturnType[] typeParameters, ArrayList arguments, object data) public IMethod FindOverload(List<IMethod> methods, IReturnType[] typeParameters, IList<Expression> arguments, object data)
{ {
if (methods.Count <= 0) { if (methods.Count <= 0) {
return null; return null;
@ -112,7 +112,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
IReturnType[] types = new IReturnType[arguments.Count]; IReturnType[] types = new IReturnType[arguments.Count];
for (int i = 0; i < types.Length; ++i) { for (int i = 0; i < types.Length; ++i) {
types[i] = ((Expression)arguments[i]).AcceptVisitor(this, data) as IReturnType; types[i] = arguments[i].AcceptVisitor(this, data) as IReturnType;
} }
return MemberLookupHelper.FindOverload(methods, typeParameters, types); return MemberLookupHelper.FindOverload(methods, typeParameters, types);
} }
@ -422,16 +422,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public override object Visit(ArrayCreateExpression arrayCreateExpression, object data) public override object Visit(ArrayCreateExpression arrayCreateExpression, object data)
{ {
IReturnType type = CreateReturnType(arrayCreateExpression.CreateType); return CreateReturnType(arrayCreateExpression.CreateType);
/*
if (arrayCreateExpression.Parameters != null && arrayCreateExpression.Parameters.Count > 0) {
int[] newRank = new int[arrayCreateExpression.Rank.Length + 1];
newRank[0] = arrayCreateExpression.Parameters.Count - 1;
Array.Copy(type.ArrayDimensions, 0, newRank, 1, type.ArrayDimensions.Length);
type.ArrayDimensions = newRank;
}
*/
return type;
} }
public override object Visit(TypeOfIsExpression typeOfIsExpression, object data) public override object Visit(TypeOfIsExpression typeOfIsExpression, object data)

12
src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs

@ -307,14 +307,14 @@ namespace ICSharpCode.SharpDevelop.Refactoring
, null); , null);
InsertCodeAfter(property, document, ed); InsertCodeAfter(property, document, ed);
ArrayList parameters = new ArrayList(2); List<Expression> arguments = new List<Expression>(2);
if (property.IsStatic) if (property.IsStatic)
parameters.Add(new PrimitiveExpression(null, "null")); arguments.Add(new PrimitiveExpression(null, "null"));
else else
parameters.Add(new ThisReferenceExpression()); arguments.Add(new ThisReferenceExpression());
parameters.Add(new FieldReferenceExpression(new IdentifierExpression("EventArgs"), "Empty")); arguments.Add(new FieldReferenceExpression(new IdentifierExpression("EventArgs"), "Empty"));
InsertCodeAtEnd(property.SetterRegion, document, InsertCodeAtEnd(property.SetterRegion, document,
new RaiseEventStatement(name, parameters)); new RaiseEventStatement(name, arguments));
} }
#endregion #endregion
@ -339,7 +339,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
new TypeReference("System.Void"), new TypeReference("System.Void"),
parameters, null); parameters, null);
ArrayList arguments = new ArrayList(2); List<Expression> arguments = new List<Expression>(2);
if (e.IsStatic) if (e.IsStatic)
arguments.Add(new PrimitiveExpression(null, "null")); arguments.Add(new PrimitiveExpression(null, "null"));
else else

9
src/SharpDevelop.WithTests.sln

@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00 Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.639 # SharpDevelop 2.0.0.745
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -20,6 +20,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FE
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}"
@ -264,6 +266,10 @@ Global
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Any CPU.Build.0 = Release|Any CPU {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Any CPU.Build.0 = Release|Any CPU
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|Any CPU.Build.0 = Release|Any CPU
{C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -282,6 +288,7 @@ Global
{4D0DFCB0-F6FB-469D-AA6F-C7F1D5FD5DE7} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} {4D0DFCB0-F6FB-469D-AA6F-C7F1D5FD5DE7} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{C9DE556D-325C-4544-B29F-16A9EB7C9830} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}
{64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}

Loading…
Cancel
Save