807 }
808 case DADD:
809 case DSUB:
810 case DMUL:
811 case DDIV:
812 case DREM:
813 state.pop2();
814 state.pop2();
815 state.push(TypeTag.D);
816 break;
817 case RET:
818 break;
819 case WIDE:
820 // must be handled by the caller.
821 return;
822 case MONITORENTER:
823 case MONITOREXIT:
824 state.pop();
825 break;
826 case VNEW:
827 case NEW:
828 state.push(typeHelper.type((S) optValue));
829 break;
830 case NEWARRAY:
831 state.pop();
832 state.push(typeHelper.arrayOf(typeHelper.fromTag((TypeTag) optValue)));
833 break;
834 case ANEWARRAY:
835 state.pop();
836 state.push(typeHelper.arrayOf(typeHelper.arrayOf(typeHelper.type((S)optValue))));
837 break;
838 case VBOX:
839 case VUNBOX:
840 state.pop();
841 state.push(typeHelper.type((S) optValue));
842 break;
843 case MULTIANEWARRAY:
844 for (int i = 0; i < (byte) ((Object[]) optValue)[1]; i++) {
845 state.pop();
846 }
847 state.push(typeHelper.type((S) ((Object[]) optValue)[0]));
860 state.pop();
861 state.push((T) optValue);
862 break;
863 case PUTSTATIC: {
864 TypeTag tag = typeHelper.tag((T) optValue);
865 if (tag.width == 1) {
866 state.pop();
867 } else {
868 state.pop2();
869 }
870 break;
871 }
872 case PUTFIELD: {
873 TypeTag tag = typeHelper.tag((T) optValue);
874 if (tag.width == 1) {
875 state.pop();
876 } else {
877 state.pop2();
878 }
879 state.pop();
880 break;
881 }
882 case BIPUSH:
883 case SIPUSH:
884 state.push(TypeTag.I);
885 break;
886 case LDC:
887 case LDC_W:
888 case LDC2_W:
889 state.push(ldcType(optValue));
890 break;
891 case IF_ACMPEQ:
892 case IF_ICMPEQ:
893 case IF_ACMPNE:
894 case IF_ICMPGE:
895 case IF_ICMPGT:
896 case IF_ICMPLE:
897 case IF_ICMPLT:
898 case IF_ICMPNE:
899 state.pop();
|
807 }
808 case DADD:
809 case DSUB:
810 case DMUL:
811 case DDIV:
812 case DREM:
813 state.pop2();
814 state.pop2();
815 state.push(TypeTag.D);
816 break;
817 case RET:
818 break;
819 case WIDE:
820 // must be handled by the caller.
821 return;
822 case MONITORENTER:
823 case MONITOREXIT:
824 state.pop();
825 break;
826 case VNEW:
827 throw new UnsupportedOperationException("VNEW not implemented");
828 //processVnew(op, (T) optValue);
829 //break;
830 case NEW:
831 case VDEFAULT:
832 state.push(typeHelper.type((S) optValue));
833 break;
834 case NEWARRAY:
835 state.pop();
836 state.push(typeHelper.arrayOf(typeHelper.fromTag((TypeTag) optValue)));
837 break;
838 case ANEWARRAY:
839 state.pop();
840 state.push(typeHelper.arrayOf(typeHelper.arrayOf(typeHelper.type((S)optValue))));
841 break;
842 case VBOX:
843 case VUNBOX:
844 state.pop();
845 state.push(typeHelper.type((S) optValue));
846 break;
847 case MULTIANEWARRAY:
848 for (int i = 0; i < (byte) ((Object[]) optValue)[1]; i++) {
849 state.pop();
850 }
851 state.push(typeHelper.type((S) ((Object[]) optValue)[0]));
864 state.pop();
865 state.push((T) optValue);
866 break;
867 case PUTSTATIC: {
868 TypeTag tag = typeHelper.tag((T) optValue);
869 if (tag.width == 1) {
870 state.pop();
871 } else {
872 state.pop2();
873 }
874 break;
875 }
876 case PUTFIELD: {
877 TypeTag tag = typeHelper.tag((T) optValue);
878 if (tag.width == 1) {
879 state.pop();
880 } else {
881 state.pop2();
882 }
883 state.pop();
884 break;
885 }
886 case VWITHFIELD: {
887 TypeTag tag = typeHelper.tag((T) optValue);
888 if (tag.width == 1) {
889 state.pop();
890 } else {
891 state.pop2();
892 }
893 // state.pop(); state.push();
894 break;
895 }
896 case BIPUSH:
897 case SIPUSH:
898 state.push(TypeTag.I);
899 break;
900 case LDC:
901 case LDC_W:
902 case LDC2_W:
903 state.push(ldcType(optValue));
904 break;
905 case IF_ACMPEQ:
906 case IF_ICMPEQ:
907 case IF_ACMPNE:
908 case IF_ICMPGE:
909 case IF_ICMPGT:
910 case IF_ICMPLE:
911 case IF_ICMPLT:
912 case IF_ICMPNE:
913 state.pop();
|