コード例 #1
0
ファイル: ClassHeir.cs プロジェクト: thorhalbert/tops10vm.net
        public void Emit(CodeWriter writer, DencProgram program)
        {
            var sb = new StringBuilder();

            var level = writer.BraceLevel;

            var name = program.Architecture.NameClean(ClassName);

            if (ClassBase == "")
            {
                ClassBase = program.ArchitectureElement.ArchType.ToUpperInvariant() + "Class";
            }

            sb.Append(ClassProtection.ToString().ToLowerInvariant());
            sb.Append(" partial class ");
            sb.Append(name);
            sb.Append(" : ");
            sb.Append(ClassBase);

            foreach (var i in Interfaces)
            {
                sb.Append(',');
                sb.Append(i);
            }

            writer.WriteStatementNoSemi(sb);
            writer.UpBrace();

            foreach (var s in StatementList)
            {
                if (s != null)
                {
                    s.Emit(writer, program);
                }
            }


            sb.Append("public ");
            sb.Append(name);
            sb.Append("()");
            writer.WriteStatementNoSemi(sb);
            writer.UpBrace();

            foreach (var s in constructorAdd)
            {
                writer.WriteStatement(s);
            }

            writer.DownBrace();

            writer.BraceLevel = level;
        }
コード例 #2
0
ファイル: TypeFormatter.cs プロジェクト: smx-smx/reko
        private void WriteClassMembers(ClassType ct, ClassProtection protection, string sectionName)
        {
            var methods = ct.Methods.Where(m => m.Protection == protection)
                          .OrderBy(m => m.Offset).ThenBy(m => m.Name)
                          .ToList();
            var fields = ct.Fields.Where(f => f.Protection == protection)
                         .OrderBy(m => m.Offset)
                         .ToList();

            if (methods.Count == 0 && fields.Count == 0)
            {
                return;
            }
            writer.Indentation -= writer.TabSize;
            BeginLine();
            writer.WriteKeyword(sectionName);
            writer.WriteLine(":");
            writer.Indentation += writer.TabSize;

            foreach (var m in methods)
            {
                //$TODO: finish this.
                BeginLine();
                writer.Write(m.Name);
                writer.Write("()");
                EndLine(";");
            }
            if (methods.Count > 0 && fields.Count > 0)
            {
                // separate methods from fields.
                writer.WriteLine();
            }
            foreach (var f in fields)
            {
                BeginLine();
                var trf = new TypeReferenceFormatter(writer);
                trf.WriteDeclaration(f.DataType, f.Name);
                EndLine(";", string.Format("{0:X}", f.Offset));
            }
        }