From 0aa1fa097e491a5436f1a9c4ca7bdedc16936341 Mon Sep 17 00:00:00 2001 From: Robert Nishihara Date: Fri, 3 Jun 2016 16:42:57 -0700 Subject: [PATCH] fix bug in which bools were being serialized as ints by serializing bools before serializing ints (#80) --- src/orchpylib.cc | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/orchpylib.cc b/src/orchpylib.cc index 10bceb9c7..ffc773264 100644 --- a/src/orchpylib.cc +++ b/src/orchpylib.cc @@ -187,7 +187,15 @@ void TaskCapsule_Destructor(PyObject* capsule) { // FIXME(pcm): This currently only works for contiguous arrays // This method will push all of the object references contained in `obj` to the `objrefs` vector. int serialize(PyObject* worker_capsule, PyObject* val, Obj* obj, std::vector &objrefs) { - if (PyInt_Check(val)) { + if (PyBool_Check(val)) { + // The bool case must precede the int case because PyInt_Check passes for bools + Bool* data = obj->mutable_bool_data(); + if (val == Py_False) { + data->set_data(false); + } else { + data->set_data(true); + } + } else if (PyInt_Check(val)) { Int* data = obj->mutable_int_data(); long d = PyInt_AsLong(val); data->set_data(d); @@ -195,13 +203,6 @@ int serialize(PyObject* worker_capsule, PyObject* val, Obj* obj, std::vectormutable_double_data(); double d = PyFloat_AsDouble(val); data->set_data(d); - } else if (PyBool_Check(val)) { - Bool* data = obj->mutable_bool_data(); - if (val == Py_False) { - data->set_data(false); - } else { - data->set_data(true); - } } else if (PyTuple_Check(val)) { Tuple* data = obj->mutable_tuple_data(); for (size_t i = 0, size = PyTuple_Size(val); i < size; ++i) {