blob: 3412573eb4dbeaed05fd459c973dec72b3c99075 [file] [log] [blame]
Damien George28708622014-01-02 21:30:26 +00001#include <stdlib.h>
2#include <stdint.h>
3#include <string.h>
4#include <assert.h>
5
6#include "nlr.h"
7#include "misc.h"
8#include "mpconfig.h"
9#include "obj.h"
10#include "runtime.h"
11#include "map.h"
12
13typedef struct _mp_obj_module_t {
14 mp_obj_base_t base;
15 qstr name;
16 mp_map_t *globals;
17} mp_obj_module_t;
18
19void module_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in) {
20 mp_obj_module_t *self = self_in;
21 print(env, "<module '%s' from '-unknown-file-'>", qstr_str(self->name));
22}
23
24const mp_obj_type_t module_type = {
25 { &mp_const_type },
26 "module",
27 module_print, // print
Damien George71c51812014-01-04 20:21:15 +000028 NULL, // make_new
Damien George28708622014-01-02 21:30:26 +000029 NULL, // call_n
30 NULL, // unary_op
31 NULL, // binary_op
32 NULL, // getiter
33 NULL, // iternext
ian-v7a16fad2014-01-06 09:52:29 -080034 .methods = NULL,
Damien George28708622014-01-02 21:30:26 +000035};
36
37mp_obj_t mp_obj_new_module(qstr module_name) {
38 mp_obj_module_t *o = m_new_obj(mp_obj_module_t);
39 o->base.type = &module_type;
40 o->name = module_name;
41 o->globals = mp_map_new(MP_MAP_QSTR, 0);
42 return o;
43}
44
45mp_map_t *mp_obj_module_get_globals(mp_obj_t self_in) {
46 assert(MP_OBJ_IS_TYPE(self_in, &module_type));
47 mp_obj_module_t *self = self_in;
48 return self->globals;
49}