/// <summary> /// Sets current location /// </summary> /// <param name="location"></param> public void ResetLocation(RtNode location) { if (location is RtClass) CurrentClass = null; if (location is RtInterface) CurrentInterface = null; if (location is RtEnum) CurrentEnum = null; if (location is RtModule) CurrentModule = null; }
public override void Visit(RtModule node) { if (node == null) { return; } if (!node.IsAbstractModule) { Context = WriterContext.Module; AppendTabs(); WriteLine(String.Format("declare module {0} {{", node.ModuleName)); Tab(); } foreach (var rtCompilationUnit in node.CompilationUnits) { Visit(rtCompilationUnit); } if (!node.IsAbstractModule) { Context = WriterContext.None; UnTab(); AppendTabs(); WriteLine("}"); } }
/// <summary> /// Sets current location /// </summary> /// <param name="location"></param> public void SetLocation(RtNode location) { if (location is RtClass) CurrentClass = (RtClass) location; if (location is RtInterface) CurrentInterface = (RtInterface)location; if (location is RtEnum) CurrentEnum = (RtEnum)location; if (location is RtModule) CurrentModule = (RtModule)location; }
/// <summary> /// Sets current location /// </summary> /// <param name="location"></param> public void ResetLocation(RtNode location) { if (location is RtClass) { CurrentClass = null; } if (location is RtInterface) { CurrentInterface = null; } if (location is RtEnum) { CurrentEnum = null; } if (location is RtModule) { CurrentModule = null; } }
/// <summary> /// Sets current location /// </summary> /// <param name="location"></param> public void SetLocation(RtNode location) { if (location is RtClass) { CurrentClass = (RtClass)location; } if (location is RtInterface) { CurrentInterface = (RtInterface)location; } if (location is RtEnum) { CurrentEnum = (RtEnum)location; } if (location is RtModule) { CurrentModule = (RtModule)location; } }
/// <summary> /// Generates namespace source code /// </summary> /// <param name="types">Types list</param> /// <param name="namespaceName">Namespace name</param> /// <param name="resolver">Type resolver</param> public virtual RtModule Generate(IEnumerable<Type> types, string namespaceName, TypeResolver resolver) { RtModule module = new RtModule(); if (string.IsNullOrEmpty(namespaceName)) module.IsAbstractModule = true; module.ModuleName = namespaceName; Context.CurrentNamespace = namespaceName; Context.Location.SetLocation(module); foreach (var type in types) { var converter = resolver.GeneratorFor(type, Context); var member = converter.Generate(type, resolver); module.CompilationUnits.Add(member); Console.WriteLine("Exported {0}", type); } Context.CurrentNamespace = null; Context.Location.ResetLocation(module); return module; }
public override void Visit(RtModule node) { if (node == null) return; if (!node.IsAbstractModule) { Context = WriterContext.Module; AppendTabs(); WriteLine(String.Format("declare module {0} {{", node.ModuleName)); Tab(); } foreach (var rtCompilationUnit in node.CompilationUnits) { Visit(rtCompilationUnit); } if (!node.IsAbstractModule) { Context = WriterContext.None; UnTab(); AppendTabs(); WriteLine("}"); } }
/// <summary> /// Generates namespace source code /// </summary> /// <param name="types">Types list</param> /// <param name="namespaceName">Namespace name</param> /// <param name="resolver">Type resolver</param> public virtual RtModule Generate(IEnumerable <Type> types, string namespaceName, TypeResolver resolver) { RtModule module = new RtModule(); if (string.IsNullOrEmpty(namespaceName)) { module.IsAbstractModule = true; } module.ModuleName = namespaceName; Context.CurrentNamespace = namespaceName; Context.Location.SetLocation(module); foreach (var type in types) { var converter = resolver.GeneratorFor(type, Context); var member = converter.Generate(type, resolver); module.CompilationUnits.Add(member); Console.WriteLine("Exported {0}", type); } Context.CurrentNamespace = null; Context.Location.ResetLocation(module); return(module); }
public abstract T Visit(RtModule node);
public abstract void Visit(RtModule node);