Index: tol/btol/real_type/datgrav.cpp
===================================================================
--- tol/btol/real_type/datgrav.cpp	(revision 53ea6a06fe495053f73cb8ba47256ec6092e4439)
+++ tol/btol/real_type/datgrav.cpp	(revision ef21614863c3fcfbed4c75816b7e7cf6ab4e42fa)
@@ -767,6 +767,6 @@
 
 
-static char* structFinder_ = "Struct";
-static char* classFinder_  = "Class";
+static const char* structFinder_ = "Struct";
+static const char* classFinder_  = "Class";
 static BSyntaxObject* structGra_ = (BSyntaxObject*)structFinder_;
 static BSyntaxObject* classGra_  = (BSyntaxObject*)classFinder_;
@@ -2064,5 +2064,5 @@
 
 
-
+static BUserFunction *tclTextMatch = NULL;
 //--------------------------------------------------------------------
   DeclareContensClass(BDat, BDatTemporary, BDatMatchText);
@@ -2113,18 +2113,26 @@
   if(TolTclIsEnabled())
   {
-    BText expr = BText("TextMatch_Tcl(\"")+string+"\",\""+pattern+"\","+mode+")";
-    BSyntaxObject* uMatch = GraReal()->EvaluateExpr(expr);
-    if(uMatch)
-    { 
-      contens_ = Real(uMatch)!=0;
-      DESTROY(uMatch);
-    }
-  }
-  else
-  {
-    Warning("Using internal version of TextMatch could cause invalid results. "
-    "Please use a TCL version of TOL like tolsh or tolbase.");
-    contens_ = (BReal)(string.Match(pattern, mode));
-  }
+    if ( tclTextMatch || ( tclTextMatch = (BUserFunction*)GraReal()->FindOperator( "TextMatch_Tcl" ) ) ) {
+      BList *args = Cons( Arg(1), NCons( Arg(2) ) );
+
+      if ( Arg(3) ) {
+        LstAppend( args, Arg(3) );
+      } else {
+        BUserDat *uMode = BContensDat::New( "", BDat(mode), "" );
+        uMode->PutName( "case" );
+        LstAppend( args, uMode ); 
+      }
+      BSyntaxObject *evalResult = tclTextMatch->Evaluator( args );
+      if ( evalResult ) {
+        contens_ = Dat( evalResult );
+      }
+      // DUDA: debo destruir args?
+      DESTROY( evalResult );
+      return;
+    }
+  }
+  Warning("Using internal version of TextMatch could cause invalid results. "
+          "Please use a TCL version of TOL like tolsh or tolbase.");
+  contens_ = (BReal)(string.Match(pattern, mode));
 }
 
