Revert "Drop requirement for user code to call CBase_foo::pup(p)"
authorPhil Miller <mille121@illinois.edu>
Sat, 7 Jan 2012 08:04:59 +0000 (02:04 -0600)
committerPhil Miller <mille121@illinois.edu>
Sat, 7 Jan 2012 08:04:59 +0000 (02:04 -0600)
This reverts commit 0bd6105523351c97b7d6424c3b0227d6e5326498.

Conflicts:

doc/charm++/pup.tex
src/ck-core/cklocation.C

20 files changed:
doc/charm++/arrays.tex
doc/charm++/loadb.tex
doc/charm++/pup.tex
doc/charm++/sdag.tex
src/ck-core/charm++.h
src/ck-core/cklocation.C
tests/charm++/chkpt/hello.C
tests/charm++/commtest/comlib/bench.C
tests/charm++/commtest/comlib/benchmulti.C
tests/charm++/commtest/comlib/benchsectionmulti.C
tests/charm++/commtest/comlib/hello.C
tests/charm++/commtest/eachtomany-test-2/eachtomany.C
tests/charm++/commtest/eachtomany/eachtomany.C
tests/charm++/delegation/multicast/hello.C
tests/charm++/delegation/pipelined-section-reduction/hello.C
tests/charm++/load_balancing/lb_test/lb_test.C
tests/charm++/load_balancing/lb_test/predictor/test.C
tests/charm++/megatest/inherit.C
tests/charm++/megatest/migration.C
tests/charm++/sdag/migration/test1.C

index 1093b8744dac768f07d47b4b46cd144bb6c46928..e57fe181988e09fc33ff23e7287f1c1adf6a000c 100644 (file)
@@ -683,6 +683,7 @@ public:
 //In the .C file:
 void A2::pup(PUP::er \&p)
 \{
 //In the .C file:
 void A2::pup(PUP::er \&p)
 \{
+    CBase\_A2::pup(p); //<- MUST call superclass's pup routine
     p|nt;
     p|chr;
     p(flt,7);
     p|nt;
     p|chr;
     p(flt,7);
index 87d0637e3c544f25db88134665e408fdeede1a23..01722746586c96c2076b771f39c51f4115400ef1 100644 (file)
@@ -716,6 +716,7 @@ public:
   
   /* Must be written for migration to succeed */
   void pup(PUP::er &p){
   
   /* Must be written for migration to succeed */
   void pup(PUP::er &p){
+    CBase_LBExample::pup(p);
     p|workcnt;
     /* There may be some more variables used in doWork */
   }
     p|workcnt;
     /* There may be some more variables used in doWork */
   }
index fda262dc58c8f4fd1d3d692221e22d521fdf96e3..e30ae60562fe7d0c62dfcfd7cfa2d256d722390b 100644 (file)
@@ -24,6 +24,7 @@ class foo : public mySuperclass \{
 
     //pack/unpack routine: describe my fields to charm++
     void pup(PUP::er &p) \{
 
     //pack/unpack routine: describe my fields to charm++
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|a;
       p|x; p|y; p|z;
       PUParray(p,arr,3);
       p|a;
       p|x; p|y; p|z;
       PUParray(p,arr,3);
@@ -49,16 +50,11 @@ We often use ``pup'' as a verb, meaning ``to save/restore the value of''
 or equivalently, ``to call the pup routine of''.
 
 Pup routines for complicated objects normally call the pup routines
 or equivalently, ``to call the pup routine of''.
 
 Pup routines for complicated objects normally call the pup routines
-for their simpler parts. If your class's declaration in the ci file
-includes a parent class, the generated code in CBase will call that
-class's pup routine automatically\footnote{In versions of \charmpp
-  prior to 6.4, this was not automatic. Older code called
-  \kw{CBase\_ClassName::pup(p)} at the beginning of each pup
-  routine. This has been made a no-op so as not to break the API.}. If
-your class has a parent class that is not declared in the ci file, you
-are responsible for packing it appropriately, either by calling its
-pup routine explicitly from your own, or by packing its fields
-individually.
+for their simpler parts.  Since all objects depend on their immediate
+superclass, the first line of every pup routine is a call to the 
+superclass's pup routine---the only time you shouldn't call your superclass's
+pup routine is when you don't have a superclass.  If your superclass has
+no pup routine, you must pup the values in the superclass yourself.
 
 
 \paragraph{PUP operator}
 
 
 \paragraph{PUP operator}
@@ -183,6 +179,7 @@ class bar : public barParent \{
     ...other methods...
 
     virtual void pup(PUP::er& p) \{
     ...other methods...
 
     virtual void pup(PUP::er& p) \{
+      barParent::pup(p);
       __sdag_pup(p);
       ...pup other data here...
     \}
       __sdag_pup(p);
       ...pup other data here...
     \}
@@ -282,6 +279,7 @@ private:
 public:
     keepsFoo(void) \{ \}
     void pup(PUP::er &p) \{
 public:
     keepsFoo(void) \{ \}
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|f; // pup f's fields (calls f.pup(p);) 
     \}
     ~keepsFoo() \{ \}
       p|f; // pup f's fields (calls f.pup(p);) 
     \}
     ~keepsFoo() \{ \}
@@ -303,6 +301,7 @@ public:
       f=new foo;
     \}
     void pup(PUP::er &p) \{
       f=new foo;
     \}
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|*f; // pup f's fields (calls f->pup(p))
     \}
     ~keepsHeapFoo() \{delete f;\}
       p|*f; // pup f's fields (calls f->pup(p))
     \}
     ~keepsHeapFoo() \{delete f;\}
