本文整理汇总了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;
}
示例2: TryToEnableOn
public static bool TryToEnableOn(Module module, string pragma)
{
module.Annotate(pragma, true);
return !module.ContainsAnnotation(pragma);
}