private static KecaknoahScriptClassInfo ReadClass(BinaryReader reader) { string name = null; while (true) { switch ((ClassElementType)reader.ReadByte()) { case ClassElementType.Name: name = reader.ReadString(); break; case ClassElementType.StartBlocks: var klass = new KecaknoahScriptClassInfo(name); var count = reader.ReadInt32(); for (var i = 0; i < count; i++) { switch ((ClassBlockType)reader.ReadByte()) { case ClassBlockType.InnerClass: klass.AddInnerClass(ReadClass(reader)); break; case ClassBlockType.InstanceMethod: klass.AddInstanceMethod(ReadMethod(reader)); break; case ClassBlockType.ClassMethod: klass.AddInstanceMethod(ReadMethod(reader)); break; case ClassBlockType.Local: klass.AddLocal(reader.ReadString(), null); break; default: throw new InvalidDataException("やめて"); } } return klass; default: throw new InvalidDataException("無効なクラス"); } } }