Ejemplo n.º 1
0
 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("無効なクラス");
         }
     }
 }