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


C# Module.Annotate方法代码示例

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


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

示例1: ConvertModule

        public Module ConvertModule(Module module, CompilerContext context) {
            var dir = Path.GetDirectoryName(module.LexicalInfo.FileName);
            
            var clsname = Path.GetFileNameWithoutExtension(module.LexicalInfo.FileName).Replace("-", "_").Replace(".",
                                                                                                                  "__");
            var prefix = "L0_";
            if(dir.like(@"(?ix)[\\/]sys[\\/]?(extensions[\\/]?)$")) {
                prefix = "L1_";
            }
            else if(dir.like(@"(?ix)[\\/]mod[\\/]?(extensions[\\/]?)$")) {
                prefix = "L2_";
            }
            else if(dir.like(@"(?ix)[\\/]usr[\\/]?(extensions[\\/]?)$")) {
                prefix = "L3_";
            }
            prefix += Path.GetFileName(dir) + "_";
            clsname = prefix + clsname;
            //clsname - имя класса, который инкапсулирует в себе тело модуля и является настройщиком реестра
            var methodbody = (Block) module.Globals.Clone();
            //method body - участок модуля с выполняемым кодом
            module.Globals = new Block();
            foreach (var n in getmacronamespaces(context))
            {
                module.Imports.Add(new Import(n.Item2, new ReferenceExpression(n.Item1.GetName().Name), null));
            }
            //зачищаем глобальную область модуля
            module.Imports.Add(new Import("Comdiv.Extensibility.IRegistryLoader", new ReferenceExpression("Comdiv.Core"),
                                          new ReferenceExpression("_IRL_")));
            module.Imports.Add(new Import("System.Collections.Generic",
                                          new ReferenceExpression("System"), null));
            //гарантируем присутствие интерфейса IRegistryLoader в импорте и IDictionary<string,string>
            var newclass = new ClassDefinition();
            newclass.Name = clsname;
            newclass.BaseTypes.Add(new SimpleTypeReference("_IRL_"));
            //класс реализует интерфейс IRegistryLoader
            var method = new Method("Load");
            var dictref = new GenericTypeReference();
            dictref.Name = "System.Collections.Generic.IDictionary";
            dictref.GenericArguments.Add(new SimpleTypeReference("string"));
            dictref.GenericArguments.Add(new SimpleTypeReference("object"));
            method.Parameters.Add(new ParameterDeclaration("registry", dictref));
            method.Body = methodbody;
            //формируем соотвествующий метод

            //теперь отправляем все глобальные функции в наш класс
            foreach (var function in module.Members.OfType<Method>().ToArray()) {
                newclass.Members.Add((Method) function.Clone());
                module.Members.Remove(function);
            }


            newclass.Members.Add(method);


            //добавляем его в класс
            module.Members.Add(newclass);
            //отправляем готовый класс обратно в модуль

            module.Annotate("regmethod", method.Body);

            return module;
        }
开发者ID:Qorpent,项目名称:comdiv.oldcore,代码行数:62,代码来源:ExtensionsPreprocessor.cs

示例2: TryToEnableOn

 public static bool TryToEnableOn(Module module, string pragma)
 {
     module.Annotate(pragma, true);
     return !module.ContainsAnnotation(pragma);
 }
开发者ID:CarlosHBC,项目名称:UnityDecompiled,代码行数:5,代码来源:Pragmas.cs


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