Skip to main content

Python/bltinmodule.c

Source:

cpython 3.14 @ ab2d84fe1023/Python/bltinmodule.c

Python/bltinmodule.c implements the built-in functions that live in the builtins module. It is one of the first C files loaded at interpreter startup. The file contains print, len, type, isinstance, issubclass, getattr, setattr, hasattr, vars, dir, iter, next, map, zip, sorted, reversed, abs, round, divmod, pow, input, open, and others.

Map

LinesSymbolRole
1-200builtin_print, builtin_inputTerminal I/O
201-500builtin_len, builtin_abs, builtin_roundNumeric and size builtins
501-800builtin_isinstance, builtin_issubclassType hierarchy checks
801-1100builtin_getattr, builtin_setattr, builtin_hasattr, builtin_delattrAttribute access
1101-1400builtin_vars, builtin_dir, builtin_callableIntrospection
1401-1700builtin_iter, builtin_next, builtin_sortedIterator protocol
1701-2200builtin_map, builtin_zip, builtin_filterLazy sequence combinators
2201-3000builtin_open, builtin_compile, builtin_exec, builtin_evalI/O and code execution

Reading

isinstance and issubclass

builtin_isinstance(inst, cls) dispatches to PyObject_IsInstance. For a single type it calls PyType_IsSubtype. For a tuple of types it iterates and short-circuits on the first match. The __instancecheck__ and __subclasscheck__ hooks on the type's metaclass are respected.

// Python/bltinmodule.c:501 builtin_isinstance_impl
static PyObject *
builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple)
{
int retval = PyObject_IsInstance(obj, class_or_tuple);
if (retval < 0) return NULL;
return PyBool_FromLong(retval);
}

getattr with default

getattr(obj, name) calls PyObject_GetAttr. The three-argument form getattr(obj, name, default) calls _PyObject_GetAttrWithoutError and returns default on AttributeError without setting an exception.

// Python/bltinmodule.c:801 builtin_getattr_impl
static PyObject *
builtin_getattr_impl(PyObject *module, PyObject *object,
PyObject *name, PyObject *default_value)
{
if (default_value != NULL) {
v = _PyObject_GetAttrWithoutError(object, name);
if (v == NULL) { PyErr_Clear(); Py_INCREF(default_value); return default_value; }
return v;
}
return PyObject_GetAttr(object, name);
}

open delegates to io.open

builtin_open calls PyObject_Call(io_open, args, kwargs) where io_open is the cached io.open callable loaded at module init. This means open() in Python calls the same code path as io.open().

gopy notes

The gopy built-in functions are partly in objects/ (for type-based ones like len, isinstance) and partly in the VM (vm/eval_call.go for call dispatch). The builtins module object is initialized in vm/eval_import.go or objects/module.go.