Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8863 for code/trunk/src


Ignore:
Timestamp:
Aug 24, 2011, 1:17:36 PM (13 years ago)
Author:
landauf
Message:

added warning if a super-function has two possible parents. this prints a ton of warnings because of clone(), but will be fixed soon (either by moving the super-base of clone() to BaseObject or by removing it completely)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/libraries/core/Super.h

    r8858 r8863  
    117117                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>; \
    118118                    } \
     119                    else if (((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier()) \
     120                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)(*it))->getName() << " calls function of " << ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl; \
    119121                } \
    120122            } \
     
    187189                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>;
    188190                    }
     191
     192                    // If there is already a caller, but for another parent, print a warning
     193                    else if (((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier())
     194                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)(*it))->getName() << " calls function of " << ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl;
    189195                }
    190196            }
     
    347353                    virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0; \
    348354                    virtual ~SuperFunctionCaller_##functionname () {} \
     355                    virtual Identifier* getParentIdentifier() const = 0; \
    349356            }; \
    350357            \
     
    355362                    inline void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) \
    356363                    { \
     364                    } \
     365                    \
     366                    Identifier* getParentIdentifier() const \
     367                    { \
     368                        return ClassIdentifier<T>::getIdentifier(); \
    357369                    } \
    358370            }; \
     
    400412                                                        ; \
    401413                    } \
     414                    \
     415                    Identifier* getParentIdentifier() const \
     416                    { \
     417                        return ClassIdentifier<T>::getIdentifier(); \
     418                    } \
    402419            };
    403420
     
    433450                virtual void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) ) = 0;
    434451                virtual ~SuperFunctionCaller_##functionname () {}
     452                virtual Identifier* getParentIdentifier() const = 0;
    435453        };
    436454
     
    443461                inline void operator()( SUPER_CALL_ARGUMENTS##hasarguments(__VA_ARGS__) )
    444462                {
     463                }
     464
     465                Identifier* getParentIdentifier() const
     466                {
     467                    return ClassIdentifier<T>::getIdentifier();
    445468                }
    446469        };
     
    486509                {
    487510                    (dynamic_cast<T*>(object))->T:: functionname ( Call the function with it's arguments );
     511                }
     512
     513                Identifier* getParentIdentifier() const
     514                {
     515                    return ClassIdentifier<T>::getIdentifier();
    488516                }
    489517        }
Note: See TracChangeset for help on using the changeset viewer.