void naFree(void* m) { free(m); }
void* naAlloc(int n) { return malloc(n); }
+void* naRealloc(void* b, int n) { return realloc(b, n); }
void naBZero(void* m, int n) { memset(m, 0, n); }
+void naTempSave(naContext c, naRef r)
+{
+ int i;
+ if(!IS_OBJ(r)) return;
+ if(c->ntemps >= c->tempsz) {
+ struct naObj** newtemps;
+ c->tempsz *= 2;
+ newtemps = naAlloc(c->tempsz * sizeof(struct naObj*));
+ for(i=0; i<c->ntemps; i++)
+ newtemps[i] = c->temps[i];
+ naFree(c->temps);
+ c->temps = newtemps;
+ }
+ c->temps[c->ntemps++] = r.ref.ptr.obj;
+}
+
naRef naObj(int type, struct naObj* o)
{
naRef r;
naRef naNew(struct Context* c, int type)
{
+ naRef result;
if(c->nfree[type] == 0)
c->free[type] = naGC_get(&globals->pools[type],
OBJ_CACHE_SZ, &c->nfree[type]);
- naRef result = naObj(type, c->free[type][--c->nfree[type]]);
- naVec_append(c->temps, result);
+ result = naObj(type, c->free[type][--c->nfree[type]]);
+ naTempSave(c, result);
return result;
}
return 0x7fffffff; // Make sure the answer is nonsense :)
}
-int naIsNil(naRef r)
-{
- return IS_NIL(r);
-}
-
-int naIsNum(naRef r)
-{
- return IS_NUM(r);
-}
-
-int naIsString(naRef r)
-{
- return (!IS_NIL(r))&&IS_STR(r);
-}
-
-int naIsScalar(naRef r)
-{
- return IS_SCALAR(r);
-}
-
-int naIsVector(naRef r)
-{
- return (!IS_NIL(r))&&IS_VEC(r);
-}
-
-int naIsHash(naRef r)
-{
- return (!IS_NIL(r))&&IS_HASH(r);
-}
-
-int naIsFunc(naRef r)
-{
- return (!IS_NIL(r))&&IS_FUNC(r);
-}
-
-int naIsCode(naRef r)
-{
- return IS_CODE(r);
-}
-
-int naIsCCode(naRef r)
-{
- return IS_CCODE(r);
-}
-
-int naIsGhost(naRef r)
-{
- return IS_GHOST(r);
-}
+int naIsNil(naRef r) { return IS_NIL(r); }
+int naIsNum(naRef r) { return IS_NUM(r); }
+int naIsString(naRef r) { return IS_STR(r); }
+int naIsScalar(naRef r) { return IS_SCALAR(r); }
+int naIsVector(naRef r) { return IS_VEC(r); }
+int naIsHash(naRef r) { return IS_HASH(r); }
+int naIsFunc(naRef r) { return IS_FUNC(r); }
+int naIsCode(naRef r) { return IS_CODE(r); }
+int naIsCCode(naRef r) { return IS_CCODE(r); }
+int naIsGhost(naRef r) { return IS_GHOST(r); }