def foo(): # a bit hard to test, really a = llop.get_exception_addr(llmemory.Address) assert lltype.typeOf(a) is llmemory.Address a = llop.get_exc_value_addr(llmemory.Address) assert lltype.typeOf(a) is llmemory.Address return 42
def foo(): # a bit hard to test, really a = llop.get_exception_addr(llmemory.Address) assert lltype.typeOf(a) is llmemory.Address a = llop.get_exc_value_addr(llmemory.Address) assert lltype.typeOf(a) is llmemory.Address return 42
def save_exception(): addr = llop.get_exception_addr(llmemory.Address) addr.address[0] = llmemory.NULL addr = llop.get_exc_value_addr(llmemory.Address) exc_value = rffi.cast(llmemory.GCREF, addr.address[0]) addr.address[0] = llmemory.NULL # from now on, the state is again consistent -- no more RPython # exception is set. The following code produces a write barrier # in the assignment to self.saved_exc_value, as needed. self.saved_exc_value = exc_value
def save_exception(): addr = llop.get_exception_addr(llmemory.Address) addr.address[0] = llmemory.NULL addr = llop.get_exc_value_addr(llmemory.Address) exc_value = rffi.cast(llmemory.GCREF, addr.address[0]) addr.address[0] = llmemory.NULL # from now on, the state is again consistent -- no more RPython # exception is set. The following code produces a write barrier # in the assignment to self.saved_exc_value, as needed. self.saved_exc_value = exc_value
def pos_exception(): addr = llop.get_exception_addr(llmemory.Address) return heaptracker.adr2int(addr)
def pos_exception(): addr = llop.get_exception_addr(llmemory.Address) return heaptracker.adr2int(addr)
def pos_exception(): addr = llop.get_exception_addr(llmemory.Address) return llmemory.cast_adr_to_int(addr)
def setup_once(self): if not we_are_translated(): llvm_rffi.teardown_now() llvm_rffi.LLVM_SetFlags() self.module = llvm_rffi.LLVMModuleCreateWithName("pypyjit") if self.size_of_int == 4: self.ty_int = llvm_rffi.LLVMInt32Type() else: self.ty_int = llvm_rffi.LLVMInt64Type() if self.size_of_unicode == 2: self.ty_unichar = llvm_rffi.LLVMInt16Type() else: self.ty_unichar = llvm_rffi.LLVMInt32Type() self.ty_void = llvm_rffi.LLVMVoidType() self.ty_bit = llvm_rffi.LLVMInt1Type() self.ty_char = llvm_rffi.LLVMInt8Type() self.ty_char_ptr = llvm_rffi.LLVMPointerType(self.ty_char, 0) self.ty_char_ptr_ptr = llvm_rffi.LLVMPointerType(self.ty_char_ptr, 0) self.ty_int_ptr = llvm_rffi.LLVMPointerType(self.ty_int, 0) self.ty_int_ptr_ptr = llvm_rffi.LLVMPointerType(self.ty_int_ptr, 0) self.ty_unichar_ptr = llvm_rffi.LLVMPointerType(self.ty_unichar, 0) self.const_zero = self._make_const_int(0) self.const_one = self._make_const_int(1) self.const_null_charptr = self._make_const(0, self.ty_char_ptr) # from pypy.jit.backend.llvm.compile import LLVMJITCompiler self.types_by_index = [self.ty_char_ptr, # SIZE_GCPTR self.ty_int, # SIZE_INT self.ty_char, # SIZE_CHAR self.ty_unichar] # SIZE_UNICHAR self.types_ptr_by_index = [self.ty_char_ptr_ptr, # SIZE_GCPTR self.ty_int_ptr, # SIZE_INT self.ty_char_ptr, # SIZE_CHAR self.ty_unichar_ptr] # SIZE_UNICHAR self.getarg_by_index = [LLVMJITCompiler.getptrarg, # SIZE_GCPTR LLVMJITCompiler.getintarg, # SIZE_INT LLVMJITCompiler.getchararg, # SIZE_CHAR LLVMJITCompiler.getunichararg] # SIZE_UNICHAR for i in range(len(self.types_by_index)): arraydescr = self._arraydescrs[i] (arraydescr.ty_array_ptr, self.const_array_index_length, self.const_array_index_array) = \ self._build_ty_array_ptr(self.array_index_array, self.types_by_index[i], self.array_index_length) (self.ty_string_ptr, self.const_string_index_length, self.const_string_index_array) = \ self._build_ty_array_ptr(self.string_index_array, self.ty_char, self.string_index_length) (self.ty_unicode_ptr, self.const_unicode_index_length, self.const_unicode_index_array) = \ self._build_ty_array_ptr(self.unicode_index_array, self.ty_unichar, self.unicode_index_length) # arglist = lltype.malloc(rffi.CArray(llvm_rffi.LLVMTypeRef), 0, flavor='raw') self.ty_func = llvm_rffi.LLVMFunctionType(self.ty_int, arglist, 0, False) lltype.free(arglist, flavor='raw') # self.f_add_ovf = llvm_rffi.LLVM_Intrinsic_add_ovf(self.module, self.ty_int) self.f_sub_ovf = llvm_rffi.LLVM_Intrinsic_sub_ovf(self.module, self.ty_int) self.f_mul_ovf = llvm_rffi.LLVM_Intrinsic_mul_ovf(self.module, self.ty_int) if we_are_translated(): addr = llop.get_exception_addr(llmemory.Address) self.exc_type = rffi.cast(rffi.CArrayPtr(lltype.Signed), addr) addr = llop.get_exc_value_addr(llmemory.Address) self.exc_value = rffi.cast(rffi.CArrayPtr(llmemory.GCREF), addr) else: self.exc_type = lltype.malloc(rffi.CArray(lltype.Signed), 1, zero=True, flavor='raw') self.exc_value = lltype.malloc(rffi.CArray(llmemory.GCREF), 1, zero=True, flavor='raw') self.backup_exc_type = lltype.malloc(rffi.CArray(lltype.Signed), 1, zero=True, flavor='raw') self.backup_exc_value = lltype.malloc(rffi.CArray(llmemory.GCREF), 1, zero=True, flavor='raw') self.const_exc_type = self._make_const(self.exc_type, self.ty_char_ptr_ptr) self.const_exc_value = self._make_const(self.exc_value, self.ty_char_ptr_ptr) self.const_backup_exc_type = self._make_const(self.backup_exc_type, self.ty_char_ptr_ptr) self.const_backup_exc_value = self._make_const(self.backup_exc_value, self.ty_char_ptr_ptr) # self._setup_prebuilt_error('ovf') self._setup_prebuilt_error('zer') # # temporary (Boehm only) param_types = lltype.malloc(rffi.CArray(llvm_rffi.LLVMTypeRef), 1, flavor='raw') param_types[0] = self.ty_int self.ty_malloc_fn = llvm_rffi.LLVMPointerType( llvm_rffi.LLVMFunctionType(self.ty_char_ptr, param_types, 1, 0), 0) lltype.free(param_types, flavor='raw') # self.ee = llvm_rffi.LLVM_EE_Create(self.module) if not we_are_translated(): llvm_rffi.set_teardown_function(self._teardown)
def pos_exception(): addr = llop.get_exception_addr(llmemory.Address) return llmemory.cast_adr_to_int(addr)