skip trying to be clever and just report the variable name being checked directly

This commit is contained in:
AzaezelX 2025-03-18 03:13:37 -05:00
parent 55ac453ab9
commit 011a8906ff
14 changed files with 29 additions and 33 deletions

View file

@ -35,7 +35,7 @@
// When an effect is added using "addEffect", this validator intercepts the value // When an effect is added using "addEffect", this validator intercepts the value
// and adds it to the dynamic effects list. // and adds it to the dynamic effects list.
// //
void afxEffectGroupData::egValidator::validateType(SimObject* object, void* typePtr) void afxEffectGroupData::egValidator::validateType(SimObject* object, StringTableEntry varname, void* typePtr)
{ {
afxEffectGroupData* eff_data = dynamic_cast<afxEffectGroupData*>(object); afxEffectGroupData* eff_data = dynamic_cast<afxEffectGroupData*>(object);
afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr); afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr);

View file

@ -60,7 +60,7 @@ class afxEffectGroupData : public afxEffectBaseData
U32 id; U32 id;
public: public:
egValidator(U32 id) { this->id = id; } egValidator(U32 id) { this->id = id; }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
}; };
bool do_id_convert; bool do_id_convert;

View file

@ -39,7 +39,7 @@
// When an effect is added using "addEffect", this validator intercepts the value // When an effect is added using "addEffect", this validator intercepts the value
// and adds it to the dynamic effects list. // and adds it to the dynamic effects list.
// //
void afxEffectronData::ewValidator::validateType(SimObject* object, void* typePtr) void afxEffectronData::ewValidator::validateType(SimObject* object, StringTableEntry varname, void* typePtr)
{ {
afxEffectronData* eff_data = dynamic_cast<afxEffectronData*>(object); afxEffectronData* eff_data = dynamic_cast<afxEffectronData*>(object);
afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr); afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr);

View file

@ -46,7 +46,7 @@ class afxEffectronData : public afxChoreographerData
U32 id; U32 id;
public: public:
ewValidator(U32 id) { this->id = id; } ewValidator(U32 id) { this->id = id; }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
}; };
bool do_id_convert; bool do_id_convert;

View file

@ -43,7 +43,7 @@
// created for each effect list and an id is used to identify which list to add the effect // created for each effect list and an id is used to identify which list to add the effect
// to. // to.
// //
void afxMagicSpellData::ewValidator::validateType(SimObject* object, void* typePtr) void afxMagicSpellData::ewValidator::validateType(SimObject* object, StringTableEntry varname, void* typePtr)
{ {
afxMagicSpellData* spelldata = dynamic_cast<afxMagicSpellData*>(object); afxMagicSpellData* spelldata = dynamic_cast<afxMagicSpellData*>(object);
afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr); afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr);

View file

@ -65,7 +65,7 @@ class afxMagicSpellData : public afxChoreographerData, public afxMagicSpellDefs
U32 id; U32 id;
public: public:
ewValidator(U32 id) { this->id = id; } ewValidator(U32 id) { this->id = id; }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
}; };
bool mDo_id_convert; bool mDo_id_convert;

View file

@ -38,7 +38,7 @@
// When an effect is added using "addEffect", this validator intercepts the value // When an effect is added using "addEffect", this validator intercepts the value
// and adds it to the dynamic effects list. // and adds it to the dynamic effects list.
// //
void afxSelectronData::ewValidator::validateType(SimObject* object, void* typePtr) void afxSelectronData::ewValidator::validateType(SimObject* object, StringTableEntry varname, void* typePtr)
{ {
afxSelectronData* sele_data = dynamic_cast<afxSelectronData*>(object); afxSelectronData* sele_data = dynamic_cast<afxSelectronData*>(object);
afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr); afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr);

View file

@ -57,7 +57,7 @@ class afxSelectronData : public afxChoreographerData, public afxSelectronDefs
U32 id; U32 id;
public: public:
ewValidator(U32 id) { this->id = id; } ewValidator(U32 id) { this->id = id; }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
}; };
bool do_id_convert; bool do_id_convert;

View file

@ -36,7 +36,7 @@
// When an effect is added using "addEffect", this validator intercepts the value // When an effect is added using "addEffect", this validator intercepts the value
// and adds it to the dynamic effects list. // and adds it to the dynamic effects list.
// //
void afxPhraseEffectData::ewValidator::validateType(SimObject* object, void* typePtr) void afxPhraseEffectData::ewValidator::validateType(SimObject* object, StringTableEntry varname, void* typePtr)
{ {
afxPhraseEffectData* eff_data = dynamic_cast<afxPhraseEffectData*>(object); afxPhraseEffectData* eff_data = dynamic_cast<afxPhraseEffectData*>(object);
afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr); afxEffectBaseData** ew = (afxEffectBaseData**)(typePtr);

View file

@ -42,7 +42,7 @@ class afxPhraseEffectData : public GameBaseData, public afxEffectDefs, public af
U32 id; U32 id;
public: public:
ewValidator(U32 id) { this->id = id; } ewValidator(U32 id) { this->id = id; }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
}; };
bool do_id_convert; bool do_id_convert;

