Browse Source

Merge branch 'master' into local/cmake-merge

Sam Edwards 7 years ago
parent
commit
ed2b3017d4
100 changed files with 311 additions and 405 deletions
  1. 2 0
      contrib/src/rplight/iesDataset.cxx
  2. 2 0
      contrib/src/rplight/pssmCameraRig.cxx
  3. 2 0
      contrib/src/rplight/rpSpotLight.cxx
  4. 27 39
      dtool/src/interrogate/interfaceMakerPythonNative.cxx
  5. 3 3
      dtool/src/interrogatedb/dtool_super_base.cxx
  6. 0 2
      dtool/src/interrogatedb/py_compat.cxx
  7. 37 4
      dtool/src/interrogatedb/py_compat.h
  8. 31 0
      dtool/src/interrogatedb/py_panda.I
  9. 2 142
      dtool/src/interrogatedb/py_panda.cxx
  10. 6 21
      dtool/src/interrogatedb/py_panda.h
  11. 2 0
      dtool/src/parser-inc/stdlib.h
  12. 2 0
      dtool/src/pystub/pystub.cxx
  13. 3 1
      makepanda/makepanda.py
  14. 1 0
      panda/src/char/characterSlider.h
  15. 2 2
      panda/src/cocoadisplay/config_cocoadisplay.h
  16. 2 2
      panda/src/cocoadisplay/config_cocoadisplay.mm
  17. 1 1
      panda/src/display/nativeWindowHandle.h
  18. 2 2
      panda/src/egg/config_egg.cxx
  19. 16 16
      panda/src/egg/config_egg.h
  20. 1 1
      panda/src/egg/eggAnimData.h
  21. 1 1
      panda/src/egg/eggAnimPreload.h
  22. 1 1
      panda/src/egg/eggAttributes.h
  23. 1 1
      panda/src/egg/eggBin.h
  24. 2 2
      panda/src/egg/eggBinMaker.h
  25. 1 1
      panda/src/egg/eggComment.h
  26. 4 4
      panda/src/egg/eggCompositePrimitive.cxx
  27. 1 1
      panda/src/egg/eggCompositePrimitive.h
  28. 1 1
      panda/src/egg/eggCoordinateSystem.h
  29. 1 1
      panda/src/egg/eggCurve.h
  30. 1 1
      panda/src/egg/eggData.h
  31. 1 1
      panda/src/egg/eggExternalReference.h
  32. 1 1
      panda/src/egg/eggFilenameNode.h
  33. 1 1
      panda/src/egg/eggGroup.h
  34. 1 1
      panda/src/egg/eggGroupNode.h
  35. 1 1
      panda/src/egg/eggGroupUniquifier.h
  36. 1 1
      panda/src/egg/eggLine.h
  37. 2 2
      panda/src/egg/eggMaterial.h
  38. 1 1
      panda/src/egg/eggMaterialCollection.h
  39. 2 2
      panda/src/egg/eggMorph.h
  40. 6 6
      panda/src/egg/eggMorphList.cxx
  41. 1 1
      panda/src/egg/eggNameUniquifier.h
  42. 1 1
      panda/src/egg/eggNamedObject.h
  43. 1 1
      panda/src/egg/eggNode.h
  44. 1 1
      panda/src/egg/eggNurbsCurve.h
  45. 1 1
      panda/src/egg/eggNurbsSurface.h
  46. 1 1
      panda/src/egg/eggObject.h
  47. 2 2
      panda/src/egg/eggParameters.h
  48. 1 1
      panda/src/egg/eggPatch.h
  49. 1 1
      panda/src/egg/eggPoint.h
  50. 1 1
      panda/src/egg/eggPolygon.h
  51. 1 1
      panda/src/egg/eggPolysetMaker.h
  52. 1 1
      panda/src/egg/eggPoolUniquifier.h
  53. 3 5
      panda/src/egg/eggPrimitive.cxx
  54. 1 1
      panda/src/egg/eggPrimitive.h
  55. 6 6
      panda/src/egg/eggRenderMode.h
  56. 1 1
      panda/src/egg/eggSAnimData.h
  57. 1 1
      panda/src/egg/eggSurface.h
  58. 2 2
      panda/src/egg/eggSwitchCondition.h
  59. 1 1
      panda/src/egg/eggTable.h
  60. 14 14
      panda/src/egg/eggTexture.h
  61. 1 1
      panda/src/egg/eggTextureCollection.h
  62. 1 1
      panda/src/egg/eggTransform.h
  63. 1 1
      panda/src/egg/eggTriangleFan.cxx
  64. 1 1
      panda/src/egg/eggTriangleFan.h
  65. 1 1
      panda/src/egg/eggTriangleStrip.h
  66. 1 1
      panda/src/egg/eggUserData.h
  67. 2 2
      panda/src/egg/eggVertex.h
  68. 1 1
      panda/src/egg/eggVertexAux.h
  69. 1 1
      panda/src/egg/eggVertexPool.h
  70. 1 1
      panda/src/egg/eggVertexUV.h
  71. 1 1
      panda/src/egg/eggXfmAnimData.h
  72. 1 1
      panda/src/egg/eggXfmSAnim.h
  73. 1 1
      panda/src/egg/parserDefs.h
  74. 3 3
      panda/src/egg/pt_EggMaterial.h
  75. 3 3
      panda/src/egg/pt_EggTexture.h
  76. 3 3
      panda/src/egg/pt_EggVertex.h
  77. 2 2
      panda/src/egg/vector_PT_EggMaterial.h
  78. 2 2
      panda/src/egg/vector_PT_EggTexture.h
  79. 2 2
      panda/src/egg/vector_PT_EggVertex.cxx
  80. 2 2
      panda/src/egg/vector_PT_EggVertex.h
  81. 1 1
      panda/src/egg2pg/animBundleMaker.h
  82. 1 1
      panda/src/egg2pg/characterMaker.h
  83. 2 2
      panda/src/egg2pg/config_egg2pg.cxx
  84. 29 29
      panda/src/egg2pg/config_egg2pg.h
  85. 2 2
      panda/src/egg2pg/eggSaver.cxx
  86. 2 2
      panda/src/egg2pg/egg_parametrics.h
  87. 2 2
      panda/src/egg2pg/load_egg_file.h
  88. 1 1
      panda/src/egg2pg/loaderFileTypeEgg.h
  89. 2 2
      panda/src/egg2pg/save_egg_file.h
  90. 1 1
      panda/src/event/asyncTaskSequence.I
  91. 2 2
      panda/src/event/asyncTaskSequence.h
  92. 3 3
      panda/src/express/virtualFileMountAndroidAsset.cxx
  93. 1 1
      panda/src/framework/pandaFramework.cxx
  94. 2 2
      panda/src/glgsg/config_glgsg.cxx
  95. 3 3
      panda/src/glgsg/config_glgsg.h
  96. 2 2
      panda/src/glgsg/glgsg.h
  97. 1 1
      panda/src/glstuff/glGraphicsStateGuardian_src.cxx
  98. 1 1
      panda/src/glstuff/glGraphicsStateGuardian_src.h
  99. 3 3
      panda/src/glstuff/glmisc_src.h
  100. 2 2
      panda/src/glxdisplay/config_glxdisplay.cxx

+ 2 - 0
contrib/src/rplight/iesDataset.cxx

@@ -27,7 +27,9 @@
 
 #include "iesDataset.h"
 
+#ifndef _USE_MATH_DEFINES
 #define _USE_MATH_DEFINES
+#endif
 #include <math.h>
 
 NotifyCategoryDef(iesdataset, "")

+ 2 - 0
contrib/src/rplight/pssmCameraRig.cxx

@@ -27,7 +27,9 @@
 
 #include "pssmCameraRig.h"
 
+#ifndef _USE_MATH_DEFINES
 #define _USE_MATH_DEFINES
+#endif
 #include <math.h>
 #include "orthographicLens.h"
 

+ 2 - 0
contrib/src/rplight/rpSpotLight.cxx

@@ -27,7 +27,9 @@
 
 #include "rpSpotLight.h"
 
+#ifndef _USE_MATH_DEFINES
 #define _USE_MATH_DEFINES
+#endif
 #include <math.h>
 
 

+ 27 - 39
dtool/src/interrogate/interfaceMakerPythonNative.cxx

@@ -103,11 +103,6 @@ RenameSet methodRenameDictionary[] = {
   { nullptr, nullptr, -1 }
 };
 
-RenameSet classRenameDictionary[] = {
-  // No longer used, now empty.
-  { nullptr, nullptr, -1 }
-};
-
 const char *pythonKeywords[] = {
   "and",
   "as",
@@ -193,12 +188,6 @@ classNameFromCppName(const std::string &cppName, bool mangle) {
     }
   }
 
-  for (int x = 0; classRenameDictionary[x]._from != nullptr; x++) {
-    if (cppName == classRenameDictionary[x]._from) {
-      className = classRenameDictionary[x]._to;
-    }
-  }
-
   if (className.empty()) {
     std::string text = "** ERROR ** Renaming class: " + cppName + " to empty string";
     printf("%s", text.c_str());
@@ -253,15 +242,6 @@ methodNameFromCppName(const std::string &cppName, const std::string &className,
     }
   }
 
-  if (className.size() > 0) {
-    string lookup_name = className + '.' + cppName;
-    for (int x = 0; classRenameDictionary[x]._from != nullptr; x++) {
-      if (lookup_name == methodRenameDictionary[x]._from) {
-        methodName = methodRenameDictionary[x]._to;
-      }
-    }
-  }
-
   // # Mangle names that happen to be python keywords so they are not anymore
   methodName = checkKeyword(methodName);
   return methodName;
@@ -1459,7 +1439,7 @@ write_module_support(ostream &out, ostream *out_h, InterrogateModuleDef *def) {
   if (force_base_functions) {
     out << "  // Support Function For Dtool_types ... for now in each module ??\n";
     out << "  {\"Dtool_BorrowThisReference\", &Dtool_BorrowThisReference, METH_VARARGS, \"Used to borrow 'this' pointer (to, from)\\nAssumes no ownership.\"},\n";
-    out << "  {\"Dtool_AddToDictionary\", &Dtool_AddToDictionary, METH_VARARGS, \"Used to add items into a tp_dict\"},\n";
+    //out << "  {\"Dtool_AddToDictionary\", &Dtool_AddToDictionary, METH_VARARGS, \"Used to add items into a tp_dict\"},\n";
   }
 
   out << "  {nullptr, nullptr, 0, nullptr}\n" << "};\n\n";
@@ -2536,7 +2516,7 @@ write_module_class(ostream &out, Object *obj) {
     }
   }
 
