From 44c8aa39d7af70f0a9b1238c7d85c918775fefb6 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 31 Aug 2006 12:49:43 +0000
Subject: [PATCH] =?UTF-8?q?Il=20faut=20sauvegarer=20manuellement=20les=20c?=
 =?UTF-8?q?ompteurs=20de=20boucles=20quand=20elles=20sont=20r=C3=A9curisve?=
 =?UTF-8?q?s=20(Aur=C3=A9lien=20et=20St=C3=A9phane).?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/compiler.php | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php
index a5973202b1..f22be6e493 100644
--- a/ecrire/public/compiler.php
+++ b/ecrire/public/compiler.php
@@ -112,7 +112,7 @@ function calculer_inclure($struct, $descr, &$boucles, $id_boucle) {
 function calculer_boucle($id_boucle, &$boucles) {
  
   if ($boucles[$id_boucle]->type_requete == 'boucle')  {
-    $corps = ( "\n	\$t0 = " . $boucles[$id_boucle]->return . ";");
+    $corps = calculer_boucle_rec($id_boucle, $boucles);
     $req = "";
     } else {
       $corps = calculer_boucle_nonrec($id_boucle, $boucles);
@@ -129,6 +129,17 @@ function calculer_boucle($id_boucle, &$boucles) {
 	.  "\n	return \$t0;";
 }
 
+// compil d'un boucle non recursive. 
+// il suffit (ET IL FAUT) sauvegarder les valeurs des arguments passes par
+// reference, car par definition un tel passage ne les sauvegarde pas
+
+function calculer_boucle_rec($id_boucle, &$boucles) {
+	$nom = $boucles[$id_boucle]->param[0];
+	return "\n\t\$save_numrows = (\$Numrows['$nom']);"
+	. "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
+	. "\n\t\$Numrows['$nom'] = (\$save_numrows);";
+}
+
 // compil d'un boucle non recursive. 
 // c'est un "while (fetch_sql)" dans le cas général,
 // qu'on essaye d'optimiser un max.
-- 
GitLab