📄 mal_stack.h
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -