Changeset: af862dae1a0f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af862dae1a0f
Modified Files:
clients/Tests/exports.stable.out
monetdb5/mal/Tests/tst008.stable.err
monetdb5/mal/Tests/tst019.stable.err
monetdb5/mal/Tests/tst038.stable.err
monetdb5/mal/Tests/tst050.stable.err
monetdb5/mal/Tests/tst275.stable.out
monetdb5/mal/Tests/tst755.stable.err
monetdb5/mal/Tests/tst760.stable.err
monetdb5/mal/Tests/tst804.stable.err
monetdb5/mal/Tests/tst900.stable.err
monetdb5/mal/mal_resolve.c
monetdb5/mal/mal_resolve.h
monetdb5/optimizer/opt_aliases.c
monetdb5/optimizer/opt_candidates.c
monetdb5/optimizer/opt_coercion.c
monetdb5/optimizer/opt_commonTerms.c
monetdb5/optimizer/opt_constants.c
monetdb5/optimizer/opt_costModel.c
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_deadcode.c
monetdb5/optimizer/opt_emptybind.c
monetdb5/optimizer/opt_evaluate.c
monetdb5/optimizer/opt_garbageCollector.c
monetdb5/optimizer/opt_generator.c
monetdb5/optimizer/opt_inline.c
monetdb5/optimizer/opt_jit.c
monetdb5/optimizer/opt_json.c
monetdb5/optimizer/opt_macro.c
monetdb5/optimizer/opt_matpack.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_mitosis.c
monetdb5/optimizer/opt_multiplex.c
monetdb5/optimizer/opt_oltp.c
monetdb5/optimizer/opt_postfix.c
monetdb5/optimizer/opt_profiler.c
monetdb5/optimizer/opt_projectionpath.c
monetdb5/optimizer/opt_pushselect.c
monetdb5/optimizer/opt_querylog.c
monetdb5/optimizer/opt_reduce.c
monetdb5/optimizer/opt_remap.c
monetdb5/optimizer/opt_remoteQueries.c
monetdb5/optimizer/opt_reorder.c
monetdb5/optimizer/opt_support.c
monetdb5/optimizer/opt_volcano.c
monetdb5/optimizer/opt_wlc.c
monetdb5/scheduler/run_adder.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/wlr.c
Branch: gdk_tracer
Log Message:
The chkTypes() now returns a proper exception message.
First exception is thrown only.
diffs (truncated from 699 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2071,7 +2071,7 @@ str chkDeclarations(MalBlkPtr mb);
str chkFlow(MalBlkPtr mb);
int chkInstruction(Module s, MalBlkPtr mb, InstrPtr p);
str chkProgram(Module s, MalBlkPtr mb);
-void chkTypes(Module s, MalBlkPtr mb, int silent);
+str chkTypes(Module s, MalBlkPtr mb, int silent);
str cleanupTraces(Client cntxt);
void clearStack(MalStkPtr s);
void clearTrace(Client cntxt);
diff --git a/monetdb5/mal/Tests/tst008.stable.err
b/monetdb5/mal/Tests/tst008.stable.err
--- a/monetdb5/mal/Tests/tst008.stable.err
+++ b/monetdb5/mal/Tests/tst008.stable.err
@@ -38,7 +38,6 @@ QUERY = function foo();
end foo;
ERROR = !SyntaxException:parseError:io.printi;
!SyntaxException:parseError: ^'(' expected
- !TypeException:user.foo[2]:'io.printi' undefined in: io.printi();
# 10:46:01 >
diff --git a/monetdb5/mal/Tests/tst019.stable.err
b/monetdb5/mal/Tests/tst019.stable.err
--- a/monetdb5/mal/Tests/tst019.stable.err
+++ b/monetdb5/mal/Tests/tst019.stable.err
@@ -76,8 +76,6 @@ QUERY = function welcome(lim:int):void;
(x,y):= user.welcome2(1);
ERROR = !TypeException:user.welcome[3]:type mismatch void := str
- !TypeException:user.welcome0[3]:Multiple assignment mismatch
- !TypeException:user.welcome4[2]:Multiple assignment mismatch
# 15:16:11 >
# 15:16:11 > "Done."
diff --git a/monetdb5/mal/Tests/tst038.stable.err
b/monetdb5/mal/Tests/tst038.stable.err
--- a/monetdb5/mal/Tests/tst038.stable.err
+++ b/monetdb5/mal/Tests/tst038.stable.err
@@ -41,7 +41,6 @@ QUERY = #test the capability to deal wit
#The call to tst2 fails at runtime
user.tst2(b);
ERROR = !TypeException:user.tst2[1]:'bat.append' undefined in:
bat.append(b:bat[:int], "hello":str);
- !TypeException:user.main[0]:Error in cloned function
!TypeException:user.main[4]:'user.tst2' undefined in:
user.tst2(b:bat[:int]);
# 11:43:41 >
diff --git a/monetdb5/mal/Tests/tst050.stable.err
b/monetdb5/mal/Tests/tst050.stable.err
--- a/monetdb5/mal/Tests/tst050.stable.err
+++ b/monetdb5/mal/Tests/tst050.stable.err
@@ -56,11 +56,8 @@ QUERY = # Variables names may be tagged
l:flt := "wrong";
end l;
ERROR = !TypeException:user.g[1]:type mismatch sht := lng
- !TypeException:user.h[1]:type mismatch lng := sht
- !TypeException:user.k[1]:'bat.new' undefined in: y:bat[:str] :=
bat.new(:int);
- !TypeException:user.l[1]:type mismatch flt := str
-# 22:14:56 >
-# 22:14:56 > "Done."
-# 22:14:56 >
+# 14:22:43 >
+# 14:22:43 > "Done."
+# 14:22:43 >
diff --git a/monetdb5/mal/Tests/tst275.stable.out
b/monetdb5/mal/Tests/tst275.stable.out
--- a/monetdb5/mal/Tests/tst275.stable.out
+++ b/monetdb5/mal/Tests/tst275.stable.out
@@ -33,8 +33,8 @@ stdout of test 'tst275` in directory 'mo
# t t t # name
# void str str # type
#--------------------------#
-[ 0@0, "batId", "tmp_264" ]
-[ 1@0, "batCacheid", "180" ]
+[ 0@0, "batId", "tmp_267" ]
+[ 1@0, "batCacheid", "183" ]
[ 2@0, "tparentid", "0" ]
[ 3@0, "batSharecnt", "0" ]
[ 4@0, "batCount", "0" ]
@@ -69,7 +69,7 @@ stdout of test 'tst275` in directory 'mo
[ 33@0, "tail.size", "1024" ]
[ 34@0, "tail.storage", "malloced" ]
[ 35@0, "tail.newstorage", "malloced" ]
-[ 36@0, "tail.filename", "02/264.tail" ]
+[ 36@0, "tail.filename", "02/267.tail" ]
[ 37@0, "tvheap->dirty", "clean" ]
#~EndVariableOutput~#
#--------------------------#
diff --git a/monetdb5/mal/Tests/tst755.stable.err
b/monetdb5/mal/Tests/tst755.stable.err
--- a/monetdb5/mal/Tests/tst755.stable.err
+++ b/monetdb5/mal/Tests/tst755.stable.err
@@ -42,7 +42,6 @@ QUERY = # Polymorphic function tests
c:= bat.new(:str);
user.test(c,"hello");
ERROR = !TypeException:user.test[1]:'calc.+' undefined in: k:any :=
calc.+(1:int, "wrong":str);
- !TypeException:user.main[0]:Error in cloned function
!TypeException:user.main[5]:'user.test' undefined in:
user.test(c:bat[:str], "hello":str);
# 09:29:50 >
diff --git a/monetdb5/mal/Tests/tst760.stable.err
b/monetdb5/mal/Tests/tst760.stable.err
--- a/monetdb5/mal/Tests/tst760.stable.err
+++ b/monetdb5/mal/Tests/tst760.stable.err
@@ -41,7 +41,6 @@ QUERY = # Polymorphic function tests
c:= bat.new(:str);
user.test(c,"hello");
ERROR = !TypeException:user.test[1]:'calc.+' undefined in: k:any :=
calc.+(1:int, c:str);
- !TypeException:user.main[0]:Error in cloned function
!TypeException:user.main[4]:'user.test' undefined in:
user.test(c:bat[:str], "hello":str);
# 09:29:51 >
diff --git a/monetdb5/mal/Tests/tst804.stable.err
b/monetdb5/mal/Tests/tst804.stable.err
--- a/monetdb5/mal/Tests/tst804.stable.err
+++ b/monetdb5/mal/Tests/tst804.stable.err
@@ -44,7 +44,6 @@ ERROR = !SyntaxException:parseError:func
!SyntaxException:parseError: ^<module> name not
defined
!SyntaxException:parseError:end message;
!SyntaxException:parseError: ^non matching end label
- !TypeException:user.foo[1]:'wrong.message' undefined in:
wrong.message();
# 15:26:53 >
# 15:26:53 > "Done."
diff --git a/monetdb5/mal/Tests/tst900.stable.err
b/monetdb5/mal/Tests/tst900.stable.err
--- a/monetdb5/mal/Tests/tst900.stable.err
+++ b/monetdb5/mal/Tests/tst900.stable.err
@@ -45,7 +45,6 @@ ERROR = !SyntaxException:parseError:d:=
!SyntaxException:parseError: ^operator expected
!SyntaxException:parseError:a:= b [+] b;
!SyntaxException:parseError: ^operator expected
- !TypeException:user.foo[2]:'multiplex.+' undefined in: x:any :=
multiplex.+(b:bat[:lng], b:bat[:lng]);
# 13:26:15 >
# 13:26:15 > "Done."
diff --git a/monetdb5/mal/mal_resolve.c b/monetdb5/mal/mal_resolve.c
--- a/monetdb5/mal/mal_resolve.c
+++ b/monetdb5/mal/mal_resolve.c
@@ -640,20 +640,25 @@ typeChecker(Module scope, MalBlkPtr mb,
* as well, because a dynamically typed instruction should later on not
* lead to a re-check when it was already fully analyzed.
*/
-void
+str
chkTypes(Module s, MalBlkPtr mb, int silent)
{
InstrPtr p = 0;
int i;
+ str msg= MAL_SUCCEED;
for (i = 0; i < mb->stop; i++) {
p = getInstrPtr(mb, i);
assert (p != NULL);
if (p->typechk != TYPE_RESOLVED)
typeChecker(s, mb, p, i, silent);
- if (mb->errors)
- return;
+ if (mb->errors){
+ msg = mb->errors;
+ mb->errors = NULL;
+ return msg;
+ }
}
+ return msg;
}
/*
@@ -681,12 +686,9 @@ chkProgram(Module s, MalBlkPtr mb)
mb->typefixed = mb->stop == chk; ignored END */
/* if( mb->flowfixed == 0)*/
- chkTypes(s, mb, FALSE);
- if (mb->errors)
- return msg;
- msg = chkFlow(mb);
- if (mb->errors)
- return msg;
+ msg = chkTypes(s, mb, FALSE);
+ if( msg == MAL_SUCCEED)
+ msg = chkFlow(mb);
if(msg == MAL_SUCCEED)
msg = chkDeclarations(mb);
return msg;
diff --git a/monetdb5/mal/mal_resolve.h b/monetdb5/mal/mal_resolve.h
--- a/monetdb5/mal/mal_resolve.h
+++ b/monetdb5/mal/mal_resolve.h
@@ -18,7 +18,7 @@
mal_export str chkProgram(Module s, MalBlkPtr mb);
mal_export int chkInstruction(Module s, MalBlkPtr mb, InstrPtr p);
-mal_export void chkTypes(Module s, MalBlkPtr mb, int silent);
+mal_export str chkTypes(Module s, MalBlkPtr mb, int silent);
mal_export void typeChecker(Module scope, MalBlkPtr mb, InstrPtr p, int p_idx,
int silent);
/*
diff --git a/monetdb5/optimizer/opt_aliases.c b/monetdb5/optimizer/opt_aliases.c
--- a/monetdb5/optimizer/opt_aliases.c
+++ b/monetdb5/optimizer/opt_aliases.c
@@ -73,7 +73,7 @@ OPTaliasesImplementation(Client cntxt, M
/* Defense line against incorrect plans */
/* Plan is unaffected */
- //chkTypes(cntxt->usermodule, mb, FALSE);
+ // if( msg == MAL_SUCCEED) msg = chkTypes(cntxt->usermodule, mb, FALSE);
// if ( msg == MAL_SUCCEED) msg = chkFlow(mb);
// if ( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
//
diff --git a/monetdb5/optimizer/opt_candidates.c
b/monetdb5/optimizer/opt_candidates.c
--- a/monetdb5/optimizer/opt_candidates.c
+++ b/monetdb5/optimizer/opt_candidates.c
@@ -82,7 +82,7 @@ OPTcandidatesImplementation(Client cntxt
/* Defense line against incorrect plans */
/* plan remains unaffected */
- //chkTypes(cntxt->usermodule, mb, FALSE);
+ // if( msg == MAL_SUCCEED) msg = chkTypes(cntxt->usermodule, mb, FALSE);
// if( msg == MAL_SUCCEED) msg = chkFlow(mb);
// if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
diff --git a/monetdb5/optimizer/opt_coercion.c
b/monetdb5/optimizer/opt_coercion.c
--- a/monetdb5/optimizer/opt_coercion.c
+++ b/monetdb5/optimizer/opt_coercion.c
@@ -163,7 +163,7 @@ OPTcoercionImplementation(Client cntxt,M
/* Defense line against incorrect plans */
if( actions > 0){
- chkTypes(cntxt->usermodule, mb, FALSE);
+ msg = chkTypes(cntxt->usermodule, mb, FALSE);
if( msg == MAL_SUCCEED) msg = chkFlow(mb);
if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
}
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
@@ -202,7 +202,7 @@ OPTcommonTermsImplementation(Client cntx
freeInstruction(old[i]);
/* Defense line against incorrect plans */
if( actions > 0){
- chkTypes(cntxt->usermodule, mb, FALSE);
+ msg = chkTypes(cntxt->usermodule, mb, FALSE);
if( msg == MAL_SUCCEED)
msg = chkFlow(mb);
if( msg == MAL_SUCCEED)
diff --git a/monetdb5/optimizer/opt_constants.c
b/monetdb5/optimizer/opt_constants.c
--- a/monetdb5/optimizer/opt_constants.c
+++ b/monetdb5/optimizer/opt_constants.c
@@ -85,7 +85,7 @@ OPTconstantsImplementation(Client cntxt,
/* Defense line against incorrect plans */
/* Plan remains unaffected */
- //chkTypes(cntxt->usermodule, mb, FALSE);
+ // msg = chkTypes(cntxt->usermodule, mb, FALSE);
// if( msg == MAL_SUCCEED) msg = chkFlow(mb);
// if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
diff --git a/monetdb5/optimizer/opt_costModel.c
b/monetdb5/optimizer/opt_costModel.c
--- a/monetdb5/optimizer/opt_costModel.c
+++ b/monetdb5/optimizer/opt_costModel.c
@@ -144,7 +144,7 @@ OPTcostModelImplementation(Client cntxt,
}
/* Defense line against incorrect plans */
/* plan remains unaffected */
- //chkTypes(cntxt->usermodule, mb, FALSE);
+ //c msg = hkTypes(cntxt->usermodule, mb, FALSE);
// if( msg == MAL_SUCCEED) msg = chkFlow(mb);
// if( msg == MAL_SUCCEED) msg = chkDeclarations(mb);
/* keep all actions taken as a post block comment */
diff --git a/monetdb5/optimizer/opt_dataflow.c
b/monetdb5/optimizer/opt_dataflow.c
--- a/monetdb5/optimizer/opt_dataflow.c
+++ b/monetdb5/optimizer/opt_dataflow.c
@@ -286,7 +286,7 @@ OPTdataflowImplementation(Client cntxt,
freeInstruction(old[i]);
/* Defense line against incorrect plans */
if( actions > 0){
- chkTypes(cntxt->usermodule, mb, FALSE);
+ msg = chkTypes(cntxt->usermodule, mb, FALSE);
if( msg == MAL_SUCCEED)
msg = chkFlow(mb);
if( msg == MAL_SUCCEED)
diff --git a/monetdb5/optimizer/opt_deadcode.c
b/monetdb5/optimizer/opt_deadcode.c
--- a/monetdb5/optimizer/opt_deadcode.c
+++ b/monetdb5/optimizer/opt_deadcode.c
@@ -129,7 +129,7 @@ OPTdeadcodeImplementation(Client cntxt,
/* Defense line against incorrect plans */
/* we don't create or change existing structures */
//if( actions > 0){
- chkTypes(cntxt->usermodule, mb, FALSE);
+ msg = chkTypes(cntxt->usermodule, mb, FALSE);
if( msg == MAL_SUCCEED)
msg = chkFlow(mb);
if( msg == MAL_SUCCEED)
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
@@ -254,7 +254,7 @@ OPTemptybindImplementation(Client cntxt,
GDKfree(empty);
GDKfree(updated);
/* Defense line against incorrect plans */
- chkTypes(cntxt->usermodule, mb, FALSE);
+ msg = chkTypes(cntxt->usermodule, mb, FALSE);
if( msg == MAL_SUCCEED)
msg = chkFlow(mb);
if( msg == MAL_SUCCEED)
diff --git a/monetdb5/optimizer/opt_evaluate.c
b/monetdb5/optimizer/opt_evaluate.c
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list