diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index a5973202b1621799403059bbe6911841b7888de2..f22be6e4937e4f9e5294f7cc5c1d72f9b5264fac 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.