Jawa / Говнокод #9863 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
static 
    {
        unionSize = Math.max(6, 6);
        size = 2 + unionSize + 4;
    }

            // следующий участок

            case 7:
            {
                int result = (int)((long)getValue(cmd.isByteMode(), mem, op1) & 0L);
                if(cmd.isByteMode())
                    result &= 0xff;
                setValue(cmd.isByteMode(), mem, op1, result);
                flags = result != 0 ? result & VMFlags.VM_FS.getFlag() : VMFlags.VM_FZ.getFlag();
                break;
            }

            case 49:
            {
                setValue(true, mem, op1, (int)((long)getValue(true, mem, op1) & 0L));
                break;
            }

            case 50:
            {
                setValue(false, mem, op1, (int)((long)getValue(false, mem, op1) & 0L));
                break;
            }

            //=========== еще участок ============

                long dataSize = (long)ReadData(this) & 0L;
                for(int i = 0; inAddr < codeSize && (long)i < dataSize; i++)
                {
                    prg.getStaticData().addElement(new Byte(valueOf((byte)(fgetbits() >> 8))));
                    faddbits(8);
                }

Вот такое нашел в исходниках недавно

Запостил: Doctoror Doctoror, (Updated )

Комментарии (21) RSS

  • Похоже, что специально пытались запутать.
    Ответить
  • > fgetbits
    похоже, писал сишник до мозга костей, такие любят писать в низкоуровневом стиле... (к примеру, деление на два обязательно заменят сдвигом)
    Ответить
    • Это нормально. Я тоже деление на 2, 4, 8, ... заменяю сдвигом.
      Прикол тут вовсе не тут, как было отмечено, а в том о чем говорил wvxvw, например.
      И если вы не заметили
      long dataSize = (long)ReadData(this) & 0L;
                      for(int i = 0; inAddr < codeSize && (long)i < dataSize; i++)
                      {
                          prg.getStaticData().addElement(new Byte(valueOf((byte)(fgetbits() >> 8))));
                          faddbits(8);
                      }


      Вообще не исполниться, так как dataSize всегда ноль (любое число & 0 будет 0), и следственно (long)i < dataSize тут будет false с самого начала.
      Ответить
  • Как бы я же правильно понимаю, что
    setValue(true, mem, op1, (int)((long)getValue(true, mem, op1) & 0L));

    и
    setValue(true, mem, op1, 0);

    это одно и то же, или какой смысл был во всех этих конверациях?
    Ответить
    • Надо это спросить автора, но он неизвестен.
      Кстати еще веселый момент,
      int result = (int)((long)getValue(cmd.isByteMode(), mem, op1) & 0L);
                      if(cmd.isByteMode())
                          result &= 0xff;
                      setValue(cmd.isByteMode(), mem, op1, result);
                      flags = result != 0 ? result & VMFlags.VM_FS.getFlag() : VMFlags.VM_FZ.getFlag();
                      break;


      На самом деле можно написать так:

      setValue(cmd.isByteMode(), mem, op1, 0);
      flags = VMFlags.VM_FZ.getFlag();
      Ответить
  • > static
    {
    unionSize = Math.max(6, 6);
    size = 2 + unionSize + 4;
    }

    Ну это нормально, только заменить бы ещё 2,4,6 на sizeof нужных типов ну и какого хуя это делает в java-коде?
    Ответить
    • Извините, какой еще sizeof ?
      Math.max(int1, in2) возвращает то, что больше
      Тут то просто
      static {
          unionSize = 6;
          size = 12;
      }

      должно быть. Кстати когда я так и сделал, оказалось, что переменная unionSize используеться только в инициализаторе, и на самом деле инициализатор получаеться таким
      static {
          size = 12;
      }
      Ответить
      • Размер union определяется как максимум из размеров его ветвей. Если обе ветви занимают 6 байт, то размер union будет max(6,6). Такой записью автор показал, что это будет unon из двух ветвей, каждая из которых по 6 байт. Но что в этих ветвях - хз, потому что он явно написал 6 вместо sizeof.
        Аналогично с 2+unionsize+4 - тут видно, что это размер структуры из 3 полей, первое двубайтовое, второе - это тот union, третье - 4-байтовое.

        Поэтому отмени свою "оптимизацию" и оставь всё так, как было, потому что это было неспроста.
        Ответить
        • static в Яве в этом контексте имеет совсем другое значение - это код который выполняется при загрузке класса класс-лоадером, это не структура никакая.
          Ответить
          • Я понял, что статик - это не структура. Но число, которое хранится в этом статике - это явно размер какой-то структуры. И не надо это "упрощать", так сделано, потому что так надо.
            Ответить
            • Хз, это такая попытка посеять смуту? 🙂 Ну не знаю даже... не, код бессмысленный, тот что в static.
              Ответить
              • Код имеет смысл. Не надо вычислять константы вместо компилятора. Не надо писать 86400 вместо 24*60*60. И так далее.
                Ответить
                • x = Math.max(x, x) - это по определению nop. Тут как бы все теории бессильны. Ну, или, если бы у нас было:
                  final int constant1 = x;
                  final int constant2 = x;
                  x = Math.max(constant1, constant2);

                  Тогда можно было бы позвонить в астральную канцелярию и домогаться смысла, но в предоставленном варианте, это просто какое-то недоразумение.
                  Ответить
                  • Ещё раз для непонятливых: этот код хорош тем, что не только даёт число 12, но и показывает, как это число было получено. Глядя на способ его получения, я сразу понимаю, что оно означает. Дошло?
                    Ответить
  • п,I$I"D)E.I$DK"H"I"A"H$U"F L$F$V"F:Y(E,D?U"O"H.Q)T,U(Z!E(G$D?M$R)D)DD)N?S:M.GW"F"D.U(L:NZT)H)FH U,I"C$R!X"S.MS(O:L!F"B.B.T$A)Q)D B(IA F?P:Y$Q.Y?G?OY(GM?H)DW!Y.H.B?B)R.Z,W"X.P!E!C N,V.T(I)D.L$Q!W L"X.I H?U V)I,S)N B(V(V,H,A"L)X.T!O(M Q$P,N"P,F$I?U$Z!X,C?N(U,O.I O?TE$T.D,G:Y,D,T!R!J)Y.W,W"S"NQ:P,V R!Z"Q!S(P.S:S!VZ$G.C$I:S,C)N?Y$W$I)U(K)MK)A,N T(W"JB I(U,QQ$Q(S!O:W:M A A(M,T!G G$O$N W,J!L.C:P,K.D?E.Z.F)A)IQI$V"H E K?T(B,S DG,H$M.IR,W(D"C)A(Q!P)Q.R(E.PO!CI IG:V(C!SR)Q)Z(E:A)T,W)W.H.E F"A,G,D$G,K?A$F$P$UA,N.V?X)A!A,S(A,B"Z)Q$B YQ!T.M"W"X,V)U X.V(J$P.G?F,V.W"J"B:A:W E!O,G$QN!J"L,O.HR R?W!P L:H?T(R"VV?E$L$B.R!X!M TH"W:V U)T(AZ(K R(B S(B"D(R)R.J?I.C"CP?T:T?F)A B?Q)A"I!A(J.N$K?I"RKN,U!E?E:E!C?Y,Q(M$G!NC,J)U LG(A"H U)XH(T$F!M,RЖTIAPUCRMNFIRFXLYSILFPRGJGNXHWQSRTRTNBKTTJFJGGJBTWLWJEPYOXPBGESAVEGCKSPHRXFXNPWBTCEUBMUSTZATPPNAUXCATBJRUJQOIUVYMKFZITAHYXQXZDHCGAXUMULFVIBMUGJMMWSISALUOMENREYXFPKXBCGXRXRRPPTZQWKCTHJI
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8