Implement the trunc builtin for PEP 3141
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index ce8b7f5..2c163a1 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1486,6 +1486,27 @@
 Without arguments, equivalent to locals().\n\
 With an argument, equivalent to object.__dict__.");
 
+static PyObject *
+builtin_trunc(PyObject *self, PyObject *v)
+{
+	PyObject *res;
+	PyObject *d = PyObject_GetAttrString(v, "__trunc__");
+	if (d == NULL) {
+		PyErr_SetString(PyExc_TypeError,
+		    "trunc() argument must have __trunc__ attribute");
+		return NULL;
+	}
+	res = PyObject_CallFunction(d, "");
+	Py_DECREF(d);
+	return res;
+}
+
+PyDoc_STRVAR(trunc_doc,
+"trunc(Real) -> Integral\n\
+\n\
+returns the integral closest to x between 0 and x.");
+
+
 
 static PyObject*
 builtin_sum(PyObject *self, PyObject *args)
@@ -1659,6 +1680,7 @@
  	{"sorted",	(PyCFunction)builtin_sorted,     METH_VARARGS | METH_KEYWORDS, sorted_doc},
  	{"sum",		builtin_sum,        METH_VARARGS, sum_doc},
  	{"vars",	builtin_vars,       METH_VARARGS, vars_doc},
+ 	{"trunc",	builtin_trunc,      METH_O, trunc_doc},
   	{"zip",         builtin_zip,        METH_VARARGS, zip_doc},
 	{NULL,		NULL},
 };