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; }
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)); } }