J'ai fait des changements importants à ast-passes.js qui risquent de causer des problèmes avec le reste de Tachyon. J'ai remarqué un certain nombre de problèmes avec les analyses qui étaient faites, en particulier le calcul des variables libres et l'ensemble des fonctions définies localement. J'ai opté pour retirer ces analyses car
1) Elles étaient entremêlées avec d'autres passes, ce qui les rendaient difficiles à comprendre et à maintenir. Idéalement il faudrait les implanter dans des nouvelles passes qui ne font que ça pour que ce soit clair.
2) Ces analyses sont plutôt spécifiques à Tachyon (par exemple je ne peux pas vraiment dire quelle est la différence entre des variable libres et des variable "closed", mais de toute évidence ça doit être important pour le reste de Tachyon puisqu'elles sont calculées séparément). Ces analyses sont plus orientées vers une certaine forme de compilation (vers un langage de plus bas niveau). Ce ne sont pas des analyses qui s'appliquent à tous les compilateurs ou analyseurs qu'on développe avec le parseur. Il est donc justifié de les retirer des outils "common". Ces passes pourraient donc être effectuées après que ast-passes ait fait son travail.
3) Dans un compilateur qui transforme l'AST, les informations de variables libres risquent de changer lorsqu'on modifie l'AST. Il faut donc avoir un mécanisme pour mettre à jour ces informations pendant les transformations (car certaines variables qui étaient libres pourraient ne plus être libres par la suite, exemple: lambda-lifting). C'est donc préférable de sortir cette infrastructure de ast-passes (par exemple les variables libres pourraient se calculer "lazily" avec invalidation des informations lorsqu'on fait un changement... c'est ce que fait Gambit).
Maxime, si tu as besoin d'un coup de main pour implanter ces passes je peux t'expliquer l'approche à suivre.
Marc