Fossil SCM
Coding style adjustments to the Tcl integration subsystem.
Commit
fec856f48c88372f8f9e7448234dcf85cddd6078
Parent
b523bf0be0602c5…
1 file changed
+21
-17
+21
-17
| --- src/th_tcl.c | ||
| +++ src/th_tcl.c | ||
| @@ -44,12 +44,14 @@ | ||
| 44 | 44 | } |
| 45 | 45 | |
| 46 | 46 | #define FREE_ARGV_TO_OBJV() \ |
| 47 | 47 | for(obji=1; obji<argc; obji++){ \ |
| 48 | 48 | Tcl_DecrRefCount(objv[obji-1]); \ |
| 49 | + objv[obji-1] = 0; \ | |
| 49 | 50 | } \ |
| 50 | - ckfree((char *)objv); | |
| 51 | + ckfree((char *)objv); \ | |
| 52 | + objv = 0; | |
| 51 | 53 | |
| 52 | 54 | /* |
| 53 | 55 | ** Fetch the Tcl interpreter from the specified void pointer, cast to a Tcl |
| 54 | 56 | ** context. |
| 55 | 57 | */ |
| @@ -456,18 +458,18 @@ | ||
| 456 | 458 | Tcl_Preserve((ClientData)tclInterp); |
| 457 | 459 | if( argc==2 ){ |
| 458 | 460 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 459 | 461 | Tcl_IncrRefCount(objPtr); |
| 460 | 462 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 461 | - Tcl_DecrRefCount(objPtr); | |
| 463 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 462 | 464 | }else{ |
| 463 | 465 | USE_ARGV_TO_OBJV(); |
| 464 | 466 | COPY_ARGV_TO_OBJV(); |
| 465 | 467 | objPtr = Tcl_ConcatObj(objc, objv); |
| 466 | 468 | Tcl_IncrRefCount(objPtr); |
| 467 | 469 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 468 | - Tcl_DecrRefCount(objPtr); | |
| 470 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 469 | 471 | FREE_ARGV_TO_OBJV(); |
| 470 | 472 | } |
| 471 | 473 | zResult = getTclResult(tclInterp, &nResult); |
| 472 | 474 | Th_SetResult(interp, zResult, nResult); |
| 473 | 475 | Tcl_Release((ClientData)tclInterp); |
| @@ -515,27 +517,29 @@ | ||
| 515 | 517 | Tcl_Preserve((ClientData)tclInterp); |
| 516 | 518 | if( argc==2 ){ |
| 517 | 519 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 518 | 520 | Tcl_IncrRefCount(objPtr); |
| 519 | 521 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 520 | - Tcl_DecrRefCount(objPtr); | |
| 522 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 521 | 523 | }else{ |
| 522 | 524 | USE_ARGV_TO_OBJV(); |
| 523 | 525 | COPY_ARGV_TO_OBJV(); |
| 524 | 526 | objPtr = Tcl_ConcatObj(objc, objv); |
| 525 | 527 | Tcl_IncrRefCount(objPtr); |
| 526 | 528 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 527 | - Tcl_DecrRefCount(objPtr); | |
| 529 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 528 | 530 | FREE_ARGV_TO_OBJV(); |
| 529 | 531 | } |
| 530 | 532 | if( rc==TCL_OK ){ |
| 531 | 533 | zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult); |
| 532 | 534 | }else{ |
| 533 | 535 | zResult = getTclResult(tclInterp, &nResult); |
| 534 | 536 | } |
| 535 | 537 | Th_SetResult(interp, zResult, nResult); |
| 536 | - if( rc==TCL_OK ) Tcl_DecrRefCount(resultObjPtr); | |
| 538 | + if( rc==TCL_OK ){ | |
| 539 | + Tcl_DecrRefCount(resultObjPtr); resultObjPtr = 0; | |
| 540 | + } | |
| 537 | 541 | Tcl_Release((ClientData)tclInterp); |
| 538 | 542 | rc = notifyPreOrPostEval(1, interp, ctx, argc, argv, argl, |
| 539 | 543 | getTh1ReturnCode(rc)); |
| 540 | 544 | return rc; |
| 541 | 545 | } |
| @@ -583,21 +587,21 @@ | ||
| 583 | 587 | Tcl_Obj *objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 584 | 588 | Tcl_IncrRefCount(objPtr); |
| 585 | 589 | command = Tcl_GetCommandFromObj(tclInterp, objPtr); |
| 586 | 590 | if( !command || Tcl_GetCommandInfoFromToken(command, &cmdInfo)==0 ){ |
| 587 | 591 | Th_ErrorMessage(interp, "Tcl command not found:", argv[1], argl[1]); |
| 588 | - Tcl_DecrRefCount(objPtr); | |
| 592 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 589 | 593 | Tcl_Release((ClientData)tclInterp); |
| 590 | 594 | return TH_ERROR; |
| 591 | 595 | } |
| 592 | 596 | if( !cmdInfo.objProc ){ |
| 593 | 597 | Th_ErrorMessage(interp, "cannot invoke Tcl command:", argv[1], argl[1]); |
| 594 | - Tcl_DecrRefCount(objPtr); | |
| 598 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 595 | 599 | Tcl_Release((ClientData)tclInterp); |
| 596 | 600 | return TH_ERROR; |
| 597 | 601 | } |
| 598 | - Tcl_DecrRefCount(objPtr); | |
| 602 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 599 | 603 | COPY_ARGV_TO_OBJV(); |
| 600 | 604 | Tcl_ResetResult(tclInterp); |
| 601 | 605 | rc = cmdInfo.objProc(cmdInfo.objClientData, tclInterp, objc, objv); |
| 602 | 606 | FREE_ARGV_TO_OBJV(); |
| 603 | 607 | }else |
| @@ -789,11 +793,11 @@ | ||
| 789 | 793 | xFindExecutable = (tcl_FindExecutableProc *)dlsym(hLibrary, procName); |
| 790 | 794 | } |
| 791 | 795 | if( !xFindExecutable ){ |
| 792 | 796 | Th_ErrorMessage(interp, |
| 793 | 797 | "could not locate Tcl_FindExecutable", (const char *)"", 0); |
| 794 | - dlclose(hLibrary); | |
| 798 | + dlclose(hLibrary); hLibrary = 0; | |
| 795 | 799 | return TH_ERROR; |
| 796 | 800 | } |
| 797 | 801 | procName = TCL_CREATEINTERP_NAME; |
| 798 | 802 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName+1); |
| 799 | 803 | if( !xCreateInterp ){ |
| @@ -800,11 +804,11 @@ | ||
| 800 | 804 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName); |
| 801 | 805 | } |
| 802 | 806 | if( !xCreateInterp ){ |
| 803 | 807 | Th_ErrorMessage(interp, |
| 804 | 808 | "could not locate Tcl_CreateInterp", (const char *)"", 0); |
| 805 | - dlclose(hLibrary); | |
| 809 | + dlclose(hLibrary); hLibrary = 0; | |
| 806 | 810 | return TH_ERROR; |
| 807 | 811 | } |
| 808 | 812 | procName = TCL_DELETEINTERP_NAME; |
| 809 | 813 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName+1); |
| 810 | 814 | if( !xDeleteInterp ){ |
| @@ -811,11 +815,11 @@ | ||
| 811 | 815 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName); |
| 812 | 816 | } |
| 813 | 817 | if( !xDeleteInterp ){ |
| 814 | 818 | Th_ErrorMessage(interp, |
| 815 | 819 | "could not locate Tcl_DeleteInterp", (const char *)"", 0); |
| 816 | - dlclose(hLibrary); | |
| 820 | + dlclose(hLibrary); hLibrary = 0; | |
| 817 | 821 | return TH_ERROR; |
| 818 | 822 | } |
| 819 | 823 | procName = TCL_FINALIZE_NAME; |
| 820 | 824 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName+1); |
| 821 | 825 | if( !xFinalize ){ |
| @@ -822,11 +826,11 @@ | ||
| 822 | 826 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName); |
| 823 | 827 | } |
| 824 | 828 | if( !xFinalize ){ |
| 825 | 829 | Th_ErrorMessage(interp, |
| 826 | 830 | "could not locate Tcl_Finalize", (const char *)"", 0); |
| 827 | - dlclose(hLibrary); | |
| 831 | + dlclose(hLibrary); hLibrary = 0; | |
| 828 | 832 | return TH_ERROR; |
| 829 | 833 | } |
| 830 | 834 | *phLibrary = hLibrary; |
| 831 | 835 | *pxFindExecutable = xFindExecutable; |
| 832 | 836 | *pxCreateInterp = xCreateInterp; |
| @@ -869,19 +873,19 @@ | ||
| 869 | 873 | } |
| 870 | 874 | objPtr = Tcl_NewStringObj(argv[0], -1); |
| 871 | 875 | Tcl_IncrRefCount(objPtr); |
| 872 | 876 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argv0", NULL, objPtr, |
| 873 | 877 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 874 | - Tcl_DecrRefCount(objPtr); | |
| 878 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 875 | 879 | if( !resultObjPtr ){ |
| 876 | 880 | return TCL_ERROR; |
| 877 | 881 | } |
| 878 | 882 | objPtr = Tcl_NewIntObj(argc - 1); |
| 879 | 883 | Tcl_IncrRefCount(objPtr); |
| 880 | 884 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argc", NULL, objPtr, |
| 881 | 885 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 882 | - Tcl_DecrRefCount(objPtr); | |
| 886 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 883 | 887 | if( !resultObjPtr ){ |
| 884 | 888 | return TCL_ERROR; |
| 885 | 889 | } |
| 886 | 890 | listPtr = Tcl_NewListObj(0, NULL); |
| 887 | 891 | Tcl_IncrRefCount(listPtr); |
| @@ -888,11 +892,11 @@ | ||
| 888 | 892 | if( argc>1 ){ |
| 889 | 893 | while( --argc ){ |
| 890 | 894 | objPtr = Tcl_NewStringObj(*++argv, -1); |
| 891 | 895 | Tcl_IncrRefCount(objPtr); |
| 892 | 896 | rc = Tcl_ListObjAppendElement(pInterp, listPtr, objPtr); |
| 893 | - Tcl_DecrRefCount(objPtr); | |
| 897 | + Tcl_DecrRefCount(objPtr); objPtr = 0; | |
| 894 | 898 | if( rc!=TCL_OK ){ |
| 895 | 899 | break; |
| 896 | 900 | } |
| 897 | 901 | } |
| 898 | 902 | } |
| @@ -901,11 +905,11 @@ | ||
| 901 | 905 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 902 | 906 | if( !resultObjPtr ){ |
| 903 | 907 | rc = TCL_ERROR; |
| 904 | 908 | } |
| 905 | 909 | } |
| 906 | - Tcl_DecrRefCount(listPtr); | |
| 910 | + Tcl_DecrRefCount(listPtr); listPtr = 0; | |
| 907 | 911 | return rc; |
| 908 | 912 | } |
| 909 | 913 | |
| 910 | 914 | /* |
| 911 | 915 | ** Evaluate a Tcl script, creating the Tcl interpreter if necessary. If the |
| 912 | 916 |
| --- src/th_tcl.c | |
| +++ src/th_tcl.c | |
| @@ -44,12 +44,14 @@ | |
| 44 | } |
| 45 | |
| 46 | #define FREE_ARGV_TO_OBJV() \ |
| 47 | for(obji=1; obji<argc; obji++){ \ |
| 48 | Tcl_DecrRefCount(objv[obji-1]); \ |
| 49 | } \ |
| 50 | ckfree((char *)objv); |
| 51 | |
| 52 | /* |
| 53 | ** Fetch the Tcl interpreter from the specified void pointer, cast to a Tcl |
| 54 | ** context. |
| 55 | */ |
| @@ -456,18 +458,18 @@ | |
| 456 | Tcl_Preserve((ClientData)tclInterp); |
| 457 | if( argc==2 ){ |
| 458 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 459 | Tcl_IncrRefCount(objPtr); |
| 460 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 461 | Tcl_DecrRefCount(objPtr); |
| 462 | }else{ |
| 463 | USE_ARGV_TO_OBJV(); |
| 464 | COPY_ARGV_TO_OBJV(); |
| 465 | objPtr = Tcl_ConcatObj(objc, objv); |
| 466 | Tcl_IncrRefCount(objPtr); |
| 467 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 468 | Tcl_DecrRefCount(objPtr); |
| 469 | FREE_ARGV_TO_OBJV(); |
| 470 | } |
| 471 | zResult = getTclResult(tclInterp, &nResult); |
| 472 | Th_SetResult(interp, zResult, nResult); |
| 473 | Tcl_Release((ClientData)tclInterp); |
| @@ -515,27 +517,29 @@ | |
| 515 | Tcl_Preserve((ClientData)tclInterp); |
| 516 | if( argc==2 ){ |
| 517 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 518 | Tcl_IncrRefCount(objPtr); |
| 519 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 520 | Tcl_DecrRefCount(objPtr); |
| 521 | }else{ |
| 522 | USE_ARGV_TO_OBJV(); |
| 523 | COPY_ARGV_TO_OBJV(); |
| 524 | objPtr = Tcl_ConcatObj(objc, objv); |
| 525 | Tcl_IncrRefCount(objPtr); |
| 526 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 527 | Tcl_DecrRefCount(objPtr); |
| 528 | FREE_ARGV_TO_OBJV(); |
| 529 | } |
| 530 | if( rc==TCL_OK ){ |
| 531 | zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult); |
| 532 | }else{ |
| 533 | zResult = getTclResult(tclInterp, &nResult); |
| 534 | } |
| 535 | Th_SetResult(interp, zResult, nResult); |
| 536 | if( rc==TCL_OK ) Tcl_DecrRefCount(resultObjPtr); |
| 537 | Tcl_Release((ClientData)tclInterp); |
| 538 | rc = notifyPreOrPostEval(1, interp, ctx, argc, argv, argl, |
| 539 | getTh1ReturnCode(rc)); |
| 540 | return rc; |
| 541 | } |
| @@ -583,21 +587,21 @@ | |
| 583 | Tcl_Obj *objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 584 | Tcl_IncrRefCount(objPtr); |
| 585 | command = Tcl_GetCommandFromObj(tclInterp, objPtr); |
| 586 | if( !command || Tcl_GetCommandInfoFromToken(command, &cmdInfo)==0 ){ |
| 587 | Th_ErrorMessage(interp, "Tcl command not found:", argv[1], argl[1]); |
| 588 | Tcl_DecrRefCount(objPtr); |
| 589 | Tcl_Release((ClientData)tclInterp); |
| 590 | return TH_ERROR; |
| 591 | } |
| 592 | if( !cmdInfo.objProc ){ |
| 593 | Th_ErrorMessage(interp, "cannot invoke Tcl command:", argv[1], argl[1]); |
| 594 | Tcl_DecrRefCount(objPtr); |
| 595 | Tcl_Release((ClientData)tclInterp); |
| 596 | return TH_ERROR; |
| 597 | } |
| 598 | Tcl_DecrRefCount(objPtr); |
| 599 | COPY_ARGV_TO_OBJV(); |
| 600 | Tcl_ResetResult(tclInterp); |
| 601 | rc = cmdInfo.objProc(cmdInfo.objClientData, tclInterp, objc, objv); |
| 602 | FREE_ARGV_TO_OBJV(); |
| 603 | }else |
| @@ -789,11 +793,11 @@ | |
| 789 | xFindExecutable = (tcl_FindExecutableProc *)dlsym(hLibrary, procName); |
| 790 | } |
| 791 | if( !xFindExecutable ){ |
| 792 | Th_ErrorMessage(interp, |
| 793 | "could not locate Tcl_FindExecutable", (const char *)"", 0); |
| 794 | dlclose(hLibrary); |
| 795 | return TH_ERROR; |
| 796 | } |
| 797 | procName = TCL_CREATEINTERP_NAME; |
| 798 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName+1); |
| 799 | if( !xCreateInterp ){ |
| @@ -800,11 +804,11 @@ | |
| 800 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName); |
| 801 | } |
| 802 | if( !xCreateInterp ){ |
| 803 | Th_ErrorMessage(interp, |
| 804 | "could not locate Tcl_CreateInterp", (const char *)"", 0); |
| 805 | dlclose(hLibrary); |
| 806 | return TH_ERROR; |
| 807 | } |
| 808 | procName = TCL_DELETEINTERP_NAME; |
| 809 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName+1); |
| 810 | if( !xDeleteInterp ){ |
| @@ -811,11 +815,11 @@ | |
| 811 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName); |
| 812 | } |
| 813 | if( !xDeleteInterp ){ |
| 814 | Th_ErrorMessage(interp, |
| 815 | "could not locate Tcl_DeleteInterp", (const char *)"", 0); |
| 816 | dlclose(hLibrary); |
| 817 | return TH_ERROR; |
| 818 | } |
| 819 | procName = TCL_FINALIZE_NAME; |
| 820 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName+1); |
| 821 | if( !xFinalize ){ |
| @@ -822,11 +826,11 @@ | |
| 822 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName); |
| 823 | } |
| 824 | if( !xFinalize ){ |
| 825 | Th_ErrorMessage(interp, |
| 826 | "could not locate Tcl_Finalize", (const char *)"", 0); |
| 827 | dlclose(hLibrary); |
| 828 | return TH_ERROR; |
| 829 | } |
| 830 | *phLibrary = hLibrary; |
| 831 | *pxFindExecutable = xFindExecutable; |
| 832 | *pxCreateInterp = xCreateInterp; |
| @@ -869,19 +873,19 @@ | |
| 869 | } |
| 870 | objPtr = Tcl_NewStringObj(argv[0], -1); |
| 871 | Tcl_IncrRefCount(objPtr); |
| 872 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argv0", NULL, objPtr, |
| 873 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 874 | Tcl_DecrRefCount(objPtr); |
| 875 | if( !resultObjPtr ){ |
| 876 | return TCL_ERROR; |
| 877 | } |
| 878 | objPtr = Tcl_NewIntObj(argc - 1); |
| 879 | Tcl_IncrRefCount(objPtr); |
| 880 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argc", NULL, objPtr, |
| 881 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 882 | Tcl_DecrRefCount(objPtr); |
| 883 | if( !resultObjPtr ){ |
| 884 | return TCL_ERROR; |
| 885 | } |
| 886 | listPtr = Tcl_NewListObj(0, NULL); |
| 887 | Tcl_IncrRefCount(listPtr); |
| @@ -888,11 +892,11 @@ | |
| 888 | if( argc>1 ){ |
| 889 | while( --argc ){ |
| 890 | objPtr = Tcl_NewStringObj(*++argv, -1); |
| 891 | Tcl_IncrRefCount(objPtr); |
| 892 | rc = Tcl_ListObjAppendElement(pInterp, listPtr, objPtr); |
| 893 | Tcl_DecrRefCount(objPtr); |
| 894 | if( rc!=TCL_OK ){ |
| 895 | break; |
| 896 | } |
| 897 | } |
| 898 | } |
| @@ -901,11 +905,11 @@ | |
| 901 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 902 | if( !resultObjPtr ){ |
| 903 | rc = TCL_ERROR; |
| 904 | } |
| 905 | } |
| 906 | Tcl_DecrRefCount(listPtr); |
| 907 | return rc; |
| 908 | } |
| 909 | |
| 910 | /* |
| 911 | ** Evaluate a Tcl script, creating the Tcl interpreter if necessary. If the |
| 912 |
| --- src/th_tcl.c | |
| +++ src/th_tcl.c | |
| @@ -44,12 +44,14 @@ | |
| 44 | } |
| 45 | |
| 46 | #define FREE_ARGV_TO_OBJV() \ |
| 47 | for(obji=1; obji<argc; obji++){ \ |
| 48 | Tcl_DecrRefCount(objv[obji-1]); \ |
| 49 | objv[obji-1] = 0; \ |
| 50 | } \ |
| 51 | ckfree((char *)objv); \ |
| 52 | objv = 0; |
| 53 | |
| 54 | /* |
| 55 | ** Fetch the Tcl interpreter from the specified void pointer, cast to a Tcl |
| 56 | ** context. |
| 57 | */ |
| @@ -456,18 +458,18 @@ | |
| 458 | Tcl_Preserve((ClientData)tclInterp); |
| 459 | if( argc==2 ){ |
| 460 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 461 | Tcl_IncrRefCount(objPtr); |
| 462 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 463 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 464 | }else{ |
| 465 | USE_ARGV_TO_OBJV(); |
| 466 | COPY_ARGV_TO_OBJV(); |
| 467 | objPtr = Tcl_ConcatObj(objc, objv); |
| 468 | Tcl_IncrRefCount(objPtr); |
| 469 | rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); |
| 470 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 471 | FREE_ARGV_TO_OBJV(); |
| 472 | } |
| 473 | zResult = getTclResult(tclInterp, &nResult); |
| 474 | Th_SetResult(interp, zResult, nResult); |
| 475 | Tcl_Release((ClientData)tclInterp); |
| @@ -515,27 +517,29 @@ | |
| 517 | Tcl_Preserve((ClientData)tclInterp); |
| 518 | if( argc==2 ){ |
| 519 | objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 520 | Tcl_IncrRefCount(objPtr); |
| 521 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 522 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 523 | }else{ |
| 524 | USE_ARGV_TO_OBJV(); |
| 525 | COPY_ARGV_TO_OBJV(); |
| 526 | objPtr = Tcl_ConcatObj(objc, objv); |
| 527 | Tcl_IncrRefCount(objPtr); |
| 528 | rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); |
| 529 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 530 | FREE_ARGV_TO_OBJV(); |
| 531 | } |
| 532 | if( rc==TCL_OK ){ |
| 533 | zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult); |
| 534 | }else{ |
| 535 | zResult = getTclResult(tclInterp, &nResult); |
| 536 | } |
| 537 | Th_SetResult(interp, zResult, nResult); |
| 538 | if( rc==TCL_OK ){ |
| 539 | Tcl_DecrRefCount(resultObjPtr); resultObjPtr = 0; |
| 540 | } |
| 541 | Tcl_Release((ClientData)tclInterp); |
| 542 | rc = notifyPreOrPostEval(1, interp, ctx, argc, argv, argl, |
| 543 | getTh1ReturnCode(rc)); |
| 544 | return rc; |
| 545 | } |
| @@ -583,21 +587,21 @@ | |
| 587 | Tcl_Obj *objPtr = Tcl_NewStringObj(argv[1], argl[1]); |
| 588 | Tcl_IncrRefCount(objPtr); |
| 589 | command = Tcl_GetCommandFromObj(tclInterp, objPtr); |
| 590 | if( !command || Tcl_GetCommandInfoFromToken(command, &cmdInfo)==0 ){ |
| 591 | Th_ErrorMessage(interp, "Tcl command not found:", argv[1], argl[1]); |
| 592 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 593 | Tcl_Release((ClientData)tclInterp); |
| 594 | return TH_ERROR; |
| 595 | } |
| 596 | if( !cmdInfo.objProc ){ |
| 597 | Th_ErrorMessage(interp, "cannot invoke Tcl command:", argv[1], argl[1]); |
| 598 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 599 | Tcl_Release((ClientData)tclInterp); |
| 600 | return TH_ERROR; |
| 601 | } |
| 602 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 603 | COPY_ARGV_TO_OBJV(); |
| 604 | Tcl_ResetResult(tclInterp); |
| 605 | rc = cmdInfo.objProc(cmdInfo.objClientData, tclInterp, objc, objv); |
| 606 | FREE_ARGV_TO_OBJV(); |
| 607 | }else |
| @@ -789,11 +793,11 @@ | |
| 793 | xFindExecutable = (tcl_FindExecutableProc *)dlsym(hLibrary, procName); |
| 794 | } |
| 795 | if( !xFindExecutable ){ |
| 796 | Th_ErrorMessage(interp, |
| 797 | "could not locate Tcl_FindExecutable", (const char *)"", 0); |
| 798 | dlclose(hLibrary); hLibrary = 0; |
| 799 | return TH_ERROR; |
| 800 | } |
| 801 | procName = TCL_CREATEINTERP_NAME; |
| 802 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName+1); |
| 803 | if( !xCreateInterp ){ |
| @@ -800,11 +804,11 @@ | |
| 804 | xCreateInterp = (tcl_CreateInterpProc *)dlsym(hLibrary, procName); |
| 805 | } |
| 806 | if( !xCreateInterp ){ |
| 807 | Th_ErrorMessage(interp, |
| 808 | "could not locate Tcl_CreateInterp", (const char *)"", 0); |
| 809 | dlclose(hLibrary); hLibrary = 0; |
| 810 | return TH_ERROR; |
| 811 | } |
| 812 | procName = TCL_DELETEINTERP_NAME; |
| 813 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName+1); |
| 814 | if( !xDeleteInterp ){ |
| @@ -811,11 +815,11 @@ | |
| 815 | xDeleteInterp = (tcl_DeleteInterpProc *)dlsym(hLibrary, procName); |
| 816 | } |
| 817 | if( !xDeleteInterp ){ |
| 818 | Th_ErrorMessage(interp, |
| 819 | "could not locate Tcl_DeleteInterp", (const char *)"", 0); |
| 820 | dlclose(hLibrary); hLibrary = 0; |
| 821 | return TH_ERROR; |
| 822 | } |
| 823 | procName = TCL_FINALIZE_NAME; |
| 824 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName+1); |
| 825 | if( !xFinalize ){ |
| @@ -822,11 +826,11 @@ | |
| 826 | xFinalize = (tcl_FinalizeProc *)dlsym(hLibrary, procName); |
| 827 | } |
| 828 | if( !xFinalize ){ |
| 829 | Th_ErrorMessage(interp, |
| 830 | "could not locate Tcl_Finalize", (const char *)"", 0); |
| 831 | dlclose(hLibrary); hLibrary = 0; |
| 832 | return TH_ERROR; |
| 833 | } |
| 834 | *phLibrary = hLibrary; |
| 835 | *pxFindExecutable = xFindExecutable; |
| 836 | *pxCreateInterp = xCreateInterp; |
| @@ -869,19 +873,19 @@ | |
| 873 | } |
| 874 | objPtr = Tcl_NewStringObj(argv[0], -1); |
| 875 | Tcl_IncrRefCount(objPtr); |
| 876 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argv0", NULL, objPtr, |
| 877 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 878 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 879 | if( !resultObjPtr ){ |
| 880 | return TCL_ERROR; |
| 881 | } |
| 882 | objPtr = Tcl_NewIntObj(argc - 1); |
| 883 | Tcl_IncrRefCount(objPtr); |
| 884 | resultObjPtr = Tcl_SetVar2Ex(pInterp, "argc", NULL, objPtr, |
| 885 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 886 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 887 | if( !resultObjPtr ){ |
| 888 | return TCL_ERROR; |
| 889 | } |
| 890 | listPtr = Tcl_NewListObj(0, NULL); |
| 891 | Tcl_IncrRefCount(listPtr); |
| @@ -888,11 +892,11 @@ | |
| 892 | if( argc>1 ){ |
| 893 | while( --argc ){ |
| 894 | objPtr = Tcl_NewStringObj(*++argv, -1); |
| 895 | Tcl_IncrRefCount(objPtr); |
| 896 | rc = Tcl_ListObjAppendElement(pInterp, listPtr, objPtr); |
| 897 | Tcl_DecrRefCount(objPtr); objPtr = 0; |
| 898 | if( rc!=TCL_OK ){ |
| 899 | break; |
| 900 | } |
| 901 | } |
| 902 | } |
| @@ -901,11 +905,11 @@ | |
| 905 | TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG); |
| 906 | if( !resultObjPtr ){ |
| 907 | rc = TCL_ERROR; |
| 908 | } |
| 909 | } |
| 910 | Tcl_DecrRefCount(listPtr); listPtr = 0; |
| 911 | return rc; |
| 912 | } |
| 913 | |
| 914 | /* |
| 915 | ** Evaluate a Tcl script, creating the Tcl interpreter if necessary. If the |
| 916 |