[LON-CAPA-cvs] cvs: loncom /xml run.pm

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 29 Mar 2002 18:21:00 -0000


albertel		Fri Mar 29 13:21:00 2002 EDT

  Modified files:              
    /loncom/xml	run.pm 
  Log:
  - do no more than 10 rounds of substitutions before exiting.
  
  
Index: loncom/xml/run.pm
diff -u loncom/xml/run.pm:1.23 loncom/xml/run.pm:1.24
--- loncom/xml/run.pm:1.23	Fri Feb 15 16:33:12 2002
+++ loncom/xml/run.pm	Fri Mar 29 13:21:00 2002
@@ -1,6 +1,6 @@
 package Apache::run;
 #
-# $Id: run.pm,v 1.23 2002/02/15 21:33:12 albertel Exp $
+# $Id: run.pm,v 1.24 2002/03/29 18:21:00 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -25,33 +25,13 @@
 # http://www.lon-capa.org/
 #
 
-sub evaluateold {
-  my ($expression,$safeeval,$decls) = @_;
-# print "inside2 evaluate $decls with $expression<br />\n";
-# gerd's old method interpolates unset vars
-# $safeeval->reval('return qq('.$expression.');');
-  unless (defined($expression)) { return ''; }
-  my $result = '';
-  $@='';
-  $safeeval->reval('$_=q|'.$expression.'|;');
-  if ($@ eq '') {
-    $safeeval->reval('{'.$decls.'$_=~s/(\$[A-Za-z]\w*)/(defined(eval($1))?eval($1):$1)/ge;}');
-    if ($@ eq '') {
-      $result = $safeeval->reval('return $_;');
-    } else {
-      &Apache::lonxml::error("substitution on:$expression:with:$decls:caused:$@:");
-    }
-  } else {
-    &Apache::lonxml::error("defining:$expression:caused:$@:");
-  }
-  return $result
-}
-
 $Apache::run::EVALUATE_STRING=<<'ENDEVALUATE';  
-  my %oldexpressions=();
-  while (!$oldexpressions{$_}) {
-    $oldexpressions{$_}=1;
+  my %_LONCAPA_INTERNAL_oldexpressions=();
+  my $i=0;
+  while (!$_LONCAPA_INTERNAL_oldexpressions{$_}) {
+    $_LONCAPA_INTERNAL_oldexpressions{$_}=1;
     $_ =~s/((?:\$|\&)(?:[\#|\$]*[A-Za-z][\w]*|\{[A-Za-z][\w]*\}))([\[\{][^\$\&\]\}]+[\]\}])*?(\([^\$\&\)]+\))*?(?=[^\[\{\(]|$)/eval(defined(eval($1.$2))?eval('$1.$2.$3'):'$1.$2.$3')/seg;
+    if ($i++ > 10 ) { last; }
   }
 ENDEVALUATE