View file

@ -646,7 +646,6 @@ void ConsoleObject::addProtectedFieldV(const char* in_pFieldname,
f.offset = in_fieldOffset; f.offset = in_fieldOffset;
f.elementCount = in_elementCount; f.elementCount = in_elementCount;
f.validator = v; f.validator = v;
f.validator->fieldIndex = sg_tempFieldList.size();
f.flag = flags; f.flag = flags;
f.setDataFn = in_setDataFn; f.setDataFn = in_setDataFn;
@ -722,7 +721,6 @@ void ConsoleObject::addFieldV(const char* in_pFieldname,
f.writeDataFn = &defaultProtectedWriteFn; f.writeDataFn = &defaultProtectedWriteFn;
f.elementCount = in_elementCount; f.elementCount = in_elementCount;
f.validator = v; f.validator = v;
f.validator->fieldIndex = sg_tempFieldList.size();
f.networkMask = 0; f.networkMask = 0;
sg_tempFieldList.push_back(f); sg_tempFieldList.push_back(f);

View file

@ -1097,7 +1097,7 @@ void SimObject::setDataField(StringTableEntry slotName, const char *array, const
Con::setData(fld->type, (void *) (((const char *)this) + fld->offset), array1, 1, &value, fld->table); Con::setData(fld->type, (void *) (((const char *)this) + fld->offset), array1, 1, &value, fld->table);
if(fld->validator) if(fld->validator)
fld->validator->validateType(this, (void *) (((const char *)this) + fld->offset)); fld->validator->validateType(this, fld->pFieldname, (void *) (((const char *)this) + fld->offset));
if (fld->networkMask != 0) if (fld->networkMask != 0)
{ {
@ -1111,7 +1111,7 @@ void SimObject::setDataField(StringTableEntry slotName, const char *array, const
} }
if(fld->validator) if(fld->validator)
fld->validator->validateType(this, (void *) (((const char *)this) + fld->offset)); fld->validator->validateType(this, fld->pFieldname, (void *) (((const char *)this) + fld->offset));
onStaticModified( slotName, value ); onStaticModified( slotName, value );
return; return;

View file

@ -28,7 +28,7 @@
#include "math/mPoint3.h" #include "math/mPoint3.h"
#include <stdarg.h> #include <stdarg.h>
void TypeValidator::consoleError(SimObject *object, const char *format, ...) void TypeValidator::consoleError(SimObject *object, StringTableEntry varname, const char *format, ...)
{ {
char buffer[1024]; char buffer[1024];
va_list argptr; va_list argptr;
@ -37,22 +37,21 @@ void TypeValidator::consoleError(SimObject *object, const char *format, ...)
va_end(argptr); va_end(argptr);
AbstractClassRep *rep = object->getClassRep(); AbstractClassRep *rep = object->getClassRep();
AbstractClassRep::Field &fld = rep->mFieldList[fieldIndex];
const char *objectName = object->getName(); const char *objectName = object->getName();
if(!objectName) if(!objectName)
objectName = "unnamed"; objectName = "unnamed";
Con::warnf("%s - %s(%d) - invalid value for %s: %s", Con::warnf("%s - %s(%d) - invalid value for %s: %s",
rep->getClassName(), objectName, object->getId(), fld.pFieldname, buffer); rep->getClassName(), objectName, object->getId(), varname, buffer);
} }
void FRangeValidator::validateType(SimObject *object, void *typePtr) void FRangeValidator::validateType(SimObject *object, StringTableEntry varname, void *typePtr)
{ {
F32 *v = (F32 *) typePtr; F32 *v = (F32 *) typePtr;
if(*v < minV || *v > maxV) if(*v < minV || *v > maxV)
{ {
consoleError(object, "=(%g). Must be between %g and %g", *v, minV, maxV); consoleError(object, varname, "=(%g). Must be between %g and %g", *v, minV, maxV);
if(*v < minV) if(*v < minV)
*v = minV; *v = minV;
else if(*v > maxV) else if(*v > maxV)
@ -60,12 +59,12 @@ void FRangeValidator::validateType(SimObject *object, void *typePtr)
} }
} }
void IRangeValidator::validateType(SimObject *object, void *typePtr) void IRangeValidator::validateType(SimObject *object, StringTableEntry varname, void *typePtr)
{ {
S32 *v = (S32 *) typePtr; S32 *v = (S32 *) typePtr;
if(*v < minV || *v > maxV) if(*v < minV || *v > maxV)
{ {
consoleError(object, "=(%d). Must be between %d and %d", *v, minV, maxV); consoleError(object, varname, "=(%d). Must be between %d and %d", *v, minV, maxV);
if(*v < minV) if(*v < minV)
*v = minV; *v = minV;
else if(*v > maxV) else if(*v > maxV)
@ -73,13 +72,13 @@ void IRangeValidator::validateType(SimObject *object, void *typePtr)
} }
} }
void IRangeValidatorScaled::validateType(SimObject *object, void *typePtr) void IRangeValidatorScaled::validateType(SimObject *object, StringTableEntry varname, void *typePtr)
{ {
S32 *v = (S32 *) typePtr; S32 *v = (S32 *) typePtr;
*v /= factor; *v /= factor;
if(*v < minV || *v > maxV) if(*v < minV || *v > maxV)
{ {
consoleError(object, "=(%d). Scaled value must be between %d and %d", *v, minV, maxV); consoleError(object, varname, "=(%d). Scaled value must be between %d and %d", *v, minV, maxV);
if(*v < minV) if(*v < minV)
*v = minV; *v = minV;
else if(*v > maxV) else if(*v > maxV)
@ -87,13 +86,13 @@ void IRangeValidatorScaled::validateType(SimObject *object, void *typePtr)
} }
} }
void Point3NormalizeValidator::validateType(SimObject *object, void *typePtr) void Point3NormalizeValidator::validateType(SimObject *object, StringTableEntry varname, void *typePtr)
{ {
Point3F *v = (Point3F *) typePtr; Point3F *v = (Point3F *) typePtr;
const F32 len = v->len(); const F32 len = v->len();
if(!mIsEqual(len, 1.0f)) if(!mIsEqual(len, 1.0f))
{ {
consoleError(object, "=(%g). Vector length must be %g", len, length); consoleError(object, varname, "=(%g). Vector length must be %g", len, length);
*v *= length / len; *v *= length / len;
} }
} }

View file

@ -30,8 +30,7 @@
class TypeValidator class TypeValidator
{ {
public: public:
S32 fieldIndex; TypeValidator() {}
TypeValidator() : fieldIndex(0) {}
~TypeValidator() {} ~TypeValidator() {}
/// Prints a console error message for the validator. /// Prints a console error message for the validator.
/// ///
@ -39,11 +38,11 @@ class TypeValidator
/// @code /// @code
/// className objectName (objectId) - invalid value for fieldName: msg /// className objectName (objectId) - invalid value for fieldName: msg
/// @endcode /// @endcode
void consoleError(SimObject *object, const char *format, ...); void consoleError(SimObject *object, StringTableEntry varname, const char *format, ...);
/// validateType is called for each assigned value on the field this /// validateType is called for each assigned value on the field this
/// validator is attached to. /// validator is attached to.
virtual void validateType(SimObject *object, void *typePtr) = 0; virtual void validateType(SimObject *object, StringTableEntry varname, void *typePtr) = 0;
}; };
@ -58,7 +57,7 @@ public:
maxV = mFabs(maxValue) > F32_MIN ? maxValue : 0.0f; maxV = mFabs(maxValue) > F32_MIN ? maxValue : 0.0f;
mFidelity = fidelity; mFidelity = fidelity;
} }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
F32 getMin() { return minV; }; F32 getMin() { return minV; };
F32 getMax() { return maxV; }; F32 getMax() { return maxV; };
F32 getFidelity() { return mFidelity; }; F32 getFidelity() { return mFidelity; };
@ -75,7 +74,7 @@ public:
maxV = maxValue; maxV = maxValue;
mFidelity = fidelity; mFidelity = fidelity;
} }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
S32 getMin() { return minV; }; S32 getMin() { return minV; };
S32 getMax() { return maxV; }; S32 getMax() { return maxV; };
S32 getFidelity() { return mFidelity; }; S32 getFidelity() { return mFidelity; };
@ -96,7 +95,7 @@ public:
maxV = maxValueScaled; maxV = maxValueScaled;
factor = scaleFactor; factor = scaleFactor;
} }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
S32 getMin() { return minV; }; S32 getMin() { return minV; };
S32 getMax() { return maxV; }; S32 getMax() { return maxV; };
S32 getScaleFactor() { return factor; }; S32 getScaleFactor() { return factor; };
@ -108,7 +107,7 @@ class Point3NormalizeValidator : public TypeValidator
F32 length; F32 length;
public: public:
Point3NormalizeValidator(F32 normalizeLength = 1.0f) : length(normalizeLength) { } Point3NormalizeValidator(F32 normalizeLength = 1.0f) : length(normalizeLength) { }
void validateType(SimObject *object, void *typePtr) override; void validateType(SimObject *object, StringTableEntry varname, void *typePtr) override;
F32 getLength() { return length; }; F32 getLength() { return length; };
}; };