⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdb.mx

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 MX
📖 第 1 页 / 共 2 页
字号:
strMDBsetMemory(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= memoryFlag;	else		cntxt->flags &= ~memoryFlag;	return MAL_SUCCEED;}strMDBsetIO(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= ioFlag;	else		cntxt->flags &= ~ioFlag;	return MAL_SUCCEED;}strMDBinspect(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme;	str fcnnme;	Module scope = NULL;	Symbol s = NULL;	Client c = MCgetClient();	if (stk != 0) {		modnme = (str) getArgValue(stk, p, 1);		fcnnme = (str) getArgValue(stk, p, 2);	} else {		modnme = getArgDefault(mb, p, 1);		fcnnme = getArgDefault(mb, p, 2);	}	scope = findModule(c->nspace, putName(modnme, strlen(modnme)));	if (scope)		s = findSymbolInModule(scope, putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		throw(MAL, "mdb.inspect", "Could not find function");	return runMALDebugger(s);}@+ Variables and stack informationThe variable information can be turned into a BAT for inspection as well.@cstatic intgetStkDepth(MalStkPtr s){	int i = 0;	while (s != 0) {		i++;		s = s->up;	}	return i;}strMDBStkDepth(MalBlkPtr mb, MalStkPtr s, InstrPtr p){	int *ret = (int *) getArgReference(s, p, 0);	(void) mb;		/* fool compiler */	*ret = getStkDepth(s);	return MAL_SUCCEED;}strMDBgetFrame(BAT *b, MalBlkPtr mb, MalStkPtr s, int depth){	ValPtr v;	int i;	char *buf = 0;	if (depth > 0)		return MDBgetFrame(b, mb, s->up, depth - 1);	if (s != 0)		for (i = 0; i < s->stktop; i++, v++) {			v = &s->stk[i];			ATOMformat(v->vtype, VALget(v), &buf);			BUNins(b, getVarName(mb, i), buf, FALSE);		}	return MAL_SUCCEED;}strMDBgetStackFrame(MalBlkPtr m, MalStkPtr s, InstrPtr p){	int *ret = (int *) getArgReference(s, p, 0);	BAT *b = BATnew(TYPE_str, TYPE_str, 256);	if (b == 0)		throw(MAL, "mdb.getStackFrame", "Failed to create BAT");	@:Pseudo(view,stk,frame)@	return MDBgetFrame(b, m, s, 0);}strMDBgetStackFrameN(MalBlkPtr m, MalStkPtr s, InstrPtr p){	int n, *ret = (int *) getArgReference(s, p, 0);	BAT *b = BATnew(TYPE_str, TYPE_str, 256);	n = *(int *) getArgReference(s, p, 1);	if (n < 0 || n >= getStkDepth(s))		throw(MAL, "mdb.getStackFrame", "Illegal depth.");	@:Pseudo(view,stk,frame)@	return MDBgetFrame(b, m, s, n);}strMDBStkTrace(MalBlkPtr m, MalStkPtr s, InstrPtr p){	BAT *b = BATnew(TYPE_int, TYPE_str, 256);	str msg;	char buf[8192];	int *ret = (int *) getArgReference(s, p, 0);	int k = 0,pc;	msg = call2str(MCgetClient(),s->blk, s, pc=getPC(m, p));	snprintf(buf,8192,"%s at %s.%s[%d]", msg+5,		getModuleId(getInstrPtr(m,0)),		getFunctionId(getInstrPtr(m,0)), pc);	BUNins(b, &k, buf, FALSE);	GDKfree(msg);	for (s = s->up, k++; s != NULL; s = s->up, k++) {		msg = call2str(MCgetClient(),s->blk, s, s->pcup);		snprintf(buf,8192,"%s at %s.%s[%d]", msg+5,			getModuleId(getInstrPtr(s->blk,0)),			getFunctionId(getInstrPtr(s->blk,0)), s->pcup);		BUNins(b, &k, buf, FALSE);		GDKfree(msg);	}	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	@:Pseudo(view,stk,trace)@	return MAL_SUCCEED;}@+ Display routines@cstrMDBlist(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printFunction(c->fdout, mb, LIST_MAL_INSTR | LIST_MAL_PROPS);	return MAL_SUCCEED;}strMDBlist3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.list","Could not find %s.%s", modnme, fcnnme);	else		printFunction(c->fdout, s->def, LIST_MAL_INSTR | LIST_MAL_PROPS);	(void) mb;		/* fool compiler */	return NULL;}strMDBlistDetail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printFunction(c->fdout, mb, LIST_MAL_ALL);	return MAL_SUCCEED;}strMDBlist3Detail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.list","Could not find %s.%s", modnme, fcnnme);	else		printFunction(c->fdout, s->def, LIST_MAL_ALL);	(void) mb;		/* fool compiler */	return NULL;}strMDBvar(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printStack(c->fdout, mb, stk,0);	return MAL_SUCCEED;}strMDBvar3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.var","Could not find %s.%s", modnme, fcnnme);	else		printStack(c->fdout, s->def, (s->def == mb ? stk : 0),0);	(void) mb;	return NULL;}@-It is illustrative to dump the code when youhave encountered an error.@cstrMDBgetDefinition(MalBlkPtr m, MalStkPtr stk, InstrPtr p){	int i, *ret = (int *) getArgReference(stk, p, 0);	str ps;	BAT *b = BATnew(TYPE_int, TYPE_str, 256);	if (b == 0)		throw(MAL, "mdb.getDefinition", "Failed to create BAT");	for (i = 0; i < m->stop; i++) {		ps = instruction2str(m, getInstrPtr(m, i), 1);		BUNins(b, &i, ps, FALSE);		GDKfree(ps);	}	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	@:Pseudo(view,fcn,stmt)@	return MAL_SUCCEED;}strMDBgetExceptionVariable(str *ret, str *msg){	str tail;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionVariable", "Could not find it");	*tail = 0;	*ret = GDKstrdup(*msg);	*tail = ':';	return MAL_SUCCEED;}strMDBgetExceptionContext(str *ret, str *msg){	str tail, tail2;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionContext", "Could not find it");	tail2 = strchr(tail + 1, ':');	if (tail2 == 0)		throw(MAL, "mdb.getExceptionContext", "Could not find it");	*tail2 = 0;	*ret = GDKstrdup(tail + 1);	*tail2 = ':';	return MAL_SUCCEED;}strMDBgetExceptionReason(str *ret, str *msg){	str tail;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionReason", "Could not find it");	tail = strchr(tail + 1, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionReason", "Could not find it");	*ret = GDKstrdup(tail + 1);	return MAL_SUCCEED;}strMDBshowFlowGraph(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str fname;	str modnme;	str fcnnme;	Module scope = NULL;	Symbol s = NULL;	Client c = MCgetClient();	if (stk != 0) {		modnme = (str) getArgValue(stk, p, 1);		fcnnme = (str) getArgValue(stk, p, 2);		fname = (str) getArgValue(stk, p, 3);	} else {		modnme = getArgDefault(mb, p, 1);		fcnnme = getArgDefault(mb, p, 2);		fname = getArgDefault(mb, p, 3);	}	scope = findModule(c->nspace, putName(modnme, strlen(modnme)));	if (scope)		s = findSymbolInModule(scope, putName(fcnnme, strlen(fcnnme)));	if (s == NULL) {		char buf[1024];		snprintf(buf,1024, "Could not find %s.%s\n", modnme, fcnnme);		throw(MAL, "mdb.dot", buf);	}	showFlowGraph(s->def, stk, fname);	return MAL_SUCCEED;}@}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -