summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-04-14 18:10:13 (GMT)
committerBrett Cannon <brett@python.org>2012-04-14 18:10:13 (GMT)
commitfd0741555b733f66c0a35c698d0cac5e73010ae0 (patch)
tree739b3aeb0a9d31f49dd334e5f57b5376b20d7dc7 /Objects
parentd2cbd9053975d6d6a98adb23b2735b2125ed0626 (diff)
downloadcpython-fd0741555b733f66c0a35c698d0cac5e73010ae0.zip
cpython-fd0741555b733f66c0a35c698d0cac5e73010ae0.tar.gz
cpython-fd0741555b733f66c0a35c698d0cac5e73010ae0.tar.bz2
Issue #2377: Make importlib the implementation of __import__().
importlib._bootstrap is now frozen into Python/importlib.h and stored as _frozen_importlib in sys.modules. Py_Initialize() loads the frozen code along with sys and imp and then uses _frozen_importlib._install() to set builtins.__import__() w/ _frozen_importlib.__import__().
Diffstat (limited to 'Objects')
-rw-r--r--Objects/abstract.c29
-rw-r--r--Objects/dictobject.c10
-rw-r--r--Objects/exceptions.c8
3 files changed, 41 insertions, 6 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 4737d54..42cd169 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2377,6 +2377,35 @@ PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...)
}
PyObject *
+_PyObject_CallMethodObjIdArgs(PyObject *callable,
+ struct _Py_Identifier *name, ...)
+{
+ PyObject *args, *tmp;
+ va_list vargs;
+
+ if (callable == NULL || name == NULL)
+ return null_error();
+
+ callable = _PyObject_GetAttrId(callable, name);
+ if (callable == NULL)
+ return NULL;
+
+ /* count the args */
+ va_start(vargs, name);
+ args = objargs_mktuple(vargs);
+ va_end(vargs);
+ if (args == NULL) {
+ Py_DECREF(callable);
+ return NULL;
+ }
+ tmp = PyObject_Call(callable, args, NULL);
+ Py_DECREF(args);
+ Py_DECREF(callable);
+
+ return tmp;
+}
+
+PyObject *
PyObject_CallFunctionObjArgs(PyObject *callable, ...)
{
PyObject *args, *tmp;
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 3db7a5e..5d8910f 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -788,6 +788,16 @@ PyDict_GetItemWithError(PyObject *op, PyObject *key)
return ep->me_value;
}
+PyObject *
+_PyDict_GetItemIdWithError(PyObject *dp, struct _Py_Identifier *key)
+{
+ PyObject *kv;
+ kv = _PyUnicode_FromId(key); /* borrowed */
+ if (kv == NULL)
+ return NULL;
+ return PyDict_GetItemWithError(dp, kv);
+}
+
static int
dict_set_item_by_hash_or_entry(register PyObject *op, PyObject *key,
Py_hash_t hash, PyDictEntry *ep, PyObject *value)
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index f3dde11..a2f2e44 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -2344,9 +2344,9 @@ PyObject *PyExc_RecursionErrorInst = NULL;
#endif /* MS_WINDOWS */
void
-_PyExc_Init(void)
+_PyExc_Init(PyObject *bltinmod)
{
- PyObject *bltinmod, *bdict;
+ PyObject *bdict;
PRE_INIT(BaseException)
PRE_INIT(Exception)
@@ -2414,9 +2414,6 @@ _PyExc_Init(void)
PRE_INIT(ProcessLookupError);
PRE_INIT(TimeoutError);
- bltinmod = PyImport_ImportModule("builtins");
- if (bltinmod == NULL)
- Py_FatalError("exceptions bootstrapping error.");
bdict = PyModule_GetDict(bltinmod);
if (bdict == NULL)
Py_FatalError("exceptions bootstrapping error.");
@@ -2546,7 +2543,6 @@ _PyExc_Init(void)
Py_DECREF(args_tuple);
}
}
- Py_DECREF(bltinmod);
}
void