Changeset: 5b3c09cd43cf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b3c09cd43cf
Modified Files:
monetdb5/mal/mal_resolve.mx
Branch: Aug2011
Log Message:
Redo of changeset e58fb9c1aad0.
Remove dependency on alloca
diffs (100 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
@@ -139,7 +139,7 @@
int i, k, unmatched = 0, s1;
/* int foundbutwrong=0;*/
int polytype[MAXTYPEVAR];
- int *returntype;
+ int *returntype= NULL;
/*
* @-
* Within a module find the subscope to locate the element in its list
@@ -357,7 +357,7 @@
* the resulting type can not be determined.
*/
s1 = 0;
- returntype = (int*)alloca(p->retc * sizeof(int));
+ returntype= (int*) GDKzalloc(p->retc * sizeof(int));
if (sig->polymorphic)
for (k = i = 0; i < p->retc; k++, i++) {
int actual = getArgType(mb, p, i);
@@ -412,7 +412,7 @@
showScriptException(mb, getPC(mb, p), TYPE,
"Assignment to constant");
p->typechk = TYPE_UNKNOWN;
mb->errors++;
- return -3;
+ goto wrapup;
}
if (!isVarFixed(mb, getArg(p, i)) && ts >= 0) {
setVarType(mb, getArg(p, i), ts);
@@ -459,7 +459,8 @@
}
if (cnt == 0 && s->kind != COMMANDsymbol && s->kind !=
PATTERNsymbol) {
s = cloneFunction(scope, s, mb, p);
- if (s->def->errors) return -3;
+ if (s->def->errors)
+ goto wrapup;
}
}
/*
@@ -473,7 +474,7 @@
if (s->def->errors) {
p->typechk = TYPE_UNKNOWN;
mb->errors++;
- return -3;
+ goto wrapup;
}
if (p->token == ASSIGNsymbol) {
switch (getSignature(s)->token) {
@@ -486,7 +487,7 @@
p->modname, p->fcnname);
p->typechk = TYPE_UNKNOWN;
mb->errors++;
- return -3;
+ goto wrapup;
}
break;
case PATTERNsymbol:
@@ -507,7 +508,7 @@
showScriptException(mb, getPC(mb, p), MAL,
"MALresolve: unexpected token type");
mb->errors++;
- return -3;
+ goto wrapup;
}
}
p->blk = s->def;
@@ -538,6 +539,8 @@
mnstr_printf(GDKout, "Finished matching\n");
}
#endif
+ if ( returntype)
+ GDKfree(returntype);
return s1;
} /* while */
/*
@@ -546,12 +549,15 @@
* that we found an instruction with the proper arguments, but that
clashes
* with one of the target variables.
*/
+wrapup:
/* foundbutwrong has not been changed, commented out code above
if( foundbutwrong && !silent){
showScriptException(mb, getPC(mb, p), TYPE,
"type conflict in assignment");
}
*/
+ if ( returntype)
+ GDKfree(returntype);
return -3;
}
@@ -847,6 +853,7 @@
@:bindFunction@
}
}
+wrapup:
return 0;
}
/*
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list