~elly/lambdamoo unlisted

f65a27e3a7d41982e642a208ab148001ea6917a4 — Elly Fong-Jones 6 months ago 3adbe06 master
allow zero for floats, oops
2 files changed, 8 insertions(+), 8 deletions(-)

M numbers.c
M parser.y
M numbers.c => numbers.c +7 -7
@@ 131,7 131,7 @@ become_float(Var in, double *ret)
	*ret = (double) in.v.num;
	break;
    case TYPE_STR:
	if (!parse_float(in.v.str, ret) || !isnormal(*ret))
	if (!parse_float(in.v.str, ret) || !isfinite(*ret))
	    return E_INVARG;
	break;
    case TYPE_OBJ:


@@ 275,7 275,7 @@ compare_numbers(Var a, Var b)
		    } else {					\
			double d = *a.v.fnum op *b.v.fnum;	\
								\
			if (!isnormal(d)) {			\
			if (!isfinite(d)) {			\
			    ans.type = TYPE_ERR;		\
			    ans.v.err = E_FLOAT;		\
			} else					\


@@ 305,7 305,7 @@ SIMPLE_BINARY(multiply, *)
			       && *b.v.fnum != 0.0) {		\
			double d = fexpr;			\
								\
			if (!isnormal(d)) {			\
			if (!isfinite(d)) {			\
			    ans.type = TYPE_ERR;		\
			    ans.v.err = E_FLOAT;		\
			} else					\


@@ 372,7 372,7 @@ do_power(Var lhs, Var rhs)
	}
	errno = 0;
	d = pow(*lhs.v.fnum, d);
	if (errno != 0 || !isnormal(d)) {
	if (errno != 0 || !isfinite(d)) {
	    ans.type = TYPE_ERR;
	    ans.v.err = E_FLOAT;
	} else


@@ 511,7 511,7 @@ bf_abs(Var arglist, Byte next, void *vdata, Objid progr)
		    free_var(arglist);					      \
		    if (errno == EDOM)					      \
		        return make_error_pack(E_INVARG);		      \
		    else if (errno != 0  ||  !isnormal(d))		      \
		    else if (errno != 0  ||  !isfinite(d))		      \
			return make_error_pack(E_FLOAT);		      \
		    else						      \
			return make_var_pack(new_float(d));		      \


@@ 545,7 545,7 @@ MATH_FUNC(floor)
    free_var(arglist);
    if (errno == EDOM)
	return make_error_pack(E_INVARG);
    else if (errno != 0 || !isnormal(d))
    else if (errno != 0 || !isfinite(d))
	return make_error_pack(E_FLOAT);
    else
	return make_var_pack(new_float(d));


@@ 566,7 566,7 @@ bf_atan(Var arglist, Byte next, void *vdata, Objid progr)
    free_var(arglist);
    if (errno == EDOM)
	return make_error_pack(E_INVARG);
    else if (errno != 0 || !isnormal(d))
    else if (errno != 0 || !isfinite(d))
	return make_error_pack(E_FLOAT);
    else
	return make_var_pack(new_float(d));

M parser.y => parser.y +1 -1
@@ 880,7 880,7 @@ start_over:
	    double	d;
	    
	    d = strtod(reset_stream(token_stream), 0);
	    if (!isnormal(d)) {
	    if (!isfinite(d)) {
		yyerror("Floating-point literal out of range");
		d = 0.0;
	    }