fixed a bug of variable initialzation skipped when a jump is made to fixed_point

This commit is contained in:
hyunghwan.chung 2019-03-28 05:16:13 +00:00
parent 4f1ad1fe64
commit fc6e24edad

View File

@ -1461,7 +1461,7 @@ static int get_numlit (moo_t* moo, int negated)
{
/* fixed-point decimal with the scale specified.
* 5p99 -> 99.0000, 5p99.12 -> 99.12000
* treat the raxid value as the scale */
* treat the radix value as the scale */
if (radix_overflowed || radix < 1 || radix > MOO_SMOOI_MAX)
{
@ -1523,10 +1523,13 @@ static int get_numlit (moo_t* moo, int negated)
else if (c == '.')
{
moo_iolxc_t period;
moo_oow_t scale = 0;
moo_oow_t scale;
fixed_point:
/* once a jump is made to here. it's known to be a fixed point number */
scale = 0;
/* once a jump is made to here. it's known to be a fixed point number.
* xscale is the scale prefix specified before 'p' as in 10p99.02.
* scale is the number of digits after the decimal point. */
SET_TOKEN_TYPE (moo, (xscale > 0? MOO_IOTOK_SCALEDFPDECLIT: MOO_IOTOK_FPDECLIT));
period = moo->c->lxc;
@ -1539,11 +1542,12 @@ static int get_numlit (moo_t* moo, int negated)
else
{
ADD_TOKEN_CHAR (moo, '.');
do
{
if (scale > MOO_SMOOI_MAX)
{
moo_setsynerrbfmt (moo, MOO_SYNERR_FPDECLITINVAL, TOKEN_LOC(moo), TOKEN_NAME(moo), "invalid fixed-point decimal - too many digits after point");
moo_setsynerrbfmt (moo, MOO_SYNERR_FPDECLITINVAL, TOKEN_LOC(moo), TOKEN_NAME(moo), "invalid fixed-point decimal - too many digits(%zu) after point", scale);
return -1;
}
scale++;