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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list