Browse Source

C# parser bug: fixed arrays in unsafe structs are now parsed correctly

XmlDoc.Load now does not throw an exception for invalid XML files.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1703 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
bbb73b9b8f
  1. 8
      src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Expressions.cs
  2. 4
      src/Libraries/NRefactory/NRefactoryASTGenerator/AST/GlobalLevel.cs
  3. 10
      src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Node.cs
  4. 2
      src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Statements.cs
  5. 33
      src/Libraries/NRefactory/NRefactoryASTGenerator/AST/TypeLevel.cs
  6. 6
      src/Libraries/NRefactory/Project/Src/Ast/Enums.cs
  7. 20
      src/Libraries/NRefactory/Project/Src/Ast/Generated.cs
  8. 2
      src/Libraries/NRefactory/Project/Src/IAstVisitor.cs
  9. 7
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs
  10. 1738
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  11. 29
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  12. 8
      src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs
  13. 6
      src/Libraries/NRefactory/Project/Src/Visitors/AbstractASTVisitor.cs
  14. 6
      src/Libraries/NRefactory/Project/Src/Visitors/AbstractAstTransformer.cs
  15. 18
      src/Libraries/NRefactory/Test/Output/CSharp/CSharpOutputTest.cs
  16. 1
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/ModifierEnum.cs
  17. 7
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs
  18. 27
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs

8
src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Expressions.cs

