📄 inspect.c
字号:
#line 116 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx"#include "mal_config.h"#include "gdk.h"#include <stdarg.h>#include <time.h>#include "mal_resolve.h"#include "mal_client.h"#include "mal_exception.h"#include "mal_debugger.h"#include "mal_interpreter.h"#include "mal_namespace.h"#ifdef WIN32#ifndef LIBINSPECT#define inspect_export extern __declspec(dllimport)#else#define inspect_export extern __declspec(dllexport)#endif#else#define inspect_export extern#endifinspect_export str INSPECTgetModuleIds(int *ret);inspect_export str INSPECTsymbolFind(int *ret, int kind);inspect_export str INSPECTfactoryNames(int *ret);inspect_export str INSPECTgetFunctionIds(int *ret);inspect_export str INSPECTpatternNames(int *ret);inspect_export str INSPECTcommandNames(int *ret);inspect_export str INSPECTgetFunction(int *ret);inspect_export str INSPECTgetModule(int *ret);inspect_export str INSPECTgetkind(int *ret);inspect_export str INSPECTgetaddress(int *ret);inspect_export str INSPECTgetAllSignatures(int *ret);inspect_export str INSPECTgetAllModules(int *ret);inspect_export str INSPECTgetAllFunctions(int *ret);inspect_export str INSPECTgetAllAddresses(int *ret);inspect_export str INSPECTgetDefinition(int *ret, str *nme, str *fcn);inspect_export str INSPECTgetSignature(int *ret, str *mod, str *fcn);inspect_export str INSPECTgetAddress(int *ret, str *mod, str *fcn);inspect_export str INSPECTgetComment(int *ret, str *mod, str *fcn);inspect_export str INSPECTgetSource(str *ret, str *mod, str *fcn);inspect_export str INSPECTgetModuleSize(int *ret, str *mod);inspect_export str INSPECTgetFunctionSize(lng *ret, str *mod, str *fcn);inspect_export str INSPECTgetSize(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);inspect_export str INSPECTgetEnvironment(int *ret);inspect_export str INSPECTsymbolType(int *ret, str *mod, str *fcn);inspect_export str INSPECTatom_names(int *ret);inspect_export str INSPECTatom_sup_names(int *ret);inspect_export str INSPECTatom_sizes(int *ret);inspect_export str INSPECTshowFunction(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);inspect_export str INSPECTshowFunction3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);inspect_export str INSPECTtypename(str *ret, int *tpe);inspect_export str INSPECTtype(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);inspect_export str INSPECTtypeName(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);inspect_export str INSPECTtypeIndex(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);#line 174 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx"strINSPECTgetModuleIds(int *ret){ Client c; Module s; int i = 0; BAT *b = BATnew(TYPE_void, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.getModuleIds", "failed to create BAT"); c = MCgetClient(); for (s = c->nspace; s; s = s->outer, i++) BUNins(b, (ptr) &int_nil, s->name, FALSE); if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_scope_names") <= 0) BATname(b, "view_scope_names"); BATroles(b,"view","scope"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 191 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTsymbolFind(int *ret, int kind){ Client c; Module s; Symbol t; int i; BAT *b = BATnew(TYPE_str, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.symbolFind", "failed to create BAT"); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { InstrPtr sig = getSignature(t); if (kind && kind != sig->token) continue; BUNins(b, getModuleId(sig), getFunctionId(sig), FALSE); } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_symbol_name") <= 0) BATname(b, "view_symbol_name"); BATroles(b,"view","symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 223 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTfactoryNames(int *ret){ return INSPECTsymbolFind(ret, FACTORYsymbol);}strINSPECTgetFunctionIds(int *ret){ return INSPECTsymbolFind(ret, FUNCTIONsymbol);}strINSPECTpatternNames(int *ret){ return INSPECTsymbolFind(ret, PATTERNsymbol);}strINSPECTcommandNames(int *ret){ return INSPECTsymbolFind(ret, COMMANDsymbol);}#line 257 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx"strINSPECTgetAllFunctions(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.getgetFunctionId", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { InstrPtr sig = getSignature(t); BUNins(b, &k, getFunctionId(sig), FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_symbol_function") <= 0) BATname(b, "view_symbol_function"); BATroles(b,"view","symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 286 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetAllModules(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.getmodule", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { InstrPtr sig = getSignature(t); BUNins(b, &k, getModuleId(sig), FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_symbol_module") <= 0) BATname(b, "view_symbol_module"); BATroles(b,"view","symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 319 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetkind(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.get@1", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { InstrPtr sig = getSignature(t); str kind = operatorName(sig->token); BUNins(b, &k, kind, FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_symbol_kind") <= 0) BATname(b, "view_symbol_kind"); BATroles(b,"view","symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 353 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetaddress(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.get@1", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { str kind = t->def->binding; if (kind == 0) kind = ""; BUNins(b, &k, &kind, FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_symbol_ address") <= 0) BATname(b, "view_symbol_ address"); BATroles(b,"view","symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 388 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetAllSignatures(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); char sig[4096],*a; if (b == 0) throw(MAL, "inspect.get@1", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { fcnDefinition(t->def, getSignature(t), sig, 0); a= strstr(sig,"address"); if(a) *a = 0; BUNins(b, &k, strchr(sig, '('), FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_ symbol_address") <= 0) BATname(b, "view_ symbol_address"); BATroles(b,"view"," symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 424 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetAllAddresses(int *ret){ Client c; Module s; Symbol t; int i; oid k = 0; BAT *b = BATnew(TYPE_oid, TYPE_str, 256); char sig[4096],*a; if (b == 0) throw(MAL, "inspect.get@1", "failed to create BAT"); BATseqbase(b, k); c = MCgetClient(); s = c->nspace; while (s) { for (i = 0; s && i < MAXSCOPE; i++) if (s->subscope[i]) { for (t = s->subscope[i]; t; t = t->peer) { fcnDefinition(t->def, getSignature(t), sig, 0); a= strstr(sig,"address"); if( a) for( a=a+7; isspace((int) *a); a++) ; BUNins(b, &k, (a? a: "nil"), FALSE); k++; } } s = s->outer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_ symbol_address") <= 0) BATname(b, "view_ symbol_address"); BATroles(b,"view"," symbol"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 460 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}strINSPECTgetDefinition(int *ret, str *mod, str *fcn){ Symbol s; char buf[BUFSIZ]; BAT *b = BATnew(TYPE_str, TYPE_str, 256); if (b == 0) throw(MAL, "inspect.getDefinition", "failed to create BAT"); snprintf(buf,BUFSIZ,"%s.%s",*mod,*fcn); s = findMALSymbol(putName(*mod, strlen(*mod)), putName(*fcn, strlen(*fcn))); while (s) { int i; str ps; for (i = 0; i < s->def->stop; i++) { ps = instruction2str(s->def, getInstrPtr(s->def, i), 0); BUNins(b, buf, ps + 1, FALSE); GDKfree(ps); } s = s->peer; } if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ); #line 113 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" if (BBPindex("view_fcn_stmt") <= 0) BATname(b, "view_fcn_stmt"); BATroles(b,"view","fcn"); BATmode(b,TRANSIENT); BATfakeCommit(b); *ret = b->batCacheid; BBPkeepref(*ret);#line 489 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/inspect.mx" return MAL_SUCCEED;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -