Browse Source

inserted operator declartions into DOM. fixed locations of operator declarations, this enabled folding for them

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@285 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 21 years ago
parent
commit
0ca4a6c4be
  1. 1376
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  2. 12
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  3. 1788
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  4. 9
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG
  5. 17
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

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

File diff suppressed because it is too large Load Diff

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

@ -1139,10 +1139,13 @@ StructMemberDecl<Modifiers m, List<AttributeSection> attributes>
| (. m.Check(Modifier.Operators); | (. m.Check(Modifier.Operators);
if (m.isNone) Error("at least one modifier must be set"); if (m.isNone) Error("at least one modifier must be set");
bool isImplicit = true; bool isImplicit = true;
Point startPos = Point.Empty;
.) .)
( "implicit" | "explicit" (. isImplicit = false; .) ) ( "implicit" (. startPos = t.Location; .) | "explicit" (. isImplicit = false; startPos = t.Location; .) )
"operator" Type<out type> (. TypeReference operatorType = type; .) "operator" Type<out type> (. TypeReference operatorType = type; .)
"(" Type<out type> ident (. string varName = t.val; .) ")" ( Block<out stmt> | ";" (. stmt = null; .) ) "(" Type<out type> ident (. string varName = t.val; .) ")"
(. Point endPos = t.Location; .)
( Block<out stmt> | ";" (. stmt = null; .) )
(. (.
List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>(); List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>();
@ -1154,6 +1157,8 @@ StructMemberDecl<Modifiers m, List<AttributeSection> attributes>
isImplicit ? ConversionType.Implicit : ConversionType.Explicit isImplicit ? ConversionType.Implicit : ConversionType.Explicit
); );
operatorDeclaration.Body = (BlockStatement)stmt; operatorDeclaration.Body = (BlockStatement)stmt;
operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
operatorDeclaration.EndLocation = endPos;
compilationUnit.AddChild(operatorDeclaration); compilationUnit.AddChild(operatorDeclaration);
.) .)
@ -1175,6 +1180,7 @@ StructMemberDecl<Modifiers m, List<AttributeSection> attributes>
} }
.)*/ .)*/
) )
(. Point endPos = t.Location; .)
")" ( Block<out stmt> | ";" ) ")" ( Block<out stmt> | ";" )
(. (.
List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>(); List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>();
@ -1188,6 +1194,8 @@ StructMemberDecl<Modifiers m, List<AttributeSection> attributes>
type, type,
op); op);
operatorDeclaration.Body = (BlockStatement)stmt; operatorDeclaration.Body = (BlockStatement)stmt;
operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
operatorDeclaration.EndLocation = endPos;
compilationUnit.AddChild(operatorDeclaration); compilationUnit.AddChild(operatorDeclaration);
.) .)

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

File diff suppressed because it is too large Load Diff

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

@ -1244,7 +1244,7 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
decl.EndLocation = t.EndLocation; decl.EndLocation = t.EndLocation;
compilationUnit.AddChild(decl); compilationUnit.AddChild(decl);
.) .)
| /* UnaryOperatorDeclaration */ |
"Operator" "Operator"
(. (.
m.Check(Modifier.VBOperators); m.Check(Modifier.VBOperators);
@ -1269,7 +1269,8 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
(. parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParamModifier.In)); .) (. parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParamModifier.In)); .)
} }
")" ")"
[ "As" { AttributeSection<out section> (. returnTypeAttributes.Add(section); .) } TypeName<out returnType> EOL ] (. Point endPos = t.EndLocation; .)
[ "As" { AttributeSection<out section> (. returnTypeAttributes.Add(section); .) } TypeName<out returnType> (. endPos = t.EndLocation; .) EOL ]
Block<out stmt> "End" "Operator" EOL Block<out stmt> "End" "Operator" EOL
(. (.
OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier, OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier,
@ -1282,7 +1283,9 @@ StructureMemberDecl<Modifiers m, List<AttributeSection> attributes>
operatorDeclaration.ReturnTypeAttributes = returnTypeAttributes; operatorDeclaration.ReturnTypeAttributes = returnTypeAttributes;
operatorDeclaration.Body = (BlockStatement)stmt; operatorDeclaration.Body = (BlockStatement)stmt;
operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos); operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos);
operatorDeclaration.EndLocation = t.EndLocation; operatorDeclaration.EndLocation = endPos;
operatorDeclaration.Body.StartLocation = startPos;
operatorDeclaration.Body.EndLocation = t.Location;
compilationUnit.AddChild(operatorDeclaration); compilationUnit.AddChild(operatorDeclaration);
.) .)
. .

17
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryASTConvertVisitor.cs

@ -411,6 +411,23 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
return null; return null;
} }
public override object Visit(AST.OperatorDeclaration operatorDeclaration, object data)
{
DefaultClass c = GetCurrentClass();
DefaultRegion region = GetRegion(operatorDeclaration.StartLocation, operatorDeclaration.EndLocation);
DefaultRegion bodyRegion = GetRegion(operatorDeclaration.EndLocation, operatorDeclaration.Body != null ? operatorDeclaration.Body.EndLocation : new Point(-1, -1));
DefaultMethod method = new DefaultMethod(operatorDeclaration.Name, CreateReturnType(operatorDeclaration.ConvertToType), ConvertModifier(operatorDeclaration.Modifier), region, bodyRegion, c);
if(operatorDeclaration.Parameters != null)
{
foreach (AST.ParameterDeclarationExpression par in operatorDeclaration.Parameters) {
method.Parameters.Add(CreateParameter(par, method));
}
}
c.Methods.Add(method);
return null;
}
public override object Visit(AST.ConstructorDeclaration constructorDeclaration, object data) public override object Visit(AST.ConstructorDeclaration constructorDeclaration, object data)
{ {
DefaultRegion region = GetRegion(constructorDeclaration.StartLocation, constructorDeclaration.EndLocation); DefaultRegion region = GetRegion(constructorDeclaration.StartLocation, constructorDeclaration.EndLocation);

Loading…
Cancel
Save