diff --git a/direct/src/dcparser/dcClass.cxx b/direct/src/dcparser/dcClass.cxx index 987a0bfa80..08b14b1997 100644 --- a/direct/src/dcparser/dcClass.cxx +++ b/direct/src/dcparser/dcClass.cxx @@ -321,9 +321,11 @@ void DCClass:: pack_required_field(Datagram &dg, PyObject *distobj, DCField *field) const { DCAtomicField *atom = field->as_atomic_field(); if (atom == (DCAtomicField *)NULL) { - cerr << "Cannot pack non-atomic field " << field->get_name() - << " for generate\n"; - nassertv(false); + ostringstream strm; + strm << "Cannot pack non-atomic field " << field->get_name() + << " for generate"; + nassert_raise(strm.str()); + return; } // We need to get the initial value of this field. There isn't a @@ -335,15 +337,18 @@ pack_required_field(Datagram &dg, PyObject *distobj, DCField *field) const { if (atom->get_num_elements() == 0) { // It sure doesn't make sense to have a required field with no // parameters. What data, exactly, is required? - cerr << "Required field " << set_name << " has no parameters!\n"; - nassertv(false); + ostringstream strm; + strm << "Required field " << set_name << " has no parameters!"; + nassert_raise(strm.str()); + return; } if (set_name.substr(0, 3) != "set") { // This is required to suit our set/get mangling convention. - cerr << "Required field " << set_name - << " does not begin with 'set'\n"; - nassertv(false); + ostringstream strm; + strm << "Required field " << set_name << " does not begin with 'set'"; + nassert_raise(strm.str()); + return; } string get_name = set_name; get_name[0] = 'g'; @@ -351,9 +356,11 @@ pack_required_field(Datagram &dg, PyObject *distobj, DCField *field) const { // Now we have to look up the getter on the distributed object // and call it. if (!PyObject_HasAttrString(distobj, (char *)get_name.c_str())) { - cerr << "Required field " << set_name - << " doesn't have matching field named " << get_name << "\n"; - nassertv(false); + ostringstream strm; + strm << "Required field " << set_name + << " doesn't have matching field named " << get_name; + nassert_raise(strm.str()); + return; } PyObject *func = PyObject_GetAttrString(distobj, (char *)get_name.c_str()); @@ -471,9 +478,11 @@ ai_format_generate(PyObject *distobj, int do_id, DCField *field = get_field_by_name(field_name); if (field == (DCField *)NULL) { - cerr << "No field named " << field_name << " in class " << get_name() + ostringstream strm; + strm << "No field named " << field_name << " in class " << get_name() << "\n"; - nassertr(false, Datagram()); + nassert_raise(strm.str()); + return Datagram(); } pack_required_field(dg, distobj, field); diff --git a/direct/src/dcparser/dcField.cxx b/direct/src/dcparser/dcField.cxx index a3193ce51b..3ffe931924 100644 --- a/direct/src/dcparser/dcField.cxx +++ b/direct/src/dcparser/dcField.cxx @@ -19,6 +19,7 @@ #include "dcField.h" #include "hashGenerator.h" #include "dcmsgtypes.h" +#include "notify.h" //////////////////////////////////////////////////////////////////// // Function: DCField::get_number @@ -79,7 +80,12 @@ pack_args(Datagram &datagram, PyObject *tuple) const { nassertv(PySequence_Check(tuple)); int index = 0; bool enough_args = do_pack_args(datagram, tuple, index); - nassertv(enough_args && index == PySequence_Size(tuple)); + if (!enough_args || index != PySequence_Size(tuple)) { + ostringstream strm; + strm << "Wrong number of arguments to field " << get_name(); + nassert_raise(strm.str()); + return; + } } #endif // HAVE_PYTHON