Ignore:
Timestamp:
04/25/14 16:15:30 (10 years ago)
Author:
Maciej Komosinski
Message:

Detects invalid ParamEntry? when accessing ParamEntry?-based Params in DEBUG mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/param/param.cpp

    r197 r230  
    558558//////////////////////////////// PARAM ////////////////////////////////////
    559559
     560#ifdef DEBUG
     561void SimpleAbstractParam::sanityCheck(int i)
     562{
     563ParamEntry *pe=entry(i);
     564
     565const char* t=pe->type;
     566const char* err=NULL;
     567
     568if (*t=='p')
     569        {
     570        if (pe->fun1==NULL)
     571                err="no procedure defined";
     572        }
     573else
     574        {
     575        if (!(pe->flags & PARAM_READONLY))
     576                { //write access
     577                if ((pe->fun2==NULL)&&(pe->offset==PARAM_ILLEGAL_OFFSET))
     578                        err="no field defined (GETONLY without PARAM_READONLY?)";
     579                }
     580        }
     581if (err!=NULL)
     582        FMprintf("SimpleAbstractParam","sanityCheck", FMLV_ERROR,
     583                 "Invalid ParamEntry for %s.%s (%s)", getName(), pe->id, err);
     584}       
     585#endif
     586
    560587void *SimpleAbstractParam::getTarget(int i)
    561588{
     
    566593///////// get
    567594
     595#ifdef DEBUG
     596#define SANITY_CHECK(i) sanityCheck(i)
     597#else
     598#define SANITY_CHECK(i)
     599#endif
     600
    568601long SimpleAbstractParam::getInt(int i)
    569602{
     603        SANITY_CHECK(i);
    570604        ExtValue v;
    571605        ParamEntry *pe = entry(i);
     
    584618double SimpleAbstractParam::getDouble(int i)
    585619{
     620        SANITY_CHECK(i);
    586621        ExtValue v;
    587622        ParamEntry *pe = entry(i);
     
    600635SString SimpleAbstractParam::getString(int i)
    601636{
     637        SANITY_CHECK(i);
    602638        ExtValue v;
    603639        ParamEntry *pe = entry(i);
     
    616652ExtObject SimpleAbstractParam::getObject(int i)
    617653{
     654        SANITY_CHECK(i);
    618655        ExtValue v;
    619656        ParamEntry *pe = entry(i);
     
    632669ExtValue SimpleAbstractParam::getExtValue(int i)
    633670{
     671        SANITY_CHECK(i);
    634672        ExtValue v;
    635673        ParamEntry *pe = entry(i);
     
    651689int SimpleAbstractParam::setInt(int i, long x)
    652690{
     691        SANITY_CHECK(i);
    653692        ExtValue v;
    654693        ParamEntry *pe = entry(i);
     
    686725int SimpleAbstractParam::setDouble(int i, double x)
    687726{
     727        SANITY_CHECK(i);
    688728        ExtValue v;
    689729        ParamEntry *pe = entry(i);
     
    721761int SimpleAbstractParam::setString(int i, const SString& x)
    722762{
     763        SANITY_CHECK(i);
    723764        ExtValue v;
    724765        SString vs;
     
    761802int SimpleAbstractParam::setObject(int i, const ExtObject& x)
    762803{
     804        SANITY_CHECK(i);
    763805        ExtValue v;
    764806        ParamEntry *pe = entry(i);
     
    782824int SimpleAbstractParam::setExtValue(int i, const ExtValue& x)
    783825{
     826        SANITY_CHECK(i);
    784827        ParamEntry *pe = entry(i);
    785828        if (pe->flags&PARAM_READONLY) return PSET_RONLY;
     
    801844void SimpleAbstractParam::call(int i, ExtValue *args, ExtValue *ret)
    802845{
     846        SANITY_CHECK(i);
    803847        ParamEntry *pe = entry(i);
    804848        if (!pe) return;
Note: See TracChangeset for help on using the changeset viewer.