Changeset b6a0831 in tol


Ignore:
Timestamp:
Feb 27, 2012, 8:00:00 AM (15 years ago)
Author:
Jorge Pérez <josp.jorge@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
477d78a
Parents:
44d90fd
Message:

refs #1449, index information is better built from tcl when invoking tol::foreach

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@4204 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • toltcl/generic/tolaccess.cpp

    r44d90fd rb6a0831  
    10021002  BSyntaxObject* container;
    10031003  Tcl_DString dstr;
    1004   Tcl_Obj * ArgIndexes;
    10051004  int tcl_code = TCL_OK;
    10061005  int i;
    1007   int n, index_length;
    1008   Tcl_Obj ** items;
    10091006
    10101007  int length = 0;
    … …  
    10381035  const int OBJ_DESC       = OBJ_PATHV + 1;
    10391036  const int OBJ_DESCV      = OBJ_DESC + 1;
    1040   const int OBJ_INDEXES    =  OBJ_DESCV + 1;
    1041   const int OBJ_INDEXESV   =  OBJ_INDEXES + 1;
    1042   const int OBJ_ISFILE     = OBJ_INDEXESV + 1;
     1037  const int OBJ_ISFILE     = OBJ_DESCV + 1;
    10431038  const int OBJ_ISFILEV    = OBJ_ISFILE + 1;
    10441039  const int OBJ_HASSUBSET  = OBJ_ISFILEV + 1;
    … …  
    10681063  }
    10691064 
    1070   // is ok to ask for a list
    1071   Tcl_ListObjGetElements( interp, objv[ 1 ], &n, &items );
    1072 
    1073   // initialize the list of indexes (the common part) for every item
    1074   // in the Set
    1075   if (strcmp(Tcl_GetString( items[ 0 ] ),"Console")) {
    1076     if (n>2)
    1077       ArgIndexes = Tcl_NewListObj( n - 2, items + 2 );
    1078     else
    1079       ArgIndexes = Tcl_NewListObj( 0, NULL );
    1080   } else {
    1081     if ( n > 1 )
    1082       ArgIndexes = Tcl_NewListObj( n - 1, items + 1 );
    1083     else
    1084       ArgIndexes = Tcl_NewListObj( 0, NULL );
    1085   }
    1086 
    10871065  datav[ OBJ_GRAMMAR ]  = Tcl_NewStringObj( "grammar", -1 );
    10881066  datav[ OBJ_GRAMMARV ] = Tcl_NewObj( );
    … …  
    10951073  datav[ OBJ_DESC ]     = Tcl_NewStringObj( "description", -1 );
    10961074  datav[ OBJ_DESCV ]    = Tcl_NewObj( );
    1097   Tcl_Obj * last_index  = Tcl_NewIntObj( 1 );
    1098   Tcl_ListObjAppendElement( NULL, ArgIndexes, last_index );
    1099   datav[ OBJ_INDEXES ]  = Tcl_NewStringObj( "indexes", -1 );
    1100   datav[ OBJ_INDEXESV ] = ArgIndexes;
    1101   Tcl_ListObjLength( NULL, datav[ OBJ_INDEXES ], &index_length );
    11021075  datav[ OBJ_ISFILE ]     = Tcl_NewStringObj( "isfile", -1 );
    11031076  datav[ OBJ_ISFILEV ]    = Tcl_NewObj( );
    … …  
    11451118    /* read the path */
    11461119    btxt = syn_i->SourcePath();
    1147     Tcl_ExternalToUtfDString(NULL,btxt,-1,&dstr);
     1120    Tcl_ExternalToUtfDString(NULL, btxt, -1,& dstr);
    11481121    SAVE_SET_STRING( datav + OBJ_PATHV, &dstr );
    11491122    Tcl_DStringFree(&dstr);
    … …  
    11521125    btxt = syn_i->Description();
    11531126    Tcl_ExternalToUtfDString(NULL,btxt,-1,&dstr);
    1154     SAVE_SET_STRING( datav + OBJ_PATHV, &dstr );
     1127    SAVE_SET_STRING( datav + OBJ_DESCV, &dstr );
    11551128    Tcl_DStringFree(&dstr);
    11561129
    1157     /* update last index */
    1158     if ( Tcl_IsShared( last_index ) ) {
    1159       last_index = Tcl_NewIntObj( i );
    1160       Tcl_ListObjReplace( NULL, datav[ OBJ_INDEXESV ], index_length-1,
    1161                           1, 1, &last_index );
    1162     } else {
    1163       Tcl_SetIntObj( last_index, i );
    1164     }
    1165     /* to refresh the string */
    1166     Tcl_InvalidateStringRep( datav[ OBJ_INDEXESV ] );
    11671130    // Este if es para incluir en los items que son Set informacion
    11681131    // que solo ellos llevan como: Subtype, IsFile, etc ...
    … …  
    12251188      datac = NUM_OBJS;
    12261189    } else
    1227       datac = OBJ_INDEXESV + 1;
     1190      datac = OBJ_DESCV + 1;
    12281191    // set the loop variable
    12291192    Tcl_Obj *varValuePtr = Tcl_ObjSetVar2( interp, objv[ 0 ], NULL,
    … …  
    12401203    }
    12411204    tcl_code = Tcl_EvalObjEx( interp, objv[ 2 ], 0 );
     1205    // unset loop variable
     1206    Tcl_UnsetVar( interp, Tcl_GetString( objv[ 0 ] ), 0 );
    12421207    if ( tcl_code != TCL_OK) {
    12431208      if ( tcl_code == TCL_CONTINUE) {
    … …  
    12571222  delete citer;
    12581223 
    1259   /* liberar los objetos tcl */
     1224  /* release tcl objects holds on datav */
    12601225  for ( i = 0; i < NUM_OBJS; ++i ) {
    12611226    Tcl_DecrRefCount( datav[ i ] );
Note: See TracChangeset for help on using the changeset viewer.