-  if (NeedsARichCompareFunction(obj->_itype)) {
+  if (NeedsARichCompareFunction(obj->_itype) || slots.count("tp_compare")) {
     out << "//////////////////\n";
     out << "//  A rich comparison function\n";
     out << "//     " << ClassName << "\n";
@@ -2547,7 +2527,6 @@ write_module_class(ostream &out, Object *obj) {
     out << "    return nullptr;\n";
     out << "  }\n\n";
 
-    out << "  switch (op) {\n";
     for (fi = obj->_methods.begin(); fi != obj->_methods.end(); ++fi) {
       std::set<FunctionRemap*> remaps;
       Function *func = (*fi);
@@ -2564,21 +2543,28 @@ write_module_class(ostream &out, Object *obj) {
         }
       }
       const string &fname = func->_ifunc.get_name();
+      const char *op_type;
       if (fname == "operator <") {
-        out << "  case Py_LT:\n";
+        op_type = "Py_LT";
       } else if (fname == "operator <=") {
-        out << "  case Py_LE:\n";
+        op_type = "Py_LE";
       } else if (fname == "operator ==") {
-        out << "  case Py_EQ:\n";
+        op_type = "Py_EQ";
       } else if (fname == "operator !=") {
-        out << "  case Py_NE:\n";
+        op_type = "Py_NE";
       } else if (fname == "operator >") {
-        out << "  case Py_GT:\n";
+        op_type = "Py_GT";
       } else if (fname == "operator >=") {
-        out << "  case Py_GE:\n";
+        op_type = "Py_GE";
       } else {
         continue;
       }
+      if (!has_local_richcompare) {
+        out << "  switch (op) {\n";
+        has_local_richcompare = true;
+      }
+      out << "  case " << op_type << ":\n";
+
       out << "    {\n";
 
       string expected_params;
@@ -2587,14 +2573,15 @@ write_module_class(ostream &out, Object *obj) {
 
       out << "      break;\n";
       out << "    }\n";
-      has_local_richcompare = true;
     }
 
-    out << "  }\n\n";
-
-    out << "  if (_PyErr_OCCURRED()) {\n";
-    out << "    PyErr_Clear();\n";
-    out << "  }\n\n";
+    if (has_local_richcompare) {
+      // End of switch block
+      out << "  }\n\n";
+      out << "  if (_PyErr_OCCURRED()) {\n";
+      out << "    PyErr_Clear();\n";
+      out << "  }\n\n";
+    }
 
     if (slots.count("tp_compare")) {
       // A lot of Panda code depends on comparisons being done via the
@@ -2624,6 +2611,7 @@ write_module_class(ostream &out, Object *obj) {
       out << "  case Py_GE:\n";
       out << "    return PyBool_FromLong(cmpval >= 0);\n";
       out << "  }\n";
+      has_local_richcompare = true;
     }
 
     out << "  Py_INCREF(Py_NotImplemented);\n";
@@ -2850,7 +2838,7 @@ write_module_class(ostream &out, Object *obj) {
   out << "#else\n";
   if (has_hash_compare) {
     write_function_slot(out, 4, slots, "tp_compare",
-                        "&DTOOL_PyObject_ComparePointers");
+                        "&DtoolInstance_ComparePointers");
   } else {
     out << "    nullptr, // tp_compare\n";
   }
@@ -2880,7 +2868,7 @@ write_module_class(ostream &out, Object *obj) {
 
   // hashfunc tp_hash;
   if (has_hash_compare) {
-    write_function_slot(out, 4, slots, "tp_hash", "&DTOOL_PyObject_HashPointer");
+    write_function_slot(out, 4, slots, "tp_hash", "&DtoolInstance_HashPointer");
   } else {
     out << "    nullptr, // tp_hash\n";
   }
@@ -2951,7 +2939,7 @@ write_module_class(ostream &out, Object *obj) {
   } else if (has_hash_compare) {
     // All hashable types need to be comparable.
     out << "#if PY_MAJOR_VERSION >= 3\n";
-    out << "    &DTOOL_PyObject_RichCompare,\n";
+    out << "    &DtoolInstance_RichComparePointers,\n";
     out << "#else\n";
     out << "    nullptr, // tp_richcompare\n";
     out << "#endif\n";
@@ -5038,7 +5026,7 @@ write_function_instance(ostream &out, FunctionRemap *remap,
                            "value %ld out of range for unsigned byte",
                            param_name);
       } else {
-        extra_convert << "if (" << param_name << " < CHAR_MIN || " << param_name << " > CHAR_MAX) {\n";
+        extra_convert << "if (" << param_name << " < SCHAR_MIN || " << param_name << " > SCHAR_MAX) {\n";
         error_raise_return(extra_convert, 2, return_flags, "OverflowError",
                            "value %ld out of range for signed byte",
                            param_name);

+ 3 - 3
dtool/src/interrogatedb/dtool_super_base.cxx

@@ -79,13 +79,13 @@ EXPORT_THIS Dtool_PyTypedObject Dtool_DTOOL_SUPER_BASE = {
 #if PY_MAJOR_VERSION >= 3
     nullptr, // tp_compare
 #else
-    &DTOOL_PyObject_ComparePointers,
+    &DtoolInstance_ComparePointers,
 #endif
     nullptr, // tp_repr
     nullptr, // tp_as_number
     nullptr, // tp_as_sequence
     nullptr, // tp_as_mapping
-    &DTOOL_PyObject_HashPointer,
+    &DtoolInstance_HashPointer,
     nullptr, // tp_call
     nullptr, // tp_str
     PyObject_GenericGetAttr,
@@ -96,7 +96,7 @@ EXPORT_THIS Dtool_PyTypedObject Dtool_DTOOL_SUPER_BASE = {
     nullptr, // tp_traverse
     nullptr, // tp_clear
 #if PY_MAJOR_VERSION >= 3
-    &DTOOL_PyObject_RichCompare,
+    &DtoolInstance_RichComparePointers,
 #else
     nullptr, // tp_richcompare
 #endif

+ 0 - 2
dtool/src/interrogatedb/py_compat.cxx

@@ -16,8 +16,6 @@
 
 #ifdef HAVE_PYTHON
 
-PyTupleObject Dtool_EmptyTuple = {PyVarObject_HEAD_INIT(nullptr, 0)};
-
 #if PY_MAJOR_VERSION < 3
 /**
  * Given a long or int, returns a size_t, or raises an OverflowError if it is

+ 37 - 4
dtool/src/interrogatedb/py_compat.h

@@ -138,11 +138,29 @@ typedef long Py_hash_t;
 
 /* Python 3.6 */
 
-// Used to implement _PyObject_CallNoArg
-extern EXPCL_INTERROGATEDB PyTupleObject Dtool_EmptyTuple;
-
 #ifndef _PyObject_CallNoArg
-#  define _PyObject_CallNoArg(func) PyObject_Call((func), (PyObject *)&Dtool_EmptyTuple, nullptr)
+INLINE PyObject *_PyObject_CallNoArg(PyObject *func) {
+  static PyTupleObject empty_tuple = {PyVarObject_HEAD_INIT(nullptr, 0)};
+#ifdef Py_TRACE_REFS
+  _Py_AddToAllObjects((PyObject *)&empty_tuple, 0);
+#endif
+  return PyObject_Call(func, (PyObject *)&empty_tuple, nullptr);
+}
+#  define _PyObject_CallNoArg _PyObject_CallNoArg
+#endif
+
+#ifndef _PyObject_FastCall
+INLINE PyObject *_PyObject_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs) {
+  PyObject *tuple = PyTuple_New(nargs);
+  for (Py_ssize_t i = 0; i < nargs; ++i) {
+    PyTuple_SET_ITEM(tuple, i, args[i]);
+    Py_INCREF(args[i]);
+  }
+  PyObject *result = PyObject_Call(func, tuple, nullptr);
+  Py_DECREF(tuple);
+  return result;
+}
+#  define _PyObject_FastCall _PyObject_FastCall
 #endif
 
 // Python versions before 3.6 didn't require longlong support to be enabled.
@@ -161,6 +179,21 @@ extern EXPCL_INTERROGATEDB PyTupleObject Dtool_EmptyTuple;
 #  define PyDict_GET_SIZE(mp) (((PyDictObject *)mp)->ma_used)
 #endif
 
+#ifndef Py_RETURN_RICHCOMPARE
+#  define Py_RETURN_RICHCOMPARE(val1, val2, op)                         \
+  do {                                                                  \
+    switch (op) {                                                       \
+    NODEFAULT                                                           \
+    case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
+    case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
+    case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
+    case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
+    case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
+    case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
+    }                                                                   \
+  } while (0)
+#endif
+
 /* Other Python implementations */
 
 // _PyErr_OCCURRED is an undocumented macro version of PyErr_Occurred.

+ 31 - 0
dtool/src/interrogatedb/py_panda.I

@@ -62,6 +62,37 @@ DtoolInstance_GetPointer(PyObject *self, T *&into, Dtool_PyTypedObject &target_c
   return false;
 }
 
+/**
+ * Function to create a hash from a wrapped Python object.
+ */
+INLINE Py_hash_t DtoolInstance_HashPointer(PyObject *self) {
+  if (self != nullptr && DtoolInstance_Check(self)) {
+    return (Py_hash_t)(intptr_t)DtoolInstance_VOID_PTR(self);
+  }
+  return -1;
+}
+
+/**
+ * Python 2-style comparison function that compares objects by pointer.
+ */
+INLINE int DtoolInstance_ComparePointers(PyObject *v1, PyObject *v2) {
+  void *v1_this = DtoolInstance_Check(v1) ? DtoolInstance_VOID_PTR(v1) : nullptr;
+  void *v2_this = DtoolInstance_Check(v2) ? DtoolInstance_VOID_PTR(v2) : nullptr;
+  if (v1_this != nullptr && v2_this != nullptr) {
+    return (v1_this > v2_this) - (v1_this < v2_this);
+  } else {
+    return (v1 > v2) - (v1 < v2);
+  }
+}
+
+/**
+ * Rich comparison function that compares objects by pointer.
+ */
+INLINE PyObject *DtoolInstance_RichComparePointers(PyObject *v1, PyObject *v2, int op) {
+  int cmpval = DtoolInstance_ComparePointers(v1, v2);
+  Py_RETURN_RICHCOMPARE(cmpval, 0, op);
+}
+
 /**
  * These functions wrap a pointer for a class that defines get_type_handle().
  */

+ 2 - 142
dtool/src/interrogatedb/py_panda.cxx

@@ -143,13 +143,6 @@ DTOOL_Call_GetPointerThisClass(PyObject *self, Dtool_PyTypedObject *classdef,
   return nullptr;
 }
 
-void *DTOOL_Call_GetPointerThis(PyObject *self) {
-  if (self != nullptr && DtoolInstance_Check(self)) {
-    return DtoolInstance_VOID_PTR(self);
-  }
-  return nullptr;
-}
-
 /**
  * This is similar to a PyErr_Occurred() check, except that it also checks
  * Notify to see if an assertion has occurred.  If that is the case, then it
@@ -588,10 +581,6 @@ PyObject *Dtool_PyModuleInitHelper(LibraryDef *defs[], const char *modulename) {
       return Dtool_Raise_TypeError("PyType_Ready(Dtool_StaticProperty_Type)");
     }
 
-#ifdef Py_TRACE_REFS
-    _Py_AddToAllObjects((PyObject *)&Dtool_EmptyTuple, 0);
-#endif
-
     // Initialize the base class of everything.
     Dtool_PyModuleClassInit_DTOOL_SUPER_BASE(nullptr);
   }
@@ -715,7 +704,7 @@ PyObject *Dtool_BorrowThisReference(PyObject *self, PyObject *args) {
 
 // We do expose a dictionay for dtool classes .. this should be removed at
 // some point..
-PyObject *Dtool_AddToDictionary(PyObject *self1, PyObject *args) {
+EXPCL_INTERROGATEDB PyObject *Dtool_AddToDictionary(PyObject *self1, PyObject *args) {
   PyObject *self;
   PyObject *subject;
   PyObject *key;
@@ -734,127 +723,6 @@ PyObject *Dtool_AddToDictionary(PyObject *self1, PyObject *args) {
   return Py_None;
 }
 
-Py_hash_t DTOOL_PyObject_HashPointer(PyObject *self) {
-  if (self != nullptr && DtoolInstance_Check(self)) {
-    return (Py_hash_t)(intptr_t)DtoolInstance_VOID_PTR(self);
-  }
-  return -1;
-}
-
-/* Compare v to w.  Return
-   -1 if v <  w or exception (PyErr_Occurred() true in latter case).
-    0 if v == w.
-    1 if v > w.
-   XXX The docs (C API manual) say the return value is undefined in case
-   XXX of error.
-*/
-
-int DTOOL_PyObject_ComparePointers(PyObject *v1, PyObject *v2) {
-  // try this compare
-  void *v1_this = DTOOL_Call_GetPointerThis(v1);
-  void *v2_this = DTOOL_Call_GetPointerThis(v2);
-  if (v1_this != nullptr && v2_this != nullptr) { // both are our types...
-    if (v1_this < v2_this) {
-      return -1;
-    }
-    if (v1_this > v2_this) {
-      return 1;
-    }
-    return 0;
-  }
-
-  // ok self compare...
-  if (v1 < v2) {
-    return -1;
-  }
-  if (v1 > v2) {
-    return 1;
-  }
-  return 0;
-}
-
-int DTOOL_PyObject_Compare(PyObject *v1, PyObject *v2) {
-  // First try compareTo function..
-  PyObject * func = PyObject_GetAttrString(v1, "compare_to");
-  if (func == nullptr) {
-    PyErr_Clear();
-  } else {
-#if PY_VERSION_HEX >= 0x03060000
-    PyObject *res = _PyObject_FastCall(func, &v2, 1);
-#else
-    PyObject *res = nullptr;
-    PyObject *args = PyTuple_Pack(1, v2);
-    if (args != nullptr) {
-      res = PyObject_Call(func, args, nullptr);
-      Py_DECREF(args);
-    }
-#endif
-    Py_DECREF(func);
-    PyErr_Clear(); // just in case the function threw an error
-    // only use if the function returns an INT... hmm
-    if (res != nullptr) {
-      if (PyLong_Check(res)) {
-        long answer = PyLong_AsLong(res);
-        Py_DECREF(res);
-
-        // Python really wants us to return strictly -1, 0, or 1.
-        if (answer < 0) {
-          return -1;
-        } else if (answer > 0) {
-          return 1;
-        } else {
-          return 0;
-        }
-      }
-#if PY_MAJOR_VERSION < 3
-      else if (PyInt_Check(res)) {
-        long answer = PyInt_AsLong(res);
-        Py_DECREF(res);
-
-        // Python really wants us to return strictly -1, 0, or 1.
-        if (answer < 0) {
-          return -1;
-        } else if (answer > 0) {
-          return 1;
-        } else {
-          return 0;
-        }
-      }
-#endif
-      Py_DECREF(res);
-    }
-  }
-
-  return DTOOL_PyObject_ComparePointers(v1, v2);
-}
-
-PyObject *DTOOL_PyObject_RichCompare(PyObject *v1, PyObject *v2, int op) {
-  int cmpval = DTOOL_PyObject_Compare(v1, v2);
-  bool result;
-  switch (op) {
-  NODEFAULT
-  case Py_LT:
-    result = (cmpval < 0);
-    break;
-  case Py_LE:
-    result = (cmpval <= 0);
-    break;
-  case Py_EQ:
-    result = (cmpval == 0);
-    break;
-  case Py_NE:
-    result = (cmpval != 0);
-    break;
-  case Py_GT:
-    result = (cmpval > 0);
-    break;
-  case Py_GE:
-    result = (cmpval >= 0);
-    break;
-  }
-  return PyBool_FromLong(result);
-}
-
 /**
  * This is a support function for a synthesized __copy__() method from a C++
  * make_copy() method.
@@ -875,15 +743,7 @@ PyObject *copy_from_make_copy(PyObject *self, PyObject *noargs) {
  */
 PyObject *copy_from_copy_constructor(PyObject *self, PyObject *noargs) {
   PyObject *callable = (PyObject *)Py_TYPE(self);
-
-#if PY_VERSION_HEX >= 0x03060000
-  PyObject *result = _PyObject_FastCall(callable, &self, 1);
-#else
-  PyObject *args = PyTuple_Pack(1, self);
-  PyObject *result = PyObject_Call(callable, args, nullptr);
-  Py_DECREF(args);
-#endif
-  return result;
+  return _PyObject_FastCall(callable, &self, 1);
 }
 
 /**

+ 6 - 21
dtool/src/interrogatedb/py_panda.h

@@ -195,8 +195,6 @@ EXPCL_INTERROGATEDB void DTOOL_Call_ExtractThisPointerForType(PyObject *self, Dt
 
 EXPCL_INTERROGATEDB void *DTOOL_Call_GetPointerThisClass(PyObject *self, Dtool_PyTypedObject *classdef, int param, const std::string &function_name, bool const_ok, bool report_errors);
 
-EXPCL_INTERROGATEDB void *DTOOL_Call_GetPointerThis(PyObject *self);
-
 EXPCL_INTERROGATEDB bool Dtool_Call_ExtractThisPointer(PyObject *self, Dtool_PyTypedObject &classdef, void **answer);
 
 EXPCL_INTERROGATEDB bool Dtool_Call_ExtractThisPointer_NonConst(PyObject *self, Dtool_PyTypedObject &classdef,
@@ -205,6 +203,10 @@ EXPCL_INTERROGATEDB bool Dtool_Call_ExtractThisPointer_NonConst(PyObject *self,
 template<class T> INLINE bool DtoolInstance_GetPointer(PyObject *self, T *&into);
 template<class T> INLINE bool DtoolInstance_GetPointer(PyObject *self, T *&into, Dtool_PyTypedObject &classdef);
 
+INLINE Py_hash_t DtoolInstance_HashPointer(PyObject *self);
+INLINE int DtoolInstance_ComparePointers(PyObject *v1, PyObject *v2);
+INLINE PyObject *DtoolInstance_RichComparePointers(PyObject *v1, PyObject *v2, int op);
+
 // Functions related to error reporting.
 EXPCL_INTERROGATEDB bool _Dtool_CheckErrorOccurred();
 
@@ -327,25 +329,8 @@ EXPCL_INTERROGATEDB PyObject *Dtool_PyModuleInitHelper(LibraryDef *defs[], const
 // historical inharatence in the for of "is this instance of"..
 EXPCL_INTERROGATEDB PyObject *Dtool_BorrowThisReference(PyObject *self, PyObject *args);
 
-// We do expose a dictionay for dtool classes .. this should be removed at
-// some point..
-EXPCL_INTERROGATEDB PyObject *Dtool_AddToDictionary(PyObject *self1, PyObject *args);
-
-
-EXPCL_INTERROGATEDB Py_hash_t DTOOL_PyObject_HashPointer(PyObject *obj);
-
-/* Compare v to w.  Return
-   -1 if v <  w or exception (PyErr_Occurred() true in latter case).
-    0 if v == w.
-    1 if v > w.
-   XXX The docs (C API manual) say the return value is undefined in case
-   XXX of error.
-*/
-
-EXPCL_INTERROGATEDB int DTOOL_PyObject_ComparePointers(PyObject *v1, PyObject *v2);
-EXPCL_INTERROGATEDB int DTOOL_PyObject_Compare(PyObject *v1, PyObject *v2);
-
-EXPCL_INTERROGATEDB PyObject *DTOOL_PyObject_RichCompare(PyObject *v1, PyObject *v2, int op);
+#define DTOOL_PyObject_HashPointer DtoolInstance_HashPointer
+#define DTOOL_PyObject_ComparePointers DtoolInstance_ComparePointers
 
 EXPCL_INTERROGATEDB PyObject *
 copy_from_make_copy(PyObject *self, PyObject *noargs);

+ 2 - 0
dtool/src/parser-inc/stdlib.h

@@ -1,3 +1,5 @@
+#pragma once
+
 #include <stdtypedefs.h>
 
 #define EXIT_SUCCESS 0

+ 2 - 0
dtool/src/pystub/pystub.cxx

@@ -192,6 +192,7 @@ extern "C" {
   EXPCL_PYSTUB int _PyArg_Parse_SizeT(...);
   EXPCL_PYSTUB int _PyErr_BadInternalCall(...);
   EXPCL_PYSTUB int _PyLong_AsByteArray(...);
+  EXPCL_PYSTUB int _PyLong_Sign(...);
   EXPCL_PYSTUB int _PyObject_CallFunction_SizeT(...);
   EXPCL_PYSTUB int _PyObject_CallMethod_SizeT(...);
   EXPCL_PYSTUB int _PyObject_DebugFree(...);
@@ -421,6 +422,7 @@ int _PyArg_ParseTupleAndKeywords_SizeT(...) { return 0; };
 int _PyArg_Parse_SizeT(...) { return 0; };
 int _PyErr_BadInternalCall(...) { return 0; };
 int _PyLong_AsByteArray(...) { return 0; };
+int _PyLong_Sign(...) { return 0; };
 int _PyObject_CallFunction_SizeT(...) { return 0; };
 int _PyObject_CallMethod_SizeT(...) { return 0; };
 int _PyObject_DebugFree(...) { return 0; };

+ 3 - 1
makepanda/makepanda.py

@@ -15,9 +15,11 @@ try:
         import queue
     else:
         import Queue as queue
+except KeyboardInterrupt:
+    raise
 except:
     print("You are either using an incomplete or an old version of Python!")
-    print("Please install the development package of Python 2.x and try again.")
+    print("Please install the development package of Python and try again.")
     exit(1)
 
 from makepandacore import *

+ 1 - 0
panda/src/char/characterSlider.h

@@ -34,6 +34,7 @@ PUBLISHED:
   explicit CharacterSlider(PartGroup *parent, const std::string &name);
   virtual ~CharacterSlider();
 
+public:
   virtual PartGroup *make_copy() const;
 
   virtual bool update_internals(PartBundle *root, PartGroup *parent,

+ 2 - 2
panda/src/cocoadisplay/config_cocoadisplay.h

@@ -18,8 +18,8 @@
 #include "notifyCategoryProxy.h"
 #include "configVariableBool.h"
 
-NotifyCategoryDecl(cocoadisplay, EXPCL_PANDAGL, EXPTP_PANDAGL);
+NotifyCategoryDecl(cocoadisplay, EXPCL_PANDA_COCOADISPLAY, EXPTP_PANDA_COCOADISPLAY);
 
-extern EXPCL_PANDAGL void init_libcocoadisplay();
+extern EXPCL_PANDA_COCOADISPLAY void init_libcocoadisplay();
 
 #endif

+ 2 - 2
panda/src/cocoadisplay/config_cocoadisplay.mm

@@ -20,8 +20,8 @@
 #include "dconfig.h"
 #include "pandaSystem.h"
 
-#if !defined(CPPPARSER) && !defined(BUILDING_PANDAGL)
-  #error Buildsystem error: BUILDING_PANDAGL not defined
+#if !defined(CPPPARSER) && !defined(BUILDING_PANDA_COCOADISPLAY)
+  #error Buildsystem error: BUILDING_PANDA_COCOADISPLAY not defined
 #endif
 
 Configure(config_cocoadisplay);

+ 1 - 1
panda/src/display/nativeWindowHandle.h

@@ -33,7 +33,7 @@
  * This class exists for name scoping only.  Don't use the constructor
  * directly; use one of the make_* methods.
  */
-class EXPCL_PANDA_DISPLAY NativeWindowHandle : public WindowHandle {
+class EXPCL_PANDA_DISPLAY NativeWindowHandle final : public WindowHandle {
 private:
   INLINE NativeWindowHandle();
   INLINE NativeWindowHandle(const NativeWindowHandle &copy);

+ 2 - 2
panda/src/egg/config_egg.cxx

@@ -58,8 +58,8 @@
 
 #include "dconfig.h"
 
-#if !defined(CPPPARSER) && !defined(BUILDING_PANDAEGG)
-  #error Buildsystem error: BUILDING_PANDAEGG not defined
+#if !defined(CPPPARSER) && !defined(BUILDING_PANDA_EGG)
+  #error Buildsystem error: BUILDING_PANDA_EGG not defined
 #endif
 
 Configure(config_egg);

+ 16 - 16
panda/src/egg/config_egg.h

@@ -22,26 +22,26 @@
 #include "configVariableDouble.h"
 #include "configVariableInt.h"
 
-NotifyCategoryDecl(egg, EXPCL_PANDAEGG, EXPTP_PANDAEGG);
+NotifyCategoryDecl(egg, EXPCL_PANDA_EGG, EXPTP_PANDA_EGG);
 
 extern ConfigVariableBool egg_support_old_anims;
 
-extern EXPCL_PANDAEGG ConfigVariableBool egg_mesh;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_retesselate_coplanar;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_unroll_fans;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_show_tstrips;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_show_qsheets;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_show_quads;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_mesh;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_retesselate_coplanar;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_unroll_fans;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_show_tstrips;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_show_qsheets;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_show_quads;
 #define egg_false_color (egg_show_tstrips | egg_show_qsheets | egg_show_quads)
-extern EXPCL_PANDAEGG ConfigVariableBool egg_subdivide_polys;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_consider_fans;
-extern EXPCL_PANDAEGG ConfigVariableDouble egg_max_tfan_angle;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_min_tfan_tris;
-extern EXPCL_PANDAEGG ConfigVariableDouble egg_coplanar_threshold;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_test_vref_integrity;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_recursion_limit;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_precision;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_subdivide_polys;
+extern EXPCL_PANDA_EGG ConfigVariableBool egg_consider_fans;
+extern EXPCL_PANDA_EGG ConfigVariableDouble egg_max_tfan_angle;
+extern EXPCL_PANDA_EGG ConfigVariableInt egg_min_tfan_tris;
+extern EXPCL_PANDA_EGG ConfigVariableDouble egg_coplanar_threshold;
+extern EXPCL_PANDA_EGG ConfigVariableInt egg_test_vref_integrity;
+extern EXPCL_PANDA_EGG ConfigVariableInt egg_recursion_limit;
+extern EXPCL_PANDA_EGG ConfigVariableInt egg_precision;
 
-extern EXPCL_PANDAEGG void init_libegg();
+extern EXPCL_PANDA_EGG void init_libegg();
 
 #endif

+ 1 - 1
panda/src/egg/eggAnimData.h

@@ -27,7 +27,7 @@
  * A base class for EggSAnimData and EggXfmAnimData, which contain rows and
  * columns of numbers.
  */
-class EXPCL_PANDAEGG EggAnimData : public EggNode {
+class EXPCL_PANDA_EGG EggAnimData : public EggNode {
 PUBLISHED:
   INLINE explicit EggAnimData(const std::string &name = "");
   INLINE EggAnimData(const EggAnimData &copy);

+ 1 - 1
panda/src/egg/eggAnimPreload.h

@@ -21,7 +21,7 @@
 /**
  * This corresponds to an <AnimPreload> entry.
  */
-class EXPCL_PANDAEGG EggAnimPreload : public EggNode {
+class EXPCL_PANDA_EGG EggAnimPreload : public EggNode {
 PUBLISHED:
   INLINE explicit EggAnimPreload(const std::string &name = "");
   INLINE EggAnimPreload(const EggAnimPreload &copy);

+ 1 - 1
panda/src/egg/eggAttributes.h

@@ -30,7 +30,7 @@
  * EggPolygon level with multiple appearances of the EggObject base class.
  * And making EggObject a virtual base class is just no fun.
  */
-class EXPCL_PANDAEGG EggAttributes : public MemoryBase {
+class EXPCL_PANDA_EGG EggAttributes : public MemoryBase {
 PUBLISHED:
   EggAttributes();
   EggAttributes(const EggAttributes &copy);

+ 1 - 1
panda/src/egg/eggBin.h

@@ -23,7 +23,7 @@
  * of node that will never be read in from an egg file, but can only exist in
  * the egg scene graph if it is created via the use of an EggBinMaker.
  */
-class EXPCL_PANDAEGG EggBin : public EggGroup {
+class EXPCL_PANDA_EGG EggBin : public EggGroup {
 PUBLISHED:
   explicit EggBin(const std::string &name = "");
   EggBin(const EggGroup &copy);

+ 2 - 2
panda/src/egg/eggBinMaker.h

@@ -139,7 +139,7 @@ class EggBinMaker;
  * This is just an STL function object, used to sort nodes within EggBinMaker.
  * It's part of the private interface; ignore it.
  */
-class EXPCL_PANDAEGG EggBinMakerCompareNodes {
+class EXPCL_PANDA_EGG EggBinMakerCompareNodes {
 public:
   EggBinMakerCompareNodes() {
     // We need to have a default constructor to compile, but it should never
@@ -158,7 +158,7 @@ public:
  * abstract class; to use it you must subclass off of it.  See the somewhat
  * lengthy comment above.
  */
-class EXPCL_PANDAEGG EggBinMaker : public EggObject {
+class EXPCL_PANDA_EGG EggBinMaker : public EggObject {
 PUBLISHED:
   EggBinMaker();
   ~EggBinMaker();

+ 1 - 1
panda/src/egg/eggComment.h

@@ -21,7 +21,7 @@
 /**
  * A comment that appears in an egg file within a <Comment> entry.
  */
-class EXPCL_PANDAEGG EggComment : public EggNode {
+class EXPCL_PANDA_EGG EggComment : public EggNode {
 PUBLISHED:
   INLINE explicit EggComment(const std::string &node_name, const std::string &comment);
   INLINE EggComment(const EggComment &copy);

+ 4 - 4
panda/src/egg/eggCompositePrimitive.cxx

@@ -57,7 +57,7 @@ get_shading() const {
     if (!first_component->has_normal()) {
       first_component = this;
     }
-    for (int i = 1; i < get_num_components(); i++) {
+    for (size_t i = 1; i < get_num_components(); ++i) {
       const EggAttributes *component = get_component(i);
       if (!component->has_normal()) {
         component = this;
@@ -74,7 +74,7 @@ get_shading() const {
     if (!first_component->has_color()) {
       first_component = this;
     }
-    for (int i = 1; i < get_num_components(); i++) {
+    for (size_t i = 1; i < get_num_components(); ++i) {
       const EggAttributes *component = get_component(i);
       if (!component->has_color()) {
         component = this;
@@ -295,7 +295,7 @@ apply_last_attribute() {
   // The first component gets applied to the third vertex, and so on from
   // there.
   int num_lead_vertices = get_num_lead_vertices();
-  for (int i = 0; i < get_num_components(); i++) {
+  for (size_t i = 0; i < get_num_components(); ++i) {
     EggAttributes *component = get_component(i);
     do_apply_flat_attribute(i + num_lead_vertices, component);
   }
@@ -313,7 +313,7 @@ void EggCompositePrimitive::
 apply_first_attribute() {
   // The first component gets applied to the first vertex, and so on from
   // there.
-  for (int i = 0; i < get_num_components(); i++) {
+  for (size_t i = 0; i < get_num_components(); ++i) {
     EggAttributes *component = get_component(i);
     do_apply_flat_attribute(i, component);
   }

+ 1 - 1
panda/src/egg/eggCompositePrimitive.h

@@ -23,7 +23,7 @@
  * which include several component triangles, each of which might have its own
  * color and/or normal.
  */
-class EXPCL_PANDAEGG EggCompositePrimitive : public EggPrimitive {
+class EXPCL_PANDA_EGG EggCompositePrimitive : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggCompositePrimitive(const std::string &name = "");
   INLINE EggCompositePrimitive(const EggCompositePrimitive &copy);

+ 1 - 1
panda/src/egg/eggCoordinateSystem.h

@@ -26,7 +26,7 @@
  * with the enum EggData::CoordinateSystem, which is the value contained by
  * this entry.
  */
-class EXPCL_PANDAEGG EggCoordinateSystem : public EggNode {
+class EXPCL_PANDA_EGG EggCoordinateSystem : public EggNode {
 PUBLISHED:
   INLINE EggCoordinateSystem(CoordinateSystem value = CS_default);
   INLINE EggCoordinateSystem(const EggCoordinateSystem &copy);

+ 1 - 1
panda/src/egg/eggCurve.h

@@ -21,7 +21,7 @@
 /**
  * A parametric curve of some kind.  See EggNurbsCurve.
  */
-class EXPCL_PANDAEGG EggCurve : public EggPrimitive {
+class EXPCL_PANDA_EGG EggCurve : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggCurve(const std::string &name = "");
   INLINE EggCurve(const EggCurve &copy);

+ 1 - 1
panda/src/egg/eggData.h

@@ -34,7 +34,7 @@ class BamCacheRecord;
  * begin() and end() calls.  The children of the EggData class are the
  * toplevel nodes in the egg file.
  */
-class EXPCL_PANDAEGG EggData : public EggGroupNode {
+class EXPCL_PANDA_EGG EggData : public EggGroupNode {
 PUBLISHED:
   INLINE EggData();
   INLINE EggData(const EggData &copy);

+ 1 - 1
panda/src/egg/eggExternalReference.h

@@ -22,7 +22,7 @@
  * Defines a reference to another egg file which should be inserted at this
  * point.
  */
-class EXPCL_PANDAEGG EggExternalReference : public EggFilenameNode {
+class EXPCL_PANDA_EGG EggExternalReference : public EggFilenameNode {
 PUBLISHED:
   explicit EggExternalReference(const std::string &node_name, const std::string &filename);
   EggExternalReference(const EggExternalReference &copy);

+ 1 - 1
panda/src/egg/eggFilenameNode.h

@@ -24,7 +24,7 @@
  * file relative to the directory the egg file was loaded in.  It is a base
  * class for EggTexture and EggExternalReference.
  */
-class EXPCL_PANDAEGG EggFilenameNode : public EggNode {
+class EXPCL_PANDA_EGG EggFilenameNode : public EggNode {
 PUBLISHED:
   INLINE EggFilenameNode();
   INLINE explicit EggFilenameNode(const std::string &node_name, const Filename &filename);

+ 1 - 1
panda/src/egg/eggGroup.h

@@ -31,7 +31,7 @@
  * The main glue of the egg hierarchy, this corresponds to the <Group>,
  * <Instance>, and <Joint> type nodes.
  */
-class EXPCL_PANDAEGG EggGroup : public EggGroupNode, public EggRenderMode, public EggTransform {
+class EXPCL_PANDA_EGG EggGroup : public EggGroupNode, public EggRenderMode, public EggTransform {
 PUBLISHED:
   typedef pmap<PT_EggVertex, double> VertexRef;
   typedef pmap<std::string, std::string> TagData;

+ 1 - 1
panda/src/egg/eggGroupNode.h

@@ -43,7 +43,7 @@ class DSearchPath;
  * to manipulate the list.  The list may also be operated on (read-only) via
  * iterators and begin()/end().
  */
-class EXPCL_PANDAEGG EggGroupNode : public EggNode {
+class EXPCL_PANDA_EGG EggGroupNode : public EggNode {
 
   // This is a bit of private interface stuff that must be here as a forward
   // reference.  This allows us to define the EggGroupNode as an STL

+ 1 - 1
panda/src/egg/eggGroupUniquifier.h

@@ -23,7 +23,7 @@
  * EggGroup nodes.  It's not called automatically; you must invoke it yourself
  * if you want it.
  */
-class EXPCL_PANDAEGG EggGroupUniquifier : public EggNameUniquifier {
+class EXPCL_PANDA_EGG EggGroupUniquifier : public EggNameUniquifier {
 PUBLISHED:
   explicit EggGroupUniquifier(bool filter_names = true);
 

+ 1 - 1
panda/src/egg/eggLine.h

@@ -22,7 +22,7 @@
  * A line segment, or a series of connected line segments, defined by a <Line>
  * entry.
  */
-class EXPCL_PANDAEGG EggLine : public EggCompositePrimitive {
+class EXPCL_PANDA_EGG EggLine : public EggCompositePrimitive {
 PUBLISHED:
   INLINE explicit EggLine(const std::string &name = "");
   INLINE EggLine(const EggLine &copy);

+ 2 - 2
panda/src/egg/eggMaterial.h

@@ -23,7 +23,7 @@
 /**
  *
  */
-class EXPCL_PANDAEGG EggMaterial : public EggNode {
+class EXPCL_PANDA_EGG EggMaterial : public EggNode {
 PUBLISHED:
   explicit EggMaterial(const std::string &mref_name);
   EggMaterial(const EggMaterial &copy);
@@ -151,7 +151,7 @@ private:
  * Returns true if the two referenced EggMaterial pointers are in sorted
  * order, false otherwise.
  */
-class EXPCL_PANDAEGG UniqueEggMaterials {
+class EXPCL_PANDA_EGG UniqueEggMaterials {
 public:
   INLINE UniqueEggMaterials(int eq = ~0);
   INLINE bool operator ()(const EggMaterial *t1, const EggMaterial *t2) const;

+ 1 - 1
panda/src/egg/eggMaterialCollection.h

@@ -27,7 +27,7 @@
  * materials from an egg file and sort them all together; it can also manage
  * the creation of unique materials and the assignment of unique MRef names.
  */
-class EXPCL_PANDAEGG EggMaterialCollection {
+class EXPCL_PANDA_EGG EggMaterialCollection {
 
   // This is a bit of private interface stuff that must be here as a forward
   // reference.  This allows us to define the EggMaterialCollection as an STL

+ 2 - 2
panda/src/egg/eggMorph.h

@@ -49,8 +49,8 @@ private:
 // I'd love to export these, but it produces a strange linker issue with Mac
 // OS X's version of GCC.  We'll do it only on Windows, then.
 #ifdef _MSC_VER
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, EggMorph<LVector3d>);
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, EggMorph<LVector4>);
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, EggMorph<LVector3d>);
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, EggMorph<LVector4>);
 #endif
 
 typedef EggMorph<LVector3d> EggMorphVertex;

+ 6 - 6
panda/src/egg/eggMorphList.cxx

@@ -15,20 +15,20 @@
 
 // Continue all of the vector import definitions.
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE LVector3d
 #define NAME vector_LVector3d
 #include "vector_src.cxx"
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE LVector2d
 #define NAME vector_LVector2d
 #include "vector_src.cxx"
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE LVector4
 #define NAME vector_LVector4
 #include "vector_src.cxx"

+ 1 - 1
panda/src/egg/eggNameUniquifier.h

@@ -56,7 +56,7 @@ class EggNode;
  * hierarchy.  It is an abstract class; to use it you must subclass off of it.
  * See the comment above.
  */
-class EXPCL_PANDAEGG EggNameUniquifier : public EggObject {
+class EXPCL_PANDA_EGG EggNameUniquifier : public EggObject {
 PUBLISHED:
   EggNameUniquifier();
   ~EggNameUniquifier();

+ 1 - 1
panda/src/egg/eggNamedObject.h

@@ -23,7 +23,7 @@
 /**
  * This is a fairly low-level base class--any egg object that has a name.
  */
-class EXPCL_PANDAEGG EggNamedObject : public EggObject, public Namable {
+class EXPCL_PANDA_EGG EggNamedObject : public EggObject, public Namable {
 PUBLISHED:
   INLINE explicit EggNamedObject(const std::string &name = "");
   INLINE EggNamedObject(const EggNamedObject &copy);

+ 1 - 1
panda/src/egg/eggNode.h

@@ -32,7 +32,7 @@ class EggTextureCollection;
  * This includes groups, joints, polygons, vertex pools, etc., but does not
  * include things like vertices.
  */
-class EXPCL_PANDAEGG EggNode : public EggNamedObject {
+class EXPCL_PANDA_EGG EggNode : public EggNamedObject {
 PUBLISHED:
   INLINE explicit EggNode(const std::string &name = "");
   INLINE EggNode(const EggNode &copy);

+ 1 - 1
panda/src/egg/eggNurbsCurve.h

@@ -23,7 +23,7 @@
 /**
  * A parametric NURBS curve.
  */
-class EXPCL_PANDAEGG EggNurbsCurve : public EggCurve {
+class EXPCL_PANDA_EGG EggNurbsCurve : public EggCurve {
 PUBLISHED:
   INLINE explicit EggNurbsCurve(const std::string &name = "");
   INLINE EggNurbsCurve(const EggNurbsCurve &copy);

+ 1 - 1
panda/src/egg/eggNurbsSurface.h

@@ -24,7 +24,7 @@
 /**
  * A parametric NURBS surface.
  */
-class EXPCL_PANDAEGG EggNurbsSurface : public EggSurface {
+class EXPCL_PANDA_EGG EggNurbsSurface : public EggSurface {
 PUBLISHED:
   typedef plist< PT(EggNurbsCurve) > Curves;
   typedef Curves Loop;

+ 1 - 1
panda/src/egg/eggObject.h

@@ -26,7 +26,7 @@ class EggTransform;
  * The highest-level base class in the egg directory.  (Almost) all things egg
  * inherit from this.
  */
-class EXPCL_PANDAEGG EggObject : public TypedReferenceCount {
+class EXPCL_PANDA_EGG EggObject : public TypedReferenceCount {
 PUBLISHED:
   EggObject();
   EggObject(const EggObject &copy);

+ 2 - 2
panda/src/egg/eggParameters.h

@@ -29,7 +29,7 @@
  * process it, and write the egg file out again before resetting the
  * parameters again.
  */
-class EXPCL_PANDAEGG EggParameters {
+class EXPCL_PANDA_EGG EggParameters {
 public:
   constexpr EggParameters() = default;
 
@@ -54,6 +54,6 @@ public:
   double _table_threshold = 0.0001;
 };
 
-extern EXPCL_PANDAEGG EggParameters *egg_parameters;
+extern EXPCL_PANDA_EGG EggParameters *egg_parameters;
 
 #endif

+ 1 - 1
panda/src/egg/eggPatch.h

@@ -22,7 +22,7 @@
  * A single "patch", a special primitive to be rendered only with a
  * tessellation shader.
  */
-class EXPCL_PANDAEGG EggPatch : public EggPrimitive {
+class EXPCL_PANDA_EGG EggPatch : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggPatch(const std::string &name = "");
   INLINE EggPatch(const EggPatch &copy);

+ 1 - 1
panda/src/egg/eggPoint.h

@@ -22,7 +22,7 @@
  * A single point, or a collection of points as defined by a single
  * <PointLight> entry.
  */
-class EXPCL_PANDAEGG EggPoint : public EggPrimitive {
+class EXPCL_PANDA_EGG EggPoint : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggPoint(const std::string &name = "");
   INLINE EggPoint(const EggPoint &copy);

+ 1 - 1
panda/src/egg/eggPolygon.h

@@ -21,7 +21,7 @@
 /**
  * A single polygon.
  */
-class EXPCL_PANDAEGG EggPolygon : public EggPrimitive {
+class EXPCL_PANDA_EGG EggPolygon : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggPolygon(const std::string &name = "");
   INLINE EggPolygon(const EggPolygon &copy);

+ 1 - 1
panda/src/egg/eggPolysetMaker.h

@@ -29,7 +29,7 @@
  * these are not sufficient, you can always rederive your own further
  * specialization of this class.
  */
-class EXPCL_PANDAEGG EggPolysetMaker : public EggBinMaker {
+class EXPCL_PANDA_EGG EggPolysetMaker : public EggBinMaker {
 PUBLISHED:
   // The BinNumber serves to identify why a particular EggBin was created.
   enum BinNumber {

+ 1 - 1
panda/src/egg/eggPoolUniquifier.h

@@ -23,7 +23,7 @@
  * textures, materials, and vertex pools prior to writing out an egg file.
  * It's automatically called by EggData prior to writing out an egg file.
  */
-class EXPCL_PANDAEGG EggPoolUniquifier : public EggNameUniquifier {
+class EXPCL_PANDA_EGG EggPoolUniquifier : public EggNameUniquifier {
 PUBLISHED:
   EggPoolUniquifier();
 

+ 3 - 5
panda/src/egg/eggPrimitive.cxx

@@ -227,7 +227,7 @@ get_shading() const {
     if (!first_vertex->has_normal()) {
       first_vertex = this;
     }
-    for (int i = 1; i < get_num_vertices(); i++) {
+    for (size_t i = 1; i < get_num_vertices(); ++i) {
       const EggAttributes *vertex = get_vertex(i);
       if (!vertex->has_normal()) {
         vertex = this;
@@ -244,7 +244,7 @@ get_shading() const {
     if (!first_vertex->has_color()) {
       first_vertex = this;
     }
-    for (int i = 1; i < get_num_vertices(); i++) {
+    for (size_t i = 1; i < get_num_vertices(); ++i) {
       const EggAttributes *vertex = get_vertex(i);
       if (!vertex->has_color()) {
         vertex = this;
@@ -461,9 +461,7 @@ apply_first_attribute() {
 void EggPrimitive::
 post_apply_flat_attribute() {
   if (!empty()) {
-    for (int i = 0; i < (int)size(); i++) {
-      EggVertex *vertex = get_vertex(i);
-
+    for (EggVertex *vertex : _vertices) {
       // Use set_normal() instead of copy_normal(), to avoid getting the
       // morphs--we don't want them here, since we're just putting a bogus
       // value on the normal anyway.

+ 1 - 1
panda/src/egg/eggPrimitive.h

@@ -44,7 +44,7 @@ class EggVertexPool;
  * can.  However, it is necessary that all vertices belong to the same vertex
  * pool.
  */
-class EXPCL_PANDAEGG EggPrimitive : public EggNode, public EggAttributes,
+class EXPCL_PANDA_EGG EggPrimitive : public EggNode, public EggAttributes,
                      public EggRenderMode
 {
 

+ 6 - 6
panda/src/egg/eggRenderMode.h

@@ -28,7 +28,7 @@
  * EggPolygon level with multiple appearances of the EggObject base class.
  * And making EggObject a virtual base class is just no fun.
  */
-class EXPCL_PANDAEGG EggRenderMode {
+class EXPCL_PANDA_EGG EggRenderMode {
 PUBLISHED:
   EggRenderMode();
   INLINE EggRenderMode(const EggRenderMode &copy);
@@ -122,12 +122,12 @@ private:
   static TypeHandle _type_handle;
 };
 
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggRenderMode::AlphaMode mode);
-EXPCL_PANDAEGG std::istream &operator >> (std::istream &in, EggRenderMode::AlphaMode &mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::AlphaMode mode);
+EXPCL_PANDA_EGG std::istream &operator >> (std::istream &in, EggRenderMode::AlphaMode &mode);
 
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthWriteMode mode);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthTestMode mode);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggRenderMode::VisibilityMode mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthWriteMode mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::DepthTestMode mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggRenderMode::VisibilityMode mode);
 
 #include "eggRenderMode.I"
 

+ 1 - 1
panda/src/egg/eggSAnimData.h

@@ -22,7 +22,7 @@
  * Corresponding to an <S$Anim> entry, this stores a single column of numbers,
  * for instance for a morph target, or as one column in an EggXfmSAnim.
  */
-class EXPCL_PANDAEGG EggSAnimData : public EggAnimData {
+class EXPCL_PANDA_EGG EggSAnimData : public EggAnimData {
 PUBLISHED:
   INLINE explicit EggSAnimData(const std::string &name = "");
   INLINE EggSAnimData(const EggSAnimData &copy);

+ 1 - 1
panda/src/egg/eggSurface.h

@@ -21,7 +21,7 @@
 /**
  * A parametric surface of some kind.  See EggNurbsSurface.
  */
-class EXPCL_PANDAEGG EggSurface : public EggPrimitive {
+class EXPCL_PANDA_EGG EggSurface : public EggPrimitive {
 PUBLISHED:
   INLINE explicit EggSurface(const std::string &name = "");
   INLINE EggSurface(const EggSurface &copy);

+ 2 - 2
panda/src/egg/eggSwitchCondition.h

@@ -26,7 +26,7 @@
  * different kinds of switching conditions; presently, only a <Distance> type
  * is actually supported.
  */
-class EXPCL_PANDAEGG EggSwitchCondition : public EggObject {
+class EXPCL_PANDA_EGG EggSwitchCondition : public EggObject {
 PUBLISHED:
   virtual EggSwitchCondition *make_copy() const=0;
   virtual void write(std::ostream &out, int indent_level) const=0;
@@ -58,7 +58,7 @@ private:
  * A SwitchCondition that switches the levels-of-detail based on distance from
  * the camera's eyepoint.
  */
-class EXPCL_PANDAEGG EggSwitchConditionDistance : public EggSwitchCondition {
+class EXPCL_PANDA_EGG EggSwitchConditionDistance : public EggSwitchCondition {
 PUBLISHED:
   explicit EggSwitchConditionDistance(double switch_in, double switch_out,
                                       const LPoint3d &center, double fade = 0.0);

+ 1 - 1
panda/src/egg/eggTable.h

@@ -24,7 +24,7 @@
  * EggSAnimData or an EggXfmAnimData, which do.  It may also be a parent to
  * another <Table> or <Bundle>, establishing a hierarchy of tables.
  */
-class EXPCL_PANDAEGG EggTable : public EggGroupNode {
+class EXPCL_PANDA_EGG EggTable : public EggGroupNode {
 PUBLISHED:
   enum TableType {
     TT_invalid,

+ 14 - 14
panda/src/egg/eggTexture.h

@@ -27,7 +27,7 @@
 /**
  * Defines a texture map that may be applied to geometry.
  */
-class EXPCL_PANDAEGG EggTexture : public EggFilenameNode, public EggRenderMode, public EggTransform {
+class EXPCL_PANDA_EGG EggTexture : public EggFilenameNode, public EggRenderMode, public EggTransform {
 PUBLISHED:
   explicit EggTexture(const std::string &tref_name, const Filename &filename);
   EggTexture(const EggTexture &copy);
@@ -458,7 +458,7 @@ private:
  * Returns true if the two referenced EggTexture pointers are in sorted order,
  * false otherwise.
  */
-class EXPCL_PANDAEGG UniqueEggTextures {
+class EXPCL_PANDA_EGG UniqueEggTextures {
 public:
   INLINE UniqueEggTextures(int eq = ~0);
   INLINE bool operator ()(const EggTexture *t1, const EggTexture *t2) const;
@@ -470,18 +470,18 @@ INLINE std::ostream &operator << (std::ostream &out, const EggTexture &n) {
   return out << n.get_filename();
 }
 
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::TextureType texture_type);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::Format format);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::CompressionMode mode);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::WrapMode mode);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::FilterType type);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::EnvType type);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::CombineMode cm);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::CombineChannel cc);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::CombineSource cs);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::CombineOperand co);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::TexGen tex_gen);
-EXPCL_PANDAEGG std::ostream &operator << (std::ostream &out, EggTexture::QualityLevel quality_level);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::TextureType texture_type);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::Format format);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::CompressionMode mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::WrapMode mode);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::FilterType type);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::EnvType type);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::CombineMode cm);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::CombineChannel cc);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::CombineSource cs);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::CombineOperand co);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::TexGen tex_gen);
+EXPCL_PANDA_EGG std::ostream &operator << (std::ostream &out, EggTexture::QualityLevel quality_level);
 
 #include "eggTexture.I"
 

+ 1 - 1
panda/src/egg/eggTextureCollection.h

@@ -27,7 +27,7 @@
  * from an egg file and sort them all together; it can also manage the
  * creation of unique textures and the assignment of unique TRef names.
  */
-class EXPCL_PANDAEGG EggTextureCollection {
+class EXPCL_PANDA_EGG EggTextureCollection {
 
   // This is a bit of private interface stuff that must be here as a forward
   // reference.  This allows us to define the EggTextureCollection as an STL

+ 1 - 1
panda/src/egg/eggTransform.h

@@ -26,7 +26,7 @@
  * This may be either a 3-d transform, and therefore described by a 4x4
  * matrix, or a 2-d transform, described by a 3x3 matrix.
  */
-class EXPCL_PANDAEGG EggTransform {
+class EXPCL_PANDA_EGG EggTransform {
 PUBLISHED:
   EggTransform();
   EggTransform(const EggTransform &copy);

+ 1 - 1
panda/src/egg/eggTriangleFan.cxx

@@ -57,7 +57,7 @@ apply_first_attribute() {
   // In the case of a triangle fan, the first vertex of the fan is the common
   // vertex, so we consider the second vertex to be the key vertex of the
   // first triangle, and move from there.
-  for (int i = 0; i < get_num_components(); i++) {
+  for (size_t i = 0; i < get_num_components(); ++i) {
     EggAttributes *component = get_component(i);
     do_apply_flat_attribute(i + 1, component);
   }

+ 1 - 1
panda/src/egg/eggTriangleFan.h

@@ -22,7 +22,7 @@
  * A connected fan of triangles.  This does not normally appear in an egg
  * file; it is typically generated as a result of meshing.
  */
-class EXPCL_PANDAEGG EggTriangleFan : public EggCompositePrimitive {
+class EXPCL_PANDA_EGG EggTriangleFan : public EggCompositePrimitive {
 PUBLISHED:
   INLINE explicit EggTriangleFan(const std::string &name = "");
   INLINE EggTriangleFan(const EggTriangleFan &copy);

+ 1 - 1
panda/src/egg/eggTriangleStrip.h

@@ -22,7 +22,7 @@
  * A connected strip of triangles.  This does not normally appear in an egg
  * file; it is typically generated as a result of meshing.
  */
-class EXPCL_PANDAEGG EggTriangleStrip : public EggCompositePrimitive {
+class EXPCL_PANDA_EGG EggTriangleStrip : public EggCompositePrimitive {
 PUBLISHED:
   INLINE explicit EggTriangleStrip(const std::string &name = "");
   INLINE EggTriangleStrip(const EggTriangleStrip &copy);

+ 1 - 1
panda/src/egg/eggUserData.h

@@ -26,7 +26,7 @@
  * However, this data will not be written out to the disk when the egg file is
  * written; it is an in-memory object only.
  */
-class EXPCL_PANDAEGG EggUserData : public TypedReferenceCount {
+class EXPCL_PANDA_EGG EggUserData : public TypedReferenceCount {
 PUBLISHED:
   INLINE EggUserData();
   INLINE EggUserData(const EggUserData &copy);

+ 2 - 2
panda/src/egg/eggVertex.h

@@ -36,7 +36,7 @@ class EggPrimitive;
  * Any one-, two-, three-, or four-component vertex, possibly with attributes
  * such as a normal.
  */
-class EXPCL_PANDAEGG EggVertex : public EggObject, public EggAttributes {
+class EXPCL_PANDA_EGG EggVertex : public EggObject, public EggAttributes {
 public:
   typedef pset<EggGroup *> GroupRef;
   typedef pmultiset<EggPrimitive *> PrimitiveRef;
@@ -211,7 +211,7 @@ INLINE std::ostream &operator << (std::ostream &out, const EggVertex &vert) {
  * Returns true if the two referenced EggVertex pointers are in sorted order,
  * false otherwise.
  */
-class EXPCL_PANDAEGG UniqueEggVertices {
+class EXPCL_PANDA_EGG UniqueEggVertices {
 public:
   INLINE bool operator ()(const EggVertex *v1, const EggVertex *v2) const;
 };

+ 1 - 1
panda/src/egg/eggVertexAux.h

@@ -27,7 +27,7 @@
  * the vertex data, but will not otherwise interpret it.  Presumably, a shader
  * will process the data later.
  */
-class EXPCL_PANDAEGG EggVertexAux : public EggNamedObject {
+class EXPCL_PANDA_EGG EggVertexAux : public EggNamedObject {
 PUBLISHED:
   explicit EggVertexAux(const std::string &name, const LVecBase4d &aux);
   EggVertexAux(const EggVertexAux &copy);

+ 1 - 1
panda/src/egg/eggVertexPool.h

@@ -38,7 +38,7 @@
  * list.  The list may also be operated on (read-only) via iterators and
  * begin()/end().
  */
-class EXPCL_PANDAEGG EggVertexPool : public EggNode {
+class EXPCL_PANDA_EGG EggVertexPool : public EggNode {
 
   // This is a bit of private interface stuff that must be here as a forward
   // reference.  This allows us to define the EggVertexPool as an STL

+ 1 - 1
panda/src/egg/eggVertexUV.h

@@ -26,7 +26,7 @@
  * multitexturing, there may be multiple sets of UV's on a particular vertex,
  * each with its own name.
  */
-class EXPCL_PANDAEGG EggVertexUV : public EggNamedObject {
+class EXPCL_PANDA_EGG EggVertexUV : public EggNamedObject {
 PUBLISHED:
   explicit EggVertexUV(const std::string &name, const LTexCoordd &uv);
   explicit EggVertexUV(const std::string &name, const LTexCoord3d &uvw);

+ 1 - 1
panda/src/egg/eggXfmAnimData.h

@@ -26,7 +26,7 @@
  * is an older syntax of egg anim table, not often used currently--it's
  * replaced by EggXfmSAnim.
  */
-class EXPCL_PANDAEGG EggXfmAnimData : public EggAnimData {
+class EXPCL_PANDA_EGG EggXfmAnimData : public EggAnimData {
 PUBLISHED:
   INLINE explicit EggXfmAnimData(const std::string &name = "",
                                  CoordinateSystem cs = CS_default);

+ 1 - 1
panda/src/egg/eggXfmSAnim.h

@@ -25,7 +25,7 @@ class EggXfmAnimData;
  * It's implemented as a group that can contain any number of EggSAnimData
  * children.
  */
-class EXPCL_PANDAEGG EggXfmSAnim : public EggGroupNode {
+class EXPCL_PANDA_EGG EggXfmSAnim : public EggGroupNode {
 PUBLISHED:
   INLINE explicit EggXfmSAnim(const std::string &name = "",
                               CoordinateSystem cs = CS_default);

+ 1 - 1
panda/src/egg/parserDefs.h

@@ -40,7 +40,7 @@ void egg_cleanup_parser();
 // that has member functions in a union), so we'll use a class instead.  That
 // means we need to declare it externally, here.
 
-class EXPCL_PANDAEGG EggTokenType {
+class EXPCL_PANDA_EGG EggTokenType {
 public:
   double _number;
   unsigned long _ulong;

+ 3 - 3
panda/src/egg/pt_EggMaterial.h

@@ -24,9 +24,9 @@
  * the template class.  It's not strictly necessary, but it doesn't hurt.
  */
 
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerToBase<EggMaterial>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerTo<EggMaterial>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, ConstPointerTo<EggMaterial>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerToBase<EggMaterial>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerTo<EggMaterial>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, ConstPointerTo<EggMaterial>)
 
 typedef PointerTo<EggMaterial> PT_EggMaterial;
 typedef ConstPointerTo<EggMaterial> CPT_EggMaterial;

+ 3 - 3
panda/src/egg/pt_EggTexture.h

@@ -24,9 +24,9 @@
  * template class.  It's not strictly necessary, but it doesn't hurt.
  */
 
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerToBase<EggTexture>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerTo<EggTexture>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, ConstPointerTo<EggTexture>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerToBase<EggTexture>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerTo<EggTexture>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, ConstPointerTo<EggTexture>)
 
 typedef PointerTo<EggTexture> PT_EggTexture;
 typedef ConstPointerTo<EggTexture> CPT_EggTexture;

+ 3 - 3
panda/src/egg/pt_EggVertex.h

@@ -24,9 +24,9 @@
  * template class.  It's not strictly necessary, but it doesn't hurt.
  */
 
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerToBase<EggVertex>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, PointerTo<EggVertex>)
-EXPORT_TEMPLATE_CLASS(EXPCL_PANDAEGG, EXPTP_PANDAEGG, ConstPointerTo<EggVertex>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerToBase<EggVertex>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, PointerTo<EggVertex>)
+EXPORT_TEMPLATE_CLASS(EXPCL_PANDA_EGG, EXPTP_PANDA_EGG, ConstPointerTo<EggVertex>)
 
 typedef PointerTo<EggVertex> PT_EggVertex;
 typedef ConstPointerTo<EggVertex> CPT_EggVertex;

+ 2 - 2
panda/src/egg/vector_PT_EggMaterial.h

@@ -28,8 +28,8 @@
  * file, rather than defining the vector again.
  */
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE PT_EggMaterial
 #define NAME vector_PT_EggMaterial
 

+ 2 - 2
panda/src/egg/vector_PT_EggTexture.h

@@ -28,8 +28,8 @@
  * file, rather than defining the vector again.
  */
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE PT_EggTexture
 #define NAME vector_PT_EggTexture
 

+ 2 - 2
panda/src/egg/vector_PT_EggVertex.cxx

@@ -13,8 +13,8 @@
 
 #include "vector_PT_EggVertex.h"
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE PT_EggVertex
 #define NAME vector_PT_EggVertex
 

+ 2 - 2
panda/src/egg/vector_PT_EggVertex.h

@@ -28,8 +28,8 @@
  * rather than defining the vector again.
  */
 
-#define EXPCL EXPCL_PANDAEGG
-#define EXPTP EXPTP_PANDAEGG
+#define EXPCL EXPCL_PANDA_EGG
+#define EXPTP EXPTP_PANDA_EGG
 #define TYPE PT_EggVertex
 #define NAME vector_PT_EggVertex
 

+ 1 - 1
panda/src/egg2pg/animBundleMaker.h

@@ -32,7 +32,7 @@ class AnimChannelMatrixXfmTable;
  * Converts an EggTable hierarchy, beginning with a <Bundle> entry, into an
  * AnimBundle hierarchy.
  */
-class EXPCL_PANDAEGG AnimBundleMaker {
+class EXPCL_PANDA_EGG2PG AnimBundleMaker {
 public:
   explicit AnimBundleMaker(EggTable *root);
 

+ 1 - 1
panda/src/egg2pg/characterMaker.h

@@ -42,7 +42,7 @@ class PandaNode;
  * Converts an EggGroup hierarchy, beginning with a group with <Dart> set, to
  * a character node with joints.
  */
-class EXPCL_PANDAEGG CharacterMaker {
+class EXPCL_PANDA_EGG2PG CharacterMaker {
 public:
   CharacterMaker(EggGroup *root, EggLoader &loader, bool structured = false);
 

+ 2 - 2
panda/src/egg2pg/config_egg2pg.cxx

@@ -20,8 +20,8 @@
 #include "configVariableCore.h"
 #include "eggRenderState.h"
 
-#if !defined(CPPPARSER) && !defined(BUILDING_PANDAEGG)
-  #error Buildsystem error: BUILDING_PANDAEGG not defined
+#if !defined(CPPPARSER) && !defined(BUILDING_PANDA_EGG2PG)
+  #error Buildsystem error: BUILDING_PANDA_EGG2PG not defined
 #endif
 
 ConfigureDef(config_egg2pg);

+ 29 - 29
panda/src/egg2pg/config_egg2pg.h

@@ -25,36 +25,36 @@
 #include "configVariableInt.h"
 #include "dconfig.h"
 
-ConfigureDecl(config_egg2pg, EXPCL_PANDAEGG, EXPTP_PANDAEGG);
-NotifyCategoryDecl(egg2pg, EXPCL_PANDAEGG, EXPTP_PANDAEGG);
+ConfigureDecl(config_egg2pg, EXPCL_PANDA_EGG2PG, EXPTP_PANDA_EGG2PG);
+NotifyCategoryDecl(egg2pg, EXPCL_PANDA_EGG2PG, EXPTP_PANDA_EGG2PG);
 
-extern EXPCL_PANDAEGG ConfigVariableDouble egg_normal_scale;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_show_normals;
-extern EXPCL_PANDAEGG ConfigVariableEnum<CoordinateSystem> egg_coordinate_system;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_ignore_mipmaps;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_ignore_filters;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_ignore_clamp;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_ignore_decals;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_flatten;
-extern EXPCL_PANDAEGG ConfigVariableDouble egg_flatten_radius;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_unify;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_combine_geoms;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_rigid_geometry;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_flat_shading;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_flat_colors;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_load_old_curves;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_load_classic_nurbs_curves;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_accept_errors;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_suppress_hidden;
-extern EXPCL_PANDAEGG ConfigVariableEnum<EggRenderMode::AlphaMode> egg_alpha_mode;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_max_vertices;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_max_indices;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_emulate_bface;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_preload_simple_textures;
-extern EXPCL_PANDAEGG ConfigVariableDouble egg_vertex_membership_quantize;
-extern EXPCL_PANDAEGG ConfigVariableInt egg_vertex_max_num_joints;
-extern EXPCL_PANDAEGG ConfigVariableBool egg_implicit_alpha_binary;
+extern EXPCL_PANDA_EGG2PG ConfigVariableDouble egg_normal_scale;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_show_normals;
+extern EXPCL_PANDA_EGG2PG ConfigVariableEnum<CoordinateSystem> egg_coordinate_system;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_ignore_mipmaps;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_ignore_filters;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_ignore_clamp;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_ignore_decals;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_flatten;
+extern EXPCL_PANDA_EGG2PG ConfigVariableDouble egg_flatten_radius;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_unify;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_combine_geoms;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_rigid_geometry;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_flat_shading;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_flat_colors;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_load_old_curves;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_load_classic_nurbs_curves;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_accept_errors;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_suppress_hidden;
+extern EXPCL_PANDA_EGG2PG ConfigVariableEnum<EggRenderMode::AlphaMode> egg_alpha_mode;
+extern EXPCL_PANDA_EGG2PG ConfigVariableInt egg_max_vertices;
+extern EXPCL_PANDA_EGG2PG ConfigVariableInt egg_max_indices;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_emulate_bface;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_preload_simple_textures;
+extern EXPCL_PANDA_EGG2PG ConfigVariableDouble egg_vertex_membership_quantize;
+extern EXPCL_PANDA_EGG2PG ConfigVariableInt egg_vertex_max_num_joints;
+extern EXPCL_PANDA_EGG2PG ConfigVariableBool egg_implicit_alpha_binary;
 
-extern EXPCL_PANDAEGG void init_libegg2pg();
+extern EXPCL_PANDA_EGG2PG void init_libegg2pg();
 
 #endif

+ 2 - 2
panda/src/egg2pg/eggSaver.cxx

@@ -560,7 +560,7 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
         // Get an arbitrary vector on the plane by taking the cross product
         // with any vector, as long as it is different.
         LVector3 vec1;
-        if (abs(normal[2]) > abs(normal[1])) {
+        if (std::fabs(normal[2]) > std::fabs(normal[1])) {
           vec1 = normal.cross(LVector3(0, 1, 0));
         } else {
           vec1 = normal.cross(LVector3(0, 0, 1));
@@ -626,7 +626,7 @@ convert_collision_node(CollisionNode *node, const WorkingNodePath &node_path,
         // Also get an arbitrary vector perpendicular to the tube.
         LVector3 axis = point_b - point_a;
         LVector3 sideways;
-        if (abs(axis[2]) > abs(axis[1])) {
+        if (std::fabs(axis[2]) > std::fabs(axis[1])) {
           sideways = axis.cross(LVector3(0, 1, 0));
         } else {
           sideways = axis.cross(LVector3(0, 0, 1));

+ 2 - 2
panda/src/egg2pg/egg_parametrics.h

@@ -29,7 +29,7 @@ BEGIN_PUBLISH
  * the object is invalid.  If there is vertex color, it will be applied to
  * values 0 - 3 of the extended vertex values.
  */
-EXPCL_PANDAEGG PT(NurbsSurfaceEvaluator)
+EXPCL_PANDA_EGG2PG PT(NurbsSurfaceEvaluator)
 make_nurbs_surface(EggNurbsSurface *egg_surface, const LMatrix4d &mat);
 
 /**
@@ -38,7 +38,7 @@ make_nurbs_surface(EggNurbsSurface *egg_surface, const LMatrix4d &mat);
  * object is invalid.  If there is vertex color, it will be applied to values
  * 0 - 3 of the extended vertex values.
  */
-EXPCL_PANDAEGG PT(NurbsCurveEvaluator)
+EXPCL_PANDA_EGG2PG PT(NurbsCurveEvaluator)
 make_nurbs_curve(EggNurbsCurve *egg_curve, const LMatrix4d &mat);
 
 END_PUBLISH

+ 2 - 2
panda/src/egg2pg/load_egg_file.h

@@ -31,7 +31,7 @@ BEGIN_PUBLISH
  * Also see the EggLoader class, which can exercise a bit more manual control
  * over the loading process.
  */
-EXPCL_PANDAEGG PT(PandaNode)
+EXPCL_PANDA_EGG2PG PT(PandaNode)
 load_egg_file(const Filename &filename, CoordinateSystem cs = CS_default,
               BamCacheRecord *record = nullptr);
 
@@ -40,7 +40,7 @@ load_egg_file(const Filename &filename, CoordinateSystem cs = CS_default,
  * already-filled EggData structure.  The structure is destroyed in the
  * loading.
  */
-EXPCL_PANDAEGG PT(PandaNode)
+EXPCL_PANDA_EGG2PG PT(PandaNode)
 load_egg_data(EggData *data, CoordinateSystem cs = CS_default);
 END_PUBLISH
 

+ 1 - 1
panda/src/egg2pg/loaderFileTypeEgg.h

@@ -21,7 +21,7 @@
 /**
  * This defines the Loader interface to read Egg files.
  */
-class EXPCL_PANDAEGG LoaderFileTypeEgg : public LoaderFileType {
+class EXPCL_PANDA_EGG2PG LoaderFileTypeEgg : public LoaderFileType {
 public:
   LoaderFileTypeEgg();
 

+ 2 - 2
panda/src/egg2pg/save_egg_file.h

@@ -25,7 +25,7 @@ BEGIN_PUBLISH
  * A convenience function; converts the indicated scene graph to an egg file
  * and writes it to disk.
  */
-EXPCL_PANDAEGG bool
+EXPCL_PANDA_EGG2PG bool
 save_egg_file(const Filename &filename, PandaNode *node,
               CoordinateSystem cs = CS_default);
 
@@ -33,7 +33,7 @@ save_egg_file(const Filename &filename, PandaNode *node,
  * Another convenience function; works like save_egg_file() but populates an
  * EggData instead of writing the results to disk.
  */
-EXPCL_PANDAEGG bool
+EXPCL_PANDA_EGG2PG bool
 save_egg_data(EggData *data, PandaNode *node);
 END_PUBLISH
 

+ 1 - 1
panda/src/event/asyncTaskSequence.I

@@ -34,7 +34,7 @@ get_repeat_count() const {
  * Returns the index of the task within the sequence that is currently being
  * executed (or that will be executed at the next epoch).
  */
-INLINE int AsyncTaskSequence::
+INLINE size_t AsyncTaskSequence::
 get_current_task_index() const {
   return _task_index;
 }

+ 2 - 2
panda/src/event/asyncTaskSequence.h

@@ -39,7 +39,7 @@ PUBLISHED:
   INLINE void set_repeat_count(int repeat_count);
   INLINE int get_repeat_count() const;
 
-  INLINE int get_current_task_index() const;
+  INLINE size_t get_current_task_index() const;
 
 protected:
   virtual bool is_runnable();
@@ -51,7 +51,7 @@ private:
   void set_current_task(AsyncTask *task, bool clean_exit);
 
   int _repeat_count;
-  int _task_index;
+  size_t _task_index;
   PT(AsyncTask) _current_task;
 
 public:

+ 3 - 3
panda/src/express/virtualFileMountAndroidAsset.cxx

@@ -290,10 +290,10 @@ seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
 
   int whence;
   switch (dir) {
-  case ios_base::beg:
+  case std::ios_base::beg:
     whence = SEEK_SET;
     break;
-  case ios_base::cur:
+  case std::ios_base::cur:
     if (off == 0) {
       // Just requesting the current position, no need to void the buffer.
       return AAsset_seek(_asset, 0, SEEK_CUR) - n;
@@ -305,7 +305,7 @@ seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
     }
     whence = SEEK_CUR;
     break;
-  case ios_base::end:
+  case std::ios_base::end:
     whence = SEEK_END;
     break;
   default:

+ 1 - 1
panda/src/framework/pandaFramework.cxx

@@ -91,7 +91,7 @@ open_framework(int &argc, char **&argv) {
   // If we're statically linking, we need to explicitly link with at least one
   // of the available renderers.
   #if defined(HAVE_GL)
-  extern EXPCL_PANDAGL void init_libpandagl();
+  extern void init_libpandagl();
   init_libpandagl();
   #elif defined(HAVE_DX9)
   extern EXPCL_PANDADX void init_libpandadx9();

+ 2 - 2
panda/src/glgsg/config_glgsg.cxx

@@ -16,8 +16,8 @@
 
 #include "dconfig.h"
 
-#if !defined(CPPPARSER) && !defined(BUILDING_PANDAGL)
-  #error Buildsystem error: BUILDING_PANDAGL not defined
+#if !defined(CPPPARSER) && !defined(BUILDING_PANDA_GLGSG)
+  #error Buildsystem error: BUILDING_PANDA_GLGSG not defined
 #endif
 
 ConfigureDef(config_glgsg);

+ 3 - 3
panda/src/glgsg/config_glgsg.h

@@ -18,9 +18,9 @@
 #include "notifyCategoryProxy.h"
 #include "dconfig.h"
 
-ConfigureDecl(config_glgsg, EXPCL_PANDAGL, EXPTP_PANDAGL);
-NotifyCategoryDecl(glgsg, EXPCL_PANDAGL, EXPTP_PANDAGL);
+ConfigureDecl(config_glgsg, EXPCL_PANDA_GLGSG, EXPTP_PANDA_GLGSG);
+NotifyCategoryDecl(glgsg, EXPCL_PANDA_GLGSG, EXPTP_PANDA_GLGSG);
 
-extern EXPCL_PANDAGL void init_libglgsg();
+extern EXPCL_PANDA_GLGSG void init_libglgsg();
 
 #endif

+ 2 - 2
panda/src/glgsg/glgsg.h

@@ -37,8 +37,8 @@
 #define GLSYSTEM_NAME "OpenGL"
 #define CONFIGOBJ config_glgsg
 #define GLCAT glgsg_cat
-#define EXPCL_GL EXPCL_PANDAGL
-#define EXPTP_GL EXPTP_PANDAGL
+#define EXPCL_GL EXPCL_PANDA_GLGSG
+#define EXPTP_GL EXPTP_PANDA_GLGSG
 
 #if MIN_GL_VERSION_MAJOR > 1 || (MIN_GL_VERSION_MAJOR == 1 && MIN_GL_VERSION_MINOR >= 2)
 #define EXPECT_GL_VERSION_1_2

+ 1 - 1
panda/src/glstuff/glGraphicsStateGuardian_src.cxx

@@ -3007,7 +3007,7 @@ reset() {
 
 #ifndef OPENGLES_1
   _enabled_vertex_attrib_arrays.clear();
-  memset(_vertex_attrib_divisors, 0, sizeof(GLint) * 32);
+  memset(_vertex_attrib_divisors, 0, sizeof(GLuint) * 32);
 #endif
 
   // Dither is on by default in GL; let's turn it off

+ 1 - 1
panda/src/glstuff/glGraphicsStateGuardian_src.h

@@ -661,7 +661,7 @@ protected:
 
 #ifndef OPENGLES_1
   BitMask32 _enabled_vertex_attrib_arrays;
-  GLint _vertex_attrib_divisors[32];
+  GLuint _vertex_attrib_divisors[32];
 
   PT(Shader) _current_shader;
   ShaderContext *_current_shader_context;

+ 3 - 3
panda/src/glstuff/glmisc_src.h

@@ -40,8 +40,8 @@
 
 // #define GSG_VERBOSE 1
 
-extern ConfigVariableInt gl_version;
-extern EXPCL_PANDAGL ConfigVariableBool gl_support_fbo;
+extern EXPCL_GL ConfigVariableInt gl_version;
+extern EXPCL_GL ConfigVariableBool gl_support_fbo;
 extern ConfigVariableBool gl_cheap_textures;
 extern ConfigVariableBool gl_ignore_clamp;
 extern ConfigVariableBool gl_support_clamp_to_border;
@@ -58,7 +58,7 @@ extern ConfigVariableBool gl_interleaved_arrays;
 extern ConfigVariableBool gl_parallel_arrays;
 extern ConfigVariableInt gl_max_errors;
 extern ConfigVariableEnum<GeomEnums::UsageHint> gl_min_buffer_usage_hint;
-extern ConfigVariableBool gl_debug;
+extern EXPCL_GL ConfigVariableBool gl_debug;
 extern ConfigVariableBool gl_debug_synchronous;
 extern ConfigVariableEnum<NotifySeverity> gl_debug_abort_level;
 extern ConfigVariableBool gl_debug_object_labels;

+ 2 - 2
panda/src/glxdisplay/config_glxdisplay.cxx

@@ -23,8 +23,8 @@
 #include "dconfig.h"
 #include "pandaSystem.h"
 
-#if !defined(CPPPARSER) && !defined(BUILDING_PANDAGL)
-  #error Buildsystem error: BUILDING_PANDAGL not defined
+#if !defined(CPPPARSER) && !defined(BUILDING_PANDA_GLXDISPLAY)
+  #error Buildsystem error: BUILDING_PANDA_GLXDISPLAY not defined
 #endif
 
 Configure(config_glxdisplay);

Some files were not shown because too many files changed in this diff