当前位置: 首页>>代码示例>>C#>>正文


C# CodeGenContext.CreateModuleMethod方法代码示例

本文整理汇总了C#中CodeGenContext.CreateModuleMethod方法的典型用法代码示例。如果您正苦于以下问题:C# CodeGenContext.CreateModuleMethod方法的具体用法?C# CodeGenContext.CreateModuleMethod怎么用?C# CodeGenContext.CreateModuleMethod使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CodeGenContext的用法示例。


在下文中一共展示了CodeGenContext.CreateModuleMethod方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GenerateOptionsMethod

        private static MethodDef GenerateOptionsMethod(CodeGenContext context, List<KeyValuePair<string, object>> runtime_options) {
            // internal void SetOptions(string[] args) {
            CodeGenContext SetOptions = context.CreateModuleMethod("SetOptions", PrimitiveType.Void, new Param(ParamAttr.Default, "args", new PERWAPI.ZeroBasedArray(PrimitiveType.String)));

            SetOptions.ldarg("args");
            SetOptions.call(Runtime.Options.SetArgs);

            if (runtime_options != null)
                foreach (KeyValuePair<string, object> option in runtime_options) {
                    SetOptions.ldstr(option.Key);
                    if (option.Value == null)
                        SetOptions.ldnull();
                    else if (option.Value is string)
                        SetOptions.ldstr((string)option.Value);
                    else if (option.Value is int) {
                        SetOptions.ldc_i4((int)option.Value);
                        SetOptions.box(PrimitiveType.Int32);
                    } else if (option.Value is bool) {
                        if ((bool)option.Value)
                            SetOptions.PushTrue();
                        else
                            SetOptions.PushFalse();
                        SetOptions.box(PrimitiveType.Boolean);
                    } else
                        throw new System.NotImplementedException("unknown option");
                    SetOptions.call(Runtime.Options.SetRuntimeOption);
                }
            SetOptions.ret();
            SetOptions.Close();

            return SetOptions.Method;
        }
开发者ID:chunlea,项目名称:rubydotnetcompiler,代码行数:32,代码来源:SourceFile.cs

示例2: GenerateMainMethod

        internal static void GenerateMainMethod(CodeGenContext context, ClassDef fileClass, MethodDef SetOptions, List<SOURCEFILE> files) {
            // public static void Main(string[] args) {
            CodeGenContext Main = context.CreateModuleMethod("Main", PrimitiveType.Void, new Param[] { new Param(ParamAttr.Default, "args", new PERWAPI.ZeroBasedArray(PrimitiveType.String)) });

            Main.Method.DeclareEntryPoint();

            PERWAPI.CILLabel endLabel = Main.NewLabel();

            // try {
            Main.StartBlock(Clause.Try);

            if (SetOptions != null) {
                //    SetOptions(args);
                Main.ldarg("args");
                Main.call(SetOptions);
            }

            // register other ruby source files in assembly so that they can be loaded if requested
            foreach (SOURCEFILE f in files) {
                // Ruby.Runtime.Program.AddProgram(filename, fileClass);
                Main.ldstr(File.stripExtension(f.location.file));
                Main.ldtoken(f.fileClass);
                Main.call(Runtime.SystemType.GetTypeFromHandle);
                Main.call(Runtime.Program.AddProgram);
            }

            // Explicit load
            // Load(ruby_top_self, null);
            Main.ldsfld(Runtime.Object.ruby_top_self);
            Main.ldnull();
            Main.call(LoadMethod.Method);
            Main.pop();

            Main.Goto(endLabel);

            // }
            TryBlock block = Main.EndTryBlock();

            // finally {
            Main.StartBlock(Clause.Finally);

            //    Program.ruby_stop();
            Main.call(Runtime.Program.ruby_stop);

            Main.endfinally();

            // }
            Main.EndFinallyBlock(block);

            Main.CodeLabel(endLabel);

            Main.ret();
            Main.Close();
            // }
        }
开发者ID:chunlea,项目名称:rubydotnetcompiler,代码行数:55,代码来源:SourceFile.cs


注:本文中的CodeGenContext.CreateModuleMethod方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。