/*     
      TYPE MISC . Magma 1.0 . 1996 . Sylvain HUET

         outils pour le typage
*/

#define SIZETYP 2
#define OFFTCL  0
#define OFFTNAM 1

/* empile un noeud sans interet mais pouvant appartenir a une classe */
int TPnil(mmachine m);

/* ajout d'un label (creation de noeud) dans une liste, avec test d'unicite */
int TPaddlabel(mmachine m, int first, char *name);

/* suppression des n premiers elements de la liste */
int TPdelnlabel(mmachine m, int first, int n);

/* recherche du noeud associe a un label dans une liste
   (retourne NIL si introuvable) */
int TPsearchtype(mmachine m, int first, char *name);

/* cree un graphe de type a partir d'une chaine type
  0:chaine
->0:noeud principal */
int TPtypgraph(mmachine m);

/* cree un graphe de type a partir d'une structure d'analyse 
->0:noeud principal */
int TPtypgraphanlz(mmachine m,manlyz z,int ind);

/* cree un graphe de type non polymorphe a partir d'une structure d'analyse 
->0:noeud principal */
int TPtypgraphanlzmono(mmachine m,manlyz z,int ind);

/* trouver l'equivalence d'un noeud */
int TPtrouver(mmachine m, int noeud);

/* unification de deux noeuds */
int TPunif(mmachine m,int x,int y);
/* resolution du type d'un noeud
  0:noeud
->0:chaine type
*/
int TPsolvenode(mmachine m);

/* retourne le nombre d'arguments d'une fonction
  -1 si ce n'est pas une fonction */
int TPnbarg(mmachine m,int node);

/* unification d'une fonction
   0:tuple d'arguments 1:node function
 ->0:node resultat
*/
int TPunionfun(mmachine m);

/* verification de fonction : les inconnues du resultat doivent etre
   dans les parametres 
  0: chaine de type
->0: chaine de type*/
int TPcheckfun(mmachine m);