@ -16,19 +16,19 @@ namespace NRefactoryASTGenerator.Ast @@ -16,19 +16,19 @@ namespace NRefactoryASTGenerator.Ast
[CustomImplementation]
class PrimitiveExpression : Expression {}
enum ParamModifier { In }
enum ParameterModifiers { In }
class ParameterDeclarationExpression : Expression {
List<AttributeSection> attributes;
[QuestionMarkDefault]
string parameterName;
TypeReference typeReference;
ParamModifier paramModifier;
ParameterModifiers paramModifier;
Expression defaultValue;
public ParameterDeclarationExpression(TypeReference typeReference, string parameterName) {}
public ParameterDeclarationExpression(TypeReference typeReference, string parameterName, ParamModifier paramModifier) {}
public ParameterDeclarationExpression(TypeReference typeReference, string parameterName, ParamModifier paramModifier, Expression defaultValue) {}
public ParameterDeclarationExpression(TypeReference typeReference, string parameterName, ParameterModifiers paramModifier) {}
public ParameterDeclarationExpression(TypeReference typeReference, string parameterName, ParameterModifiers paramModifier, Expression defaultValue) {}
}
class NamedArgumentExpression : Expression {

4
src/Libraries/NRefactory/NRefactoryASTGenerator/AST/GlobalLevel.cs

@ -38,7 +38,7 @@ namespace NRefactoryASTGenerator.Ast @@ -38,7 +38,7 @@ namespace NRefactoryASTGenerator.Ast
List<ParameterDeclarationExpression> parameters;
List<TemplateDefinition> templates;
public DelegateDeclaration(Modifier modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
public DelegateDeclaration(Modifiers modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
}
enum ClassType { Class }
@ -57,7 +57,7 @@ namespace NRefactoryASTGenerator.Ast @@ -57,7 +57,7 @@ namespace NRefactoryASTGenerator.Ast
List<TemplateDefinition> templates;
Location bodyStartLocation;
public TypeDeclaration(Modifier modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
public TypeDeclaration(Modifiers modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
}
[IncludeBoolProperty("IsAlias", "return !alias.IsNull;")]

10
src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Node.cs

@ -14,7 +14,7 @@ namespace NRefactoryASTGenerator.Ast @@ -14,7 +14,7 @@ namespace NRefactoryASTGenerator.Ast
interface INullable {}
struct Location {}
enum Modifier { None }
enum Modifiers { None }
[CustomImplementation]
abstract class AbstractNode : INode {}
@ -22,10 +22,10 @@ namespace NRefactoryASTGenerator.Ast @@ -22,10 +22,10 @@ namespace NRefactoryASTGenerator.Ast
abstract class AttributedNode : AbstractNode
{
List<AttributeSection> attributes;
Modifier modifier;
Modifiers modifier;
public AttributedNode(List<AttributeSection> attributes) {}
public AttributedNode(Modifier modifier, List<AttributeSection> attributes) {}
public AttributedNode(Modifiers modifier, List<AttributeSection> attributes) {}
}
abstract class ParametrizedNode : AttributedNode
@ -33,12 +33,12 @@ namespace NRefactoryASTGenerator.Ast @@ -33,12 +33,12 @@ namespace NRefactoryASTGenerator.Ast
string name;
List<ParameterDeclarationExpression> parameters;
public ParametrizedNode(Modifier modifier, List<AttributeSection> attributes,
public ParametrizedNode(Modifiers modifier, List<AttributeSection> attributes,
string name, List<ParameterDeclarationExpression> parameters)
: base(modifier, attributes)
{}
public ParametrizedNode(Modifier modifier, List<AttributeSection> attributes)
public ParametrizedNode(Modifiers modifier, List<AttributeSection> attributes)
: base(modifier, attributes)
{}
}

2
src/Libraries/NRefactory/NRefactoryASTGenerator/AST/Statements.cs

@ -104,7 +104,7 @@ namespace NRefactoryASTGenerator.Ast @@ -104,7 +104,7 @@ namespace NRefactoryASTGenerator.Ast
[CustomImplementation]
class LocalVariableDeclaration : Statement {
TypeReference typeReference;
Modifier modifier;
Modifiers modifier;
List<VariableDeclaration> variables;
}

33
src/Libraries/NRefactory/NRefactoryASTGenerator/AST/TypeLevel.cs

@ -15,6 +15,7 @@ namespace NRefactoryASTGenerator.Ast @@ -15,6 +15,7 @@ namespace NRefactoryASTGenerator.Ast
string name;
Expression initializer;
TypeReference typeReference;
Expression fixedArrayInitialization;
public VariableDeclaration(string name) {}
public VariableDeclaration(string name, Expression initializer) {}
@ -26,13 +27,13 @@ namespace NRefactoryASTGenerator.Ast @@ -26,13 +27,13 @@ namespace NRefactoryASTGenerator.Ast
ConstructorInitializer constructorInitializer;
BlockStatement body;
public ConstructorDeclaration(string name, Modifier modifier,
public ConstructorDeclaration(string name, Modifiers modifier,
List<ParameterDeclarationExpression> parameters,
List<AttributeSection> attributes)
: base(modifier, attributes, name, parameters)
{}
public ConstructorDeclaration(string name, Modifier modifier,
public ConstructorDeclaration(string name, Modifiers modifier,
List<ParameterDeclarationExpression> parameters,
ConstructorInitializer constructorInitializer,
List<AttributeSection> attributes)
@ -98,12 +99,12 @@ namespace NRefactoryASTGenerator.Ast @@ -98,12 +99,12 @@ namespace NRefactoryASTGenerator.Ast
Location bodyStart;
Location bodyEnd;
public EventDeclaration(TypeReference typeReference, string name, Modifier modifier, List<AttributeSection> attributes, List<ParameterDeclarationExpression> parameters)
public EventDeclaration(TypeReference typeReference, string name, Modifiers modifier, List<AttributeSection> attributes, List<ParameterDeclarationExpression> parameters)
: base(modifier, attributes, name, parameters)
{ }
// for VB:
public EventDeclaration(TypeReference typeReference, Modifier modifier, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes, string name, List<InterfaceImplementation> interfaceImplementations)
public EventDeclaration(TypeReference typeReference, Modifiers modifier, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes, string name, List<InterfaceImplementation> interfaceImplementations)
: base(modifier, attributes, name, parameters)
{ }
}
@ -135,7 +136,7 @@ namespace NRefactoryASTGenerator.Ast @@ -135,7 +136,7 @@ namespace NRefactoryASTGenerator.Ast
public FieldDeclaration(List<AttributeSection> attributes) : base(attributes) {}
// for all other cases
public FieldDeclaration(List<AttributeSection> attributes, TypeReference typeReference, Modifier modifier)
public FieldDeclaration(List<AttributeSection> attributes, TypeReference typeReference, Modifiers modifier)
: base(modifier, attributes)
{}
}
@ -148,7 +149,7 @@ namespace NRefactoryASTGenerator.Ast @@ -148,7 +149,7 @@ namespace NRefactoryASTGenerator.Ast
List<InterfaceImplementation> interfaceImplementations;
List<TemplateDefinition> templates;
public MethodDeclaration(string name, Modifier modifier, TypeReference typeReference, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes) : base(modifier, attributes, name, parameters) {}
public MethodDeclaration(string name, Modifiers modifier, TypeReference typeReference, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes) : base(modifier, attributes, name, parameters) {}
}
enum ConversionType { None }
@ -162,7 +163,7 @@ namespace NRefactoryASTGenerator.Ast @@ -162,7 +163,7 @@ namespace NRefactoryASTGenerator.Ast
List<AttributeSection> returnTypeAttributes;
OverloadableOperatorType overloadableOperator;
public OperatorDeclaration(Modifier modifier,
public OperatorDeclaration(Modifiers modifier,
List<AttributeSection> attributes,
List<ParameterDeclarationExpression> parameters,
TypeReference typeReference,
@ -170,7 +171,7 @@ namespace NRefactoryASTGenerator.Ast @@ -170,7 +171,7 @@ namespace NRefactoryASTGenerator.Ast
: base(null, modifier, typeReference, parameters, attributes)
{}
public OperatorDeclaration(Modifier modifier,
public OperatorDeclaration(Modifiers modifier,
List<AttributeSection> attributes,
List<ParameterDeclarationExpression> parameters,
TypeReference typeReference,
@ -184,13 +185,13 @@ namespace NRefactoryASTGenerator.Ast @@ -184,13 +185,13 @@ namespace NRefactoryASTGenerator.Ast
[IncludeBoolProperty("IsReadOnly", "return HasGetRegion && !HasSetRegion;")]
[IncludeBoolProperty("IsWriteOnly", "return !HasGetRegion && HasSetRegion;")]
[IncludeMember(@"
public PropertyDeclaration(string name, TypeReference typeReference, Modifier modifier, List<AttributeSection> attributes) : this(modifier, attributes, name, null)
public PropertyDeclaration(string name, TypeReference typeReference, Modifiers modifier, List<AttributeSection> attributes) : this(modifier, attributes, name, null)
{
this.TypeReference = typeReference;
if ((modifier & Modifier.ReadOnly) != Modifier.ReadOnly) {
if ((modifier & Modifiers.ReadOnly) != Modifiers.ReadOnly) {
this.SetRegion = new PropertySetRegion(null, null);
}
if ((modifier & Modifier.WriteOnly) != Modifier.WriteOnly) {
if ((modifier & Modifiers.WriteOnly) != Modifiers.WriteOnly) {
this.GetRegion = new PropertyGetRegion(null, null);
}
}")]
@ -203,7 +204,7 @@ namespace NRefactoryASTGenerator.Ast @@ -203,7 +204,7 @@ namespace NRefactoryASTGenerator.Ast
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
public PropertyDeclaration(Modifier modifier, List<AttributeSection> attributes,
public PropertyDeclaration(Modifiers modifier, List<AttributeSection> attributes,
string name, List<ParameterDeclarationExpression> parameters)
: base(modifier, attributes, name, parameters)
{}
@ -237,7 +238,7 @@ namespace NRefactoryASTGenerator.Ast @@ -237,7 +238,7 @@ namespace NRefactoryASTGenerator.Ast
string name;
BlockStatement body;
public DestructorDeclaration(string name, Modifier modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
public DestructorDeclaration(string name, Modifiers modifier, List<AttributeSection> attributes) : base(modifier, attributes) {}
}
[IncludeBoolProperty("HasGetRegion", "return !getRegion.IsNull;")]
@ -254,11 +255,11 @@ namespace NRefactoryASTGenerator.Ast @@ -254,11 +255,11 @@ namespace NRefactoryASTGenerator.Ast
PropertyGetRegion getRegion;
PropertySetRegion setRegion;
public IndexerDeclaration(Modifier modifier, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes)
public IndexerDeclaration(Modifiers modifier, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes)
: base(modifier, attributes)
{}
public IndexerDeclaration(TypeReference typeReference, List<ParameterDeclarationExpression> parameters, Modifier modifier, List<AttributeSection> attributes)
public IndexerDeclaration(TypeReference typeReference, List<ParameterDeclarationExpression> parameters, Modifiers modifier, List<AttributeSection> attributes)
: base(modifier, attributes)
{}
}
@ -272,7 +273,7 @@ namespace NRefactoryASTGenerator.Ast @@ -272,7 +273,7 @@ namespace NRefactoryASTGenerator.Ast
CharsetModifier charset;
TypeReference typeReference;
public DeclareDeclaration(string name, Modifier modifier, TypeReference typeReference, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes, string library, string alias, CharsetModifier charset)
public DeclareDeclaration(string name, Modifiers modifier, TypeReference typeReference, List<ParameterDeclarationExpression> parameters, List<AttributeSection> attributes, string library, string alias, CharsetModifier charset)
: base(modifier, attributes, name, parameters)
{}
}

6
src/Libraries/NRefactory/Project/Src/Ast/Enums.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="none" email=""/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.Ast @@ -43,7 +43,7 @@ namespace ICSharpCode.NRefactory.Ast
Overloads = 0x10000, // VB specific
WithEvents = 0x20000, // VB specific
Default = 0x40000, // VB specific
Fixed = 0x80000, // C# specific (fixed size arrays in unsafe structs)
Synthetic = 0x200000,
/// <summary>Only for VB properties.</summary>
@ -70,7 +70,7 @@ namespace ICSharpCode.NRefactory.Ast @@ -70,7 +70,7 @@ namespace ICSharpCode.NRefactory.Ast
VBInterfaceProperties = New | Overloads | ReadOnly | WriteOnly | Default,
VBInterfaceEnums = New,
Fields = New | Visibility | Static | ReadOnly | Volatile,
Fields = New | Visibility | Static | ReadOnly | Volatile | Fixed,
PropertysEventsMethods = New | Visibility | Static | Virtual | Sealed | Override | Abstract | Extern,
Indexers = New | Visibility | Virtual | Sealed | Override | Abstract | Extern,
Operators = Public | Static | Extern,

20
src/Libraries/NRefactory/Project/Src/Ast/Generated.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
// Runtime Version:2.0.50727.88
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -4252,6 +4252,8 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L @@ -4252,6 +4252,8 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L
TypeReference typeReference;
Expression fixedArrayInitialization;
public string Name {
get {
return name;
@ -4280,22 +4282,35 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L @@ -4280,22 +4282,35 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L
}
}
public Expression FixedArrayInitialization {
get {
return fixedArrayInitialization;
}
set {
fixedArrayInitialization = value ?? Expression.Null;
if (!fixedArrayInitialization.IsNull) fixedArrayInitialization.Parent = this;
}
}
public VariableDeclaration(string name) {
Name = name;
initializer = Expression.Null;
typeReference = TypeReference.Null;
fixedArrayInitialization = Expression.Null;
}
public VariableDeclaration(string name, Expression initializer) {
Name = name;
Initializer = initializer;
typeReference = TypeReference.Null;
fixedArrayInitialization = Expression.Null;
}
public VariableDeclaration(string name, Expression initializer, TypeReference typeReference) {
Name = name;
Initializer = initializer;
TypeReference = typeReference;
fixedArrayInitialization = Expression.Null;
}
public override object AcceptVisitor(IAstVisitor visitor, object data) {
@ -4303,7 +4318,8 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L @@ -4303,7 +4318,8 @@ public UsingDeclaration(string @namespace, TypeReference alias) { usings = new L
}
public override string ToString() {
return string.Format("[VariableDeclaration Name={0} Initializer={1} TypeReference={2}]", Name, Initializer, TypeReference);
return string.Format("[VariableDeclaration Name={0} Initializer={1} TypeReference={2} FixedArrayInitial" +
"ization={3}]", Name, Initializer, TypeReference, FixedArrayInitialization);
}
}

2
src/Libraries/NRefactory/Project/Src/IAstVisitor.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
// Runtime Version:2.0.50727.88
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

7
src/Libraries/NRefactory/Project/Src/Parser/CSharp/CSharpParser.cs

@ -252,13 +252,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -252,13 +252,12 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
bool IsAssignment () { return IdentAndAsgn(); }
/* True, if ident is followed by ",", "=", or ";" */
bool IdentAndCommaOrAsgnOrSColon () {
/* True, if ident is followed by ",", "=", "[" or ";" */
bool IsVarDecl () {
int peek = Peek(1).kind;
return la.kind == Tokens.Identifier &&
(peek == Tokens.Comma || peek == Tokens.Assign || peek == Tokens.Semicolon);
(peek == Tokens.Comma || peek == Tokens.Assign || peek == Tokens.Semicolon || peek == Tokens.OpenSquareBracket);
}
bool IsVarDecl () { return IdentAndCommaOrAsgnOrSColon(); }
/* True, if the comma is not a trailing one, *
* like the last one in: a, b, c, */

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

File diff suppressed because it is too large Load Diff

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

@ -685,6 +685,7 @@ MemberModifiers<ModifierList m> @@ -685,6 +685,7 @@ MemberModifiers<ModifierList m>
| "readonly" (. m.Add(Modifiers.ReadOnly, t.Location); .)
| "sealed" (. m.Add(Modifiers.Sealed, t.Location); .)
| "static" (. m.Add(Modifiers.Static, t.Location); .)
| "fixed" (. m.Add(Modifiers.Fixed, t.Location); .)
| "unsafe" (. m.Add(Modifiers.Unsafe, t.Location); .)
| "virtual" (. m.Add(Modifiers.Virtual, t.Location); .)
| "volatile" (. m.Add(Modifiers.Volatile, t.Location); .)
@ -867,12 +868,28 @@ StructMemberDecl<ModifierList m, List<AttributeSection> attributes> @@ -867,12 +868,28 @@ StructMemberDecl<ModifierList m, List<AttributeSection> attributes>
.)
/*--- field declaration: */
| IF (IsVarDecl()) (. m.Check(Modifiers.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = m.GetDeclarationLocation(startPos);
.)
VariableDeclarator<variableDeclarators>
{ "," VariableDeclarator<variableDeclarators> }
| IF (IsVarDecl())
(. m.Check(Modifiers.Fields);
FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier);
fd.StartLocation = m.GetDeclarationLocation(startPos);
.)
( IF (m.Contains(Modifiers.Fixed))
VariableDeclarator<variableDeclarators>
"["
Expr<out expr> (. if (variableDeclarators.Count > 0)
variableDeclarators[variableDeclarators.Count-1].FixedArrayInitialization = expr; .)
"]"
{ ","
VariableDeclarator<variableDeclarators>
"["
Expr<out expr> (. if (variableDeclarators.Count > 0)
variableDeclarators[variableDeclarators.Count-1].FixedArrayInitialization = expr; .)
"]"
}
| /* non-fixed field */
VariableDeclarator<variableDeclarators>
{ "," VariableDeclarator<variableDeclarators> }
)
";" (. fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd); .)
/*--- unqualified indexer declaration (without interface name): */

8
src/Libraries/NRefactory/Project/Src/PrettyPrinter/CSharp/CSharpOutputVisitor.cs

@ -499,6 +499,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -499,6 +499,11 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
public object VisitVariableDeclaration(VariableDeclaration variableDeclaration, object data)
{
outputFormatter.PrintIdentifier(variableDeclaration.Name);
if (!variableDeclaration.FixedArrayInitialization.IsNull) {
outputFormatter.PrintToken(Tokens.OpenSquareBracket);
nodeTracker.TrackedVisit(variableDeclaration.FixedArrayInitialization, data);
outputFormatter.PrintToken(Tokens.CloseSquareBracket);
}
if (!variableDeclaration.Initializer.IsNull) {
outputFormatter.Space();
outputFormatter.PrintToken(Tokens.Assign);
@ -2424,6 +2429,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -2424,6 +2429,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
if ((modifier & Modifiers.Volatile) != 0) {
tokenList.Add(Tokens.Volatile);
}
if ((modifier & Modifiers.Fixed) != 0) {
tokenList.Add(Tokens.Fixed);
}
outputFormatter.PrintTokenList(tokenList);
if ((modifier & Modifiers.Partial) != 0) {

6
src/Libraries/NRefactory/Project/Src/Visitors/AbstractASTVisitor.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
// Runtime Version:2.0.50727.88
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -1013,8 +1013,10 @@ namespace ICSharpCode.NRefactory.Visitors { @@ -1013,8 +1013,10 @@ namespace ICSharpCode.NRefactory.Visitors {
Debug.Assert((variableDeclaration != null));
Debug.Assert((variableDeclaration.Initializer != null));
Debug.Assert((variableDeclaration.TypeReference != null));
Debug.Assert((variableDeclaration.FixedArrayInitialization != null));
variableDeclaration.Initializer.AcceptVisitor(this, data);
return variableDeclaration.TypeReference.AcceptVisitor(this, data);
variableDeclaration.TypeReference.AcceptVisitor(this, data);
return variableDeclaration.FixedArrayInitialization.AcceptVisitor(this, data);
}
public virtual object VisitWithStatement(WithStatement withStatement, object data) {

6
src/Libraries/NRefactory/Project/Src/Visitors/AbstractAstTransformer.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
// Runtime Version:2.0.50727.88
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -1835,12 +1835,16 @@ namespace ICSharpCode.NRefactory.Visitors { @@ -1835,12 +1835,16 @@ namespace ICSharpCode.NRefactory.Visitors {
Debug.Assert((variableDeclaration != null));
Debug.Assert((variableDeclaration.Initializer != null));
Debug.Assert((variableDeclaration.TypeReference != null));
Debug.Assert((variableDeclaration.FixedArrayInitialization != null));
nodeStack.Push(variableDeclaration.Initializer);
variableDeclaration.Initializer.AcceptVisitor(this, data);
variableDeclaration.Initializer = ((Expression)(nodeStack.Pop()));
nodeStack.Push(variableDeclaration.TypeReference);
variableDeclaration.TypeReference.AcceptVisitor(this, data);
variableDeclaration.TypeReference = ((TypeReference)(nodeStack.Pop()));
nodeStack.Push(variableDeclaration.FixedArrayInitialization);
variableDeclaration.FixedArrayInitialization.AcceptVisitor(this, data);
variableDeclaration.FixedArrayInitialization = ((Expression)(nodeStack.Pop()));
return null;
}

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

@ -394,5 +394,23 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter @@ -394,5 +394,23 @@ namespace ICSharpCode.NRefactory.Tests.PrettyPrinter
{
TestProgram("public struct Rational<T, O> where O : class\n{\n}");
}
[Test]
public void FixedStructField()
{
TestProgram(@"unsafe struct CrudeMessage
{
public fixed byte data[256];
}");
}
[Test]
public void FixedStructField2()
{
TestProgram(@"unsafe struct CrudeMessage
{
fixed byte data[4 * sizeof(int)], data2[10];
}");
}
}
}

1
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/Interfaces/ModifierEnum.cs

@ -40,6 +40,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -40,6 +40,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Overloads = M.Overloads, // VB specific
WithEvents = M.WithEvents, // VB specific
Default = M.Default, // VB specific
Fixed = M.Fixed,
Synthetic = M.Synthetic,

7
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -526,10 +526,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -526,10 +526,13 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
AST.VariableDeclaration field = (AST.VariableDeclaration)fieldDeclaration.Fields[i];
IReturnType retType;
if (c.ClassType == ClassType.Enum)
if (c.ClassType == ClassType.Enum) {
retType = c.DefaultReturnType;
else
} else {
retType = CreateReturnType(fieldDeclaration.GetTypeForField(i));
if (!field.FixedArrayInitialization.IsNull)
retType = new ArrayReturnType(cu.ProjectContent, retType, 1);
}
DefaultField f = new DefaultField(retType, field.Name, modifier, region, c);
ConvertAttributes(fieldDeclaration, f);
f.Documentation = doku;

27
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs

@ -65,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -65,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
void ReadMembersSection(XmlTextReader reader)
void ReadMembersSection(XmlReader reader)
{
while (reader.Read()) {
switch (reader.NodeType) {
@ -246,17 +246,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -246,17 +246,15 @@ namespace ICSharpCode.SharpDevelop.Dom
}
#endregion
public static XmlDoc Load(TextReader textReader)
public static XmlDoc Load(XmlReader reader)
{
XmlDoc newXmlDoc = new XmlDoc();
using (XmlTextReader reader = new XmlTextReader(textReader)) {
while (reader.Read()) {
if (reader.IsStartElement()) {
switch (reader.LocalName) {
case "members":
newXmlDoc.ReadMembersSection(reader);
break;
}
while (reader.Read()) {
if (reader.IsStartElement()) {
switch (reader.LocalName) {
case "members":
newXmlDoc.ReadMembersSection(reader);
break;
}
}
}
@ -283,8 +281,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -283,8 +281,13 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
using (TextReader textReader = File.OpenText(fileName)) {
doc = Load(textReader);
try {
using (XmlTextReader xmlReader = new XmlTextReader(fileName)) {
doc = Load(xmlReader);
}
} catch (XmlException ex) {
LoggingService.Warn("Error loading XmlDoc", ex);
return new XmlDoc();
}
if (doc.xmlDescription.Count > cacheLength * 2) {

Loading…
Cancel
Save