mirror of
https://github.com/Interlisp/maiko.git
synced 2026-01-15 07:54:13 +00:00
Merge pull request #158 from Interlisp/unwind-int-unsigned-ptr-confusion
Correct handling of return value of N_OP_unwind()
This commit is contained in:
commit
67d6a799db
@ -852,8 +852,7 @@ nextop2; \
|
||||
|
||||
#define UNWIND(n, m) \
|
||||
{ \
|
||||
if ((INT)(CSTKPTRL = (LispPTR *) \
|
||||
N_OP_unwind(CSTKPTR, TOPOFSTACK, n, m)) < 0) \
|
||||
if ((CSTKPTRL = N_OP_unwind(CSTKPTR, TOPOFSTACK, n, m)) == (LispPTR *)-1) \
|
||||
goto unwind_err; \
|
||||
POP; \
|
||||
nextop3; \
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
#ifndef UNWINDDEFS_H
|
||||
#define UNWINDDEFS_H 1
|
||||
UNSIGNED N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int keep);
|
||||
LispPTR *N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int keep);
|
||||
#endif
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
#include "unwinddefs.h"
|
||||
|
||||
UNSIGNED N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int keep) {
|
||||
LispPTR *N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int keep) {
|
||||
register int num; /* number of UNBOUND slot */
|
||||
register LispPTR *endptr; /* unwind limit */
|
||||
register LispPTR *lastpvar; /* points PVar slot that is unbounded. */
|
||||
@ -64,7 +64,10 @@ UNSIGNED N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int
|
||||
|
||||
if (endptr > cstkptr) {
|
||||
CurrentStackPTR = (DLword *)cstkptr;
|
||||
ERROR_EXIT(tos);
|
||||
/* this would be ERROR_EXIT(tos); but for having to return a pointer */
|
||||
TopOfStack = tos;
|
||||
Error_Exit = 1;
|
||||
return (LispPTR *)(-1);
|
||||
}
|
||||
*cstkptr++ = tos;
|
||||
|
||||
@ -85,7 +88,7 @@ UNSIGNED N_OP_unwind(register LispPTR *cstkptr, register LispPTR tos, int n, int
|
||||
/* endptr = cstkptr */
|
||||
|
||||
if (keep) { *(cstkptr++) = tos; }
|
||||
return ((UNSIGNED)cstkptr);
|
||||
return (cstkptr);
|
||||
|
||||
} /* N_OP_unwind */
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user