Fixed parser to handle unset parameters properly (that is, without crashing)

Originally committed to SVN as r6.
This commit is contained in:
Rodrigo Braz Monteiro 2006-01-17 07:52:18 +00:00
parent 480bb77b41
commit 75fc7ef5cf

View file

@ -561,8 +561,6 @@ void AssOverrideTag::ParseParameters(wxString text) {
int totalPars = paramList.GetCount(); int totalPars = paramList.GetCount();
// Get optional parameters flag // Get optional parameters flag
//wxStringTokenizer tkn(text,_T(",()"),wxTOKEN_STRTOK);
//int totalPars = tkn.CountTokens();
ASS_ParameterOptional parsFlag = OPTIONAL_0; ASS_ParameterOptional parsFlag = OPTIONAL_0;
switch (totalPars) { switch (totalPars) {
case 1: parsFlag = OPTIONAL_1; break; case 1: parsFlag = OPTIONAL_1; break;
@ -598,7 +596,8 @@ void AssOverrideTag::ParseParameters(wxString text) {
curtok = paramList[curPar]; curtok = paramList[curPar];
curPar++; curPar++;
} }
//while (curtok != _T("")) {
// For each parameter
while (n < proto->params.size()) { while (n < proto->params.size()) {
AssOverrideParamProto *curproto = &proto->params[n]; AssOverrideParamProto *curproto = &proto->params[n];
bool isDefault = false; bool isDefault = false;
@ -609,22 +608,24 @@ void AssOverrideTag::ParseParameters(wxString text) {
// Check if it's optional and not set (set to default) // Check if it's optional and not set (set to default)
if (!(curproto->optional & parsFlag)) { if (!(curproto->optional & parsFlag)) {
if (curproto->defaultValue.GetType() != VARDATA_NONE) {
isDefault = true; isDefault = true;
newparam->CopyFrom(curproto->defaultValue); newparam->CopyFrom(curproto->defaultValue);
}
newparam->ommited = true; newparam->ommited = true;
} }
else { if (isDefault == false) {
// Determine parameter type and set value // Determine parameter type and set value
switch (curproto->type) { switch (curproto->type) {
case VARDATA_INT: { case VARDATA_INT: {
long temp; long temp = 0;
curtok.ToLong(&temp); curtok.ToLong(&temp);
newparam->SetInt(temp); newparam->SetInt(temp);
break; break;
} }
case VARDATA_FLOAT: { case VARDATA_FLOAT: {
double temp; double temp = 0.0;
curtok.ToDouble(&temp); curtok.ToDouble(&temp);
newparam->SetFloat(temp); newparam->SetFloat(temp);
break; break;
@ -634,7 +635,7 @@ void AssOverrideTag::ParseParameters(wxString text) {
break; break;
} }
case VARDATA_BOOL: { case VARDATA_BOOL: {
long temp; long temp = false;
curtok.ToLong(&temp); curtok.ToLong(&temp);
newparam->SetBool(temp != 0); newparam->SetBool(temp != 0);
break; break;