Fixed parser to handle unset parameters properly (that is, without crashing)
Originally committed to SVN as r6.
This commit is contained in:
parent
480bb77b41
commit
75fc7ef5cf
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue