Login
7 branches 0 tags
Ben (X13/Arch) Added a profiling λ edf6c91 4 years ago 85 Commits
nujel / lib / types / val.h
#pragma once
#include "../nujel.h"

struct lVal {
	u8 type;
	union {
		bool       vBool;
		lPair      vList;
		int        vInt;
		float      vFloat;
		lVec      *vVec;
		lArray    *vArray;
		lString   *vString;
		lSymbol   *vSymbol;
		lClosure  *vClosure;
		lNFunc    *vNFunc;
		void      *vPointer;

		lVal      *nextFree;
	};
};

#define VAL_MAX (1<<20)

extern lVal     lValList[VAL_MAX];
extern uint     lValMax;
extern uint     lValActive;

#define forEach(n,v) for(lVal *n = v;(n != NULL) && (n->type == ltPair) && (n->vList.car != NULL); n = n->vList.cdr)

void      lInitVal();

lVal     *lValAlloc ();
void      lValFree  (lVal *v);

lVal     *lValBool  (bool v);
lVal     *lValInf   ();
lVal     *lValInt   (int v);
lVal     *lValFloat (float v);
lVal     *lValCopy  (lVal *dst, const lVal *src);
lVal     *lValDup   (const lVal *v);