public override object VisitBlockStatement(BlockStatement blockStatement, object data) { foreach(INode statement in blockStatement.Children) { statement.AcceptVisitor(this, null); } return null; }
public override object VisitBlockStatement(BlockStatement blockStatement, object data) { Push(); object result = base.VisitBlockStatement(blockStatement, data); Pop(); return result; }
B.Block ConvertBlock(BlockStatement block) { B.Block b = new B.Block(GetLexicalInfo(block)); b.EndSourceLocation = GetLocation(block.EndLocation); ConvertStatements(block.Children, b); return b; }
public static MethodDeclaration add_Method(this TypeDeclaration typeDeclaration, string methodName, Dictionary<string, object> invocationParameters, BlockStatement body) { var newMethod = new MethodDeclaration { Name = methodName, //Modifier = Modifiers.None | Modifiers.Public | Modifiers.Static, Modifier = Modifiers.None | Modifiers.Public, Body = body }; newMethod.setReturnType(); if (invocationParameters != null) foreach (var invocationParameter in invocationParameters) { var parameterType = new TypeReference( (invocationParameter.Value != null && invocationParameter.Key != "returnData") ? invocationParameter.Value.typeFullName() : "System.Object", true); var parameter = new ParameterDeclarationExpression(parameterType, invocationParameter.Key); newMethod.Parameters.Add(parameter); } typeDeclaration.AddChild(newMethod); return newMethod; }
public BlockStatement CreateMethodBody() { Ast.BlockStatement astBlock = new Ast.BlockStatement(); if (methodDef.Body == null) return astBlock; List<ILNode> body = new ILAstBuilder().Build(methodDef); MethodBodyGraph bodyGraph = new MethodBodyGraph(body); bodyGraph.Optimize(); List<string> intNames = new List<string>(new string[] {"i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t"}); Dictionary<string, int> typeNames = new Dictionary<string, int>(); foreach(VariableDefinition varDef in methodDef.Body.Variables) { if (string.IsNullOrEmpty(varDef.Name)) { if (varDef.VariableType.FullName == Constants.Int32 && intNames.Count > 0) { varDef.Name = intNames[0]; intNames.RemoveAt(0); } else { string name; if (varDef.VariableType.IsArray) { name = "array"; } else if (!typeNameToVariableNameDict.TryGetValue(varDef.VariableType.FullName, out name)) { name = varDef.VariableType.Name; // remove the 'I' for interfaces if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2])) name = name.Substring(1); // remove the backtick (generics) int pos = name.IndexOf('`'); if (pos >= 0) name = name.Substring(0, pos); if (name.Length == 0) name = "obj"; else name = char.ToLower(name[0]) + name.Substring(1); } if (!typeNames.ContainsKey(name)) { typeNames.Add(name, 0); } int count = typeNames[name]; if (count > 0) { name += count.ToString(); } varDef.Name = name; } } localVarTypes[varDef.Name] = varDef.VariableType; localVarDefined[varDef.Name] = false; // Ast.VariableDeclaration astVar = new Ast.VariableDeclaration(varDef.Name); // Ast.LocalVariableDeclaration astLocalVar = new Ast.LocalVariableDeclaration(astVar); // astLocalVar.TypeReference = new Ast.TypeReference(varDef.VariableType.FullName); // astBlock.Children.Add(astLocalVar); } astBlock.Children.AddRange(TransformNodes(bodyGraph.Childs)); return astBlock; }
public override object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) { blockStatement.Children.Clear(); TypeReference notImplmentedException = new TypeReference("System.NotImplementedException"); ObjectCreateExpression objectCreate = new ObjectCreateExpression(notImplmentedException, new List<Expression>()); blockStatement.Children.Add(new ThrowStatement(objectCreate)); return null; }
public override object VisitBlockStatement(BlockStatement blockStatement, object data) { foreach (Statement st in blockStatement.Children) { st.Parent = blockStatement; } return base.VisitBlockStatement(blockStatement, data); }
AbstractNode GenerateAstToInsert(string variableName) { var block = new BlockStatement(); block.AddChild(new ExpressionStatement(new IdentifierExpression(caretMarker))); return new IfElseStatement( new BinaryOperatorExpression(new IdentifierExpression(variableName), BinaryOperatorType.InEquality, new PrimitiveExpression(null)), block); }
public static BlockStatement CreateEmptyBlockStatement(string returnTypeName) { var block = new BlockStatement(); if (!IsVoid(returnTypeName)) block.AddChildren(new ReturnStatement(new DefaultValueExpression(CreateTypeReference(returnTypeName)))); return block; }
public override object VisitBlockStatement(BlockStatement blockStatement, object data) { Contract.Requires(blockStatement != null); // Visit children of block statement (E.g. several ExpressionStatement objects) blockStatement.AcceptChildren(this, data); return null; }
public override object VisitBlockStatement(BlockStatement blockStatement, object data) { for(int i = 0; i < blockStatement.Children.Count; i++) { if (blockStatement.Children[i] is Statement && ((Statement)blockStatement.Children[i]).IsNull) { blockStatement.Children.RemoveAt(i); i--; } } return base.VisitBlockStatement(blockStatement, data); }
public static BlockStatement CreateMetodBody(MethodDefinition methodDef) { AstMetodBodyBuilder builder = new AstMetodBodyBuilder(); builder.methodDef = methodDef; try { return builder.CreateMethodBody(); } catch { BlockStatement block = new BlockStatement(); block.Children.Add(MakeComment("Exception during decompilation")); return block; } }
private string GetModifiedName(BlockStatement blockStatement, string identifier) { int hashCode; while (blockStatement != null) { hashCode = blockStatement.GetHashCode(); string identifierHash = identifier + "_" + hashCode; if (renamedVariables.Contains(identifierHash)) return (string) renamedVariables[identifierHash]; else blockStatement = (BlockStatement) AstUtil.GetParentOfType(blockStatement, typeof(BlockStatement)); } return null; }
public static string ast_CSharp_CreateCompilableClass(this BlockStatement blockStatement, SnippetParser snippetParser, string codeSnippet, CSharp_FastCompiler_CompilerOptions compilerOptions, CSharp_FastCompiler_CompilerArtifacts compilerArtifacts, CSharp_FastCompiler_ExecutionOptions executionOptions) { if (blockStatement.isNull() || compilerOptions.isNull()) return null; var compilationUnit= compilerArtifacts.CompilationUnit = new CompilationUnit(); compilationUnit.add_Type(compilerOptions.default_TypeName) .add_Method(compilerOptions.default_MethodName, executionOptions.InvocationParameters, compilerOptions.ResolveInvocationParametersType, blockStatement); // remove comments from parsed code var astCSharp = compilerArtifacts.AstCSharp = new Ast_CSharp(compilerArtifacts.CompilationUnit, snippetParser.Specials); // add references included in the original source code file compilerArtifacts.AstCSharp.mapCodeO2References(compilerOptions); astCSharp.mapAstDetails(); astCSharp.ExtraSpecials.Clear(); var method = compilationUnit.method(compilerOptions.default_MethodName); var returntype = method.returnType(); var type = compilationUnit.type(compilerOptions.default_TypeName); type.Children.Clear(); var tempBlockStatement = new BlockStatement(); tempBlockStatement.add_Variable("a", 0); method.Body = tempBlockStatement; var newMethod = type.add_Method(compilerOptions.default_MethodName, executionOptions.InvocationParameters, compilerOptions.ResolveInvocationParametersType, tempBlockStatement); newMethod.TypeReference = returntype; if(blockStatement.returnStatements().size() >1) astCSharp.methodDeclarations().first().remove_LastReturnStatement(); astCSharp.mapAstDetails(); var codeToReplace = "Int32 a = 0;"; var csharpCode = astCSharp.AstDetails.CSharpCode .replace("\t\t{0}".format(codeToReplace), codeToReplace) // remove tabs .replace("Int32 a = 0;", codeSnippet); // put the actual code (this should be done via AST, but it was affectting code complete) return csharpCode; }
public override object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) { BlockStatement replaced = blockStatement; InsertionBlockData insertionBlockData = new InsertionBlockData(); base.TrackedVisitBlockStatement(blockStatement, insertionBlockData); if (insertionBlockData.Block != null && insertionBlockData.Statements.Count > 0) { if (blockStatement.GetHashCode() == insertionBlockData.Block.GetHashCode()) { IList<INode> nodes = new List<INode>(); foreach (Statement node in insertionBlockData.Statements) nodes.Add(node); replaced.Children.InsertRange(insertionBlockData.BlockChildIndex, nodes); ReplaceCurrentNode(replaced); } } return null; }
private void CreateMethodImplementation(MethodDeclaration equalsMethod) { string fieldName = "instancehelper_" + equalsMethod.Name; IdentifierExpression targetObject = new IdentifierExpression("java.lang.Object"); List<Expression> arguments = new List<Expression>(); arguments.Add(new ThisReferenceExpression()); string parameterName = ((ParameterDeclarationExpression) equalsMethod.Parameters[0]).ParameterName; IdentifierExpression identifier = new IdentifierExpression(parameterName); arguments.Add(identifier); FieldReferenceExpression fieldReferenceExpression = new FieldReferenceExpression(targetObject, fieldName); InvocationExpression invocationExpression = new InvocationExpression(fieldReferenceExpression, arguments); ReturnStatement returnStatement = new ReturnStatement(invocationExpression); BlockStatement block = new BlockStatement(); block.Children.Add(returnStatement); equalsMethod.Body = block; }
public override object VisitBlockStatement (BlockStatement blockStatement, object data) { blocks.Push (blockStatement); List<INode> statements = new List<INode> (); curStatementList.Push (statements); for (int i = 0; i < blockStatement.Children.Count; i++) { INode o = blockStatement.Children[i]; Debug.Assert (o != null); nodeStack.Push (o); o.AcceptVisitor (this, data); o = nodeStack.Pop (); if (o == null) { } else { statements.Add (o); } } blockStatement.Children = statements; blocks.Pop (); return null; }
public override object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) { IList removables = new ArrayList(); BlockStatement blockCopy = new BlockStatement(); blockCopy.Children.AddRange(blockStatement.Children); blockCopy.Parent = blockStatement.Parent; base.TrackedVisitBlockStatement(blockCopy, removables); if (removables.Count > 0) { IDictionary list = new Hashtable(); foreach (INode node in blockStatement.Children) list.Add(node.GetHashCode(), node); foreach (INode node in removables) { if (list.Contains(node.GetHashCode())) blockStatement.Children.Remove(node); } } return null; }
public ExtractMethodForm(MethodDeclaration declaration, Func<IOutputAstVisitor> generator) { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); SetTranslation(this); this.declaration = declaration; this.generator = generator; IOutputAstVisitor visitor = this.generator.Invoke(); body = declaration.Body; declaration.Body = new BlockStatement(); declaration.AcceptVisitor(visitor, null); this.txtName.Text = this.declaration.Name; this.txtPreview.Text = visitor.Text; this.txtName.SelectAll(); }
void Block( //#line 2987 "VBNET.ATG" out Statement stmt) { //#line 2990 "VBNET.ATG" BlockStatement blockStmt = new BlockStatement(); /* in snippet parsing mode, t might be null */ if (t != null) blockStmt.StartLocation = t.EndLocation; BlockStart(blockStmt); while (StartOf(22) || //#line 2996 "VBNET.ATG" IsEndStmtAhead()) { if ( //#line 2996 "VBNET.ATG" IsEndStmtAhead()) { //#line 2997 "VBNET.ATG" Token first = la; Expect(113); EndOfStmt(); //#line 3000 "VBNET.ATG" AddChild(new EndStatement() { StartLocation = first.Location, EndLocation = first.EndLocation } ); } else { Statement(); EndOfStmt(); } } //#line 3009 "VBNET.ATG" stmt = blockStmt; if (t != null) blockStmt.EndLocation = t.EndLocation; BlockEnd(); }
void StructureMemberDecl( //#line 807 "VBNET.ATG" ModifierList m, List<AttributeSection> attributes) { //#line 809 "VBNET.ATG" TypeReference type = null; List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>(); Statement stmt = null; List<VariableDeclaration> variableDeclarators = new List<VariableDeclaration>(); List<TemplateDefinition> templates = new List<TemplateDefinition>(); switch (la.kind) { case 84: case 103: case 115: case 142: case 155: case 209: { NonModuleDeclaration( //#line 816 "VBNET.ATG" m, attributes); break; } case 210: { lexer.NextToken(); //#line 820 "VBNET.ATG" Location startPos = t.Location; if (StartOf(4)) { //#line 824 "VBNET.ATG" string name = String.Empty; MethodDeclaration methodDeclaration; List<string> handlesClause = null; List<InterfaceImplementation> implementsClause = null; Identifier(); //#line 830 "VBNET.ATG" name = t.val; m.Check(Modifiers.VBMethods); TypeParameterList( //#line 833 "VBNET.ATG" templates); if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 834 "VBNET.ATG" p); } Expect(38); } if (la.kind == 134 || la.kind == 136) { if (la.kind == 136) { ImplementsClause( //#line 837 "VBNET.ATG" out implementsClause); } else { HandlesClause( //#line 839 "VBNET.ATG" out handlesClause); } } //#line 842 "VBNET.ATG" Location endLocation = t.EndLocation; if ( //#line 845 "VBNET.ATG" IsMustOverride(m)) { EndOfStmt(); //#line 848 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, TypeReference = new TypeReference("System.Void", true), Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; AddChild(methodDeclaration); } else if (la.kind == 1) { lexer.NextToken(); //#line 861 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, TypeReference = new TypeReference("System.Void", true), Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; AddChild(methodDeclaration); //#line 872 "VBNET.ATG" if (ParseMethodBodies) { Block( //#line 873 "VBNET.ATG" out stmt); Expect(113); Expect(210); //#line 875 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); } //#line 881 "VBNET.ATG" methodDeclaration.Body = (BlockStatement)stmt; //#line 882 "VBNET.ATG" methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); } else SynErr(256); } else if (la.kind == 162) { lexer.NextToken(); if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 886 "VBNET.ATG" p); } Expect(38); } //#line 887 "VBNET.ATG" m.Check(Modifiers.Constructors); //#line 888 "VBNET.ATG" Location constructorEndLocation = t.EndLocation; Expect(1); //#line 891 "VBNET.ATG" if (ParseMethodBodies) { Block( //#line 892 "VBNET.ATG" out stmt); Expect(113); Expect(210); //#line 894 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); } //#line 900 "VBNET.ATG" Location endLocation = t.EndLocation; EndOfStmt(); //#line 903 "VBNET.ATG" ConstructorDeclaration cd = new ConstructorDeclaration("New", m.Modifier, p, attributes); cd.StartLocation = m.GetDeclarationLocation(startPos); cd.EndLocation = constructorEndLocation; cd.Body = (BlockStatement)stmt; cd.Body.EndLocation = endLocation; AddChild(cd); } else SynErr(257); break; } case 127: { lexer.NextToken(); //#line 915 "VBNET.ATG" m.Check(Modifiers.VBMethods); string name = String.Empty; Location startPos = t.Location; MethodDeclaration methodDeclaration;List<string> handlesClause = null; List<InterfaceImplementation> implementsClause = null; AttributeSection returnTypeAttributeSection = null; Identifier(); //#line 922 "VBNET.ATG" name = t.val; TypeParameterList( //#line 923 "VBNET.ATG" templates); if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 924 "VBNET.ATG" p); } Expect(38); } if (la.kind == 63) { lexer.NextToken(); while (la.kind == 40) { AttributeSection( //#line 926 "VBNET.ATG" out returnTypeAttributeSection); //#line 928 "VBNET.ATG" if (returnTypeAttributeSection != null) { returnTypeAttributeSection.AttributeTarget = "return"; attributes.Add(returnTypeAttributeSection); } } TypeName( //#line 934 "VBNET.ATG" out type); } //#line 936 "VBNET.ATG" if(type == null) { type = new TypeReference("System.Object", true); } if (la.kind == 134 || la.kind == 136) { if (la.kind == 136) { ImplementsClause( //#line 942 "VBNET.ATG" out implementsClause); } else { HandlesClause( //#line 944 "VBNET.ATG" out handlesClause); } } //#line 947 "VBNET.ATG" Location endLocation = t.EndLocation; if ( //#line 950 "VBNET.ATG" IsMustOverride(m)) { EndOfStmt(); //#line 953 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, TypeReference = type, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, HandlesClause = handlesClause, Templates = templates, InterfaceImplementations = implementsClause }; AddChild(methodDeclaration); } else if (la.kind == 1) { lexer.NextToken(); //#line 968 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, TypeReference = type, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; AddChild(methodDeclaration); if (ParseMethodBodies) { Block( //#line 981 "VBNET.ATG" out stmt); Expect(113); Expect(127); //#line 983 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Function); stmt = new BlockStatement(); } methodDeclaration.Body = (BlockStatement)stmt; methodDeclaration.Body.StartLocation = methodDeclaration.EndLocation; methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); } else SynErr(258); break; } case 101: { lexer.NextToken(); //#line 997 "VBNET.ATG" m.Check(Modifiers.VBExternalMethods); Location startPos = t.Location; CharsetModifier charsetModifer = CharsetModifier.None; string library = String.Empty; string alias = null; string name = String.Empty; if (StartOf(15)) { Charset( //#line 1004 "VBNET.ATG" out charsetModifer); } if (la.kind == 210) { lexer.NextToken(); Identifier(); //#line 1007 "VBNET.ATG" name = t.val; Expect(149); Expect(3); //#line 1008 "VBNET.ATG" library = t.literalValue as string; if (la.kind == 59) { lexer.NextToken(); Expect(3); //#line 1009 "VBNET.ATG" alias = t.literalValue as string; } if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 1010 "VBNET.ATG" p); } Expect(38); } EndOfStmt(); //#line 1013 "VBNET.ATG" DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, null, p, attributes, library, alias, charsetModifer); declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); declareDeclaration.EndLocation = t.EndLocation; AddChild(declareDeclaration); } else if (la.kind == 127) { lexer.NextToken(); Identifier(); //#line 1020 "VBNET.ATG" name = t.val; Expect(149); Expect(3); //#line 1021 "VBNET.ATG" library = t.literalValue as string; if (la.kind == 59) { lexer.NextToken(); Expect(3); //#line 1022 "VBNET.ATG" alias = t.literalValue as string; } if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 1023 "VBNET.ATG" p); } Expect(38); } if (la.kind == 63) { lexer.NextToken(); TypeName( //#line 1024 "VBNET.ATG" out type); } EndOfStmt(); //#line 1027 "VBNET.ATG" DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, type, p, attributes, library, alias, charsetModifer); declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); declareDeclaration.EndLocation = t.EndLocation; AddChild(declareDeclaration); } else SynErr(259); break; } case 119: { lexer.NextToken(); //#line 1037 "VBNET.ATG" m.Check(Modifiers.VBEvents); Location startPos = t.Location; EventDeclaration eventDeclaration; string name = String.Empty; List<InterfaceImplementation> implementsClause = null; Identifier(); //#line 1043 "VBNET.ATG" name= t.val; if (la.kind == 63) { lexer.NextToken(); TypeName( //#line 1045 "VBNET.ATG" out type); } else if (StartOf(16)) { if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 1047 "VBNET.ATG" p); } Expect(38); } } else SynErr(260); if (la.kind == 136) { ImplementsClause( //#line 1049 "VBNET.ATG" out implementsClause); } //#line 1051 "VBNET.ATG" eventDeclaration = new EventDeclaration { Name = name, TypeReference = type, Modifier = m.Modifier, Parameters = p, Attributes = attributes, InterfaceImplementations = implementsClause, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation }; AddChild(eventDeclaration); EndOfStmt(); break; } case 2: case 58: case 62: case 64: case 65: case 66: case 67: case 70: case 87: case 104: case 107: case 116: case 121: case 126: case 133: case 139: case 143: case 146: case 147: case 170: case 176: case 178: case 184: case 203: case 212: case 213: case 223: case 224: case 230: { //#line 1062 "VBNET.ATG" m.Check(Modifiers.Fields); FieldDeclaration fd = new FieldDeclaration(attributes, null, m.Modifier); IdentifierForFieldDeclaration(); //#line 1065 "VBNET.ATG" string name = t.val; //#line 1066 "VBNET.ATG" fd.StartLocation = m.GetDeclarationLocation(t.Location); VariableDeclaratorPartAfterIdentifier( //#line 1068 "VBNET.ATG" variableDeclarators, name); while (la.kind == 22) { lexer.NextToken(); VariableDeclarator( //#line 1069 "VBNET.ATG" variableDeclarators); } EndOfStmt(); //#line 1072 "VBNET.ATG" fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; AddChild(fd); break; } case 88: { //#line 1077 "VBNET.ATG" m.Check(Modifiers.Fields); lexer.NextToken(); //#line 1078 "VBNET.ATG" m.Add(Modifiers.Const, t.Location); //#line 1080 "VBNET.ATG" FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier); fd.StartLocation = m.GetDeclarationLocation(t.Location); List<VariableDeclaration> constantDeclarators = new List<VariableDeclaration>(); ConstantDeclarator( //#line 1084 "VBNET.ATG" constantDeclarators); while (la.kind == 22) { lexer.NextToken(); ConstantDeclarator( //#line 1085 "VBNET.ATG" constantDeclarators); } //#line 1087 "VBNET.ATG" fd.Fields = constantDeclarators; fd.EndLocation = t.Location; EndOfStmt(); //#line 1092 "VBNET.ATG" fd.EndLocation = t.EndLocation; AddChild(fd); break; } case 186: { lexer.NextToken(); //#line 1098 "VBNET.ATG" m.Check(Modifiers.VBProperties); Location startPos = t.Location; List<InterfaceImplementation> implementsClause = null; AttributeSection returnTypeAttributeSection = null; Expression initializer = null; Identifier(); //#line 1104 "VBNET.ATG" string propertyName = t.val; if (la.kind == 37) { lexer.NextToken(); if (StartOf(6)) { FormalParameterList( //#line 1105 "VBNET.ATG" p); } Expect(38); } if (la.kind == 63) { lexer.NextToken(); while (la.kind == 40) { AttributeSection( //#line 1108 "VBNET.ATG" out returnTypeAttributeSection); //#line 1110 "VBNET.ATG" if (returnTypeAttributeSection != null) { returnTypeAttributeSection.AttributeTarget = "return"; attributes.Add(returnTypeAttributeSection); } } if ( //#line 1117 "VBNET.ATG" IsNewExpression()) { ObjectCreateExpression( //#line 1117 "VBNET.ATG" out initializer); //#line 1119 "VBNET.ATG" if (initializer is ObjectCreateExpression) { type = ((ObjectCreateExpression)initializer).CreateType.Clone(); } else { type = ((ArrayCreateExpression)initializer).CreateType.Clone(); } } else if (StartOf(8)) { TypeName( //#line 1126 "VBNET.ATG" out type); } else SynErr(261); } if (la.kind == 20) { lexer.NextToken(); Expr( //#line 1129 "VBNET.ATG" out initializer); } if (la.kind == 136) { ImplementsClause( //#line 1130 "VBNET.ATG" out implementsClause); } EndOfStmt(); if ( //#line 1134 "VBNET.ATG" IsMustOverride(m) || IsAutomaticProperty()) { //#line 1136 "VBNET.ATG" PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); pDecl.StartLocation = m.GetDeclarationLocation(startPos); pDecl.EndLocation = t.Location; pDecl.TypeReference = type; pDecl.InterfaceImplementations = implementsClause; pDecl.Parameters = p; if (initializer != null) pDecl.Initializer = initializer; AddChild(pDecl); } else if (StartOf(17)) { //#line 1148 "VBNET.ATG" PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); pDecl.StartLocation = m.GetDeclarationLocation(startPos); pDecl.EndLocation = t.Location; pDecl.BodyStart = t.Location; pDecl.TypeReference = type; pDecl.InterfaceImplementations = implementsClause; pDecl.Parameters = p; PropertyGetRegion getRegion; PropertySetRegion setRegion; AccessorDecls( //#line 1158 "VBNET.ATG" out getRegion, out setRegion); Expect(113); Expect(186); EndOfStmt(); //#line 1162 "VBNET.ATG" pDecl.GetRegion = getRegion; pDecl.SetRegion = setRegion; pDecl.BodyEnd = t.Location; // t = EndOfStmt; not "Property" AddChild(pDecl); } else SynErr(262); break; } case 98: { lexer.NextToken(); //#line 1169 "VBNET.ATG" Location startPos = t.Location; Expect(119); //#line 1171 "VBNET.ATG" m.Check(Modifiers.VBCustomEvents); EventAddRemoveRegion eventAccessorDeclaration; EventAddRegion addHandlerAccessorDeclaration = null; EventRemoveRegion removeHandlerAccessorDeclaration = null; EventRaiseRegion raiseEventAccessorDeclaration = null; List<InterfaceImplementation> implementsClause = null; Identifier(); //#line 1178 "VBNET.ATG" string customEventName = t.val; Expect(63); TypeName( //#line 1179 "VBNET.ATG" out type); if (la.kind == 136) { ImplementsClause( //#line 1180 "VBNET.ATG" out implementsClause); } EndOfStmt(); while (StartOf(18)) { EventAccessorDeclaration( //#line 1183 "VBNET.ATG" out eventAccessorDeclaration); //#line 1185 "VBNET.ATG" if(eventAccessorDeclaration is EventAddRegion) { addHandlerAccessorDeclaration = (EventAddRegion)eventAccessorDeclaration; } else if(eventAccessorDeclaration is EventRemoveRegion) { removeHandlerAccessorDeclaration = (EventRemoveRegion)eventAccessorDeclaration; } else if(eventAccessorDeclaration is EventRaiseRegion) { raiseEventAccessorDeclaration = (EventRaiseRegion)eventAccessorDeclaration; } } Expect(113); Expect(119); EndOfStmt(); //#line 1201 "VBNET.ATG" if(addHandlerAccessorDeclaration == null) { Error("Need to provide AddHandler accessor."); } if(removeHandlerAccessorDeclaration == null) { Error("Need to provide RemoveHandler accessor."); } if(raiseEventAccessorDeclaration == null) { Error("Need to provide RaiseEvent accessor."); } EventDeclaration decl = new EventDeclaration { TypeReference = type, Name = customEventName, Modifier = m.Modifier, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation, AddRegion = addHandlerAccessorDeclaration, RemoveRegion = removeHandlerAccessorDeclaration, RaiseRegion = raiseEventAccessorDeclaration }; AddChild(decl); break; } case 161: case 172: case 232: { //#line 1227 "VBNET.ATG" ConversionType opConversionType = ConversionType.None; if (la.kind == 161 || la.kind == 232) { if (la.kind == 232) { lexer.NextToken(); //#line 1228 "VBNET.ATG" opConversionType = ConversionType.Implicit; } else { lexer.NextToken(); //#line 1229 "VBNET.ATG" opConversionType = ConversionType.Explicit; } } Expect(172); //#line 1232 "VBNET.ATG" m.Check(Modifiers.VBOperators); Location startPos = t.Location; TypeReference returnType = NullTypeReference.Instance; TypeReference operandType = NullTypeReference.Instance; OverloadableOperatorType operatorType; AttributeSection section; ParameterDeclarationExpression param; List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>(); OverloadableOperator( //#line 1241 "VBNET.ATG" out operatorType); Expect(37); FormalParameter( //#line 1243 "VBNET.ATG" out param); //#line 1244 "VBNET.ATG" if (param != null) parameters.Add(param); if (la.kind == 22) { lexer.NextToken(); FormalParameter( //#line 1246 "VBNET.ATG" out param); //#line 1247 "VBNET.ATG" if (param != null) parameters.Add(param); } Expect(38); //#line 1250 "VBNET.ATG" Location endPos = t.EndLocation; if (la.kind == 63) { lexer.NextToken(); while (la.kind == 40) { AttributeSection( //#line 1251 "VBNET.ATG" out section); //#line 1252 "VBNET.ATG" if (section != null) { section.AttributeTarget = "return"; attributes.Add(section); } } TypeName( //#line 1256 "VBNET.ATG" out returnType); //#line 1256 "VBNET.ATG" endPos = t.EndLocation; } Expect(1); Block( //#line 1258 "VBNET.ATG" out stmt); Expect(113); Expect(172); EndOfStmt(); //#line 1260 "VBNET.ATG" OperatorDeclaration operatorDeclaration = new OperatorDeclaration { Modifier = m.Modifier, Attributes = attributes, Parameters = parameters, TypeReference = returnType, OverloadableOperator = operatorType, ConversionType = opConversionType, Body = (BlockStatement)stmt, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endPos }; operatorDeclaration.Body.StartLocation = startPos; operatorDeclaration.Body.EndLocation = t.Location; AddChild(operatorDeclaration); break; } default: SynErr(263); break; } }
public override object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) { return blockStatement.AcceptChildren(this, data); }
public sealed override object VisitBlockStatement(BlockStatement blockStatement, object data) { this.BeginVisit(blockStatement); object result = this.TrackedVisitBlockStatement(blockStatement, data); this.EndVisit(blockStatement); return result; }
public virtual object TrackedVisitBlockStatement(BlockStatement blockStatement, object data) { return base.VisitBlockStatement(blockStatement, data); }
public virtual object VisitBlockStatement(BlockStatement blockStatement, object data) { throw new global::System.NotImplementedException("BlockStatement"); }
void Block( #line 2680 "VBNET.ATG" out Statement stmt) { #line 2683 "VBNET.ATG" BlockStatement blockStmt = new BlockStatement(); /* in snippet parsing mode, t might be null */ if (t != null) blockStmt.StartLocation = t.EndLocation; compilationUnit.BlockStart(blockStmt); while (StartOf(22) || #line 2689 "VBNET.ATG" IsEndStmtAhead()) { if ( #line 2689 "VBNET.ATG" IsEndStmtAhead()) { Expect(100); EndOfStmt(); #line 2689 "VBNET.ATG" compilationUnit.AddChild(new EndStatement()); } else { Statement(); EndOfStmt(); } } #line 2694 "VBNET.ATG" stmt = blockStmt; if (t != null) blockStmt.EndLocation = t.EndLocation; compilationUnit.BlockEnd(); }
void StructureMemberDecl( #line 775 "VBNET.ATG" ModifierList m, List<AttributeSection> attributes) { #line 777 "VBNET.ATG" TypeReference type = null; List<ParameterDeclarationExpression> p = new List<ParameterDeclarationExpression>(); Statement stmt = null; List<VariableDeclaration> variableDeclarators = new List<VariableDeclaration>(); List<TemplateDefinition> templates = new List<TemplateDefinition>(); switch (la.kind) { case 71: case 90: case 102: case 129: case 141: case 194: { NonModuleDeclaration( #line 784 "VBNET.ATG" m, attributes); break; } case 195: { lexer.NextToken(); #line 788 "VBNET.ATG" Location startPos = t.Location; if (StartOf(14)) { #line 792 "VBNET.ATG" string name = String.Empty; MethodDeclaration methodDeclaration; List<string> handlesClause = null; List<InterfaceImplementation> implementsClause = null; Identifier(); #line 798 "VBNET.ATG" name = t.val; m.Check(Modifiers.VBMethods); TypeParameterList( #line 801 "VBNET.ATG" templates); if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 802 "VBNET.ATG" p); } Expect(26); } if (la.kind == 121 || la.kind == 123) { if (la.kind == 123) { ImplementsClause( #line 805 "VBNET.ATG" out implementsClause); } else { HandlesClause( #line 807 "VBNET.ATG" out handlesClause); } } #line 810 "VBNET.ATG" Location endLocation = t.EndLocation; if ( #line 813 "VBNET.ATG" IsMustOverride(m)) { EndOfStmt(); #line 816 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, TypeReference = new TypeReference("System.Void", true), Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; compilationUnit.AddChild(methodDeclaration); } else if (la.kind == 1) { lexer.NextToken(); #line 829 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endLocation, TypeReference = new TypeReference("System.Void", true), Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; compilationUnit.AddChild(methodDeclaration); #line 840 "VBNET.ATG" if (ParseMethodBodies) { Block( #line 841 "VBNET.ATG" out stmt); Expect(100); Expect(195); #line 843 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); } #line 849 "VBNET.ATG" methodDeclaration.Body = (BlockStatement)stmt; #line 850 "VBNET.ATG" methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); } else SynErr(238); } else if (la.kind == 148) { lexer.NextToken(); if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 854 "VBNET.ATG" p); } Expect(26); } #line 855 "VBNET.ATG" m.Check(Modifiers.Constructors); #line 856 "VBNET.ATG" Location constructorEndLocation = t.EndLocation; Expect(1); #line 859 "VBNET.ATG" if (ParseMethodBodies) { Block( #line 860 "VBNET.ATG" out stmt); Expect(100); Expect(195); #line 862 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); } #line 868 "VBNET.ATG" Location endLocation = t.EndLocation; EndOfStmt(); #line 871 "VBNET.ATG" ConstructorDeclaration cd = new ConstructorDeclaration("New", m.Modifier, p, attributes); cd.StartLocation = m.GetDeclarationLocation(startPos); cd.EndLocation = constructorEndLocation; cd.Body = (BlockStatement)stmt; cd.Body.EndLocation = endLocation; compilationUnit.AddChild(cd); } else SynErr(239); break; } case 114: { lexer.NextToken(); #line 883 "VBNET.ATG" m.Check(Modifiers.VBMethods); string name = String.Empty; Location startPos = t.Location; MethodDeclaration methodDeclaration;List<string> handlesClause = null; List<InterfaceImplementation> implementsClause = null; AttributeSection returnTypeAttributeSection = null; Identifier(); #line 890 "VBNET.ATG" name = t.val; TypeParameterList( #line 891 "VBNET.ATG" templates); if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 892 "VBNET.ATG" p); } Expect(26); } if (la.kind == 50) { lexer.NextToken(); while (la.kind == 28) { AttributeSection( #line 893 "VBNET.ATG" out returnTypeAttributeSection); } TypeName( #line 893 "VBNET.ATG" out type); } #line 895 "VBNET.ATG" if(type == null) { type = new TypeReference("System.Object", true); } if (la.kind == 121 || la.kind == 123) { if (la.kind == 123) { ImplementsClause( #line 901 "VBNET.ATG" out implementsClause); } else { HandlesClause( #line 903 "VBNET.ATG" out handlesClause); } } if ( #line 908 "VBNET.ATG" IsMustOverride(m)) { EndOfStmt(); #line 911 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, TypeReference = type, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation, HandlesClause = handlesClause, Templates = templates, InterfaceImplementations = implementsClause }; if (returnTypeAttributeSection != null) { returnTypeAttributeSection.AttributeTarget = "return"; methodDeclaration.Attributes.Add(returnTypeAttributeSection); } compilationUnit.AddChild(methodDeclaration); } else if (la.kind == 1) { lexer.NextToken(); #line 929 "VBNET.ATG" methodDeclaration = new MethodDeclaration { Name = name, Modifier = m.Modifier, TypeReference = type, Parameters = p, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation, Templates = templates, HandlesClause = handlesClause, InterfaceImplementations = implementsClause }; if (returnTypeAttributeSection != null) { returnTypeAttributeSection.AttributeTarget = "return"; methodDeclaration.Attributes.Add(returnTypeAttributeSection); } compilationUnit.AddChild(methodDeclaration); if (ParseMethodBodies) { Block( #line 946 "VBNET.ATG" out stmt); Expect(100); Expect(114); #line 948 "VBNET.ATG" } else { // don't parse method body lexer.SkipCurrentBlock(Tokens.Function); stmt = new BlockStatement(); } methodDeclaration.Body = (BlockStatement)stmt; methodDeclaration.Body.StartLocation = methodDeclaration.EndLocation; methodDeclaration.Body.EndLocation = t.EndLocation; EndOfStmt(); } else SynErr(240); break; } case 88: { lexer.NextToken(); #line 962 "VBNET.ATG" m.Check(Modifiers.VBExternalMethods); Location startPos = t.Location; CharsetModifier charsetModifer = CharsetModifier.None; string library = String.Empty; string alias = null; string name = String.Empty; if (StartOf(15)) { Charset( #line 969 "VBNET.ATG" out charsetModifer); } if (la.kind == 195) { lexer.NextToken(); Identifier(); #line 972 "VBNET.ATG" name = t.val; Expect(135); Expect(3); #line 973 "VBNET.ATG" library = t.literalValue as string; if (la.kind == 46) { lexer.NextToken(); Expect(3); #line 974 "VBNET.ATG" alias = t.literalValue as string; } if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 975 "VBNET.ATG" p); } Expect(26); } EndOfStmt(); #line 978 "VBNET.ATG" DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, null, p, attributes, library, alias, charsetModifer); declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); declareDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(declareDeclaration); } else if (la.kind == 114) { lexer.NextToken(); Identifier(); #line 985 "VBNET.ATG" name = t.val; Expect(135); Expect(3); #line 986 "VBNET.ATG" library = t.literalValue as string; if (la.kind == 46) { lexer.NextToken(); Expect(3); #line 987 "VBNET.ATG" alias = t.literalValue as string; } if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 988 "VBNET.ATG" p); } Expect(26); } if (la.kind == 50) { lexer.NextToken(); TypeName( #line 989 "VBNET.ATG" out type); } EndOfStmt(); #line 992 "VBNET.ATG" DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, type, p, attributes, library, alias, charsetModifer); declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); declareDeclaration.EndLocation = t.EndLocation; compilationUnit.AddChild(declareDeclaration); } else SynErr(241); break; } case 106: { lexer.NextToken(); #line 1002 "VBNET.ATG" m.Check(Modifiers.VBEvents); Location startPos = t.Location; EventDeclaration eventDeclaration; string name = String.Empty; List<InterfaceImplementation> implementsClause = null; Identifier(); #line 1008 "VBNET.ATG" name= t.val; if (la.kind == 50) { lexer.NextToken(); TypeName( #line 1010 "VBNET.ATG" out type); } else if (StartOf(16)) { if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 1012 "VBNET.ATG" p); } Expect(26); } } else SynErr(242); if (la.kind == 123) { ImplementsClause( #line 1014 "VBNET.ATG" out implementsClause); } #line 1016 "VBNET.ATG" eventDeclaration = new EventDeclaration { Name = name, TypeReference = type, Modifier = m.Modifier, Parameters = p, Attributes = attributes, InterfaceImplementations = implementsClause, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation }; compilationUnit.AddChild(eventDeclaration); EndOfStmt(); break; } case 2: case 45: case 49: case 51: case 52: case 53: case 54: case 57: case 74: case 91: case 94: case 103: case 108: case 113: case 120: case 126: case 130: case 133: case 156: case 162: case 169: case 188: case 197: case 198: case 208: case 209: case 215: { #line 1026 "VBNET.ATG" Location startPos = t.Location; #line 1028 "VBNET.ATG" m.Check(Modifiers.Fields); FieldDeclaration fd = new FieldDeclaration(attributes, null, m.Modifier); fd.StartLocation = m.GetDeclarationLocation(startPos); IdentifierForFieldDeclaration(); #line 1032 "VBNET.ATG" string name = t.val; VariableDeclaratorPartAfterIdentifier( #line 1033 "VBNET.ATG" variableDeclarators, name); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 1034 "VBNET.ATG" variableDeclarators); } EndOfStmt(); #line 1037 "VBNET.ATG" fd.EndLocation = t.EndLocation; fd.Fields = variableDeclarators; compilationUnit.AddChild(fd); break; } case 75: { #line 1042 "VBNET.ATG" m.Check(Modifiers.Fields); lexer.NextToken(); #line 1043 "VBNET.ATG" m.Add(Modifiers.Const, t.Location); #line 1045 "VBNET.ATG" FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier); fd.StartLocation = m.GetDeclarationLocation(t.Location); List<VariableDeclaration> constantDeclarators = new List<VariableDeclaration>(); ConstantDeclarator( #line 1049 "VBNET.ATG" constantDeclarators); while (la.kind == 12) { lexer.NextToken(); ConstantDeclarator( #line 1050 "VBNET.ATG" constantDeclarators); } #line 1052 "VBNET.ATG" fd.Fields = constantDeclarators; fd.EndLocation = t.Location; EndOfStmt(); #line 1057 "VBNET.ATG" fd.EndLocation = t.EndLocation; compilationUnit.AddChild(fd); break; } case 171: { lexer.NextToken(); #line 1063 "VBNET.ATG" m.Check(Modifiers.VBProperties); Location startPos = t.Location; List<InterfaceImplementation> implementsClause = null; Identifier(); #line 1067 "VBNET.ATG" string propertyName = t.val; if (la.kind == 25) { lexer.NextToken(); if (StartOf(4)) { FormalParameterList( #line 1068 "VBNET.ATG" p); } Expect(26); } if (la.kind == 50) { lexer.NextToken(); TypeName( #line 1069 "VBNET.ATG" out type); } #line 1071 "VBNET.ATG" if(type == null) { type = new TypeReference("System.Object", true); } if (la.kind == 123) { ImplementsClause( #line 1075 "VBNET.ATG" out implementsClause); } EndOfStmt(); if ( #line 1079 "VBNET.ATG" IsMustOverride(m)) { #line 1081 "VBNET.ATG" PropertyDeclaration ParameterDeclarationExpressionl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); ParameterDeclarationExpressionl.StartLocation = m.GetDeclarationLocation(startPos); ParameterDeclarationExpressionl.EndLocation = t.Location; ParameterDeclarationExpressionl.TypeReference = type; ParameterDeclarationExpressionl.InterfaceImplementations = implementsClause; ParameterDeclarationExpressionl.Parameters = p; compilationUnit.AddChild(ParameterDeclarationExpressionl); } else if (StartOf(17)) { #line 1091 "VBNET.ATG" PropertyDeclaration ParameterDeclarationExpressionl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); ParameterDeclarationExpressionl.StartLocation = m.GetDeclarationLocation(startPos); ParameterDeclarationExpressionl.EndLocation = t.Location; ParameterDeclarationExpressionl.BodyStart = t.Location; ParameterDeclarationExpressionl.TypeReference = type; ParameterDeclarationExpressionl.InterfaceImplementations = implementsClause; ParameterDeclarationExpressionl.Parameters = p; PropertyGetRegion getRegion; PropertySetRegion setRegion; AccessorDecls( #line 1101 "VBNET.ATG" out getRegion, out setRegion); Expect(100); Expect(171); EndOfStmt(); #line 1105 "VBNET.ATG" ParameterDeclarationExpressionl.GetRegion = getRegion; ParameterDeclarationExpressionl.SetRegion = setRegion; ParameterDeclarationExpressionl.BodyEnd = t.EndLocation; compilationUnit.AddChild(ParameterDeclarationExpressionl); } else SynErr(243); break; } case 85: { lexer.NextToken(); #line 1112 "VBNET.ATG" Location startPos = t.Location; Expect(106); #line 1114 "VBNET.ATG" m.Check(Modifiers.VBCustomEvents); EventAddRemoveRegion eventAccessorDeclaration; EventAddRegion addHandlerAccessorDeclaration = null; EventRemoveRegion removeHandlerAccessorDeclaration = null; EventRaiseRegion raiseEventAccessorDeclaration = null; List<InterfaceImplementation> implementsClause = null; Identifier(); #line 1121 "VBNET.ATG" string customEventName = t.val; Expect(50); TypeName( #line 1122 "VBNET.ATG" out type); if (la.kind == 123) { ImplementsClause( #line 1123 "VBNET.ATG" out implementsClause); } EndOfStmt(); while (StartOf(18)) { EventAccessorDeclaration( #line 1126 "VBNET.ATG" out eventAccessorDeclaration); #line 1128 "VBNET.ATG" if(eventAccessorDeclaration is EventAddRegion) { addHandlerAccessorDeclaration = (EventAddRegion)eventAccessorDeclaration; } else if(eventAccessorDeclaration is EventRemoveRegion) { removeHandlerAccessorDeclaration = (EventRemoveRegion)eventAccessorDeclaration; } else if(eventAccessorDeclaration is EventRaiseRegion) { raiseEventAccessorDeclaration = (EventRaiseRegion)eventAccessorDeclaration; } } Expect(100); Expect(106); EndOfStmt(); #line 1144 "VBNET.ATG" if(addHandlerAccessorDeclaration == null) { Error("Need to provide AddHandler accessor."); } if(removeHandlerAccessorDeclaration == null) { Error("Need to provide RemoveHandler accessor."); } if(raiseEventAccessorDeclaration == null) { Error("Need to provide RaiseEvent accessor."); } EventDeclaration decl = new EventDeclaration { TypeReference = type, Name = customEventName, Modifier = m.Modifier, Attributes = attributes, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = t.EndLocation, AddRegion = addHandlerAccessorDeclaration, RemoveRegion = removeHandlerAccessorDeclaration, RaiseRegion = raiseEventAccessorDeclaration }; compilationUnit.AddChild(decl); break; } case 147: case 158: case 217: { #line 1170 "VBNET.ATG" ConversionType opConversionType = ConversionType.None; if (la.kind == 147 || la.kind == 217) { if (la.kind == 217) { lexer.NextToken(); #line 1171 "VBNET.ATG" opConversionType = ConversionType.Implicit; } else { lexer.NextToken(); #line 1172 "VBNET.ATG" opConversionType = ConversionType.Explicit; } } Expect(158); #line 1175 "VBNET.ATG" m.Check(Modifiers.VBOperators); Location startPos = t.Location; TypeReference returnType = NullTypeReference.Instance; TypeReference operandType = NullTypeReference.Instance; string operandName; OverloadableOperatorType operatorType; AttributeSection section; List<ParameterDeclarationExpression> parameters = new List<ParameterDeclarationExpression>(); List<AttributeSection> returnTypeAttributes = new List<AttributeSection>(); OverloadableOperator( #line 1185 "VBNET.ATG" out operatorType); Expect(25); if (la.kind == 59) { lexer.NextToken(); } Identifier(); #line 1186 "VBNET.ATG" operandName = t.val; if (la.kind == 50) { lexer.NextToken(); TypeName( #line 1187 "VBNET.ATG" out operandType); } #line 1188 "VBNET.ATG" parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); while (la.kind == 12) { lexer.NextToken(); if (la.kind == 59) { lexer.NextToken(); } Identifier(); #line 1192 "VBNET.ATG" operandName = t.val; if (la.kind == 50) { lexer.NextToken(); TypeName( #line 1193 "VBNET.ATG" out operandType); } #line 1194 "VBNET.ATG" parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); } Expect(26); #line 1197 "VBNET.ATG" Location endPos = t.EndLocation; if (la.kind == 50) { lexer.NextToken(); while (la.kind == 28) { AttributeSection( #line 1198 "VBNET.ATG" out section); #line 1198 "VBNET.ATG" returnTypeAttributes.Add(section); } TypeName( #line 1198 "VBNET.ATG" out returnType); #line 1198 "VBNET.ATG" endPos = t.EndLocation; } Expect(1); Block( #line 1200 "VBNET.ATG" out stmt); Expect(100); Expect(158); EndOfStmt(); #line 1202 "VBNET.ATG" OperatorDeclaration operatorDeclaration = new OperatorDeclaration { Modifier = m.Modifier, Attributes = attributes, Parameters = parameters, TypeReference = returnType, OverloadableOperator = operatorType, ConversionType = opConversionType, ReturnTypeAttributes = returnTypeAttributes, Body = (BlockStatement)stmt, StartLocation = m.GetDeclarationLocation(startPos), EndLocation = endPos }; operatorDeclaration.Body.StartLocation = startPos; operatorDeclaration.Body.EndLocation = t.Location; compilationUnit.AddChild(operatorDeclaration); break; } default: SynErr(244); break; } }
public override object VisitBlockStatement(BlockStatement blockStatement, object data) { endLocationStack.Push(blockStatement.EndLocation); base.VisitBlockStatement(blockStatement, data); endLocationStack.Pop(); return null; }
IEnumerable<Ast.INode> TransformNode(Node node) { if (Options.NodeComments) { yield return MakeComment("// " + node.Description); } yield return new Ast.LabelStatement(node.Label); if (node is BasicBlock) { foreach(ILNode expr in ((BasicBlock)node).Body) { if (expr is ILLabel) { yield return new Ast.LabelStatement(((ILLabel)expr).Name); } else { Statement stmt = TransformExpressionToStatement((ILExpression)expr); if (stmt != null) { yield return stmt; } } } foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } Node fallThroughNode = ((BasicBlock)node).FallThroughBasicBlock; // If there is default branch and it is not the following node if (fallThroughNode != null) { yield return new Ast.GotoStatement(fallThroughNode.Label); } } else if (node is AcyclicGraph) { foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } } else if (node is Loop) { Ast.BlockStatement blockStatement = new Ast.BlockStatement(); blockStatement.Children.AddRange(TransformNodes(node.Childs)); yield return new Ast.ForStatement( null, null, null, blockStatement ); } else if (node is Block) { foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } } else if (node is Branch) { yield return new Ast.LabelStatement(((Branch)node).FirstBasicBlock.Label); Ast.BlockStatement trueBlock = new Ast.BlockStatement(); trueBlock.Children.Add(new Ast.GotoStatement(((Branch)node).TrueSuccessor.Label)); Ast.BlockStatement falseBlock = new Ast.BlockStatement(); falseBlock.Children.Add(new Ast.GotoStatement(((Branch)node).FalseSuccessor.Label)); Ast.IfElseStatement ifElseStmt = new Ast.IfElseStatement( MakeBranchCondition((Branch)node), trueBlock, falseBlock ); trueBlock.Parent = ifElseStmt; falseBlock.Parent = ifElseStmt; yield return ifElseStmt; } else if (node is ConditionalNode) { ConditionalNode conditionalNode = (ConditionalNode)node; yield return new Ast.LabelStatement(conditionalNode.Condition.FirstBasicBlock.Label); Ast.BlockStatement trueBlock = new Ast.BlockStatement(); // The block entry code trueBlock.Children.Add(new Ast.GotoStatement(conditionalNode.Condition.TrueSuccessor.Label)); // Sugested content trueBlock.Children.AddRange(TransformNode(conditionalNode.TrueBody)); Ast.BlockStatement falseBlock = new Ast.BlockStatement(); // The block entry code falseBlock.Children.Add(new Ast.GotoStatement(conditionalNode.Condition.FalseSuccessor.Label)); // Sugested content falseBlock.Children.AddRange(TransformNode(conditionalNode.FalseBody)); Ast.IfElseStatement ifElseStmt = new Ast.IfElseStatement( // Method bodies are swapped new Ast.UnaryOperatorExpression( new Ast.ParenthesizedExpression( MakeBranchCondition(conditionalNode.Condition) ), UnaryOperatorType.Not ), falseBlock, trueBlock ); trueBlock.Parent = ifElseStmt; falseBlock.Parent = ifElseStmt; yield return ifElseStmt; } else if (node is TryCatchNode) { TryCatchNode tryCachNode = ((TryCatchNode)node); Ast.BlockStatement tryBlock = new Ast.BlockStatement(); tryBlock.Children.AddRange(TransformNode(tryCachNode.Childs[0])); Ast.BlockStatement finallyBlock = null; if (tryCachNode.Childs[1].Childs.Count > 0) { finallyBlock = new Ast.BlockStatement(); finallyBlock.Children.AddRange(TransformNode(tryCachNode.Childs[1])); } List<Ast.CatchClause> ccs = new List<CatchClause>(); for (int i = 0; i < tryCachNode.Types.Count; i++) { Ast.BlockStatement catchBlock = new Ast.BlockStatement(); catchBlock.Children.AddRange(TransformNode(tryCachNode.Childs[i + 2])); Ast.CatchClause cc = new Ast.CatchClause( new Ast.TypeReference(tryCachNode.Types[i].FullName), "exception", catchBlock ); ccs.Add(cc); } Ast.TryCatchStatement tryCachStmt = new Ast.TryCatchStatement(tryBlock, ccs, finallyBlock); yield return tryCachStmt; } else { throw new Exception("Bad node type"); } if (Options.NodeComments) { yield return MakeComment(""); } }
void RemoveAccessorDecl( #line 1341 "cs.ATG" out BlockStatement stmt) { #line 1342 "cs.ATG" stmt = null; Expect(131); Block( #line 1345 "cs.ATG" out stmt); }