summaryrefslogtreecommitdiffstatshomepage
path: root/unix
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-03 16:42:25 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-04-03 22:09:05 +0300
commitc61ce965909d1005e8ea45f40320aa5545cad522 (patch)
treeea1ee7d9771360ac78dff91c4ecb45d32cf0b010 /unix
parent98a627dc03bc02e1b827ead8cc71b02259731551 (diff)
downloadmicropython-c61ce965909d1005e8ea45f40320aa5545cad522.tar.gz
micropython-c61ce965909d1005e8ea45f40320aa5545cad522.zip
unix file: Implement context manager protocol (for "with" statement).
Diffstat (limited to 'unix')
-rw-r--r--unix/file.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/unix/file.c b/unix/file.c
index bd54e7482c..41eb39e025 100644
--- a/unix/file.c
+++ b/unix/file.c
@@ -49,6 +49,11 @@ static mp_obj_t fdfile_close(mp_obj_t self_in) {
}
static MP_DEFINE_CONST_FUN_OBJ_1(fdfile_close_obj, fdfile_close);
+mp_obj_t fdfile___exit__(uint n_args, const mp_obj_t *args) {
+ return fdfile_close(args[0]);
+}
+static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(fdfile___exit___obj, 4, 4, fdfile___exit__);
+
static mp_obj_t fdfile_fileno(mp_obj_t self_in) {
mp_obj_fdfile_t *self = self_in;
return MP_OBJ_NEW_SMALL_INT((machine_int_t)self->fd);
@@ -112,6 +117,8 @@ STATIC const mp_map_elem_t rawfile_locals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_readline), (mp_obj_t)&mp_stream_unbuffered_readline_obj},
{ MP_OBJ_NEW_QSTR(MP_QSTR_write), (mp_obj_t)&mp_stream_write_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&fdfile_close_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR___enter__), (mp_obj_t)&mp_identity_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR___exit__), (mp_obj_t)&fdfile___exit___obj },
};
STATIC MP_DEFINE_CONST_DICT(rawfile_locals_dict, rawfile_locals_dict_table);