public override object Visit(OperatorDeclaration operatorDeclaration, object data) { return null; }
public override object Visit(OperatorDeclaration operatorDeclaration, object data) { errors.Error(-1, -1, String.Format("Operator overloading cannot be performed")); return null; }
public override object Visit(OperatorDeclaration operatorDeclaration, object data) { Console.WriteLine(operatorDeclaration.ToString()); return operatorDeclaration.AcceptChildren(this, data); }
public virtual object Visit(OperatorDeclaration operatorDeclaration, object data) { foreach (AttributeSection section in operatorDeclaration.Attributes) { section.AcceptVisitor(this, data); } blockStack.Push(operatorDeclaration.Body); object ret = data; if (operatorDeclaration.Body != null) { ret = operatorDeclaration.Body.AcceptChildren(this, data); } blockStack.Pop(); return ret; }
void StructMemberDecl( #line 1005 "cs.ATG" Modifiers m, ArrayList attributes) { #line 1007 "cs.ATG" string qualident = null; TypeReference type; Expression expr; ArrayList p = new ArrayList(); Statement stmt = null; ArrayList variableDeclarators = new ArrayList(); if (la.kind == 59) { #line 1015 "cs.ATG" m.Check(Modifier.Constants); lexer.NextToken(); Type( #line 1017 "cs.ATG" out type); Expect(1); #line 1017 "cs.ATG" FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier | Modifier.Const); VariableDeclaration f = new VariableDeclaration(t.val); fd.Fields.Add(f); Expect(3); Expr( #line 1021 "cs.ATG" out expr); #line 1021 "cs.ATG" f.Initializer = expr; while (la.kind == 12) { lexer.NextToken(); Expect(1); #line 1022 "cs.ATG" f = new VariableDeclaration(t.val); fd.Fields.Add(f); Expect(3); Expr( #line 1025 "cs.ATG" out expr); #line 1025 "cs.ATG" f.Initializer = expr; } Expect(10); #line 1026 "cs.ATG" fd.EndLocation = t.EndLocation; compilationUnit.AddChild(fd); } else if ( #line 1029 "cs.ATG" NotVoidPointer()) { #line 1029 "cs.ATG" m.Check(Modifier.PropertysEventsMethods); Expect(122); #line 1030 "cs.ATG" Point startPos = t.Location; Qualident( #line 1031 "cs.ATG" out qualident); Expect(18); if (StartOf(9)) { FormalParameterList( #line 1032 "cs.ATG" out p); } Expect(19); #line 1032 "cs.ATG" MethodDeclaration methodDeclaration = new MethodDeclaration(qualident, m.Modifier, new TypeReference("void"), p, attributes); methodDeclaration.StartLocation = startPos; methodDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(methodDeclaration); compilationUnit.BlockStart(methodDeclaration); if (la.kind == 14) { Block( #line 1042 "cs.ATG" out stmt); } else if (la.kind == 10) { lexer.NextToken(); } else SynErr(141); #line 1042 "cs.ATG" compilationUnit.BlockEnd(); methodDeclaration.Body = (BlockStatement)stmt; } else if (la.kind == 68) { #line 1046 "cs.ATG" m.Check(Modifier.PropertysEventsMethods); lexer.NextToken(); #line 1047 "cs.ATG" EventDeclaration eventDecl = new EventDeclaration(m.Modifier, attributes); eventDecl.StartLocation = t.Location; compilationUnit.AddChild(eventDecl); compilationUnit.BlockStart(eventDecl); EventAddRegion addBlock = null; EventRemoveRegion removeBlock = null; Type( #line 1054 "cs.ATG" out type); #line 1054 "cs.ATG" eventDecl.TypeReference = type; if ( #line 1056 "cs.ATG" IsVarDecl()) { VariableDeclarator( #line 1056 "cs.ATG" variableDeclarators); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 1057 "cs.ATG" variableDeclarators); } Expect(10); #line 1057 "cs.ATG" eventDecl.VariableDeclarators = variableDeclarators; eventDecl.EndLocation = t.EndLocation; } else if (la.kind == 1) { Qualident( #line 1058 "cs.ATG" out qualident); #line 1058 "cs.ATG" eventDecl.Name = qualident; eventDecl.EndLocation = t.EndLocation; Expect(14); #line 1059 "cs.ATG" eventDecl.BodyStart = t.Location; EventAccessorDecls( #line 1060 "cs.ATG" out addBlock, out removeBlock); Expect(15); #line 1061 "cs.ATG" eventDecl.BodyEnd = t.EndLocation; } else SynErr(142); #line 1062 "cs.ATG" compilationUnit.BlockEnd(); eventDecl.AddRegion = addBlock; eventDecl.RemoveRegion = removeBlock; } else if ( #line 1069 "cs.ATG" IdentAndLPar()) { #line 1069 "cs.ATG" m.Check(Modifier.Constructors | Modifier.StaticConstructors); Expect(1); #line 1070 "cs.ATG" string name = t.val; Point startPos = t.Location; Expect(18); if (StartOf(9)) { #line 1070 "cs.ATG" m.Check(Modifier.Constructors); FormalParameterList( #line 1071 "cs.ATG" out p); } Expect(19); #line 1073 "cs.ATG" ConstructorInitializer init = null; if (la.kind == 9) { #line 1074 "cs.ATG" m.Check(Modifier.Constructors); ConstructorInitializer( #line 1075 "cs.ATG" out init); } #line 1077 "cs.ATG" ConstructorDeclaration cd = new ConstructorDeclaration(name, m.Modifier, p, init, attributes); cd.StartLocation = startPos; cd.EndLocation = t.EndLocation; if (la.kind == 14) { Block( #line 1082 "cs.ATG" out stmt); } else if (la.kind == 10) { lexer.NextToken(); } else SynErr(143); #line 1082 "cs.ATG" cd.Body = (BlockStatement)stmt; compilationUnit.AddChild(cd); } else if (la.kind == 69 || la.kind == 79) { #line 1085 "cs.ATG" m.Check(Modifier.Operators); if (m.isNone) Error("at least one modifier must be set"); bool isImplicit = true; if (la.kind == 79) { lexer.NextToken(); } else { lexer.NextToken(); #line 1089 "cs.ATG" isImplicit = false; } Expect(91); Type( #line 1090 "cs.ATG" out type); #line 1090 "cs.ATG" TypeReference operatorType = type; Expect(18); Type( #line 1091 "cs.ATG" out type); Expect(1); #line 1091 "cs.ATG" string varName = t.val; Expect(19); if (la.kind == 14) { Block( #line 1091 "cs.ATG" out stmt); } else if (la.kind == 10) { lexer.NextToken(); #line 1091 "cs.ATG" stmt = null; } else SynErr(144); #line 1094 "cs.ATG" OperatorDeclarator operatorDeclarator = new OperatorDeclarator(isImplicit ? OperatorType.Implicit : OperatorType.Explicit, operatorType, type, varName); OperatorDeclaration operatorDeclaration = new OperatorDeclaration(operatorDeclarator, m.Modifier, attributes); operatorDeclaration.Body = stmt; compilationUnit.AddChild(operatorDeclaration); } else if (StartOf(17)) { #line 1104 "cs.ATG" bool partial = false; if ( #line 1105 "cs.ATG" IdentIsPartial ()) { lexer.NextToken(); #line 1105 "cs.ATG" partial = true; } TypeDecl( #line 1106 "cs.ATG" m, attributes, partial); } else if (StartOf(8)) { Type( #line 1107 "cs.ATG" out type); #line 1107 "cs.ATG" Point startPos = t.Location; if (la.kind == 91) { #line 1109 "cs.ATG" Token op; m.Check(Modifier.Operators); if (m.isNone) Error("at least one modifier must be set"); lexer.NextToken(); OverloadableOperator( #line 1113 "cs.ATG" out op); #line 1113 "cs.ATG" TypeReference firstType, secondType = null; string secondName = null; Expect(18); Type( #line 1114 "cs.ATG" out firstType); Expect(1); #line 1114 "cs.ATG" string firstName = t.val; if (la.kind == 12) { lexer.NextToken(); Type( #line 1115 "cs.ATG" out secondType); Expect(1); #line 1115 "cs.ATG" secondName = t.val; #line 1115 "cs.ATG" if (ParserUtil.IsUnaryOperator(op) && !ParserUtil.IsBinaryOperator(op)) Error("too many operands for unary operator"); } else if (la.kind == 19) { #line 1118 "cs.ATG" if (ParserUtil.IsBinaryOperator(op)) Error("too few operands for binary operator"); } else SynErr(145); Expect(19); if (la.kind == 14) { Block( #line 1122 "cs.ATG" out stmt); } else if (la.kind == 10) { lexer.NextToken(); } else SynErr(146); #line 1124 "cs.ATG" OperatorDeclarator operatorDeclarator = new OperatorDeclarator(secondType != null ? OperatorType.Binary : OperatorType.Unary, type, op.kind, firstType, firstName, secondType, secondName); OperatorDeclaration operatorDeclaration = new OperatorDeclaration(operatorDeclarator, m.Modifier, attributes); operatorDeclaration.Body = stmt; compilationUnit.AddChild(operatorDeclaration); } else if ( #line 1137 "cs.ATG" IsVarDecl()) { #line 1137 "cs.ATG" m.Check(Modifier.Fields); FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier); fd.StartLocation = startPos; VariableDeclarator( #line 1141 "cs.ATG" variableDeclarators); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 1142 "cs.ATG" variableDeclarators); } Expect(10); #line 1143 "cs.ATG" fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd); } else if (la.kind == 110) { #line 1146 "cs.ATG" m.Check(Modifier.Indexers); lexer.NextToken(); Expect(16); FormalParameterList( #line 1147 "cs.ATG" out p); Expect(17); #line 1147 "cs.ATG" Point endLocation = t.EndLocation; Expect(14); #line 1148 "cs.ATG" IndexerDeclaration indexer = new IndexerDeclaration(type, p, m.Modifier, attributes); indexer.StartLocation = startPos; indexer.EndLocation = endLocation; indexer.BodyStart = t.Location; PropertyGetRegion getRegion; PropertySetRegion setRegion; AccessorDecls( #line 1155 "cs.ATG" out getRegion, out setRegion); Expect(15); #line 1156 "cs.ATG" indexer.BodyEnd = t.EndLocation; indexer.GetRegion = getRegion; indexer.SetRegion = setRegion; compilationUnit.AddChild(indexer); } else if (la.kind == 1) { Qualident( #line 1161 "cs.ATG" out qualident); #line 1161 "cs.ATG" Point qualIdentEndLocation = t.EndLocation; if (la.kind == 14 || la.kind == 18) { if (la.kind == 18) { #line 1164 "cs.ATG" m.Check(Modifier.PropertysEventsMethods); lexer.NextToken(); if (StartOf(9)) { FormalParameterList( #line 1165 "cs.ATG" out p); } Expect(19); #line 1165 "cs.ATG" MethodDeclaration methodDeclaration = new MethodDeclaration(qualident, m.Modifier, type, p, attributes); methodDeclaration.StartLocation = startPos; methodDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(methodDeclaration); if (la.kind == 14) { Block( #line 1174 "cs.ATG" out stmt); } else if (la.kind == 10) { lexer.NextToken(); } else SynErr(147); #line 1174 "cs.ATG" methodDeclaration.Body = (BlockStatement)stmt; } else { lexer.NextToken(); #line 1177 "cs.ATG" PropertyDeclaration pDecl = new PropertyDeclaration(qualident, type, m.Modifier, attributes); pDecl.StartLocation = startPos; pDecl.EndLocation = qualIdentEndLocation; pDecl.BodyStart = t.Location; PropertyGetRegion getRegion; PropertySetRegion setRegion; AccessorDecls( #line 1184 "cs.ATG" out getRegion, out setRegion); Expect(15); #line 1186 "cs.ATG" pDecl.GetRegion = getRegion; pDecl.SetRegion = setRegion; pDecl.BodyEnd = t.EndLocation; compilationUnit.AddChild(pDecl); } } else if (la.kind == 13) { #line 1194 "cs.ATG" m.Check(Modifier.Indexers); lexer.NextToken(); Expect(110); Expect(16); FormalParameterList( #line 1195 "cs.ATG" out p); Expect(17); #line 1196 "cs.ATG" IndexerDeclaration indexer = new IndexerDeclaration(type, p, m.Modifier, attributes); indexer.StartLocation = startPos; indexer.EndLocation = t.EndLocation; indexer.NamespaceName = qualident; PropertyGetRegion getRegion; PropertySetRegion setRegion; Expect(14); #line 1203 "cs.ATG" Point bodyStart = t.Location; AccessorDecls( #line 1204 "cs.ATG" out getRegion, out setRegion); Expect(15); #line 1205 "cs.ATG" indexer.BodyStart = bodyStart; indexer.BodyEnd = t.EndLocation; indexer.GetRegion = getRegion; indexer.SetRegion = setRegion; compilationUnit.AddChild(indexer); } else SynErr(148); } else SynErr(149); } else SynErr(150); }
public override object Visit(OperatorDeclaration operatorDeclaration, object data) { VisitAttributes(operatorDeclaration.Attributes, data); outputFormatter.Indent(); VisitModifier(operatorDeclaration.Modifier); switch (operatorDeclaration.OpratorDeclarator.OperatorType) { case OperatorType.Explicit: outputFormatter.PrintToken(Tokens.Explicit); break; case OperatorType.Implicit: outputFormatter.PrintToken(Tokens.Implicit); break; default: Visit(operatorDeclaration.OpratorDeclarator.TypeReference, data); break; } outputFormatter.Space(); outputFormatter.PrintToken(Tokens.Operator); outputFormatter.Space(); if (!operatorDeclaration.OpratorDeclarator.IsConversion) { outputFormatter.PrintIdentifier(Tokens.GetTokenString(operatorDeclaration.OpratorDeclarator.OverloadOperatorToken)); } else { Visit(operatorDeclaration.OpratorDeclarator.TypeReference, data); } outputFormatter.PrintToken(Tokens.OpenParenthesis); Visit(operatorDeclaration.OpratorDeclarator.FirstParameterType, data); outputFormatter.Space(); outputFormatter.PrintIdentifier(operatorDeclaration.OpratorDeclarator.FirstParameterName); if (operatorDeclaration.OpratorDeclarator.OperatorType == OperatorType.Binary) { outputFormatter.PrintToken(Tokens.Comma); outputFormatter.Space(); Visit(operatorDeclaration.OpratorDeclarator.SecondParameterType, data); outputFormatter.Space(); outputFormatter.PrintIdentifier(operatorDeclaration.OpratorDeclarator.SecondParameterName); } outputFormatter.PrintToken(Tokens.CloseParenthesis); if (operatorDeclaration.Body == null) { outputFormatter.PrintToken(Tokens.Semicolon); outputFormatter.NewLine(); } else { outputFormatter.NewLine(); outputFormatter.Indent(); outputFormatter.PrintToken(Tokens.OpenCurlyBrace); outputFormatter.NewLine(); ++outputFormatter.IndentationLevel; operatorDeclaration.Body.AcceptChildren(this, data); --outputFormatter.IndentationLevel; outputFormatter.Indent(); outputFormatter.PrintToken(Tokens.CloseCurlyBrace); outputFormatter.NewLine(); } return null; }