Foxoft.Ci.GenD.ICiSymbolVisitor C# (CSharp) Method

ICiSymbolVisitor() protected method

protected ICiSymbolVisitor ( CiClass klass ) : void
klass CiClass
return void
        void ICiSymbolVisitor.Visit(CiClass klass)
        {
            WriteLine();
            Write(klass.Documentation);
            Write(klass.Visibility);
            OpenClass(klass.IsAbstract, klass, " : ");
            CurrentClass = klass;
            bool hasConstructor = klass.Constructor != null;
            foreach (CiSymbol member in klass.Members) {
            if (!hasConstructor) {
                CiField field = member as CiField;
                if (field != null && (field.Type is CiClassStorageType || field.Type is CiArrayStorageType))
                    hasConstructor = true;
            }
            member.Accept(this);
            }
            foreach (CiConst konst in klass.ConstArrays) {
            if (konst.Visibility != CiVisibility.Public) {
                Write("static immutable(");
                Write(konst.Type);
                Write(") ");
                Write(konst.Class == CurrentClass ? konst.Name : konst.GlobalName);
                Write(" = ");
                WriteConst(konst.Value);
                WriteLine(";");
            }
            }
            foreach (CiBinaryResource resource in klass.BinaryResources) {
            // FIXME: it's better to import(resources) from binary files,
            // rather than pasting tons of magic numbers in the source.
            Write("static immutable(ubyte[]) ");
            WriteName(resource);
            Write(" = ");
            WriteConst(resource.Content);
            WriteLine(";");
            }
            if (hasConstructor) {
            WriteLine("this()");
            OpenBlock();
            foreach (CiSymbol member in klass.Members) {
                CiField field = member as CiField;
                if (field != null && (field.Type is CiClassStorageType || field.Type is CiArrayStorageType)) {
                    WriteVarName(field.Name);
                    WriteInit(field.Type);
                    WriteLine(";");
                }
            }
            if (klass.Constructor != null)
                Write(klass.Constructor.Body.Statements);
            CloseBlock();
            }
            CloseBlock();
            CurrentClass = null;
        }

Same methods

GenD::ICiSymbolVisitor ( CiConst konst ) : void
GenD::ICiSymbolVisitor ( CiDelegate del ) : void
GenD::ICiSymbolVisitor ( CiEnum enu ) : void
GenD::ICiSymbolVisitor ( CiField field ) : void
GenD::ICiSymbolVisitor ( CiMethod method ) : void