static void *createStringObject(const redisReadTask *task, char *str, size_t len) { volatile VALUE v, enc; v = rb_str_new(str,len); /* Force default external encoding if possible. */ if (enc_default_external) { enc = rb_funcall(enc_klass,enc_default_external,0); v = rb_funcall(v,str_force_encoding,1,enc); } if (task->type == REDIS_REPLY_ERROR) { v = rb_funcall(rb_eRuntimeError,rb_intern("new"),1,v); } return tryParentize(task,v); }
static void *createStringObject(const redisReadTask *task, char *str, size_t len) { pythonReader *self = (pythonReader*)task->privdata; PyObject *obj; if (task->type == REDIS_REPLY_ERROR) { PyObject *args = Py_BuildValue("(s#)", str, len); assert(args != NULL); /* TODO: properly handle OOM etc */ obj = PyObject_CallObject(self->replyErrorClass, args); assert(obj != NULL); Py_DECREF(args); } else { obj = createDecodedString(self, str, len); } return tryParentize(task, obj); }
static void *createNilObject(const redisReadTask *task) { return tryParentize(task,Qnil); }
static void *createIntegerObject(const redisReadTask *task, long long value) { volatile VALUE v = LL2NUM(value); return tryParentize(task,v); }
static void *createArrayObject(const redisReadTask *task, int elements) { volatile VALUE v = rb_ary_new2(elements); return tryParentize(task,v); }
static void *createNilObject(const redisReadTask *task) { PyObject *obj = Py_None; Py_INCREF(obj); return tryParentize(task, obj); }
static void *createIntegerObject(const redisReadTask *task, long long value) { PyObject *obj; obj = PyLong_FromLongLong(value); return tryParentize(task, obj); }
static void *createArrayObject(const redisReadTask *task, int elements) { PyObject *obj; obj = PyList_New(elements); return tryParentize(task, obj); }