summaryrefslogtreecommitdiff
path: root/lisp/lisp.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/lisp.c')
-rw-r--r--lisp/lisp.c83
1 files changed, 44 insertions, 39 deletions
diff --git a/lisp/lisp.c b/lisp/lisp.c
index cda8c14..0d66dc9 100644
--- a/lisp/lisp.c
+++ b/lisp/lisp.c
@@ -27,7 +27,7 @@
* Author: Paulo César Pereira de Andrade
*/
-/* $XFree86: xc/programs/xedit/lisp/lisp.c,v 1.85 2003/01/29 03:05:53 paulo Exp $ */
+/* $XFree86: xc/programs/xedit/lisp/lisp.c,v 1.89 2003/10/02 13:30:13 eich Exp $ */
#include <stdlib.h>
#include <string.h>
@@ -67,20 +67,20 @@
#define HAS_SC_PAGESIZE
#endif
-#include "bytecode.h"
-
-#include "read.h"
-#include "format.h"
-#include "math.h"
-#include "hash.h"
-#include "package.h"
-#include "pathname.h"
-#include "regex.h"
-#include "require.h"
-#include "stream.h"
-#include "struct.h"
-#include "time.h"
-#include "write.h"
+#include "lisp/bytecode.h"
+
+#include "lisp/read.h"
+#include "lisp/format.h"
+#include "lisp/math.h"
+#include "lisp/hash.h"
+#include "lisp/package.h"
+#include "lisp/pathname.h"
+#include "lisp/regex.h"
+#include "lisp/require.h"
+#include "lisp/stream.h"
+#include "lisp/struct.h"
+#include "lisp/time.h"
+#include "lisp/write.h"
#include <math.h>
typedef struct {
@@ -1415,11 +1415,11 @@ LispDecrementAtomReference(LispAtom *atom)
/* if atom->property is NOPROPERTY, this is an unbound symbol */
return;
- --atom->property->refcount;
-
- if (atom->property->refcount < 0)
+ if (atom->property->refcount <= 0)
LispDestroy("internal error at DECREMENT-ATOM-REFERENCE");
+ --atom->property->refcount;
+
if (atom->property->refcount == 0) {
LispRemAtomAllProperties(atom);
free(atom->property);
@@ -2630,7 +2630,8 @@ Lisp__New(LispObj *car, LispObj *cdr)
obj = objseg.freeobj;
objseg.freeobj = CDR(obj);
-
+ --objseg.nfree;
+
return (obj);
}
@@ -2641,9 +2642,11 @@ LispNew(LispObj *car, LispObj *cdr)
if (obj == NIL)
obj = Lisp__New(car, cdr);
- else
+ else {
objseg.freeobj = CDR(obj);
-
+ --objseg.nfree;
+ }
+
return (obj);
}
@@ -2782,9 +2785,10 @@ LispNewDFloat(double value)
if (dfloat == NIL)
dfloat = Lisp__New(NIL, NIL);
- else
+ else {
objseg.freeobj = CDR(dfloat);
-
+ --objseg.nfree;
+ }
dfloat->type = LispDFloat_t;
dfloat->data.dfloat = value;
@@ -2799,9 +2803,10 @@ LispNewString(char *str, long length, int alloced)
if (string == NIL)
string = Lisp__New(NIL, NIL);
- else
+ else {
objseg.freeobj = CDR(string);
-
+ --objseg.nfree;
+ }
if (alloced)
cstring = str;
else {
@@ -2825,9 +2830,10 @@ LispNewComplex(LispObj *realpart, LispObj *imagpart)
if (complexp == NIL)
complexp = Lisp__New(realpart, imagpart);
- else
+ else {
objseg.freeobj = CDR(complexp);
-
+ --objseg.nfree;
+ }
complexp->type = LispComplex_t;
complexp->data.complex.real = realpart;
complexp->data.complex.imag = imagpart;
@@ -2843,9 +2849,10 @@ LispNewInteger(long integer)
if (object == NIL)
object = Lisp__New(NIL, NIL);
- else
+ else {
objseg.freeobj = CDR(object);
-
+ --objseg.nfree;
+ }
object->type = LispInteger_t;
object->data.integer = integer;
@@ -2861,9 +2868,10 @@ LispNewRatio(long num, long den)
if (ratio == NIL)
ratio = Lisp__New(NIL, NIL);
- else
+ else {
objseg.freeobj = CDR(ratio);
-
+ --objseg.nfree;
+ }
ratio->type = LispRatio_t;
ratio->data.ratio.numerator = num;
ratio->data.ratio.denominator = den;
@@ -2936,9 +2944,10 @@ LispNewCons(LispObj *car, LispObj *cdr)
if (cons == NIL)
cons = Lisp__New(car, cdr);
- else
+ else {
objseg.freeobj = CDR(cons);
-
+ --objseg.nfree;
+ }
CAR(cons) = car;
CDR(cons) = cdr;
@@ -3180,10 +3189,8 @@ LispGetVarPack(LispObj *symbol)
int ii;
char *string;
LispAtom *atom;
- LispProperty *property;
string = ATOMID(symbol);
- property = symbol->data.atom->property;
ii = STRHASH(string);
atom = lisp__data.pack->atoms[ii];
@@ -4860,15 +4867,13 @@ LispRunFunMac(LispObj *name, LispObj *code, int macro, int base)
if (!macro) {
int lex = lisp__data.env.lex;
- int did_jump = 1, *pdid_jump;
- LispObj **pcode, **presult;
+ int did_jump = 1;
LispBlock *block;
block = LispBeginBlock(name, LispBlockClosure);
lisp__data.env.lex = base;
if (setjmp(block->jmp) == 0) {
- for (pcode = &code, presult = &result, pdid_jump = &did_jump;
- CONSP(code); code = CDR(code))
+ for (; CONSP(code); code = CDR(code))
result = EVAL(CAR(code));
did_jump = 0;
}