/******************************************************************************
 * CFast_1.hpp : passage de l'ia en C, 1ère passe
 * auteur : Fred "Bart" Compagnon
 ******************************************************************************/

//#include "ai.h"
#define CFAST_DEBUG_FIRST_PASS

typedef struct CFast_tdstNode_
{
  tdstNodeInterpret stNode;
  tdstNodeInterpret stMiscellaneousNode;
  char* d_cOptimisedNode;
  long lIndexOfRef; // = -1 if i'm not a reference !
  unsigned char ucIndexOfEvalParam; // 0 if no need to memorise value => index starts at 1 !
  unsigned char ucNumberOfParamNeeded; // 0 if no param in input
  unsigned char ucNumberOfNodeToSkipAfterOptimisation;
  BOOL bAffectWithGetVector;
  BOOL bIsABooleanDsgVarRef;
  BOOL bIsACondition ;
  BOOL bIsATernOpParam ;

} CFast_tdstNode;

typedef struct CFast_tdstComportTree_
{
	//char szName[256]; ?
	//long CFast_lMyIndex; ?
	struct CFast_tdstNode_* p_stCFastNode;
	unsigned short uwNbNode;
	unsigned short uwNbMetaAction; // Nb de MetaAction
	unsigned short uwNbStopEngine; // Nb de BloquantMoteur
  char* d_cDeclarations;
} CFast_tdstComportTree;

#if defined (CFAST_DEBUG_FIRST_PASS)
void CFast_FirstPassOpening() ;
long lCFast_FirstPassClosing() ;
#endif //defined (CFAST_DEBUG_FIRST_PASS)

CFast_tdstComportTree* CFast_FirstPassInitComport ( tdstComport* p_stComport ) ;
CFast_tdstComportTree* CFast_FirstPassInitSubr ( tdstMacro* p_stMacro ) ;
void CFast_FirstPassDesinit () ;
void CFast_FirstPassFillTreeComport ( CFast_tdstComportTree* p_stFastTree, tdstComport* p_stComport ) ;
void CFast_FirstPassFillTreeSubr ( CFast_tdstComportTree* p_stFastTree, tdstMacro* p_stMacro ) ;
