def op_0xc0(frame): # checkcast index = (ord(frame.code[frame.pc]) << 8) + ord(frame.code[frame.pc + 1]) frame.pc += 2 ref = frame.stack.pop() if ref is None: frame.stack.append(ref) return cp_item = frame.this_class.constant_pool[index] assert cp_item[0] == 7 # CONSTANT_Class_info klass_name = frame.this_class.constant_pool[cp_item[1]][1] klass = frame.vm.get_class(klass_name) object_klass = None if ref[1] > 0: # regular ref o = frame.vm.heap[ref[1]] object_klass = o.java_class else: # vmo object_klass = frame.vm.get_class(VM_CLASS_NAMES[ref[1]]) if checkcast(object_klass, klass, frame.vm): frame.stack.append(ref) else: frame.vm.raise_exception(frame, "java/lang/ClassCastException")
def instanceof(frame): index = (ord(frame.code[frame.pc]) << 8) + ord(frame.code[frame.pc + 1]) frame.pc += 2 ref = frame.stack.pop() if ref is None: frame.stack.append(0) return cp_item = frame.this_class.constant_pool[index] assert cp_item[0] == 7 # CONSTANT_Class_info klass_name = frame.this_class.constant_pool[cp_item[1]][1] klass = frame.vm.get_class(klass_name) o = frame.vm.heap[ref[1]] object_klass = None if ref[1] > 0: # regular ref o = frame.vm.heap[ref[1]] object_klass = o.java_class else: # vmo object_klass = frame.vm.get_class(VM_CLASS_NAMES[ref[1]]) if checkcast(object_klass, klass, frame.vm): frame.stack.append(1) else: frame.stack.append(0)
def checkcast_( frame ): # FIXME: rename pyjvm.checkcast and rename this func to checkcast index = (ord(frame.code[frame.pc]) << 8) + ord(frame.code[frame.pc + 1]) frame.pc += 2 ref = frame.stack.pop() if ref is None: frame.stack.append(ref) return cp_item = frame.this_class.constant_pool[index] assert cp_item[0] == 7 # CONSTANT_Class_info klass_name = frame.this_class.constant_pool[cp_item[1]][1] klass = frame.vm.get_class(klass_name) object_klass = None if ref[1] > 0: # regular ref o = frame.vm.heap[ref[1]] object_klass = o.java_class else: # vmo object_klass = frame.vm.get_class(VM_CLASS_NAMES[ref[1]]) if checkcast(object_klass, klass, frame.vm): frame.stack.append(ref) else: frame.vm.raise_exception(frame, "java/lang/ClassCastException")