protected void ReadTypeTreeNode(DumpReader reader, int indent) { Type = ReadType(reader); Name = ReadName(reader); reader.FindValidateWord("//"); ByteSize = ReadHexIntParameter(reader, "ByteSize"); reader.FindValidateLineWord(","); Index = ReadHexIntParameter(reader, "Index"); reader.FindValidateLineWord(","); Version = ReadHexIntParameter(reader, "Version"); reader.FindValidateLineWord(","); IsArray = ReadBoolParameter(reader, "IsArray"); reader.FindValidateLineWord(","); MetaFlag = unchecked ((uint)ReadHexIntParameter(reader, "MetaFlag")); reader.FindValidateEOL(); reader.FindNextLine(); int childIndent = indent + 1; List <TreeNodeDump> children = new List <TreeNodeDump>(); while (reader.PeekIndend() == childIndent) { TreeNodeDump child = new TreeNodeDump(); child.ReadTypeTreeNode(reader, childIndent); children.Add(child); } Children = children.ToArray(); }
private bool ReadValidation(DumpReader reader, IReadOnlyList <TreeDump> trees) { reader.FindContent(); bool validation = false; reader.StartPeeking(); if (reader.ReadWord() == "//") { if (reader.FindReadLineWord().StartsWith("==", StringComparison.InvariantCulture)) { validation = true; } } reader.FinishPeeking(); if (validation) { reader.ValidateWord("//"); reader.FindReadLineWord(); reader.FindValidateEOL(); reader.FindNextLine(); reader.ValidateWord("//"); reader.FindValidateLineWord("Successfully"); reader.FindValidateLineWord("finished"); reader.FindValidateLineWord("."); reader.FindValidateLineWord("Written"); int written = reader.FindReadLineInt(); reader.FindValidateLineWord("of"); int count = reader.FindReadLineInt(); reader.FindValidateEOL(); if (trees.Count != count) { throw new Exception($"Class count mismatch. Read {trees.Count} expected {count}"); } int validCount = trees.Count(t => t.IsValid); if (validCount != written) { throw new Exception($"Valid class count mismatch. Read {validCount} expected {written}"); } return(true); } else { return(false); } }
private void ReadHeader(DumpReader reader) { reader.ValidateWord("//"); ClassID = ReadIntParameter(reader, "classID"); reader.ValidateWord(":"); ClassName = reader.FindReadLineWord(); List <string> inheritance = new List <string>(); while (reader.FindLineContent()) { reader.ValidateWord("<-"); string baseName = reader.FindReadLineWord(); inheritance.Add(baseName); } Inheritance = inheritance.ToArray(); reader.FindNextLine(); }
private bool ReadAbstract(DumpReader reader) { int level = 0; while (reader.PeekWord() == "//") { string name = level == 0 ? ClassName : Inheritance[level - 1]; reader.ValidateWord("//"); reader.FindValidateWord(name); reader.FindValidateWord("is"); reader.FindValidateWord("abstract"); reader.FindValidateEOL(); reader.FindNextLine(); level++; } IsAbstract = level > 0; return(level == Inheritance.Count + 1); }
private void ReadValid(DumpReader reader) { IsValid = true; reader.StartPeeking(); if (reader.ReadWord() == "//") { if (reader.FindReadLineWord() == "Can't") { IsValid = false; } } reader.FinishPeeking(); if (!IsValid) { reader.ValidateWord("//"); reader.FindValidateLineWord("Can't"); reader.FindValidateLineWord("produce"); reader.FindValidateLineWord(ClassName); reader.FindValidateEOL(); reader.FindNextLine(); } }