Index: tcc4tcl.tcl ================================================================== --- tcc4tcl.tcl +++ tcc4tcl.tcl @@ -310,10 +310,19 @@ # string (TCL_DYNAMIC char*) # dstring (TCL_DYNAMIC char*) # vstring (TCL_VOLATILE char*) # default (Tcl_Obj*) # wide + switch -- $rtype { + void - ok - int - long - float - double - wide {} + default { + append cbody " if (rv == NULL) {\n" + append cbody " return(TCL_ERROR);\n" + append cbody " }\n" + } + } + switch -- $rtype { void { } ok { append cbody " return rv;" "\n" } int { append cbody " Tcl_SetIntObj(Tcl_GetObjResult(ip), rv);" "\n" } long { append cbody " Tcl_SetLongObj(Tcl_GetObjResult(ip), rv);" "\n" } Index: test ================================================================== --- test +++ test @@ -28,18 +28,36 @@ return(TCL_ERROR); }; return(TCL_OK); } +# Return error on NULL +tcc4tcl::cproc test4 {int v} char* { + if (v == 1) { + return("ok"); + } + + return(NULL); +} puts [test 1] puts [test1 1] puts [test3 1] puts [::bob::test1 1] puts [add [test 1] 1] +puts [test4 1] catch { puts [mkdir "/"] } err if {$err != "failed"} { error "\[mkdir\] did not return the expected error" } + +catch { + set v 0 + puts [test4 0] + set v 1 +} err +if {$err != "" || $v == 1} { + error "\[test4\] did not return the expected error" +}