2016-03-05 1 views
2

Je travaille sur le module SWIG pour Free Pascal. Pascal est un langage insensible à la casse. Les noms de symboles sont insensibles à la casse. Deux noms C différents tels que AName et aName seront identiques à ANAME en Pascal. Je sais que SWIG supporte la surcharge. Mais l'insensibilité à la casse ne surcharge pas vraiment. (Par défaut, Pascal supporte la surcharge naturelle, pas besoin de renommer les fonctions surchargées en Pascal.)SWIG. Module pour FreePascal. Noms insensibles à la casse

Ce dont j'ai besoin, pour C AName et aName, SWIG devrait créer automatiquement AName et aName_SWIG_1 en Pascal.

Mon approche actuelle:

  1. pour chaque nom (en majuscule), je recherche parmi les frères et sœurs précédents sur le même niveau, qui ont même nom: sym en majuscule.
  2. si N frères et sœurs trouvés, j'ai mis SWIG_N à nouvel attribut "sym: cisuffix"
  3. lorsque le nom est généré pour Pascal, je vérifie si "sym: cisuffix" existe, et l'ajoute à un nom.

Y a-t-il une meilleure approche?

Merci?

Répondre

0

J'ai modifié l'approche. Au lieu de scanner au même niveau de nœud, il balaie en cas de liste cisymtab insensible à la casse, faite à partir de symtab au début. Cisymtab La liste est composée de nœuds qui se trouvent dans le même symtab. Chaque noeud est également ajouté par les attributs suivants: "pascal: ciname" (maj: syn); "pascal: cinumber" (1,2 ... etc), et "pascal: cisuffix" (c'est-à-dire "__SWIG_1")

Je sais que ce n'est pas fiable à 100%. Par exemple, les méthodes virtuelles remplacées peuvent être nommées par erreur dans la classe descendante. Peut être que j'exclurai les méthodes virtuelles de cette résolution automatique de CI ....

D'autres idées?