Exemplo n.º 1
0
 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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 def pos_exc_value():
     addr = llop.get_exc_value_addr(llmemory.Address)
     return heaptracker.adr2int(addr)
Exemplo n.º 6
0
 def pos_exc_value():
     addr = llop.get_exc_value_addr(llmemory.Address)
     return heaptracker.adr2int(addr)
Exemplo n.º 7
0
 def pos_exc_value():
     addr = llop.get_exc_value_addr(llmemory.Address)
     return llmemory.cast_adr_to_int(addr)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 def pos_exc_value():
     addr = llop.get_exc_value_addr(llmemory.Address)
     return llmemory.cast_adr_to_int(addr)