def parse_tuple(self, lstr, llvm_tuple, types, name=''): "Unpack a Python tuple into typed llvm variables" lresults = [] for i, type in enumerate(types): var = llvm_alloca(self.translator.lfunc, self.builder, type.to_llvm(self.context), name=name and "%s%d" % (name, i)) lresults.append(var) largs = [llvm_tuple, lstr] + lresults if debug.debug_conversion: self.translator.puts("parsing tuple... %s" % (types, )) nodes.print_llvm(self.translator.env, object_, llvm_tuple) parse_result = self.builder.call(self.pyarg_parsetuple, largs) self.check_err_int(parse_result, 0) # Some conversion functions don't reset the exception state... # self.builder.call(self.pyerr_clear, []) if debug.debug_conversion: self.translator.puts("successfully parsed tuple...") return [self.builder.load(result) for result in lresults]
def parse_tuple(self, lstr, llvm_tuple, types, name=''): "Unpack a Python tuple into typed llvm variables" lresults = [] for i, type in enumerate(types): var = llvm_alloca(self.translator.lfunc, self.builder, type.to_llvm(self.context), name=name and "%s%d" % (name, i)) lresults.append(var) largs = [llvm_tuple, lstr] + lresults if debug_conversion: self.translator.puts("parsing tuple... %s" % (types,)) nodes.print_llvm(self.translator, object_, llvm_tuple) parse_result = self.builder.call(self.pyarg_parsetuple, largs) self.check_err_int(parse_result, 0) # Some conversion functions don't reset the exception state... # self.builder.call(self.pyerr_clear, []) if debug_conversion: self.translator.puts("successfully parsed tuple...") return [self.builder.load(result) for result in lresults]
def convert_single(self, type, llvm_result, name=''): "Generate code to convert an LLVM value to a Python object" llvm_result, type = self.npy_intp_to_py_ssize_t(llvm_result, type) if type.is_struct: return self.convert_single_struct(llvm_result, type) elif type.is_complex: # We have a Py_complex value, construct a Py_complex * temporary new_result = llvm_alloca(self.translator.lfunc, self.builder, llvm_result.type, name='complex_temp') self.builder.store(llvm_result, new_result) llvm_result = new_result return self.buildvalue([type], llvm_result, name=name)