/// <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;
 }
Beispiel #4
0
 /// <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;
     }
 }
Beispiel #5
0
 /// <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("}");
            }
        }
Beispiel #8
0
        /// <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);