f_locals['o'] = f_locals['k']
self.assertEqual(o, 'a.b.c')
+ def test_copy(self):
+ x = 0
+ d = sys._getframe().f_locals
+ d_copy = d.copy()
+ self.assertIsInstance(d_copy, dict)
+ self.assertEqual(d_copy['x'], 0)
+ d_copy['x'] = 1
+ self.assertEqual(x, 0)
+
def test_update_with_self(self):
def f():
f_locals = sys._getframe().f_locals
def test_unsupport(self):
x = 1
d = sys._getframe().f_locals
- with self.assertRaises(AttributeError):
- d.copy()
-
with self.assertRaises(TypeError):
copy.copy(d)
return result;
}
+static PyObject*
+framelocalsproxy_copy(PyObject *self, PyObject *Py_UNUSED(ignored))
+{
+ PyObject* result = PyDict_New();
+
+ if (result == NULL) {
+ return NULL;
+ }
+
+ if (PyDict_Update(result, self) < 0) {
+ Py_DECREF(result);
+ return NULL;
+ }
+
+ return result;
+}
+
static PyObject*
framelocalsproxy_reversed(PyObject *self, void *Py_UNUSED(ignored))
{
NULL},
{"__reversed__", _PyCFunction_CAST(framelocalsproxy_reversed), METH_NOARGS,
NULL},
+ {"copy", _PyCFunction_CAST(framelocalsproxy_copy), METH_NOARGS,
+ NULL},
{"keys", _PyCFunction_CAST(framelocalsproxy_keys), METH_NOARGS,
NULL},
{"values", _PyCFunction_CAST(framelocalsproxy_values), METH_NOARGS,