Posted to tcl by miguel at Wed Jan 16 20:27:09 GMT 2008view raw

  1. Index: generic/tclCompExpr.c
  2. ===================================================================
  3. RCS file: /cvsroot/tcl/tcl/generic/tclCompExpr.c,v
  4. retrieving revision 1.92
  5. diff -u -r1.92 tclCompExpr.c
  6. --- generic/tclCompExpr.c 16 Jan 2008 19:44:13 -0000 1.92
  7. +++ generic/tclCompExpr.c 16 Jan 2008 20:25:39 -0000
  8. @@ -2000,7 +2000,8 @@
  9. Tcl_Interp *interp, /* Used for error reporting. */
  10. const char *script, /* The source script to compile. */
  11. int numBytes, /* Number of bytes in script. */
  12. - CompileEnv *envPtr) /* Holds resulting instructions. */
  13. + CompileEnv *envPtr, /* Holds resulting instructions. */
  14. + int optimize) /* 0 for one-off expressions */
  15. {
  16. OpNode *opTree = NULL; /* Will point to the tree of operators */
  17. Tcl_Obj *litList = Tcl_NewObj(); /* List to hold the literals */
  18. @@ -2026,7 +2027,7 @@
  19. TclListObjGetElements(NULL, litList, &objc, (Tcl_Obj ***)&litObjv);
  20. TclListObjGetElements(NULL, funcList, &objc, &funcObjv);
  21. CompileExprTree(interp, opTree, 0, &litObjv, funcObjv,
  22. - parsePtr->tokenPtr, envPtr, 1 /* optimize */);
  23. + parsePtr->tokenPtr, envPtr, optimize);
  24. } else {
  25. TclCompileSyntaxError(interp, envPtr);
  26. }
  27. Index: generic/tclCompile.c
  28. ===================================================================
  29. RCS file: /cvsroot/tcl/tcl/generic/tclCompile.c,v
  30. retrieving revision 1.144
  31. diff -u -r1.144 tclCompile.c
  32. --- generic/tclCompile.c 13 Dec 2007 15:23:15 -0000 1.144
  33. +++ generic/tclCompile.c 16 Jan 2008 20:25:43 -0000
  34. @@ -1823,7 +1823,7 @@
  35. */
  36.  
  37. if ((numWords == 1) && (tokenPtr->type == TCL_TOKEN_SIMPLE_WORD)) {
  38. - TclCompileExpr(interp, tokenPtr[1].start, tokenPtr[1].size, envPtr);
  39. + TclCompileExpr(interp, tokenPtr[1].start, tokenPtr[1].size, envPtr, 1);
  40. return;
  41. }
  42.  
  43. Index: generic/tclCompile.h
  44. ===================================================================
  45. RCS file: /cvsroot/tcl/tcl/generic/tclCompile.h,v
  46. retrieving revision 1.87
  47. diff -u -r1.87 tclCompile.h
  48. --- generic/tclCompile.h 15 Jan 2008 11:59:28 -0000 1.87
  49. +++ generic/tclCompile.h 16 Jan 2008 20:25:43 -0000
  50. @@ -858,7 +858,7 @@
  51. Tcl_Token *tokenPtr, int count,
  52. CompileEnv *envPtr);
  53. MODULE_SCOPE void TclCompileExpr(Tcl_Interp *interp, CONST char *script,
  54. - int numBytes, CompileEnv *envPtr);
  55. + int numBytes, CompileEnv *envPtr, int optimize);
  56. MODULE_SCOPE void TclCompileExprWords(Tcl_Interp *interp,
  57. Tcl_Token *tokenPtr, int numWords,
  58. CompileEnv *envPtr);
  59. Index: generic/tclExecute.c
  60. ===================================================================
  61. RCS file: /cvsroot/tcl/tcl/generic/tclExecute.c,v
  62. retrieving revision 1.359
  63. diff -u -r1.359 tclExecute.c
  64. --- generic/tclExecute.c 16 Jan 2008 19:44:13 -0000 1.359
  65. +++ generic/tclExecute.c 16 Jan 2008 20:25:48 -0000
  66. @@ -1228,14 +1228,7 @@
  67. const char *string = TclGetStringFromObj(objPtr, &length);
  68.  
  69. TclInitCompileEnv(interp, &compEnv, string, length, NULL, 0);
  70. -
  71. - /*
  72. - * TODO: Consider creating and calling an alternative routine
  73. - * that will compile bytecode for one-off expressions like this
  74. - * one with optimize==0, for improved efficiency.
  75. - */
  76. -
  77. - TclCompileExpr(interp, string, length, &compEnv);
  78. + TclCompileExpr(interp, string, length, &compEnv, 0);
  79.  
  80. /*
  81. * Successful compilation. If the expression yielded no instructions,