Changeset: dd50a79ff382 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dd50a79ff382
Modified Files:
monetdb5/mal/mal_debugger.c
Branch: default
Log Message:
Clean up some issues in the MAL debugger
Just a better analysis of the slices to be displayed.
Dropped the skip to next variable command
diffs (136 lines):
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -43,7 +43,7 @@ typedef struct MDBSTATE{
#define skipBlanc(c, X) while (*(X) && isspace((int) *X)) { X++; }
#define skipNonBlanc(c, X) while (*(X) && !isspace((int) *X)) { X++; }
-#define skipWord(c, X) while (*(X) && isalnum((int) *X)) { X++; } \
+#define skipWord(c, X) while (*(X) && (isalnum((int) *X))) { X++; } \
skipBlanc(c, X);
static void printStackElm(stream *f, MalBlkPtr mb, ValPtr v, int index, BUN
cnt, BUN first);
@@ -336,7 +336,7 @@ printBATproperties(stream *f, BAT *b)
mnstr_printf(cntxt->fdout, "#MonetDB Debugger %s\n", (X ? "on"
: "off"));
static MalBlkPtr
-mdbLocateMalBlk(Client cntxt, MalBlkPtr mb, str b, stream *out)
+mdbLocateMalBlk(Client cntxt, MalBlkPtr mb, str b)
{
MalBlkPtr m = mb;
char *h = 0;
@@ -385,7 +385,6 @@ mdbLocateMalBlk(Client cntxt, MalBlkPtr
if (h)
*h = '[';
if (fsym == 0) {
- mnstr_printf(out, "#'%s.%s' not found\n", b, fcnname +
1);
return NULL;
}
m = fsym->def;
@@ -404,7 +403,7 @@ mdbCommand(Client cntxt, MalBlkPtr mb, M
char *oldprompt = cntxt->prompt;
size_t oldpromptlength = cntxt->promptlength;
MalStkPtr stk = stkbase;
- int first = pc;
+ int first = pc - ( pc == 1);
int stepsize = 1000;
char oldcmd[1024] = { 0 };
str msg = MAL_SUCCEED;
@@ -855,8 +854,7 @@ retryRead:
case 'l': /* list the current MAL block or module */
{
Symbol fs;
- int i, lstng, varid;
- InstrPtr q;
+ int lstng;
lstng = LIST_MAL_NAME;
if(*b == 'L')
@@ -864,40 +862,32 @@ retryRead:
skipWord(cntxt, b);
skipBlanc(cntxt, b);
if (*b != 0) {
- MalBlkPtr m = mdbLocateMalBlk(cntxt, mb, b,
out);
- if (m && strchr(b, '*')) {
- /* detect l user.fcn[*] */
- for (m = mb; m != NULL; m = m->history)
- if( lstng == LIST_MAL_NAME)
- printFunction(out, m,
0, lstng);
- else
- debugFunction(out, m,
0, lstng, 0,m->stop);
- } else if (m == NULL && !strchr(b, '.') &&
!strchr(b, '[') && !isdigit((int) *b) && *b != '-' && *b != '+') {
- /* is this a variable ? */
- varid = findVariable(mb, b);
- if (varid >= 0) {
- b += (int)
strlen(getVarName(mb, varid));
- skipBlanc(cntxt, b);
- for (; pc < mb->stop; pc++) {
- q = getInstrPtr(mb, pc);
- for (i = 0; i <
q->argc; i++)
- if (getArg(q,
i) == varid) {
- first =
pc;
- goto
partial;
- }
-
- }
- continue;
+ /* debug the current block */
+ MalBlkPtr m = mdbLocateMalBlk(cntxt, mb, b);
+
+ if ( m == 0)
+ m = mb;
+ if ( m ){
+ str nme = getFunctionId(mb->stmt[0]);
+ str s = strstr(b, nme);
+ if( s ){
+ b = s + strlen(nme);
+ skipBlanc(cntxt,b);
}
}
if (isdigit((int) *b) || *b == '-' || *b == '+')
goto partial;
+ /* inspect another function */
if( strchr(b,'.') ){
str modnme = b;
str fcnnme;
fcnnme = strchr(b,'.');
*fcnnme++ = 0;
+ b = fcnnme;
+ skipNonBlanc(cntxt, b);
+ if ( b)
+ *b++ = 0;
fs = findSymbol(cntxt->usermodule,
putName(modnme),putName(fcnnme));
if (fs == 0) {
@@ -909,7 +899,7 @@ retryRead:
if( lstng == LIST_MAL_NAME)
printFunction(out,
fs->def, 0, lstng);
else
- debugFunction(out,
fs->def, 0, lstng, 0,m->stop);
+ debugFunction(out,
fs->def, 0, lstng, 0,mb->stop);
}
continue;
}
@@ -960,9 +950,11 @@ partial:
skipWord(cntxt, b);
skipBlanc(cntxt, b);
if (*b) {
- mdot = mdbLocateMalBlk(cntxt, mb, b, out);
+ mdot = mdbLocateMalBlk(cntxt, mb, b);
if (mdot != NULL)
showMalBlkHistory(out, mdot);
+ else
+ mnstr_printf(out, "#'%s' not found\n",
b);
} else
showMalBlkHistory(out, mb);
break;
@@ -1401,7 +1393,7 @@ mdbHelp(stream *f)
mnstr_printf(f, "list <obj> -- list current program block\n");
mnstr_printf(f, "list # [+#],-# -- list current program block
slice\n");
mnstr_printf(f, "List <obj> [#] -- list with type
information[slice]\n");
- mnstr_printf(f, "list '['<name>']'-- list program block after optimizer
<name> or <#>\n");
+ mnstr_printf(f, "list [#] <obj> -- list program block after optimizer
<#>\n");
mnstr_printf(f, "List # [+#],-# -- list current program block
slice\n");
mnstr_printf(f, "var <obj> -- print symbol table for module\n");
mnstr_printf(f, "optimizer <obj> -- display optimizer steps\n");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list