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

📄 kaffe.def

📁 基于LWVCL开发的库
💻 DEF
📖 第 1 页 / 共 5 页
字号:
		softcall_nosuchclass(method_classname());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	/* If method doesn't exist, call 'NoSuchMethodError' */	else if (method_method() == 0) {		softcall_nosuchmethod(method_class(), method_name(), method_sig());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (method_method()->accflags & ACC_STATIC) {		softcall_incompatibleclasschange(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (method_class()->accflags & ACC_INTERFACE) {		softcall_incompatibleclasschange(method_classname(),						 method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if ( (method_method()->accflags & ACC_ABSTRACT) != 0 &&		  (method_class()->accflags & ACC_ABSTRACT) == 0 ) {		softcall_abstractmethod(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (!checkMethodAccess(current_class(),				    method_class(),				    method_method())) {		softcall_illegalaccess(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else {		int is_virtual = method_method()->idx >= 0;		if (is_virtual) {			slot_alloctmp(tmp);		}#ifdef TRANSLATOR		else {			tmp = NULL;	/* for compiler warning */		}#endif		idx = method_nargs();		check_null(INVOKEVIRTUAL, stack(idx), 34);		check_stack_ref(idx);		if( !is_virtual &&		    METHOD_TRANSLATED(method_method()) &&		    ( (void (*) (void)) (METHOD_NATIVECODE(method_method())) == soft_null_call) )		{			idx += 1;			pop(idx);		}		else		{			if (is_virtual) {				/* Find dispatch table in object */				load_offset_ref(tmp, stack(idx),						method_dtable_offset);								/* Check method table for cached entry */				load_offset_ref(tmp, tmp,						DTABLE_METHODOFFSET + 						method_idx() *						DTABLE_METHODSIZE);			} else {				/* Explicitly check that object is non-null.				 * Implicitly done in the dispatch table				 * lookup.				 */				explicit_check_null(INVOKEVIRTUAL,						    stack(idx),						    35);			}						/* Push arguments & object */			build_call_frame(method_sig(), stack(idx), idx);			idx++;						if (is_virtual) {				slot_nowriteback(tmp);			}			pop(idx);			begin_func_sync();						/* Call it */			low = method_returntype();			if (is_virtual) {				call(tmp);				slot_freetmp(tmp);			} else {				call_indirect_method(method_method());			}						/* Pop args */			popargs();						end_func_sync();			METHOD_RETURN_VALUE();		}	}}define_insn_finidefine_insn(INVOKESPECIAL){	/*	 * ..., obj, ..args.., -> ...	 */	check_pcidx (0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("invokespecial %d\n", idx);	get_special_method_info_noerror(idx);	/* If class doesn't exist, call 'NoSuchClassError' */	if (method_class() == 0) {		softcall_nosuchclass(method_classname());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	/* If method doesn't exist, call 'NoSuchMethodError' */	else if (method_method() == 0) {		softcall_nosuchmethod(method_class(), method_name(), method_sig());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (method_class()->accflags & ACC_INTERFACE) {		softcall_incompatibleclasschange(method_classname(),						 method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if ((method_method()->kFlags & KFLAG_CONSTRUCTOR) &&		 (method_method()->class != method_class())) {		/* XXX I think this test is wrong. */		softcall_nosuchmethod(method_class(), method_name(), method_sig());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (method_method()->accflags & ACC_STATIC) {		softcall_incompatibleclasschange(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if ( (method_method()->accflags & ACC_ABSTRACT) != 0 &&		  (method_class()->accflags & ACC_ABSTRACT) == 0 ) {		softcall_abstractmethod(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else if (!checkMethodAccess(current_class(),				    method_class(),				    method_method())) {		softcall_illegalaccess(method_classname(), method_name());		low = method_returntype();		pop(method_nargs() + 1);		METHOD_RETURN_VALUE();	}	else {		idx = method_nargs();		explicit_check_null(INVOKESPECIAL, stack(idx), 34);		check_stack_ref(idx);		if( METHOD_TRANSLATED(method_method()) &&		    ( (void (*) (void)) (METHOD_NATIVECODE(method_method())) == soft_null_call) )		{			idx += 1;			pop(idx);		}		else		{			/* Push arguments & object */			build_call_frame(method_sig(), stack(idx), idx);			idx++;						pop(idx);			begin_func_sync();						/* Call it */			low = method_returntype();						call_indirect_method(method_method());						/* Pop args */			popargs();						end_func_sync();			METHOD_RETURN_VALUE();		}	}}define_insn_finidefine_insn(INVOKESTATIC){	/*	 * ..., ..args.., -> ...	 */	check_pcidx (0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("invokestatic %d\n", idx);	get_method_info_noerror(idx);	/* If class doesn't exist, call 'NoSuchClassError' */	if (method_class() == 0) {		softcall_nosuchclass(method_classname());		low = method_returntype();		pop(method_nargs());		METHOD_RETURN_VALUE();	}	/* If method doesn't exist, call 'NoSuchMethodError' */	else if (method_method() == 0) {		softcall_nosuchmethod(method_class(), method_name(), method_sig());		low = method_returntype();		pop(method_nargs());		METHOD_RETURN_VALUE();	}	else if (!(method_method()->accflags & ACC_STATIC)) {		softcall_incompatibleclasschange(method_classname(), method_name());		low = method_returntype();		pop(method_nargs());		METHOD_RETURN_VALUE();	}	else if (!checkMethodAccess(current_class(),				    method_class(),				    method_method())) {		softcall_illegalaccess(method_classname(), method_name());		low = method_returntype();		pop(method_nargs());		METHOD_RETURN_VALUE();	}	else {		idx = method_nargs();		if( METHOD_TRANSLATED(method_method()) &&		    ( (void (*) (void)) (METHOD_NATIVECODE(method_method())) == soft_null_call) )		{			pop(idx);		}		else		{			/* Push arguments */			build_call_frame(method_sig(), NULL, idx);						pop(idx);			begin_func_sync();						/* Call it */			low = method_returntype();						call_indirect_method(method_method());						/* Pop args */			popargs();						end_func_sync();			METHOD_RETURN_VALUE();		}	}}define_insn_finidefine_insn(INVOKEINTERFACE){	Method *m;	/*	 * ..., obj, ..args.., -> ...	 */	check_pcidx (0);	check_pc (2);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("invokeinterface %d\n", idx);	get_interface_method_info_noerror(idx);	/* If class doesn't exist, call 'NoSuchClassError' */	if (method_class() == 0) {		softcall_nosuchclass(method_classname());		low = method_returntype();		pop((uint8)getpc(2));		METHOD_RETURN_VALUE();	}	/* If method doesn't exist, call 'NoSuchMethodError' */	else if (method_method() == 0) {		softcall_nosuchmethod(method_class(), method_name(), method_sig());		low = method_returntype();		pop((uint8)getpc(2));		METHOD_RETURN_VALUE();	}	else if (!(method_class()->accflags & ACC_INTERFACE)) {		softcall_incompatibleclasschange(method_classname(),						 method_name());		low = method_returntype();		pop((uint8)getpc(2));		METHOD_RETURN_VALUE();	}	else {		idx = (uint8)getpc(2) - 1;		/*		 * if we invoke a method from java.lang.Object, we can directly use the		 * dispatch table.		 */		m = findMethodLocal(ObjectClass, method_method()->name, method_sig());		check_null(INVOKEINTERFACE, stack(idx), 34);		check_stack_ref(idx);		slot_alloctmp(tmp);		if (m != NULL) {			/* Find dispatch table in object */			load_offset_ref(tmp, stack(idx),					method_dtable_offset);			/* Check method table for cached entry */			load_offset_ref(tmp, tmp,					DTABLE_METHODOFFSET + 					m->idx *					DTABLE_METHODSIZE);		} else {			const Method const * method = method_method();			softcall_lookupinterfacemethod(tmp, method, stack(idx));		}				/* Push arguments & object */		build_call_frame(method_sig(), stack(idx), idx);		idx++;		slot_nowriteback(tmp);		pop(idx);		begin_func_sync();		/* Call it */		low = method_returntype();		call(tmp);		slot_freetmp(tmp);		/* Pop args */		popargs();				end_func_sync();		METHOD_RETURN_VALUE();	}}define_insn_finidefine_insn(NEW){	/*	 * ... ->  ..., object ref	 */	check_pcidx (0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("new %d\n", idx);	get_class_info_noerror(idx);	push(1);	if (class_object() == 0) {		softcall_nosuchclass(class_name(idx));	}	else {		softcall_new(stack(0), class_object());	}}define_insn_finidefine_insn(NEWARRAY){	/*	 * ... size ->  ..., object ref	 */	check_pc (0);	check_stack_int(0);	low = (uint8)getpc(0);	trace_jcode ("newarray %d\n", low);	softcall_newarray(stack(0), stack(0), low);}define_insn_finidefine_insn(ANEWARRAY){	/*	 * ... size ->  ..., object ref	 */	check_pcidx (0);	check_stack_int(0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("anewarray %d\n", idx);	get_class_info_noerror(idx);	if (class_object() == 0) {		softcall_nosuchclass(class_name(idx));	}	else {		softcall_anewarray(stack(0), stack(0), class_object());	}}define_insn_finidefine_insn(ARRAYLENGTH){	/*	 * ..., obj -> ..., length	 */	trace_jcode ("arraylength\n");	check_null(ARRAYLENGTH, rstack(0), 34);	check_stack_array(0);	load_offset_int(stack(0), rstack(0), object_array_length);}define_insn_finidefine_insn(ATHROW){	/*	 * ..., obj -> undefined	 */	trace_jcode ("athrow\n");	check_null(ATHROW, rstack(0), 34);	check_stack_ref(0);	softcall_athrow(rstack(0));}define_insn_finidefine_insn(CHECKCAST){	/*	 * ..., obj -> ..., obj	 */	check_pcidx (0);	check_stack_ref(0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("checkcast %d\n", idx);	get_class_info_noerror(idx);	if (class_object() == 0) {		softcall_nosuchclass(class_name(idx));	}	else {		softcall_checkcast(stack(0), rstack(0), class_object());	}}define_insn_finidefine_insn(INSTANCEOF){	/*	 * ..., obj -> ..., result	 */	check_pcidx (0);	check_stack_ref(0);	idx = (uint16)((getpc(0) << 8) | getpc(1));	trace_jcode ("instanceof %d\n", idx);	get_class_info_noerror(idx);	if (class_object() == 0) {		softcall_nosuchclass(class_name(idx));	}	else {		softcall_instanceof(stack(0), rstack(0), class_object());	}}define_insn_finidefine_insn(MONITORENTER){	/*	 * ... obj -> ...	 */	trace_jcode ("monitorenter\n");	check_null(MONITORENTER, rstack(0), 34);	check_stack_ref(0);	begin_func_sync();	softcall_monitorenter(rstack(0));	pop(1);	end_func_sync();}define_insn_finidefine_insn(MONITOREXIT){	/*	 * ... obj -> ...	 */	trace_jcode ("monitorexit\n");	check_null(MONITOREXIT, rstack(0), 34);	check_stack_ref(0);	begin_func_sync();	softcall_monitorexit(rstack(0));	pop(1);	end_func_sync();}define_insn_finidefine_insn(WIDE){	/* Move PC to widened instruction */	pc = npc;	npc = pc + insnLen[getopcode()] + 1;	switch(getopcode()) {	default:		KAFFEVM_ABORT();	define_wide_insn(ILOAD)	{		/*		 * ..., -> ..., local variable		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide iload %d\n", idx);		check_local_int(idx); 		push(1);		move_int(stack(0), local(idx));	}	define_wide_insn(FLOAD)	{		/*		 * ..., -> ..., local variable		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide fload %d\n", idx);		check_local_float(idx); 		push(1);		move_float(stack(0), local_float(idx));	}	define_wide_insn(ALOAD)	{		/*		 * ..., -> ..., local variable		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide aload %d\n", idx);                		check_local_ref(idx);   		push(1);		move_ref(stack(0), local(idx));	}	define_wide_insn(LLOAD)	{		/*      		 * ..., -> ..., long local variable		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide lload %d\n", idx);                		check_local_long(idx);		push(2);		move_long(stack_long(0), local_long(idx));	}	define_wide_insn(DLOAD)	{		/*      		 * ..., -> ..., double local variable		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide dload %d\n", idx);                		check_local_double(idx);		push(2);		move_double(stack_double(0), local_double(idx));	}	define_wide_insn(ISTORE)	{		/*      		 * ..., var -> ...		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide istore %d\n", idx);		check_stack_int(0);         		move_int(local(idx), stack(0));		pop(1); 	}	define_wide_insn(FSTORE)	{		/*      		 * ..., var -> ...		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide fstore %d\n", idx); 		check_stack_float(0);         		move_float(local_float(idx), stack(0));		pop(1); 	}	define_wide_insn(ASTORE)	{		/*		 * ..., var -> ...		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide astore %d\n", idx);		check_stack_ref(0);		move_ref(local(idx), stack(0));		pop(1);	}	define_wide_insn(LSTORE)	{		/*      		 * ..., long var -> ...		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide lstore %d\n", idx);		check_stack_long(0); 		move_long(local_long(idx), stack_long(0));		pop(2);	}	define_wide_insn(DSTORE)	{		/*      		 * ..., var -> ...		 */		check_pcidx (0);		idx = (uint16)((getpc(0) << 8) | getpc(1));		trace_jcode ("wide dstore %d\n", idx);		check_stack_double(0); 		move_double(local_double(idx), stack_double(0));		pop(2);	}	define_wide_insn(IINC)	{		check_pcidx (0);		check_pcidx (2);		idx = (uint16)((getpc(0) << 8) | getpc(1));		low = (int16)((getpc(2) << 8) | getpc(3));		trace_jcode ("wide iinc %d %d\n", idx, low);		check_local_int(idx);		add_int_const(local(idx), local(idx),

⌨️ 快捷键说明

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