Index: TODO =================================================================== diff -u -r5c3834b15078b31970db26d0c65030ed1f66b18d -r764ac30a3ca9712d9fc59853b36759e1dd146114 --- TODO (.../TODO) (revision 5c3834b15078b31970db26d0c65030ed1f66b18d) +++ TODO (.../TODO) (revision 764ac30a3ca9712d9fc59853b36759e1dd146114) @@ -4721,6 +4721,9 @@ - integrated mongodb-testfiles with "make test" - reduced verbosity of nx-mongo.tcl (added verbosty variable) +nsf.c +- fixed a bug where turning on assertions could swallow result-codes +- extended regression test ======================================================================== TODO: Index: generic/nsf.c =================================================================== diff -u -rea57317ca22ddd156bfe6ffcba5361caaa19a970 -r764ac30a3ca9712d9fc59853b36759e1dd146114 --- generic/nsf.c (.../nsf.c) (revision ea57317ca22ddd156bfe6ffcba5361caaa19a970) +++ generic/nsf.c (.../nsf.c) (revision 764ac30a3ca9712d9fc59853b36759e1dd146114) @@ -9398,9 +9398,9 @@ NsfObjectOpt *opt = object->opt; #endif - /*fprintf(stderr, "ProcMethodDispatchFinalize %s %s flags %.6x isNRE %d pcPtr %p\n", + /*fprintf(stderr, "ProcMethodDispatchFinalize %s %s flags %.6x isNRE %d pcPtr %p result %d\n", ObjectName(object), methodName, - cscPtr->flags, (cscPtr->flags & NSF_CSC_CALL_IS_NRE), pcPtr);*/ + cscPtr->flags, (cscPtr->flags & NSF_CSC_CALL_IS_NRE), pcPtr, result);*/ #if defined(NSF_WITH_ASSERTIONS) if (unlikely(opt && object->teardown && (opt->checkoptions & CHECK_POST))) { @@ -9411,7 +9411,7 @@ * be very meaningful; however, do not flush a TCL_ERROR. */ rc = AssertionCheck(interp, object, cscPtr->cl, data[2], CHECK_POST); - if (result == TCL_OK) { + if (rc != TCL_OK) { result = rc; } } @@ -9697,7 +9697,11 @@ if (unlikely(object->opt != NULL)) { CheckOptions co = object->opt->checkoptions; if ((co & CHECK_INVAR)) { - result = AssertionCheckInvars(interp, object, Tcl_GetCommandName(interp, cmd), co); + int rc = AssertionCheckInvars(interp, object, Tcl_GetCommandName(interp, cmd), co); + + if (rc != TCL_OK) { + result = rc; + } } } #endif Index: tests/methods.test =================================================================== diff -u -r45e24b34c85bf0fc3e14db5250550100bd07ff31 -r764ac30a3ca9712d9fc59853b36759e1dd146114 --- tests/methods.test (.../methods.test) (revision 45e24b34c85bf0fc3e14db5250550100bd07ff31) +++ tests/methods.test (.../methods.test) (revision 764ac30a3ca9712d9fc59853b36759e1dd146114) @@ -1082,4 +1082,25 @@ ? {E foo} foo ? {E create e1} ::e1 ? {e1 bar} bar -} \ No newline at end of file +} + +nx::test case assertion-swallows-result { + + nx::Class create Edge { + :public method foo {} { + :configure -xxx 1 + } + :create e1 + } + + # base case + ? {catch {e1 foo} errMsg} 1 + ? {string match "invalid non-positional*" $errMsg} 1 + + # turn on assertion checking + nsf::method::assertion e1 check all + + # still report error + ? {catch {e1 foo} errMsg} 1 + ? {string match "invalid non-positional*" $errMsg} 1 +}