810 break; 811 } 812 case DADD: 813 case DSUB: 814 case DMUL: 815 case DDIV: 816 case DREM: 817 state.pop2(); 818 state.pop2(); 819 state.push(TypeTag.D); 820 break; 821 case RET: 822 break; 823 case WIDE: 824 // must be handled by the caller. 825 return; 826 case MONITORENTER: 827 case MONITOREXIT: 828 state.pop(); 829 break; 830 case VNEW: 831 throw new UnsupportedOperationException("VNEW not implemented"); 832 case NEW: 833 case VDEFAULT: 834 state.push(typeHelper.type((S) optValue)); 835 break; 836 case NEWARRAY: 837 state.pop(); 838 state.push(typeHelper.arrayOf(typeHelper.fromTag((TypeTag) optValue))); 839 break; 840 case ANEWARRAY: 841 state.pop(); 842 state.push(typeHelper.arrayOf(typeHelper.arrayOf(typeHelper.type((S)optValue)))); 843 break; 844 case VBOX: 845 case VUNBOX: 846 state.pop(); 847 state.push(typeHelper.type((S) optValue)); 848 break; 849 case MULTIANEWARRAY: 850 for (int i = 0; i < (byte) ((Object[]) optValue)[1]; i++) { 851 state.pop(); 852 } 853 state.push(typeHelper.type((S) ((Object[]) optValue)[0])); 854 break; 855 case INVOKEINTERFACE: 856 case INVOKEVIRTUAL: 857 case INVOKESPECIAL: 858 case INVOKESTATIC: 859 processInvoke(op, (T) optValue); 860 break; 861 case GETSTATIC: 862 state.push((T) optValue); 863 break; 864 case VGETFIELD: 865 case GETFIELD: 866 state.pop(); 867 state.push((T) optValue); 868 break; 869 case PUTSTATIC: { 870 TypeTag tag = typeHelper.tag((T) optValue); 871 if (tag.width == 1) { 872 state.pop(); 873 } else { 874 state.pop2(); 875 } 876 break; 877 } 878 case PUTFIELD: { 879 TypeTag tag = typeHelper.tag((T) optValue); 880 if (tag.width == 1) { 881 state.pop(); 882 } else { 883 state.pop2(); 884 } | 810 break; 811 } 812 case DADD: 813 case DSUB: 814 case DMUL: 815 case DDIV: 816 case DREM: 817 state.pop2(); 818 state.pop2(); 819 state.push(TypeTag.D); 820 break; 821 case RET: 822 break; 823 case WIDE: 824 // must be handled by the caller. 825 return; 826 case MONITORENTER: 827 case MONITOREXIT: 828 state.pop(); 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])); 852 break; 853 case INVOKEINTERFACE: 854 case INVOKEVIRTUAL: 855 case INVOKESPECIAL: 856 case INVOKESTATIC: 857 processInvoke(op, (T) optValue); 858 break; 859 case GETSTATIC: 860 state.push((T) optValue); 861 break; 862 case GETFIELD: 863 state.pop(); 864 state.push((T) optValue); 865 break; 866 case PUTSTATIC: { 867 TypeTag tag = typeHelper.tag((T) optValue); 868 if (tag.width == 1) { 869 state.pop(); 870 } else { 871 state.pop2(); 872 } 873 break; 874 } 875 case PUTFIELD: { 876 TypeTag tag = typeHelper.tag((T) optValue); 877 if (tag.width == 1) { 878 state.pop(); 879 } else { 880 state.pop2(); 881 } |