/*!
TODO DOC
*/

#include "scolSpecialsFunctions.h"

ScolSpecialFunction specials[SCOL_SPECIAL_FUNCTIONS_NUMBER] =
{
  { "sizetab",      1, "fun [tab u0] I",    kArraysize  },
  { "mktab",        2, "fun [I u0] tab u0", kNewarray   },
#if !defined (SCOL_STRICT)
  { "add",          2, "fun [I I] I",       kIntadd     },  // deprecated
  { "sub",          2, "fun [I I] I",       kIntsub     },  // deprecated
  { "mul",          2, "fun [I I] I",       kIntmul     },  // deprecated
  { "div",          2, "fun [I I] I",       kIntdiv     },  // deprecated
#endif
  { "mod",          2, "fun [I I] I",       kIntmod     },
#if !defined (SCOL_STRICT)
  { "neg",          1, "fun [I] I",         kIntneg     },  // deprecated
  { "and",          2, "fun [I I] I",       kIntand     },  // deprecated
  { "or",           2, "fun [I I] I",       kIntor      },  // deprecated
  { "eor",          2, "fun [I I] I",       kIntxor     },  // deprecated
  { "not",          1, "fun [I] I",         kIntnot     },  // deprecated
  { "shl",          2, "fun [u0 u0] I",     kIntshl     },  // deprecated
  { "shr",          2, "fun [u0 u0] I",     kIntshr     },  // deprecated
  { "eq",           2, "fun [I I] I",       kInteq      },  // deprecated
  { "ne",           2, "fun [I I] I",       kIntne      },  // deprecated
  { "lt",           2, "fun [I I] I",       kIntlt      },  // deprecated
  { "gt",           2, "fun [I I] I",       kIntgt      },  // deprecated
  { "le",           2, "fun [I I] I",       kIntle      },  // deprecated
  { "ge",           2, "fun [I I] I",       kIntge      },  // deprecated
  { "andb",         2, "fun [I I] I",       kBooland    },  // deprecated
  { "orb",          2, "fun [I I] I",       kBoolor     },  // deprecated
  { "non",          1, "fun [I] I",         kBoolnot    },  // deprecated
#endif
  { "itof",         1, "fun [I] F",         kInt2float  },
  { "ftoi",         1, "fun [F] I",         kFloat2int  },
#if !defined (SCOL_STRICT)
  { "addf",         2, "fun [F F] F",       kFloatadd   },  // deprecated
  { "subf",         2, "fun [F F] F",       kFloatsub   },  // deprecated
  { "mulf",         2, "fun [F F] F",       kFloatmul   },  // deprecated
  { "divf",         2, "fun [F F] F",       kFloatdiv   },  // deprecated
  { "negf",         1, "fun [F] F",         kFloatneg   },  // deprecated
  { "eqf",          2, "fun [F F] F",       kFloateq    },  // deprecated
  { "nef",          2, "fun [F F] I",       kFloatne    },  // deprecated
  { "ltf",          2, "fun [F F] I",       kFloatlt    },  // deprecated
  { "gtf",          2, "fun [F F] I",       kFloatgt    },  // deprecated
  { "lef",          2, "fun [F F] I",       kFloatle    },  // deprecated
  { "gef",          2, "fun [F F] I",       kFloatge    },  // deprecated
#endif
  { "break",        0, "fun [] I",          kBreak      },  // new!
  { "assert",       1, "fun [I] I",         kAssert     },  // new!
  { "mknode",       2, "fun [fun [u0 u1] u2 u1] fun [u0] u2",                                     kNewfun },
  { "mkfun1",       2, "fun [fun [u0] u1 u0] fun [] u1",                                          kNewfun },
  { "mkfun2",       2, "fun [fun [u0 u1] u2 u1] fun [u0] u2",                                     kNewfun },
  { "mkfun3",       2, "fun [fun [u0 u1 u2] u3 u2] fun [u0 u1] u3",                               kNewfun },
  { "mkfun4",       2, "fun [fun [u0 u1 u2 u3] u4 u3] fun [u0 u1 u2] u4",                         kNewfun },
  { "mkfun5",       2, "fun [fun [u0 u1 u2 u3 u4] u5 u4] fun [u0 u1 u2 u3] u5",                   kNewfun },
  { "mkfun6",       2, "fun [fun [u0 u1 u2 u3 u4 u5] u6 u5] fun [u0 u1 u2 u3 u4] u6",             kNewfun },
  { "mkfun7",       2, "fun [fun [u0 u1 u2 u3 u4 u5 u6] u7 u6] fun [u0 u1 u2 u3 u4 u5] u7",       kNewfun },
  { "mkfun8",       2, "fun [fun [u0 u1 u2 u3 u4 u5 u6 u7] u8 u7] fun [u0 u1 u2 u3 u4 u5 u6] u8", kNewfun }
};
