Changeset: 0015b5a45265 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0015b5a45265
Modified Files:
        monetdb5/mal/mal_function.c
        monetdb5/mal/mal_function.h
        monetdb5/optimizer/Tests/argumenttypes.maltest
        monetdb5/optimizer/opt_garbageCollector.c
Branch: default
Log Message:

Move the variable renaming to its logical place


diffs (89 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
@@ -471,6 +471,24 @@ listFunction(stream *fd, MalBlkPtr mb, M
                printInstruction(fd, mb, stk, getInstrPtr(mb, i), flg);
 }
 
+
+void
+renameVariables(MalBlkPtr mb)
+{
+       int i;
+       /* variables get their name from the position in the symbol table */
+       /* During optimization they may be copied around, which means there 
name should be re-establised */
+       /* rename all temporaries for ease of variable table interpretation */
+       /* this code should not be necessary is variables always keep their 
position */
+       for( i = 0; i < mb->vtop; i++) {
+               if (getVarName(mb,i)[0] == 'X' && getVarName(mb,i)[1] == '_')
+                       snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i);
+               else
+               if (getVarName(mb,i)[0] == 'C' && getVarName(mb,i)[1] == '_')
+                       snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i);
+       }
+}
+
 void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int flg)
 {
        int i,j;
diff --git a/monetdb5/mal/mal_function.h b/monetdb5/mal/mal_function.h
--- a/monetdb5/mal/mal_function.h
+++ b/monetdb5/mal/mal_function.h
@@ -29,6 +29,7 @@ mal_export int isLoopBarrier(MalBlkPtr m
 mal_export int getBlockExit(MalBlkPtr mb,int pc);
 mal_export int getBlockBegin(MalBlkPtr mb,int pc);
 mal_export void setVariableScope(MalBlkPtr mb);
+mal_export void renameVariables(MalBlkPtr mb);
 
 mal_export void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int 
flg);
 mal_export void traceFunction(component_t comp, MalBlkPtr mb, MalStkPtr stk, 
int flg);
diff --git a/monetdb5/optimizer/Tests/argumenttypes.maltest 
b/monetdb5/optimizer/Tests/argumenttypes.maltest
--- a/monetdb5/optimizer/Tests/argumenttypes.maltest
+++ b/monetdb5/optimizer/Tests/argumenttypes.maltest
@@ -1,8 +1,11 @@
 statement ok
-X:bat[:int] := bat.new(nil:int)
+function foo();
+X:bat[:int] := bat.new(nil:int);
+(X_115:bat[:int], X_116:bat[:oid], X_117:bat[:oid]) := 
algebra.sort(X:bat[:int], false:bit, false:bit, false:bit);
+end foo;
 
 statement ok
-(X_115:bat[:int], X_116:bat[:oid], X_117:bat[:oid]) := 
algebra.sort(X:bat[:int], false:bit, false:bit, false:bit)
+foo()
 
 statement error
 (X_115:bat[:lng], X_116:bat[:oid], X_117:bat[:oid]) := 
algebra.sort(X:bat[:lng], false:bit, false:bit, false:bit)
diff --git a/monetdb5/optimizer/opt_garbageCollector.c 
b/monetdb5/optimizer/opt_garbageCollector.c
--- a/monetdb5/optimizer/opt_garbageCollector.c
+++ b/monetdb5/optimizer/opt_garbageCollector.c
@@ -22,6 +22,7 @@
  *
  * The life time of such BATs is forcefully terminated after the block exit.
  */
+
 str
 OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
@@ -39,20 +40,8 @@ OPTgarbageCollectorImplementation(Client
                return 0;
 
        limit = mb->stop;
+       renameVariables(mb);
 
-       /* variables get their name from the position */
-       /* rename all temporaries for ease of variable table interpretation */
-       /* this code should not be necessary is variables always keep their 
position */
-       for( i = 0; i < mb->vtop; i++) {
-               //strcpy(buf, getVarName(mb,i));
-               if (getVarName(mb,i)[0] == 'X' && getVarName(mb,i)[1] == '_')
-                       snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i);
-               else
-               if (getVarName(mb,i)[0] == 'C' && getVarName(mb,i)[1] == '_')
-                       snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i);
-               //if(strcmp(buf, getVarName(mb,i)) )
-                       //fprintf(stderr, "non-matching name/entry %s %s\n", 
buf, getVarName(mb,i));
-       }
 
        // move SQL query definition to the front for event profiling tools
        p = NULL;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to