Babel.Compiler.CodeGeneratingVisitor.GenerateAdapter C# (CSharp) Method

GenerateAdapter() protected method

protected GenerateAdapter ( SupertypingAdapter adapter ) : void
adapter SupertypingAdapter
return void
        protected virtual void GenerateAdapter(SupertypingAdapter adapter)
        {
            ilGenerator = adapter.Constructor.GetILGenerator();
            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldarg_1);
            ilGenerator.Emit(OpCodes.Stfld, adapter.AdapteeField);
            ilGenerator.Emit(OpCodes.Ret);
            foreach (SupertypingAdapterMethod method in adapter.Methods) {
                ilGenerator = method.MethodBuilder.GetILGenerator();
                ilGenerator.Emit(OpCodes.Ldarg_0);
                ilGenerator.Emit(OpCodes.Ldfld, adapter.AdapteeField);
                for (int i = 1; i <= method.ParameterCount; i++) {
                    ilGenerator.Emit(OpCodes.Ldarg, i);
                }
                ilGenerator.Emit(OpCodes.Tailcall);
                if (adapter.AdapteeType.IsAbstract)
                    ilGenerator.EmitCall(OpCodes.Callvirt,
                                         method.AdapteeMethod,
                                         null);
                else
                    ilGenerator.EmitCall(OpCodes.Call,
                                         method.AdapteeMethod,
                                         null);
                ilGenerator.Emit(OpCodes.Ret);
            }
            adapter.TypeBuilder.CreateType();
        }