Avoid use of goto in FormatSpec::useCharacter

This commit is contained in:
Rangi42
2025-02-27 13:45:13 -05:00
parent 9b395f3bf1
commit d8192560b0

View File

@@ -22,29 +22,29 @@ void FormatSpec::useCharacter(int c) {
case ' ': case ' ':
case '+': case '+':
if (state > FORMAT_SIGN) { if (state > FORMAT_SIGN) {
goto invalid; break;
} }
state = FORMAT_EXACT; state = FORMAT_EXACT;
sign = c; sign = c;
break; return;
// exact // exact
case '#': case '#':
if (state > FORMAT_EXACT) { if (state > FORMAT_EXACT) {
goto invalid; break;
} }
state = FORMAT_ALIGN; state = FORMAT_ALIGN;
exact = true; exact = true;
break; return;
// align // align
case '-': case '-':
if (state > FORMAT_ALIGN) { if (state > FORMAT_ALIGN) {
goto invalid; break;
} }
state = FORMAT_WIDTH; state = FORMAT_WIDTH;
alignLeft = true; alignLeft = true;
break; return;
// pad, width, and prec values // pad, width, and prec values
case '0': case '0':
@@ -71,27 +71,27 @@ void FormatSpec::useCharacter(int c) {
} else if (state == FORMAT_PREC) { } else if (state == FORMAT_PREC) {
precision = precision * 10 + (c - '0'); precision = precision * 10 + (c - '0');
} else { } else {
goto invalid;
}
break; break;
}
return;
// width // width
case '.': case '.':
if (state > FORMAT_WIDTH) { if (state > FORMAT_WIDTH) {
goto invalid; break;
} }
state = FORMAT_FRAC; state = FORMAT_FRAC;
hasFrac = true; hasFrac = true;
break; return;
// prec // prec
case 'q': case 'q':
if (state > FORMAT_PREC) { if (state > FORMAT_PREC) {
goto invalid; break;
} }
state = FORMAT_PREC; state = FORMAT_PREC;
hasPrec = true; hasPrec = true;
break; return;
// type // type
case 'd': case 'd':
@@ -103,18 +103,19 @@ void FormatSpec::useCharacter(int c) {
case 'f': case 'f':
case 's': case 's':
if (state >= FORMAT_DONE) { if (state >= FORMAT_DONE) {
goto invalid; break;
} }
state = FORMAT_DONE; state = FORMAT_DONE;
valid = true; valid = true;
type = c; type = c;
break; return;
default: default:
invalid: break;
}
state = FORMAT_INVALID; state = FORMAT_INVALID;
valid = false; valid = false;
}
} }
void FormatSpec::finishCharacters() { void FormatSpec::finishCharacters() {