int main() { TypeManager tm; Type t_int32 = tm.get("int32"); Type t_float = tm.get("float"); Type t_int64 = tm.get("int64"); tm.addConversion(t_int32, t_float); tm.addConversion(t_float, t_int32); tm.addConversion(t_float, t_int64); tm.addPromotion(t_int32, t_int64); cout << "int32 -> float " << TCCString(tm.isCompatible(tm.get("int32"), tm.get("float"))) << EOL; cout << "int32 -> int64 " << TCCString(tm.isCompatible(tm.get("int32"), tm.get("int64"))) << EOL; Type sig[] = {t_int32, t_float}; Type ovsigs[] = { t_float, t_float, t_int64, t_int64, t_int32, t_float, }; int sel = tm.selectOverload(sig, ovsigs, 2, 3); cout << "Selected " << sel << '\n'; return 0; }
PyObject* check_compatible(PyObject* self, PyObject* args) { PyObject *tmcap; int from, to; if (!PyArg_ParseTuple(args, "Oii", &tmcap, &from, &to)) { return NULL; } TypeManager *tm = unwrap_TypeManager(tmcap); if(!tm) { BAD_TM_ARGUMENT; return NULL; } switch(tm->isCompatible(Type(from), Type(to))){ case TCC_EXACT: return PyString_FromString("exact"); case TCC_PROMOTE: return PyString_FromString("promote"); case TCC_CONVERT_SAFE: return PyString_FromString("safe"); case TCC_CONVERT_UNSAFE: return PyString_FromString("unsafe"); default: Py_RETURN_NONE; } }