Skip to content

Commit 558e1a8

Browse files
committed
Bind stack result to local var before casting.
Issue #1006.
1 parent a844854 commit 558e1a8

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

vm.c

+8-8
Original file line numberDiff line numberDiff line change
@@ -912,12 +912,12 @@ static sexp sexp_restore_stack (sexp ctx, sexp saved) {
912912
return SEXP_VOID;
913913
}
914914

915-
#define _ARG1 stack[top-1]
916-
#define _ARG2 stack[top-2]
917-
#define _ARG3 stack[top-3]
918-
#define _ARG4 stack[top-4]
919-
#define _ARG5 stack[top-5]
920-
#define _ARG6 stack[top-6]
915+
#define _ARG1 (stack[top-1])
916+
#define _ARG2 (stack[top-2])
917+
#define _ARG3 (stack[top-3])
918+
#define _ARG4 (stack[top-4])
919+
#define _ARG5 (stack[top-5])
920+
#define _ARG6 (stack[top-6])
921921
#define _PUSH(x) (stack[top++]=(x))
922922
#define _POP() (stack[--top])
923923

@@ -1896,8 +1896,8 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) {
18961896
if (sexp_fixnump(tmp1) && sexp_fixnump(tmp2)) {
18971897
if (tmp2 == SEXP_ZERO)
18981898
sexp_raise("divide by zero", SEXP_NULL);
1899-
_ARG1 = sexp_fx_div(tmp1, tmp2);
1900-
if ((sexp_sint_t)tmp1 < 0 && (sexp_sint_t)tmp2 < 0 && (sexp_sint_t)_ARG1 < 0) {
1899+
tmp = _ARG1 = sexp_fx_div(tmp1, tmp2);
1900+
if ((sexp_sint_t)tmp1 < 0 && (sexp_sint_t)tmp2 < 0 && (sexp_sint_t)tmp < 0) {
19011901
_ARG1 = sexp_quotient(ctx, tmp1=sexp_fixnum_to_bignum(ctx, tmp1), tmp2);
19021902
}
19031903
}

0 commit comments

Comments
 (0)