mal_stack.h
来自「一个内存数据库的源代码这是服务器端还有客户端」· C头文件 代码 · 共 52 行
H
52 行
#ifndef _MAL_STACK_H_#define _MAL_STACK_H_#include "mal.h"#include "gdk.h"#include "gdk_system.h"#define STACKINCR 128#define MAXGLOBALS 4 * STACKINCR#define MAXSHARES 2typedef struct MALSTK { int stksize; int stktop; lng stkdepth; /* to protect against overflow */ short keepAlive; /* do not garbage collect when set */ short garbageCollect; /* stack needs garbage collection */ MT_Lock stklock; /* used for parallel processing */ int shares; /* number of processes locked onto this stack */ int childs[MAXSHARES]; /* not used */ char cmd; /* debugger communication */ int pcup; /* saved pc upon a recursive all */ struct MALSTK *up; /* stack trace list */ struct MALSTK *down; /* stack trace list */ struct MALBLK *blk; /* associated definition */ ValRecord stk[1];} MalStack, *MalStkPtr;#define stackSize(CNT) (sizeof(ValRecord)*(CNT) + sizeof(MalStack))#define newStack(S,CNT) S= (MalStkPtr) alloca(stackSize(CNT));\ (S)->stksize=CNT;mal_export MalStkPtr newGlobalStack(int size);mal_export MalStkPtr reallocStack(MalStkPtr s, int cnt);mal_export MalStkPtr reallocGlobalStack(MalStkPtr s, int cnt);mal_export void freeStack(MalStkPtr stk);mal_export void clearStack(MalStkPtr s);mal_export void chkStack(MalStkPtr stk, int i); /* used in src/mal/mal_box.c */#define VARfreeze(X) if(X){X->frozen=TRUE;}#define VARfixate(X) if(X){X->constant=TRUE;}#define getStkRecord(S,P,I) &(S)->stk[(P)->argv[I]]#define getStkValue(S,P,I) ( getStkType(S,P,I)== TYPE_str? \ getStkRecord(S,P,I)->val.sval :\ getStkRecord(S,P,I)->val.pval )#define getStkType(S,P,I) (S)->stk[(P)->argv[I]].vtype#define setStkType(S,P,I,T) (S)->stk[(P)->argv[I]].vtype = T#endif /* _MAL_STACK_H_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?