Valider 8c4eb2bc rédigé par esj's avatar esj
Parcourir les fichiers

Non seulement le décompilateur au sens strict ne doit pas produire des...

Non seulement le décompilateur au sens strict ne doit pas produire des caractères de la syntaxe externe, juste parcourir l'arbre de syntaxe abstraite, mais il ne doit non plus en retirer au motif d'abréviation, il n'y connait rien. En l'occurrence, il s'agit des crochets superflux des champs avec filtres intervenant dans les critères, opération déporté dans le jeu de 7 fonctions.

Attention, la signature de la 7e fonction change: le 2e argument, qui n'avait pas d'utilité, disparait, et surtout le premier est un tableau de tableaux de tableaux, plus un tableau de chaînes.
parent f508824d
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −9
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -31,6 +31,7 @@ function decompiler_boucle($struct, $fmt, $prof=0, $next='')
	if ($struct->table_optionnelle)
	  $type .= "?";
	// Revoir le cas de la boucle recursive

	$crit = $struct->param;
	if ($crit AND !is_array($crit[0])) {
		$type = strtolower($type) . array_shift($crit);
@@ -139,24 +140,19 @@ function decompiler_criteres($sources, $comp, $fmt='', $prof=0) {
		  if ((count($v) == 1) 
		      AND $v[0]->type=='texte'
		      AND $v[0]->apres)
		    $args[]= ( $v[0]->apres . $v[0]->texte . $v[0]->apres);
		    $args[]= array(array('texte', ( $v[0]->apres . $v[0]->texte . $v[0]->apres)));
		  else {
		    $res2 = '';
		    $res2 = array();
		    foreach($v as $k => $p) {
		      if (!isset($p->type)) continue; #??????
		      $d = 'decompiler_' . $p->type;
		      $r = $d($p, $fmt, (0-$prof), @$v[$k+1]);
		      if ($p->type == 'champ' AND $r[0]=='[') {
			$r = substr($r,1,-1);
			if (preg_match(',^[(](#[^|]*)[)]$,sS', $r))
			  $r = substr($r,1,-1);
		      }
		      $res2 .= $r;
		      $res2[]= array($p->type, $r);
		    }
		    $args[]= $res2;
		  }
		}
		$res .= $f($args, $prof);
		$res .= $f($args);
	}
	return $res;
}
+15 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -75,8 +75,21 @@ function format_liste_html($fonc, $args, $prof)
	. (!$args ? "" : ("{" . join(",", $args) . "}"));
}

function format_critere_html($args, $prof)
function format_critere_html($criteres)
{
  return (!$args ? "" : ("{" . join(",", $args) . "}"));
	foreach ($criteres as $k => $crit) {
		$crit_s = '';
		foreach ($crit as $operande) {
			list($type, $valeur) = $operande;
			if ($type == 'champ' AND $valeur[0]=='[') {
			  $valeur = substr($valeur,1,-1);
			  if (preg_match(',^[(](#[^|]*)[)]$,sS', $valeur))
			    $valeur = substr($valeur,1,-1);
			}
			$crit_s .= $valeur;
		}
		$criteres[$k] = $crit_s;
	}
	return (!$criteres ? "" : ("{" . join(",", $criteres) . "}"));
}