Changeset: 29e16ed5ae4a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29e16ed5ae4a Modified Files: monetdb5/mal/mal_function.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h Branch: default Log Message:
Enforce an extra check on non-initialized variables diffs (66 lines): diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -691,6 +691,8 @@ chkDeclarations(MalBlkPtr mb){ /* check correct use of the arguments*/ for(k=p->retc;k<p->argc; k++) { l=getArg(p,k); + if ( l < 0) + throw(MAL, buf, "Non-declared variable: pc=%d, var= %d", pc, k); setVarUsed(mb,l); if( getVarScope(mb,l) == 0){ /* diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -762,6 +762,21 @@ makeVarSpace(MalBlkPtr mb) } /* create and initialize a variable record*/ +void +setVariableType(MalBlkPtr mb, const int n, malType type) +{ + assert( n >= 0 && n <mb->vtop); + setVarType(mb, n, type); + setRowCnt(mb,n,0); + clrVarFixed(mb, n); + clrVarUsed(mb, n); + clrVarInit(mb, n); + clrVarDisabled(mb, n); + clrVarUDFtype(mb, n); + clrVarConstant(mb, n); + clrVarCleanup(mb, n); +} + int newVariable(MalBlkPtr mb, const char *name, size_t len, malType type) { @@ -781,16 +796,8 @@ newVariable(MalBlkPtr mb, const char *na (void) strcpy_len( getVarName(mb,n), name, len + 1); } - setRowCnt(mb,n,0); - setVarType(mb, n, type); - clrVarFixed(mb, n); - clrVarUsed(mb, n); - clrVarInit(mb, n); - clrVarDisabled(mb, n); - clrVarUDFtype(mb, n); - clrVarConstant(mb, n); - clrVarCleanup(mb, n); mb->vtop++; + setVariableType(mb, n, type); return n; } diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -164,6 +164,7 @@ mal_export int cloneVariable(MalBlkPtr d /* generate a new variable name based on a pattern with 1 %d argument * -- not used, but this is how to do it */ /* #define renameVariable(mb, id, pattern, newid) snprintf(getVarName(mb,id),IDLENGTH,pattern,newid) */ +mal_export void setVariableType(MalBlkPtr mb, const int idx, malType type); mal_export int newTmpVariable(MalBlkPtr mb, malType type); mal_export int newTypeVariable(MalBlkPtr mb, malType type); mal_export void freeVariable(MalBlkPtr mb, int varid); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list