Changeset: 3ffa0b460401 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3ffa0b460401
Modified Files:
        monetdb5/mal/mal_resolve.mx
Branch: Aug2011
Log Message:

uncrustify


diffs (truncated from 731 to 300 lines):

diff --git a/monetdb5/mal/mal_resolve.mx b/monetdb5/mal/mal_resolve.mx
--- a/monetdb5/mal/mal_resolve.mx
+++ b/monetdb5/mal/mal_resolve.mx
@@ -130,11 +130,13 @@
 }
 #endif
 
-static malType findFunctionType(Module scope, MalBlkPtr mb, InstrPtr p,int 
silent){
+static malType
+findFunctionType(Module scope, MalBlkPtr mb, InstrPtr p, int silent)
+{
        Module m;
        Symbol s;
        InstrPtr sig;
-       int i,k, unmatched = 0, s1;
+       int i, k, unmatched = 0, s1;
        /* int foundbutwrong=0;*/
        int polytype[MAXTYPEVAR];
        int *returntype;
@@ -155,164 +157,164 @@
         * it will be looked up multiple types to resolve the instruction.[todo]
         * Simplify polytype using a map into the concrete argument table.
         */
-       m= scope;
-       s= m->subscope[(int)(getSubScope(getFunctionId(p)))];
-       if( s == 0) return -1;
-       while(s != NULL){   /* single scope element check */
-       if( getFunctionId(p) != s->name  ){
-               s= s->skip; continue;
-       }
-       /*
-        * @-
-        * Perform a strong type-check on the actual arguments. If it turns
-        * out to be a polymorphic MAL function, we have to clone it.
-        * Provided the actual/formal parameters are compliant throughout
-        * the function call.
-        *
-        * Also look out for variable argument lists. This means that we
-        * have to keep two iterators, one for the caller (i) and one for
-        * the callee (k). Since a variable argument only occurs as the last 
one,
-        * we simple avoid an increment when running out of formal arguments.
-        *
-        * A call of the form (X1,..., Xi) := f(Y1,....,Yn) can be matched 
against
-        * the function signature (B1,...,Bk):= f(A1,...,Am) where i==k , n<=m
-        * and type(Ai)=type(Yi). Furthermore, the variables Xi obtain their 
type
-        * from Bi (or type(Bi)==type(Xi)).
-        */
-       sig = getSignature(s); 
-       unmatched = 0;
+       m = scope;
+       s = m->subscope[(int)(getSubScope(getFunctionId(p)))];
+       if (s == 0) return -1;
+       while (s != NULL) {  /* single scope element check */
+               if (getFunctionId(p) != s->name) {
+                       s = s->skip; continue;
+               }
+               /*
+                * @-
+                * Perform a strong type-check on the actual arguments. If it 
turns
+                * out to be a polymorphic MAL function, we have to clone it.
+                * Provided the actual/formal parameters are compliant 
throughout
+                * the function call.
+                *
+                * Also look out for variable argument lists. This means that we
+                * have to keep two iterators, one for the caller (i) and one 
for
+                * the callee (k). Since a variable argument only occurs as the 
last one,
+                * we simple avoid an increment when running out of formal 
arguments.
+                *
+                * A call of the form (X1,..., Xi) := f(Y1,....,Yn) can be 
matched against
+                * the function signature (B1,...,Bk):= f(A1,...,Am) where i==k 
, n<=m
+                * and type(Ai)=type(Yi). Furthermore, the variables Xi obtain 
their type
+                * from Bi (or type(Bi)==type(Xi)).
+                */
+               sig = getSignature(s);
+               unmatched = 0;
 
 #ifdef DEBUG_MAL_RESOLVE
-       if(tracefcn) {
-       mnstr_printf(GDKout,"-->resolving\n");
-       printInstruction(GDKout,mb,0,p,LIST_MAL_ALL);
-       mnstr_printf(GDKout,"++> test against signature\n");
-       printInstruction(GDKout,s->def,0,getSignature(s),LIST_MAL_ALL);
-       mnstr_printf(GDKout," %s \n", sig->polymorphic?"polymorphic":"");
-       }
+               if (tracefcn) {
+                       mnstr_printf(GDKout, "-->resolving\n");
+                       printInstruction(GDKout, mb, 0, p, LIST_MAL_ALL);
+                       mnstr_printf(GDKout, "++> test against signature\n");
+                       printInstruction(GDKout, s->def, 0, getSignature(s), 
LIST_MAL_ALL);
+                       mnstr_printf(GDKout, " %s \n", sig->polymorphic ? 
"polymorphic" : "");
+               }
 #endif
-       /*
-        * @-
-        * The simple case could be taken care of separately to speedup 
processing
-        * However, it turned out not to make a big difference.
-        * The first time we encounter a polymorphic argument in the
-        * signature.
-        * Subsequently, the polymorphic arguments update this table
-        * and check for any type mismatches that might occur.
-        * There are at most 2 type variables involved per argument
-        * due to the limited type nesting permitted.
-        * Note, each function returns at least one value.
-        */
-       if( sig->polymorphic ){
-       int limit = sig->polymorphic;
-       if( ! (sig->argc== p->argc ||
-               (sig->argc<p->argc && sig->varargs & (VARARGS | VARRETS) )) 
-       ){
-               s= s->peer; continue;
-       }
-       if( sig->retc != p->retc && !(sig->varargs & VARRETS)) {
-               s= s->peer;
-               continue;
-       }
-/*  if(polyVector[0]==0) polyInit();
-       memcpy(polytype,polyVector, 2*sig->argc*sizeof(int)); */
-
-       for(k=0; k< limit; k++) polytype[k] = TYPE_any;
-       /*
-        * @-
-        * Most polymorphic functions don;t have a variable argument
-        * list. So we save some instructions factoring this caise out.
-        * Be careful, the variable number of return arguments should
-        * be considered as well.
-        */
-       i= p->retc;
-       /* first handle the variable argument list */
-       for(k=sig->retc; i<p->argc; k++, i++){
-               int actual = getArgType(mb,p,i);
-               int formal = getArgType(s->def,sig,k);
-               if (k == sig->argc-1 && sig->varargs & VARARGS)
-                       k--;
                /*
                 * @-
-                * Take care of variable argument lists.
-                * They are allowed as the last in the signature only.
-                * Furthermore, for patterns if the formal type is 'any' then 
all remaining arguments
-                * are acceptable and detailed type analysis becomes part of 
the pattern
-                * implementation.
-                * In all other cases the type should apply to all remaining 
arguments.
+                * The simple case could be taken care of separately to speedup 
processing
+                * However, it turned out not to make a big difference.
+                * The first time we encounter a polymorphic argument in the
+                * signature.
+                * Subsequently, the polymorphic arguments update this table
+                * and check for any type mismatches that might occur.
+                * There are at most 2 type variables involved per argument
+                * due to the limited type nesting permitted.
+                * Note, each function returns at least one value.
                 */
-               if (formal == actual)
-                       continue;
-               if( updateTypeMap(formal, actual, polytype)){
-                       unmatched= i; 
-                  break;
-               }
-               formal= getPolyType(formal,polytype);
-               /*
-                * @-
-                * Collect the polymorphic types and resolve them.
-                * If it fails, we know this isn;t the function we are
-                * looking for.
-                */
-               if( resolveType( formal,actual) == -1 ){
-                       unmatched= i;
-                       break;
-               }
-       }
-         /*
-          * @-
-          * The last argument/result type could be a polymorphic variable list.
-          * It should only be allowed for patterns, where it can deal with the 
stack.
-          * If the type is specified as :any then any mix of arguments is 
allowed.
-          * If the type is a new numbered type variable then the first element
-          * in the list determines the required type of all.
-          */
-         if( sig->varargs ) {
-               if( sig->token != PATTERNsymbol )
-                       unmatched = i;
-               else {
-                       /* resolve the arguments */
-                       for(; i<p->argc; i++){
-                               /* the type of the last one has already been 
set */
-                               int actual = getArgType(mb,p,i);
-                               int formal = getArgType(s->def,sig,k);
-                               if (k == sig->argc-1 && sig->varargs & VARARGS)
+               if (sig->polymorphic) {
+                       int limit = sig->polymorphic;
+                       if (!(sig->argc == p->argc ||
+                                 (sig->argc < p->argc && sig->varargs & 
(VARARGS | VARRETS)))
+                               ) {
+                               s = s->peer; continue;
+                       }
+                       if (sig->retc != p->retc && !(sig->varargs & VARRETS)) {
+                               s = s->peer;
+                               continue;
+                       }
+/*  if(polyVector[0]==0) polyInit();
+    memcpy(polytype,polyVector, 2*sig->argc*sizeof(int)); */
+
+                       for (k = 0; k < limit; k++) polytype[k] = TYPE_any;
+                       /*
+                        * @-
+                        * Most polymorphic functions don;t have a variable 
argument
+                        * list. So we save some instructions factoring this 
caise out.
+                        * Be careful, the variable number of return arguments 
should
+                        * be considered as well.
+                        */
+                       i = p->retc;
+                       /* first handle the variable argument list */
+                       for (k = sig->retc; i < p->argc; k++, i++) {
+                               int actual = getArgType(mb, p, i);
+                               int formal = getArgType(s->def, sig, k);
+                               if (k == sig->argc - 1 && sig->varargs & 
VARARGS)
                                        k--;
+                               /*
+                                * @-
+                                * Take care of variable argument lists.
+                                * They are allowed as the last in the 
signature only.
+                                * Furthermore, for patterns if the formal type 
is 'any' then all remaining arguments
+                                * are acceptable and detailed type analysis 
becomes part of the pattern
+                                * implementation.
+                                * In all other cases the type should apply to 
all remaining arguments.
+                                */
+                               if (formal == actual)
+                                       continue;
+                               if (updateTypeMap(formal, actual, polytype)) {
+                                       unmatched = i;
+                                       break;
+                               }
+                               formal = getPolyType(formal, polytype);
+                               /*
+                                * @-
+                                * Collect the polymorphic types and resolve 
them.
+                                * If it fails, we know this isn;t the function 
we are
+                                * looking for.
+                                */
+                               if (resolveType(formal, actual) == -1) {
+                                       unmatched = i;
+                                       break;
+                               }
+                       }
+                       /*
+                        * @-
+                        * The last argument/result type could be a polymorphic 
variable list.
+                        * It should only be allowed for patterns, where it can 
deal with the stack.
+                        * If the type is specified as :any then any mix of 
arguments is allowed.
+                        * If the type is a new numbered type variable then the 
first element
+                        * in the list determines the required type of all.
+                        */
+                       if (sig->varargs) {
+                               if (sig->token != PATTERNsymbol)
+                                       unmatched = i;
+                               else {
+                                       /* resolve the arguments */
+                                       for (; i < p->argc; i++) {
+                                               /* the type of the last one has 
already been set */
+                                               int actual = getArgType(mb, p, 
i);
+                                               int formal = getArgType(s->def, 
sig, k);
+                                               if (k == sig->argc - 1 && 
sig->varargs & VARARGS)
+                                                       k--;
 
-                               formal= getPolyType(formal,polytype);
-                               if( formal == actual || formal == TYPE_any) 
-                                       continue;
-                               if( resolveType( formal,actual) == -1 ){
-                                       unmatched= i;
+                                               formal = getPolyType(formal, 
polytype);
+                                               if (formal == actual || formal 
== TYPE_any)
+                                                       continue;
+                                               if (resolveType(formal, actual) 
== -1) {
+                                                       unmatched = i;
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               } else {
+                       /*
+                        * @-
+                        * We have to check the argument types to determine a
+                        * possible match for the non-polymorphic case.
+                        */
+                       if (sig->argc != p->argc ||
+                               sig->retc != p->retc) {
+                               s = s->peer;
+                               continue;
+                       }
+                       for (i = p->retc; i < p->argc; i++) {
+                               int actual = getArgType(mb, p, i);
+                               int formal = getArgType(s->def, sig, i);
+                               if (resolveType(formal, actual) == -1) {
+#ifdef DEBUG_MAL_RESOLVE
+                                       mnstr_printf(GDKout, "unmatched %d 
formal %s actual %s\n",
+                                               i, getTypeName(formal), 
getTypeName(actual));
+#endif
+                                       unmatched = i;
                                        break;
                                }
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to