Ignore:
Timestamp:
06/20/20 01:02:20 (4 years ago)
Author:
Maciej Komosinski
Message:

Improved error messages (display longer names of the relevant object and field when available)

File:
1 edited

Legend:

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

    r914 r950  
    331331}
    332332
     333SString ParamInterface::nameDotProperty(int prop)
     334{
     335        SString ret = getName();
     336        ret+=".";
     337        ret+=id(prop);
     338        return ret;
     339}
     340
     341SString ParamInterface::nameDotPropertyForMessages(int prop)
     342{
     343        SString name_dot_prop = nameDotProperty(prop);
     344        if (strcmp(getName(),getLongName())==0)
     345                {
     346                if (strcmp(id(prop),name(prop))==0)
     347                        return name_dot_prop;
     348                else
     349                        return SString("'")+name(prop)+"': "+name_dot_prop;
     350                }
     351        else
     352                return SString("'")+name(prop)+"' in '"+getLongName()+"': "+name_dot_prop;
     353}
    333354
    334355int SimpleAbstractParam::isequal(int i, void* defdata)
     
    421442        SString field;
    422443        if (field_index >= 0)
    423                 field = SString::sprintf("'%s.%s'", pi->getName(), pi->id(field_index));
     444                field = pi->nameDotPropertyForMessages(field_index);
    424445        else
    425446                field = SString::sprintf("unknown property of '%s'", pi->getName());
     
    445466                bool show_length = valuetoset.getType() == TString;
    446467                const char* quote = (valuetoset.getType() == TString) ? "\"" : "'";
    447                 logPrintf("Param", "set", LOG_WARN, "Setting %s.%s = %s exceeded allowed range (too %s). %s to %s.",
    448                         getName(), id(i),
     468                logPrintf("Param", "set", LOG_WARN, "Setting %s = %s exceeded allowed range (too %s). %s to %s.",
     469                        nameDotPropertyForMessages(i).c_str(),
    449470                        ::sstringDelimitAndShorten(svaluetoset, 30, show_length, quote, quote).c_str(),
    450471                        (setflags&PSET_HITMAX) ? (s_type ? "long" : "big") : "small", s_type ? "Truncated" : "Adjusted",
     
    674695        case 'o':       ret.setObject(getObject(i)); break;
    675696        case 'x':       ret = getExtValue(i); break;
    676         default: logPrintf("ParamInterface", "get", LOG_ERROR, "'%s.%s' is not a property", getName(), id(i));
     697        default: logPrintf("ParamInterface", "get", LOG_ERROR, "%s is not a property", nameDotPropertyForMessages(i).c_str());
    677698        }
    678699}
     
    718739                        if (v.type == TObj)
    719740                        {
    720                                 logPrintf("ParamInterface", "set", LOG_ERROR, "Setting int '%s.%s' from object reference (%s)", getName(), id(i), v.getString().c_str());
     741                                logPrintf("ParamInterface", "set", LOG_ERROR, "Setting int %s from object reference (%s)", nameDotPropertyForMessages(i).c_str(), v.getString().c_str());
    721742                                return 0;
    722743                        }
     
    730751                        if (v.type == TObj)
    731752                        {
    732                                 logPrintf("ParamInterface", "set", LOG_ERROR, "Setting float '%s.%s' from object reference (%s)", getName(), id(i), v.getString().c_str());
     753                                logPrintf("ParamInterface", "set", LOG_ERROR, "Setting float %s from object reference (%s)", nameDotPropertyForMessages(i).c_str(), v.getString().c_str());
    733754                                return 0;
    734755                        }
     
    739760        case 'o':
    740761                if ((v.type != TUnknown) && (v.type != TObj))
    741                         logPrintf("ParamInterface", "set", LOG_ERROR, "Setting object '%s.%s' from %s", getName(), id(i), v.typeAndValue().c_str());
     762                        logPrintf("ParamInterface", "set", LOG_ERROR, "Setting object %s from %s", nameDotPropertyForMessages(i).c_str(), v.typeAndValue().c_str());
    742763                else
    743764                        return setObject(i, v.getObject());
    744765                break;
    745766        case 'x': return setExtValue(i, v);
    746         default: logPrintf("ParamInterface", "set", LOG_ERROR, "'%s.%s' is not a property", getName(), id(i));
     767        default: logPrintf("ParamInterface", "set", LOG_ERROR, "%s is not a property", nameDotPropertyForMessages(i).c_str());
    747768        }
    748769        return 0;
     
    922943        if (err != NULL)
    923944                logPrintf("SimpleAbstractParam", "sanityCheck", LOG_ERROR,
    924                         "Invalid ParamEntry for %s.%s (%s)", getName(), pe->id, err);
     945                          "Invalid ParamEntry for %s (%s)", nameDotPropertyForMessages(i).c_str(), err);
    925946}
    926947#endif
     
    11561177                else
    11571178                        logPrintf("SimpleAbstractParam", "setObject", LOG_ERROR,
    1158                                 "'%s.%s' is PARAM_OBJECTSET but no 'assign()' in %s", getName(), pe->id, o.interfaceName());
     1179                                "%s is PARAM_OBJECTSET but no 'assign()' in %s", nameDotPropertyForMessages(i).c_str(), o.interfaceName());
    11591180                return PSET_CHANGED;
    11601181        }
     
    12051226        {
    12061227                logPrintf("SimpleAbstractParam", "call", LOG_ERROR,
    1207                         (*pe->type != 'p') ? "'%s.%s' is not a function" : "Internal error - undefined function pointer for '%s.%s'", getName(), pe->id);
     1228                        (*pe->type != 'p') ? "%s is not a function" : "Internal error - undefined function pointer for %s", nameDotPropertyForMessages(i).c_str());
    12081229                ret->setInvalid();
    12091230        }
Note: See TracChangeset for help on using the changeset viewer.