@@ -323,6 +322,7 @@ public:
     keepsOneFoo(...) \{f=new foo(...);\}
     keepsOneFoo() \{f=NULL;\} /* pup constructor */
     void pup(PUP::er &p) \{
     keepsOneFoo(...) \{f=new foo(...);\}
     keepsOneFoo() \{f=NULL;\} /* pup constructor */
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       ...
       if (p.isUnpacking()) /* must allocate foo now */
          f=new foo(...);
       ...
       if (p.isUnpacking()) /* must allocate foo now */
          f=new foo(...);
@@ -353,6 +353,7 @@ public:
     keepsDoubles() \{ \} 
     
     void pup(PUP::er &p) \{
     keepsDoubles() \{ \} 
     
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|n;//pup the array length n
       if (p.isUnpacking())  arr=new double[n];
       PUParray(p,arr,n); //pup data in the array
       p|n;//pup the array length n
       if (p.isUnpacking())  arr=new double[n];
       PUParray(p,arr,n); //pup data in the array
@@ -376,6 +377,7 @@ public:
     keepsNullFoo(...) \{ if (...) f=new foo(...);\}
     keepsNullFoo() \{f=NULL;\}
     void pup(PUP::er &p) \{
     keepsNullFoo(...) \{ if (...) f=new foo(...);\}
     keepsNullFoo() \{f=NULL;\}
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       int has_f=(f!=NULL);
       p|has_f;
       if (has_f) {
       int has_f=(f!=NULL);
       p|has_f;
       if (has_f) {
@@ -410,6 +412,7 @@ public:
     keepsFoos() \{ arr=NULL; \} 
     
     void pup(PUP::er &p) \{
     keepsFoos() \{ arr=NULL; \} 
     
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|n;//pup the array length n
       if (p.isUnpacking())  arr=new foo[n];
       PUParray(p,arr,n); //pup each foo in the array
       p|n;//pup the array length n
       if (p.isUnpacking())  arr=new foo[n];
       PUParray(p,arr,n); //pup each foo in the array
@@ -441,6 +444,7 @@ public:
     keepsFooPtrs() \{ arr=NULL; \} 
     
     void pup(PUP::er &p) \{
     keepsFooPtrs() \{ arr=NULL; \} 
     
     void pup(PUP::er &p) \{
+      mySuperclass::pup(p);
       p|n;//pup the array length n
       if (p.isUnpacking()) arr=new foo*[n]; // allocate array
       for (int i=0;i<n;i++) \{
       p|n;//pup the array length n
       if (p.isUnpacking()) arr=new foo*[n]; // allocate array
       for (int i=0;i<n;i++) \{
index 697ec30ccba3f6fae6f6ae92f1b42b6b6fc2b703..0500b52b6aff500a629dadd5f5c6a990183d9015 100644 (file)
@@ -202,6 +202,7 @@ public:
     \}
     
     void pup(PUP::er &p) \{
     \}
     
     void pup(PUP::er &p) \{
+       CBase_Foo::pup(p);
        __sdag_pup(p);
     \}
 \};
        __sdag_pup(p);
     \}
 \};
index b2e381d69fa8d9740946b0088114a1547025c818..f3ff6d784015f69bc8734a706097e80dfbb5a6a1 100644 (file)
@@ -273,7 +273,6 @@ class Chare {
     Chare(CkMigrateMessage *m);
     Chare();
     virtual ~Chare(); //<- needed for *any* child to have a virtual destructor
     Chare(CkMigrateMessage *m);
     Chare();
     virtual ~Chare(); //<- needed for *any* child to have a virtual destructor
-    virtual void base_pup(PUP::er &p) { }
     virtual void pup(PUP::er &p);//<- pack/unpack routine
     inline const CkChareID &ckGetChareID(void) const {return thishandle;}
     inline void CkGetChareID(CkChareID *dest) const {*dest=thishandle;}
     virtual void pup(PUP::er &p);//<- pack/unpack routine
     inline const CkChareID &ckGetChareID(void) const {return thishandle;}
     inline void CkGetChareID(CkChareID *dest) const {*dest=thishandle;}
@@ -351,11 +350,10 @@ public:
 
        CBaseT1(void) :Parent()  { thisProxy=this; }
        CBaseT1(CkMigrateMessage *m) :Parent(m) { thisProxy=this; }
 
        CBaseT1(void) :Parent()  { thisProxy=this; }
        CBaseT1(CkMigrateMessage *m) :Parent(m) { thisProxy=this; }
-        void base_pup(PUP::er &p) {
+       void pup(PUP::er &p) {
                Parent::pup(p);
                p|thisProxy;
        }
                Parent::pup(p);
                p|thisProxy;
        }
-        void pup(PUP::er &p) { }
 };
 
 /*Templated version of above for multiple (at least duplicate) inheritance:*/
 };
 
 /*Templated version of above for multiple (at least duplicate) inheritance:*/
@@ -368,12 +366,11 @@ public:
                { thisProxy = (Parent1 *)this; }
        CBaseT2(CkMigrateMessage *m) :Parent1(m), Parent2(m)
                { thisProxy = (Parent1 *)this; } 
                { thisProxy = (Parent1 *)this; }
        CBaseT2(CkMigrateMessage *m) :Parent1(m), Parent2(m)
                { thisProxy = (Parent1 *)this; } 
-        void base_pup(PUP::er &p) {
+       void pup(PUP::er &p) {
                Parent1::pup(p);
                Parent2::pup(p);
                p|thisProxy;
        }
                Parent1::pup(p);
                Parent2::pup(p);
                p|thisProxy;
        }
-        void pup(PUP::er &p) { }
 
 //These overloads are needed to prevent ambiguity for multiple inheritance:
        inline const CkChareID &ckGetChareID(void) const
 
 //These overloads are needed to prevent ambiguity for multiple inheritance:
        inline const CkChareID &ckGetChareID(void) const
@@ -389,11 +386,10 @@ public:
   BASEN(n)() : base(), PARENTN(n)() {}                               \
   BASEN(n)(CkMigrateMessage *m)                                       \
          : base(m), PARENTN(n)(m) {}                                 \
   BASEN(n)() : base(), PARENTN(n)() {}                               \
   BASEN(n)(CkMigrateMessage *m)                                       \
          : base(m), PARENTN(n)(m) {}                                 \
-  void base_pup(PUP::er &p) {                                         \
+  void pup(PUP::er &p) {                                              \
     base::pup(p);                                                     \
     PARENTN(n)::pup(p);                                               \
   }                                                                   \
     base::pup(p);                                                     \
     PARENTN(n)::pup(p);                                               \
   }                                                                   \
-  void pup(PUP::er &p) { }                                            \
   static int isIrreducible() {                                        \
     return (base::isIrreducible() && PARENTN(n)::isIrreducible());    \
   }
   static int isIrreducible() {                                        \
     return (base::isIrreducible() && PARENTN(n)::isIrreducible());    \
   }
index a49aefdf145b9fa3acd91b71316851d430065a62..f026c0f52cdd158dd1ff7d59af989b64e9dbf46f 100644 (file)
@@ -901,7 +901,6 @@ void CkArrayPrefetch_writeToSwap(FILE *swapfile,void *objptr) {
 
   //Save the element's data to disk:
   PUP::toDisk p(swapfile);
 
   //Save the element's data to disk:
   PUP::toDisk p(swapfile);
-  elt->base_pup(p);
   elt->pup(p);
 
   //Call the element's destructor in-place (so pointer doesn't change)
   elt->pup(p);
 
   //Call the element's destructor in-place (so pointer doesn't change)
@@ -924,7 +923,6 @@ void CkArrayPrefetch_readFromSwap(FILE *swapfile,void *objptr) {
   
   //Restore the element's data from disk:
   PUP::fromDisk p(swapfile);
   
   //Restore the element's data from disk:
   PUP::fromDisk p(swapfile);
-  elt->base_pup(p);
   elt->pup(p);
 }
 
   elt->pup(p);
 }
 
@@ -2101,9 +2099,7 @@ CmiBool CkLocMgr::addElementToRec(CkLocRec_local *rec,ManagerRec *m,
 
 #if CMK_OUT_OF_CORE
        /* Register new element with out-of-core */
 
 #if CMK_OUT_OF_CORE
        /* Register new element with out-of-core */
-       PUP::sizer p_getSize;
-        elt->base_pup(p_getSize);
-        elt->pup(p_getSize);
+       PUP::sizer p_getSize; elt->pup(p_getSize);
        elt->prefetchObjID=CooRegisterObject(&CkArrayElementPrefetcher,p_getSize.size(),elt);
 #endif
        
        elt->prefetchObjID=CooRegisterObject(&CkArrayElementPrefetcher,p_getSize.size(),elt);
 #endif
        
@@ -2517,7 +2513,6 @@ void CkLocMgr::pupElementsFor(PUP::er &p,CkLocRec_local *rec,
                CkMigratable *elt=m->element(localIdx);
                if (elt!=NULL)
                 {
                CkMigratable *elt=m->element(localIdx);
                if (elt!=NULL)
                 {
-                        elt->base_pup(p);
                         elt->pup(p);
 #if CMK_ERROR_CHECKING
                         if (p.isUnpacking()) elt->sanitycheck();
                         elt->pup(p);
 #if CMK_ERROR_CHECKING
                         if (p.isUnpacking()) elt->sanitycheck();
index a956a34b939c38918442a79ff3b2f0f8e4ccb514..763d0e220c5a132407d72fa061d26f79de82dc5d 100644 (file)
@@ -63,6 +63,7 @@ public:
   }
 
   void pup(PUP::er &p){
   }
 
   void pup(PUP::er &p){
+    CBase_Main::pup(p);
     p|step;
     p|a; p(b,2);
     CkPrintf("Main's PUPer. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
     p|step;
     p|a; p(b,2);
     CkPrintf("Main's PUPer. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
@@ -87,6 +88,7 @@ public:
   }
   
   void pup(PUP::er &p){
   }
   
   void pup(PUP::er &p){
+    CBase_Hello::pup(p);
     p|step;
   }
 };
     p|step;
   }
 };
@@ -104,6 +106,7 @@ public:
   }
 
   void pup(PUP::er &p){
   }
 
   void pup(PUP::er &p){
+    CBase_CHello::pup(p);
     p|step;
     printf("CHello's PUPer. step=%d.\n", step);
   }
     p|step;
     printf("CHello's PUPer. step=%d.\n", step);
   }
index 878b9fe6af0e8ba58051670fe67fb49f1dcd5ba4..13579d71b75c2120f49a5ac61f7bcd162a21f860 100644 (file)
@@ -297,6 +297,7 @@ public:
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
 
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
 
+        CBase_Bench::pup(p);
         p | pass ;
         p | mcount ;
         p | ite ;
         p | pass ;
         p | mcount ;
         p | ite ;
index 795b78512fb085dbd2ba98b2a6f45158433453cc..48b8aa03dfff54adb0f04c4117e89c4f3f75fd47 100644 (file)
@@ -189,6 +189,7 @@ public:
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
 
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
 
+        CBase_Bench::pup(p);
         p | pass ;
         p | mcount ;
         p | time;
         p | pass ;
         p | mcount ;
         p | time;
index 0454a303c8297927692be8dae474877829fe6349..13c26f6c1b3266822d5161ecbb2983e7d873b253 100644 (file)
@@ -182,6 +182,7 @@ public:
         //if(p.isPacking())
         //            CkPrintf("Migrating from %d\n", CkMyPe());
 
         //if(p.isPacking())
         //            CkPrintf("Migrating from %d\n", CkMyPe());
 
+        CBase_Bench::pup(p);
         p | pass ;
         p | mcount ;
         p | time;
         p | pass ;
         p | mcount ;
         p | time;
index d17eaf512bd745052b5279398e3d96912299fe71..c38c5452cff9aa70bdf3533ac23caa01ae324016 100644 (file)
@@ -217,6 +217,7 @@ public:
   }
 
   void pup(PUP::er &p) {
   }
 
   void pup(PUP::er &p) {
+      CBase_Hello::pup(p);
       p | comlib;
       p | verbose;
 
       p | comlib;
       p | verbose;
 
index acc65c650cd92cf7374a4b0d4d9275ee73a6002c..56dbe61ebdb086210cfb0fff01c9c8789f43cc37 100644 (file)
@@ -149,6 +149,10 @@ public:
   }
   
   void pup(PUP::er &p){
   }
   
   void pup(PUP::er &p){
+         
+         // Call PUP Routine for superclass
+         CBase_EachToManyArray::pup(p);
+         
          if(p.isUnpacking()){
                  localProxy = thisProxy;
                  ComlibAssociateProxy(stratEachToManyArray, localProxy);
          if(p.isUnpacking()){
                  localProxy = thisProxy;
                  ComlibAssociateProxy(stratEachToManyArray, localProxy);
index c1ebecf53ba04e8e3db783f0be1a0d3d2b5c9c73..d3579f85e490bf5ab08b6d4369b3a68c7d387a80 100644 (file)
@@ -453,6 +453,7 @@ public:
   }
 
   void pup(PUP::er &p){
   }
 
   void pup(PUP::er &p){
+         CBase_EachToManyArray::pup(p);
          p | cinst;
          if(p.isUnpacking()){
                  myDelegatedProxy = thisProxy;
          p | cinst;
          if(p.isUnpacking()){
                  myDelegatedProxy = thisProxy;
index 0df7ea9287e07e4fd73ab5aa26deb710871e0f17..abe5be024c07f0bf0693080a76cc237b718dd479 100644 (file)
@@ -204,6 +204,7 @@ CmiPrintf("start %d elements\n", nElements);
   }
 
   void pup(PUP::er &p) {
   }
 
   void pup(PUP::er &p) {
+    CBase_Hello::pup(p);//Call superclass
     p|sid;
     p(init);
     p|cnt;
     p|sid;
     p(init);
     p|cnt;
index 841f51d7313db03e118d32ba32aac1392ba081be..6479f01f3af01d992d0465c84f37a591bfbd9dbc 100644 (file)
@@ -182,6 +182,7 @@ public:
   }
 
   void pup(PUP::er &p) {
   }
 
   void pup(PUP::er &p) {
+    CBase_Hello::pup(p);//Call superclass
     p|sid;
     p(init);
     p|cnt;
     p|sid;
     p(init);
     p|cnt;
index 76ebd26bcfa8acaedf9d0890454f2ebfb4a270c5..8986683f1ebc0268aaa4aea1799b658df2a7aa77 100644 (file)
@@ -204,6 +204,7 @@ public:
 
   virtual void pup(PUP::er &p)
   {
 
   virtual void pup(PUP::er &p)
   {
+     CBase_Lb_array::pup(p);           // pack our superclass
      p(nTimes);
      p(sendTime);
      p(usec);
      p(nTimes);
      p(sendTime);
      p(usec);
index 687ba4fd629cd4cefbd1d1c06560a6cd011e17e7..f7fd986a2fa73e5eb0bc18357a135458ae655396 100644 (file)
@@ -63,6 +63,7 @@ void MyArray::ResumeFromSync(void) {
 };
 
 void MyArray::pup(PUP::er &p) {
 };
 
 void MyArray::pup(PUP::er &p) {
+  CBase_MyArray::pup(p);
   p|length;
   p|iterations;
 }
   p|length;
   p|iterations;
 }
index 0a69216c00f29e54dd02c6a4c8f8ab0a450c9d8d..7b3d9818cf358e982f3dabdb30955f75eccb26d7 100644 (file)
@@ -193,7 +193,10 @@ public: \
        virtual void inhVirtual(int t) { \
                if (t!=type+gen+methInh) badMeth(#className,"inhVirtual",t); \
                ((CProxy_inhCoord)coordinator).done();\
        virtual void inhVirtual(int t) { \
                if (t!=type+gen+methInh) badMeth(#className,"inhVirtual",t); \
                ((CProxy_inhCoord)coordinator).done();\
-        }
+        }\
+       virtual void pup(PUP::er &p) {\
+               parentName::pup(p);\
+       }\
 
 //Declares the parent method
 #define PARENT(className,type) \
 
 //Declares the parent method
 #define PARENT(className,type) \
index 32215f6ec583328adf2b1ac8ab9fab7058581277..53c138ba823baac08bc05ce077a34a938a1357ca 100644 (file)
@@ -24,6 +24,7 @@ mig_Element::mig_Element()
 
 void mig_Element::pup(PUP::er &p)
 {
 
 void mig_Element::pup(PUP::er &p)
 {
+  CBase_mig_Element::pup(p);//Call superclass
   p(origPE);
   p(sum);
   p(numDone);
   p(origPE);
   p(sum);
   p(numDone);
index 632d551d61468fad69b1cc590c4fb1b02d74116b..413e8856e49af4a74914c128cb435559290947f0 100644 (file)
@@ -46,6 +46,7 @@ public:
   void pup(PUP::er &p) {
     CkPrintf("called PUP for cell %s\n", p.isPacking() ? "packing" : "unpacking or sizing");
  
   void pup(PUP::er &p) {
     CkPrintf("called PUP for cell %s\n", p.isPacking() ? "packing" : "unpacking or sizing");
  
+    CBase_Cell::pup(p);
     __sdag_pup(p);
 
     p | val;
     __sdag_pup(p);
 
     p | val;