Changeset: 99d40ce7b757 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=99d40ce7b757
Modified Files:
        monetdb5/extras/mal_optimizer_template/opt_sql_append.c
        monetdb5/mal/mal_builder.c
        monetdb5/optimizer/opt_commonTerms.c
        monetdb5/optimizer/opt_emptybind.c
        monetdb5/optimizer/opt_macro.c
        monetdb5/scheduler/run_adder.c
Branch: default
Log Message:

Added a few missing exception catchers and avoid using NULL instrPtr.


diffs (201 lines):

diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c 
b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
--- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
+++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
@@ -294,8 +294,8 @@ str OPTsql_append(Client cntxt, MalBlkPt
        actions= OPTsql_appendImplementation(cntxt, mb,stk,p);
 
     /* Defense line against incorrect plans */
-       chkTypes(cntxt->usermodule, mb, FALSE);
-       chkFlow(mb);
+       msg = chkTypes(cntxt->usermodule, mb, FALSE);
+       if( msg == MAL_SUCCEED) msg = chkFlow(mb);
        if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
 #ifdef DEBUG_OPT_OPTIMIZERS
                mnstr_printf(cntxt->fdout,"=FINISHED sql_append %d\n",actions);
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -24,9 +24,14 @@ InstrPtr
 newAssignment(MalBlkPtr mb)
 {
        InstrPtr q = newInstruction(mb,NULL,NULL);
+       int k;
+
        assert(q);
-       if ((getArg(q,0)= newTmpVariable(mb,TYPE_any)) < 0) 
+       k = newTmpVariable(mb,TYPE_any);
+       if (k < 0) {
                addMalException(mb, createException(MAL, "newAssignment", "Can 
not allocate variable"));
+       } else
+               getArg(q,0) =  k;
        pushInstruction(mb, q);
        return q;
 }
@@ -66,9 +71,14 @@ InstrPtr
 newReturnStmt(MalBlkPtr mb)
 {
        InstrPtr q = newInstruction(mb, NULL, NULL);
+       int k;
+
        assert(q);
-       if ((getArg(q,0)= newTmpVariable(mb,TYPE_any)) < 0 )
+       k = newTmpVariable(mb,TYPE_any);
+       if (k < 0 )
                addMalException(mb, createException(MAL, "newReturnStmt", "Can 
not allocate return variable"));
+       else
+               getArg(q,0) = k;
        q->barrier= RETURNsymbol;
        pushInstruction(mb, q);
        return q;
@@ -117,13 +127,18 @@ newCatchStmt(MalBlkPtr mb, str nme)
 {
        InstrPtr q = newAssignment(mb);
        int i= findVariable(mb,nme);
+       int k;
 
        assert(q);
        q->barrier = CATCHsymbol;
        if ( i< 0) {
-               if ((getArg(q,0)= newVariable(mb, nme, strlen(nme),TYPE_str)) < 
0 )
+               k = newVariable(mb, nme, strlen(nme),TYPE_str);
+               if (k<0)
                        addMalException(mb, createException(MAL, 
"newCatchStmt", "Can not allocate variable"));
-               setVarUDFtype(mb,getArg(q,0));
+               else{
+                       getArg(q,0) = k;
+                       setVarUDFtype(mb,getArg(q,0));
+               }
        } else getArg(q,0) = i;
        return q;
 }
@@ -133,12 +148,16 @@ newRaiseStmt(MalBlkPtr mb, str nme)
 {
        InstrPtr q = newAssignment(mb);
        int i= findVariable(mb,nme);
+       int k;
 
        assert(q);
        q->barrier = RAISEsymbol;
        if ( i< 0) {
-               if ((getArg(q,0)= newVariable(mb, nme, strlen(nme),TYPE_str)) < 
0 || mb->errors != MAL_SUCCEED) 
+               k = newVariable(mb, nme, strlen(nme),TYPE_str);
+               if (k< 0 || mb->errors != MAL_SUCCEED) 
                        addMalException(mb, createException(MAL, 
"newRaiseStmt", "Can not allocate variable"));
+               else
+                       getArg(q,0) = k;
        } else
                getArg(q,0) = i;
        return q;
@@ -149,12 +168,16 @@ newExitStmt(MalBlkPtr mb, str nme)
 {
        InstrPtr q = newAssignment(mb);
        int i= findVariable(mb,nme);
+       int k;
 
        assert(q);
        q->barrier = EXITsymbol;
        if ( i< 0) {
-               if ((getArg(q,0)= newVariable(mb, nme,strlen(nme),TYPE_str)) < 
0 )
+               k= newVariable(mb, nme,strlen(nme),TYPE_str);
+               if (k < 0 )
                        addMalException(mb, createException(MAL, "newExitStmt", 
"Can not allocate variable"));
+               else
+                       getArg(q,0) = k;
        } else
                getArg(q,0) = i;
        return q;
diff --git a/monetdb5/optimizer/opt_commonTerms.c 
b/monetdb5/optimizer/opt_commonTerms.c
--- a/monetdb5/optimizer/opt_commonTerms.c
+++ b/monetdb5/optimizer/opt_commonTerms.c
@@ -223,7 +223,7 @@ OPTcommonTermsImplementation(Client cntx
     if( actions > 0){
         msg = chkTypes(cntxt->usermodule, mb, FALSE);
        if (!msg)
-               chkFlow(mb);
+               msg = chkFlow(mb);
        if (!msg)
                msg = chkDeclarations(mb);
     }
diff --git a/monetdb5/optimizer/opt_emptybind.c 
b/monetdb5/optimizer/opt_emptybind.c
--- a/monetdb5/optimizer/opt_emptybind.c
+++ b/monetdb5/optimizer/opt_emptybind.c
@@ -20,15 +20,6 @@
 #include "opt_deadcode.h"
 #include "mal_builder.h"
 
-#define addresult(I)                                                           
        \
-       do {                                                                    
                        \
-               int tpe = getVarType(mb,getArg(p,I));                   \
-               q= newStmt(mb, batRef, newRef);                                 
\
-               getArg(q,0)= getArg(p,I);                                       
        \
-               q = pushType(mb, q, getBatType(tpe));                   \
-               empty[getArg(q,0)]= i;                                          
        \
-       } while (0)
-
 #define emptyresult(I)                                                         
        \
        do {                                                                    
                        \
                int tpe = getVarType(mb,getArg(p,I));                   \
@@ -37,10 +28,11 @@
                setFunctionId(p,newRef);                                        
        \
                p->argc = p->retc;                                              
                \
                p = pushType(mb,p, getBatType(tpe));                    \
-               setVarType(mb, getArg(p,0), tpe);                               
\
-               setVarFixed(mb, getArg(p,0));                                   
\
-               empty[getArg(p,0)]= i;                                          
        \
-       } while (0)
+               if( p) {                                                        
                        \
+                       setVarType(mb, getArg(p,0), tpe);                       
\
+                       setVarFixed(mb, getArg(p,0));                           
\
+                       empty[getArg(p,0)]= i;                                  
        \
+       }  } while (0)
 
 
 str
diff --git a/monetdb5/optimizer/opt_macro.c b/monetdb5/optimizer/opt_macro.c
--- a/monetdb5/optimizer/opt_macro.c
+++ b/monetdb5/optimizer/opt_macro.c
@@ -477,7 +477,7 @@ OPTorcamImplementation(Client cntxt, Mal
 
 str OPTmacro(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p){
        Symbol t;
-       str msg,mod,fcn;
+       str msg = MAL_SUCCEED, mod, fcn;
        lng clk= GDKusec();
        char buf[256];
        lng usec = GDKusec();
@@ -508,8 +508,8 @@ str OPTmacro(Client cntxt, MalBlkPtr mb,
        }
 
     /* Defense line against incorrect plans */
-       chkTypes(cntxt->usermodule, mb, FALSE);
-       chkFlow(mb);
+       msg = chkTypes(cntxt->usermodule, mb, FALSE);
+       if( msg == MAL_SUCCEED) msg = chkFlow(mb);
        if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
        usec += GDKusec() - clk;
        /* keep all actions taken as a post block comment */
@@ -550,8 +550,8 @@ str OPTorcam(Client cntxt, MalBlkPtr mb,
                msg= OPTorcamImplementation(cntxt,mb,stk,p);
        if( msg) 
                return msg;
-       chkTypes(cntxt->usermodule, mb, FALSE);
-       chkFlow(mb);
+       msg = chkTypes(cntxt->usermodule, mb, FALSE);
+       if( msg == MAL_SUCCEED) msg = chkFlow(mb);
        if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
        usec += GDKusec() - clk;
        /* keep all actions taken as a post block comment */
diff --git a/monetdb5/scheduler/run_adder.c b/monetdb5/scheduler/run_adder.c
--- a/monetdb5/scheduler/run_adder.c
+++ b/monetdb5/scheduler/run_adder.c
@@ -121,8 +121,8 @@ RUNadder(Client cntxt, MalBlkPtr mb, Mal
        mb->stop += (oldtop-pc)-1;
 
        /* check new statments for sanity */
-       chkTypes(cntxt->usermodule, mb, FALSE);
-       chkFlow(mb);
+       msg = chkTypes(cntxt->usermodule, mb, FALSE);
+       if( msg == MAL_SUCCEED) msg = chkFlow(mb);
        if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
 
        GDKfree(old);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to