⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code-analyse.c

📁 基于LWVCL开发的库
💻 C
📖 第 1 页 / 共 3 页
字号:
		case DSUB:		case DMUL:		case DDIV:		case DREM:			STACKIN(2, TDOUBLE);			STACKIN(3, TVOID);			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STKPOP(2);			STACKOUT(0, TDOUBLE);			STACKOUT(1, TVOID);			INCPC(1);			break;		case INEG:			STACKIN(0, TINT);			STACKOUT(0, TINT);			INCPC(1);			break;		case LNEG:			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STACKOUT(0, TLONG);			STACKOUT(1, TVOID);			INCPC(1);			break;		case FNEG:			STACKIN(0, TFLOAT);			STACKOUT(0, TFLOAT);			INCPC(1);			break;		case DNEG:			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STACKOUT(0, TDOUBLE);			STACKOUT(1, TVOID);			INCPC(1);			break;		case ISHL:			STACKIN(0, TINT);			STACKIN(1, TINT);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case ISHR:			STACKIN(0, TINT);			STACKIN(1, TINT);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case IUSHR:			STACKIN(0, TINT);			STACKIN(1, TINT);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case LSHL:		case LSHR:		case LUSHR:			STACKIN(0, TINT);			STACKIN(1, TLONG);			STACKIN(2, TVOID);			STKPOP(1);			STACKOUT(0, TLONG);			STACKOUT(1, TVOID);			INCPC(1);			break;		case IINC:			if (wide) {				LOCALINOUT(WORD(pc+1), TINT);				INCPC(2);				wide = false;			}			else {				LOCALINOUT(BYTE(pc+1), TINT);			}			INCPC(3);			break;		case I2L:			STACKIN(0, TINT);			STKPUSH(1);			STACKOUT(0, TLONG);			STACKOUT(1, TVOID);			INCPC(1);			break;		case I2F:			STACKIN(0, TINT);			STACKOUT(0, TFLOAT);			INCPC(1);			break;		case I2D:			STACKIN(0, TINT);			STKPUSH(1);			STACKOUT(0, TDOUBLE);			STACKOUT(1, TVOID);			INCPC(1);			break;		case L2I:			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case L2F:			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STKPOP(1);			STACKOUT(0, TFLOAT);			INCPC(1);			break;		case L2D:			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STACKOUT(0, TDOUBLE);			STACKOUT(1, TVOID);			INCPC(1);			break;		case F2I:			STACKIN(0, TFLOAT);			STACKOUT(0, TINT);			INCPC(1);			break;		case F2L:			STACKIN(0, TFLOAT);			STKPUSH(1);			STACKOUT(0, TLONG);			STACKOUT(1, TVOID);			INCPC(1);			break;		case F2D:			STACKIN(0, TFLOAT);			STKPUSH(1);			STACKOUT(0, TDOUBLE);			STACKOUT(1, TVOID);			INCPC(1);			break;		case D2I:			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case D2L:			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STACKOUT(0, TLONG);			STACKOUT(1, TVOID);			INCPC(1);			break;		case D2F:			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STKPOP(1);			STACKOUT(0, TFLOAT);			INCPC(1);			break;		case INT2BYTE:		case INT2CHAR:		case INT2SHORT:			STACKIN(0, TINT);			STACKOUT(0, TINT);			INCPC(1);			break;		case LCMP:			STACKIN(2, TLONG);			STACKIN(3, TVOID);			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STKPOP(3);			STACKOUT(0, TINT);			INCPC(1);			break;		case FCMPL:		case FCMPG:			STACKIN(1, TFLOAT);			STACKIN(0, TFLOAT);			STKPOP(1);			STACKOUT(0, TINT);			INCPC(1);			break;		case DCMPL:		case DCMPG:			STACKIN(2, TDOUBLE);			STACKIN(3, TVOID);			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STKPOP(3);			STACKOUT(0, TINT);			INCPC(1);			break;		case IFEQ:		case IFNE:		case IFLT:		case IFGE:		case IFGT:		case IFLE:			STACKIN(0, TINT);			STKPOP(1);			FRAMEMERGE(pc + WORD(pc+1), sp);			FRAMEMERGE(pc + 3, sp);			INCPC(3);			break;		case IF_ICMPEQ:		case IF_ICMPNE:		case IF_ICMPLT:		case IF_ICMPGT:		case IF_ICMPGE:		case IF_ICMPLE:			STACKIN(0, TINT);			STACKIN(1, TINT);			STKPOP(2);			FRAMEMERGE(pc + WORD(pc+1), sp);			FRAMEMERGE(pc + 3, sp);			INCPC(3);			break;		case IF_ACMPEQ:		case IF_ACMPNE:			STACKIN(0, TOBJ);			STACKIN(1, TOBJ);			STKPOP(2);			FRAMEMERGE(pc + WORD(pc+1), sp);			FRAMEMERGE(pc + 3, sp);			INCPC(3);			break;		case GOTO:			FRAMEMERGE(pc + WORD(pc+1), sp);			INCPC(3);			break;		case GOTO_W:			FRAMEMERGE(pc + DWORD(pc+1), sp);			INCPC(5);			break;		case JSR:			STKPUSH(1);			STACKOUT(0, TADDR);			FRAMEMERGE(pc + WORD(pc+1), sp);			STKPOP(1);			FRAMEMERGE(pc + 3, sp);			INCPC(3);			break;		case JSR_W:			STKPUSH(1);			STACKOUT(0, TADDR);			FRAMEMERGE(pc + DWORD(pc+1), sp);			STKPOP(1);			FRAMEMERGE(pc + 5, sp);			INCPC(5);			break;		case RET:			LOCALIN(BYTE(pc+1), TADDR);			INCPC(2);			break;		case LOOKUPSWITCH:			STACKIN(0, TINT);			STKPOP(1);			tabpc = (pc + 4) & -4;			idx = DWORD(tabpc+4);			for (; idx > 0; idx--) {				FRAMEMERGE(pc+DWORD(tabpc+idx*8+4), sp);			}			FRAMEMERGE(pc + DWORD(tabpc), sp);			pc = tabpc + (DWORD(tabpc+4)+1) * 8;			break;		case TABLESWITCH:			STACKIN(0, TINT);			STKPOP(1);			tabpc = (pc + 4) & -4;			idx = DWORD(tabpc+8)-DWORD(tabpc+4)+1;			for (; idx > 0; idx--) {				FRAMEMERGE(pc+DWORD(tabpc+idx*4+8), sp);			}			FRAMEMERGE(pc + DWORD(tabpc), sp);			pc = tabpc + (DWORD(tabpc+8)-DWORD(tabpc+4)+1+3) * 4;			break;		case IRETURN:			STACKIN(0, TINT);			STKPOP(1);			INCPC(1);			break;		case LRETURN:			STACKIN(0, TLONG);			STACKIN(1, TVOID);			STKPOP(2);			INCPC(1);			break;		case FRETURN:			STACKIN(0, TFLOAT);			STKPOP(1);			INCPC(1);			break;		case DRETURN:			STACKIN(0, TDOUBLE);			STACKIN(1, TVOID);			STKPOP(2);			INCPC(1);			break;		case ARETURN:			STACKIN(0, TOBJ);			STKPOP(1);			INCPC(1);			break;		case RETURN:			INCPC(1);			break;		case GETSTATIC:			if (getField(WORD(pc+1), meth->class, true, &finfo, einfo) == 0) {				if (!checkNoClassDefFoundError(einfo)) {					goto done_fail;				}			}			/* We must check whether the method			 * could have been translated in the 			 * getField invokation. It may happen			 * principally in SecurityManagers.			 */			if (METHOD_TRANSLATED(meth))				goto done_fail;			switch (finfo.signature->data[0]){			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STKPUSH(1);				STACKOUT(0, TINT);				break;			case 'F':				STKPUSH(1);				STACKOUT(0, TFLOAT);				break;			case 'J':				STKPUSH(2);				STACKOUT(0, TLONG);				STACKOUT(1, TVOID);				break;			case 'D':				STKPUSH(2);				STACKOUT(0, TDOUBLE);				STACKOUT(1, TVOID);				break;			case '[':			case 'L':				STKPUSH(1);				STACKOUT(0, TOBJ);				break;			default:				KAFFEVM_ABORT();				break;			}			INCPC(3);			break;		case PUTSTATIC:			if (getField(WORD(pc+1), meth->class, true, &finfo, einfo) == 0) {				if (!checkNoClassDefFoundError(einfo)) {					goto done_fail;				}			}			if (METHOD_TRANSLATED(meth))				goto done_fail;			switch (finfo.signature->data[0]){			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STACKIN(0, TINT);				STKPOP(1);				break;			case 'F':				STACKIN(0, TFLOAT);				STKPOP(1);				break;			case 'J':				STACKIN(0, TLONG);				STACKIN(1, TVOID);				STKPOP(2);				break;			case 'D':				STACKIN(0, TDOUBLE);				STACKIN(1, TVOID);				STKPOP(2);				break;			case '[':			case 'L':				STACKIN(0, TOBJ);				STKPOP(1);				break;			default:				KAFFEVM_ABORT();				break;			}			INCPC(3);			break;		case GETFIELD:			if (getField(WORD(pc+1), meth->class, false, &finfo, einfo) == 0) {				goto done_fail;			}			if (METHOD_TRANSLATED(meth))				goto done_fail;			STACKIN(0, TOBJ);			if (!FIELD_ISPRIM(finfo.field)) {				STACKOUT(0, TOBJ);			}			else switch (CLASS_PRIM_SIG(FIELD_TYPE(finfo.field))){			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STACKOUT(0, TINT);				break;			case 'F':				STACKOUT(0, TFLOAT);				break;			case 'J':				STKPUSH(1);				STACKOUT(0, TLONG);				STACKOUT(1, TVOID);				break;			case 'D':				STKPUSH(1);				STACKOUT(0, TDOUBLE);				STACKOUT(1, TVOID);				break;			default:				KAFFEVM_ABORT();				break;			}			INCPC(3);			break;		case PUTFIELD:			if (getField(WORD(pc+1), meth->class, false, &finfo, einfo) == 0) {				goto done_fail;			}			if (METHOD_TRANSLATED(meth))				goto done_fail;			if (!FIELD_ISPRIM(finfo.field)) {				STACKIN(0, TOBJ);				STACKIN(1, TOBJ);				STKPOP(2);			}			else switch (CLASS_PRIM_SIG(FIELD_TYPE(finfo.field))){			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STACKIN(0, TINT);				STACKIN(1, TOBJ);				STKPOP(2);				break;			case 'F':				STACKIN(0, TFLOAT);				STACKIN(1, TOBJ);				STKPOP(2);				break;			case 'J':				STACKIN(0, TLONG);				STACKIN(1, TVOID);				STACKIN(2, TOBJ);				STKPOP(3);				break;			case 'D':				STACKIN(0, TDOUBLE);				STACKIN(1, TVOID);				STACKIN(2, TOBJ);				STKPOP(3);				break;			default:				KAFFEVM_ABORT();				break;			}			INCPC(3);			break;		case INVOKEVIRTUAL:		case INVOKESPECIAL:			if (getMethodSignatureClass(WORD(pc+1), meth->class, true, false, &call, einfo) == false) {				if (!checkNoClassDefFoundError(einfo) || call.signature == 0) {					goto done_fail;				}			}			if (METHOD_TRANSLATED(meth))				goto done_fail;			sig = call.signature->data;			assert(sig[0] == '(');			sig++;			idx = call.in;			STACKIN(idx, TOBJ);			idx -= 1;			while (sig[0] != ')') {				switch (sig[0]) {				case '[':					STACKIN(idx, TOBJ);					idx -= 1;					while (sig[0] == '[') {						sig++;					}					if (sig[0] == 'L') {						while (sig[0] != ';') {							sig++;						}					}					sig++;					break;				case 'L':					STACKIN(idx, TOBJ);					idx -= 1;					while (sig[0] != ';') {						sig++;					}					sig++;					break;				case 'I':				case 'Z':				case 'S':				case 'B':				case 'C':					STACKIN(idx, TINT);					idx -= 1;					sig++;					break;				case 'J':					STACKIN(idx-1, TLONG);					STACKIN(idx, TVOID);					idx -= 2;					sig++;					break;				case 'F':					STACKIN(idx, TFLOAT);					idx -= 1;					sig++;					break;				case 'D':					STACKIN(idx-1, TDOUBLE);					STACKIN(idx, TVOID);					idx -= 2;					sig++;					break;				default:					assert("Signature character unknown" == 0);				}			}			STKPOP(call.in+1);			STKPUSH(call.out);			switch (call.rettype) {			case '[':			case 'L':				STACKOUT(0, TOBJ);				break;			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STACKOUT(0, TINT);				break;			case 'J':				STACKOUT(0, TLONG);				STACKOUT(1, TVOID);				break;			case 'F':				STACKOUT(0, TFLOAT);				break;			case 'D':				STACKOUT(0, TDOUBLE);				STACKOUT(1, TVOID);				break;			case 'V':			default:				break;			}			INCPC(3);			break;		case INVOKEINTERFACE:			if (getMethodSignatureClass(WORD(pc+1), meth->class, true, false, &call, einfo) == false) {				if (!checkNoClassDefFoundError(einfo) || call.signature == 0) {					goto done_fail;				}			}			if (METHOD_TRANSLATED(meth))				goto done_fail;			sig = call.signature->data;			assert(sig[0] == '(');			sig++;			idx = call.in;			STACKIN(idx, TOBJ);			idx -= 1;			while (sig[0] != ')') {				switch (sig[0]) {				case '[':					STACKIN(idx, TOBJ);					idx -= 1;					while (sig[0] == '[') {						sig++;					}					if (sig[0] == 'L') {						while (sig[0] != ';') {							sig++;						}					}					sig++;					break;				case 'L':					STACKIN(idx, TOBJ);					idx -= 1;					while (sig[0] != ';') {						sig++;					}					sig++;					break;				case 'I':				case 'Z':				case 'S':				case 'B':				case 'C':					STACKIN(idx, TINT);					idx -= 1;					sig++;					break;				case 'J':					STACKIN(idx-1, TLONG);					STACKIN(idx, TVOID);					idx -= 2;					sig++;					break;				case 'F':					STACKIN(idx, TFLOAT);					idx -= 1;					sig++;					break;				case 'D':					STACKIN(idx-1, TDOUBLE);					STACKIN(idx, TVOID);					idx -= 2;					sig++;					break;				default:					assert("Signature character unknown" == 0);				}			}			STKPOP(call.in+1);			STKPUSH(call.out);			switch (call.rettype) {			case '[':			case 'L':				STACKOUT(0, TOBJ);				break;			case 'I':			case 'Z':			case 'S':			case 'B':			case 'C':				STACKOUT(0, TINT);				break;			case 'J':				STACKOUT(0, TLONG);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -