Fichier créé le 28 février 1996.

La valeur 1 provient du codage du booléen true, qui est restée dans l'accumulateur contenant le résultat final, à la fin de l'évaluation de l'expression.

En effet 2 optimisations se sont téléscopées, l'une permet de supprimer l'appel à not en inversant les branches des alternatives:

if not true then 2 else 0 => if true then 0 else 2
L'autre optimisation détecte que la branche else ne nécessite pas d'émission de code, puisqu'après le test l'accumulateur contient forcément la valeur false (c'est-à-dire 0) et qu'il n'y a pas lieu de produire d'instructions pour remettre 0 dans l'accumulateur. Le code engendré devenait:
if not true then 2 else 0 => if not true then 2 else return
Les deux optimisations successives produisaient un code équivalent à:
if true then return else 2
et la valeur true était renvoyée en tant que nombre entier, d'où le résultat 1 ...


Dernière modification: Friday, January 23, 1998
Copyright © 1994-2009, INRIA. Tous droits réservés.

Contacter l'auteur Pierre.Weis@inria.fr