private MethodSymbol GetOrCreateBaseFunctionWrapper(MethodSymbol methodBeingWrapped, SyntaxNode syntax) { methodBeingWrapped = methodBeingWrapped.ConstructedFrom; MethodSymbol wrapper = this.CompilationState.GetMethodWrapper(methodBeingWrapped); if ((object)wrapper != null) { return(wrapper); } var containingType = this.ContainingType; // create a method symbol string methodName = GeneratedNames.MakeBaseMethodWrapperName(this.CompilationState.NextWrapperMethodIndex); wrapper = new BaseMethodWrapperSymbol(containingType, methodBeingWrapped, syntax, methodName); // add the method to module if (this.CompilationState.Emitting) { this.CompilationState.ModuleBuilderOpt.AddSynthesizedDefinition(containingType, wrapper); } Debug.Assert(wrapper.SynthesizesLoweredBoundBody); wrapper.GenerateMethodBody(this.CompilationState, this.Diagnostics); return(wrapper); }
private MethodSymbol GetOrCreateBaseFunctionWrapper(MethodSymbol methodBeingWrapped, SyntaxNode syntax) { methodBeingWrapped = methodBeingWrapped.ConstructedFrom; MethodSymbol wrapper = this.CompilationState.GetMethodWrapper(methodBeingWrapped); if ((object)wrapper != null) { return wrapper; } var containingType = this.ContainingType; // create a method symbol string methodName = GeneratedNames.MakeBaseMethodWrapperName(this.CompilationState.NextWrapperMethodIndex); wrapper = new BaseMethodWrapperSymbol(containingType, methodBeingWrapped, syntax, methodName); // add the method to module if (this.CompilationState.Emitting) { this.CompilationState.ModuleBuilderOpt.AddSynthesizedDefinition(containingType, wrapper); } Debug.Assert(wrapper.SynthesizesLoweredBoundBody); wrapper.GenerateMethodBody(this.CompilationState, this.Diagnostics); return wrapper; }