void print_main_when_head(yamop*, enumPlace);

inline void
print_main_when_head(yamop* p, enumPlace place)
{
  if((ExpEnv.debug_struc.pmainclause_on_head.print & place) == place) {
    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__);
    fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pmainclause_on_head.msg_before);
    print_preg(p);
    fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pmainclause_on_head.msg_after);
  }
}

void print_instruction(yamop*, enumPlace);

inline void
print_instruction(yamop* p, enumPlace place)
{
  op_numbers op = Yap_op_from_opcode(p->opc);
  switch(op) {
  #define OPCODE(OP,TYPE) \
  case _##OP: \
  if((ExpEnv.debug_struc.pyaam_##OP.print & place) == place) { \
    char *tmp = (char*)malloc((16+strlen((char*)ExpEnv.debug_struc.pyaam_##OP.msg_after))*sizeof(char)); \
    switch(place) { \
    case ON_INTERPRETER: \
      strcpy(tmp, " (as standard)"); \
      break; \
    case ON_PROFILED_INTERPRETER: \
      strcpy(tmp, " (as profiled)"); \
      break; \
    case ON_NATIVE: \
      strcpy(tmp, " (as native)"); \
      break; \
    default:; \
    } \
    strcat(tmp, (char*)ExpEnv.debug_struc.pyaam_##OP.msg_after); \
	fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
    print_op((char*)ExpEnv.debug_struc.pyaam_##OP.msg_before, op, tmp); \
  } \
  break;
  #include "YapAppliedOpcodes.h"
  #undef OPCODE
  default:;
  }
}

#if YAP_JIT
void print_block(YAP_BBs, enumPlace);

inline void
print_block(YAP_BBs block, enumPlace place)
{
  switch(block) {
  #define BBLOCK(BB) \
  case BB: \
  if((ExpEnv.debug_struc.pbbs_##BB.print & place) == place) { \
    fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
    fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pbbs_##BB.msg_before); \
    fprint_block(block); \
    { \
      if (place == ON_NATIVE) fprintf(stderr, " (on native)"); \
      else fprintf(stderr, " (on interpreter)"); \
    } \
    fprintf(stderr, "%s", (char*)ExpEnv.debug_struc.pbbs_##BB.msg_after); \
  } \
  break;
  #include "Yap_AppliedBasicBlocks.h"
  #undef BBLOCK
  default:;
  }
}
#endif