Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 1 | #include <stdlib.h> |
| 2 | |
| 3 | #include "misc.h" |
| 4 | #include "mpconfig.h" |
| 5 | #include "qstr.h" |
| 6 | #include "obj.h" |
| 7 | #include "builtin.h" |
| 8 | #include "builtintables.h" |
| 9 | #include "objarray.h" |
| 10 | |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 11 | STATIC const mp_map_elem_t mp_builtin_object_table[] = { |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 12 | // built-in core functions |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 13 | { MP_OBJ_NEW_QSTR(MP_QSTR___build_class__), (mp_obj_t)&mp_builtin___build_class___obj }, |
| 14 | { MP_OBJ_NEW_QSTR(MP_QSTR___import__), (mp_obj_t)&mp_builtin___import___obj }, |
| 15 | { MP_OBJ_NEW_QSTR(MP_QSTR___repl_print__), (mp_obj_t)&mp_builtin___repl_print___obj }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 16 | |
| 17 | // built-in types |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 18 | { MP_OBJ_NEW_QSTR(MP_QSTR_bool), (mp_obj_t)&mp_type_bool }, |
| 19 | { MP_OBJ_NEW_QSTR(MP_QSTR_bytes), (mp_obj_t)&mp_type_bytes }, |
Paul Sokolovsky | 4dcb605 | 2014-04-08 22:09:14 +0300 | [diff] [blame] | 20 | { MP_OBJ_NEW_QSTR(MP_QSTR_bytearray), (mp_obj_t)&mp_type_bytearray }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 21 | #if MICROPY_ENABLE_FLOAT |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 22 | { MP_OBJ_NEW_QSTR(MP_QSTR_complex), (mp_obj_t)&mp_type_complex }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 23 | #endif |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 24 | { MP_OBJ_NEW_QSTR(MP_QSTR_dict), (mp_obj_t)&mp_type_dict }, |
| 25 | { MP_OBJ_NEW_QSTR(MP_QSTR_enumerate), (mp_obj_t)&mp_type_enumerate }, |
| 26 | { MP_OBJ_NEW_QSTR(MP_QSTR_filter), (mp_obj_t)&mp_type_filter }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 27 | #if MICROPY_ENABLE_FLOAT |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 28 | { MP_OBJ_NEW_QSTR(MP_QSTR_float), (mp_obj_t)&mp_type_float }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 29 | #endif |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 30 | { MP_OBJ_NEW_QSTR(MP_QSTR_int), (mp_obj_t)&mp_type_int }, |
| 31 | { MP_OBJ_NEW_QSTR(MP_QSTR_list), (mp_obj_t)&mp_type_list }, |
| 32 | { MP_OBJ_NEW_QSTR(MP_QSTR_map), (mp_obj_t)&mp_type_map }, |
| 33 | { MP_OBJ_NEW_QSTR(MP_QSTR_object), (mp_obj_t)&mp_type_object }, |
| 34 | { MP_OBJ_NEW_QSTR(MP_QSTR_set), (mp_obj_t)&mp_type_set }, |
| 35 | { MP_OBJ_NEW_QSTR(MP_QSTR_str), (mp_obj_t)&mp_type_str }, |
| 36 | { MP_OBJ_NEW_QSTR(MP_QSTR_super), (mp_obj_t)&mp_type_super }, |
| 37 | { MP_OBJ_NEW_QSTR(MP_QSTR_tuple), (mp_obj_t)&mp_type_tuple }, |
| 38 | { MP_OBJ_NEW_QSTR(MP_QSTR_type), (mp_obj_t)&mp_type_type }, |
| 39 | { MP_OBJ_NEW_QSTR(MP_QSTR_zip), (mp_obj_t)&mp_type_zip }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 40 | |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 41 | { MP_OBJ_NEW_QSTR(MP_QSTR_classmethod), (mp_obj_t)&mp_type_classmethod }, |
| 42 | { MP_OBJ_NEW_QSTR(MP_QSTR_staticmethod), (mp_obj_t)&mp_type_staticmethod }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 43 | |
Damien George | 07ddab5 | 2014-03-29 13:15:08 +0000 | [diff] [blame] | 44 | // built-in objects |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 45 | { MP_OBJ_NEW_QSTR(MP_QSTR_Ellipsis), (mp_obj_t)&mp_const_ellipsis_obj }, |
Damien George | 07ddab5 | 2014-03-29 13:15:08 +0000 | [diff] [blame] | 46 | |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 47 | // built-in user functions |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 48 | { MP_OBJ_NEW_QSTR(MP_QSTR_abs), (mp_obj_t)&mp_builtin_abs_obj }, |
| 49 | { MP_OBJ_NEW_QSTR(MP_QSTR_all), (mp_obj_t)&mp_builtin_all_obj }, |
| 50 | { MP_OBJ_NEW_QSTR(MP_QSTR_any), (mp_obj_t)&mp_builtin_any_obj }, |
| 51 | { MP_OBJ_NEW_QSTR(MP_QSTR_callable), (mp_obj_t)&mp_builtin_callable_obj }, |
| 52 | { MP_OBJ_NEW_QSTR(MP_QSTR_chr), (mp_obj_t)&mp_builtin_chr_obj }, |
| 53 | { MP_OBJ_NEW_QSTR(MP_QSTR_dir), (mp_obj_t)&mp_builtin_dir_obj }, |
| 54 | { MP_OBJ_NEW_QSTR(MP_QSTR_divmod), (mp_obj_t)&mp_builtin_divmod_obj }, |
| 55 | { MP_OBJ_NEW_QSTR(MP_QSTR_eval), (mp_obj_t)&mp_builtin_eval_obj }, |
| 56 | { MP_OBJ_NEW_QSTR(MP_QSTR_exec), (mp_obj_t)&mp_builtin_exec_obj }, |
| 57 | { MP_OBJ_NEW_QSTR(MP_QSTR_getattr), (mp_obj_t)&mp_builtin_getattr_obj }, |
Paul Sokolovsky | cc0af3d | 2014-04-06 01:00:46 +0300 | [diff] [blame] | 58 | { MP_OBJ_NEW_QSTR(MP_QSTR_globals), (mp_obj_t)&mp_builtin_globals_obj }, |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 59 | { MP_OBJ_NEW_QSTR(MP_QSTR_hash), (mp_obj_t)&mp_builtin_hash_obj }, |
| 60 | { MP_OBJ_NEW_QSTR(MP_QSTR_id), (mp_obj_t)&mp_builtin_id_obj }, |
| 61 | { MP_OBJ_NEW_QSTR(MP_QSTR_isinstance), (mp_obj_t)&mp_builtin_isinstance_obj }, |
| 62 | { MP_OBJ_NEW_QSTR(MP_QSTR_issubclass), (mp_obj_t)&mp_builtin_issubclass_obj }, |
| 63 | { MP_OBJ_NEW_QSTR(MP_QSTR_iter), (mp_obj_t)&mp_builtin_iter_obj }, |
| 64 | { MP_OBJ_NEW_QSTR(MP_QSTR_len), (mp_obj_t)&mp_builtin_len_obj }, |
Paul Sokolovsky | cc0af3d | 2014-04-06 01:00:46 +0300 | [diff] [blame] | 65 | { MP_OBJ_NEW_QSTR(MP_QSTR_locals), (mp_obj_t)&mp_builtin_locals_obj }, |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 66 | { MP_OBJ_NEW_QSTR(MP_QSTR_max), (mp_obj_t)&mp_builtin_max_obj }, |
| 67 | { MP_OBJ_NEW_QSTR(MP_QSTR_min), (mp_obj_t)&mp_builtin_min_obj }, |
| 68 | { MP_OBJ_NEW_QSTR(MP_QSTR_next), (mp_obj_t)&mp_builtin_next_obj }, |
| 69 | { MP_OBJ_NEW_QSTR(MP_QSTR_ord), (mp_obj_t)&mp_builtin_ord_obj }, |
| 70 | { MP_OBJ_NEW_QSTR(MP_QSTR_pow), (mp_obj_t)&mp_builtin_pow_obj }, |
| 71 | { MP_OBJ_NEW_QSTR(MP_QSTR_print), (mp_obj_t)&mp_builtin_print_obj }, |
| 72 | { MP_OBJ_NEW_QSTR(MP_QSTR_range), (mp_obj_t)&mp_builtin_range_obj }, |
| 73 | { MP_OBJ_NEW_QSTR(MP_QSTR_repr), (mp_obj_t)&mp_builtin_repr_obj }, |
| 74 | { MP_OBJ_NEW_QSTR(MP_QSTR_sorted), (mp_obj_t)&mp_builtin_sorted_obj }, |
| 75 | { MP_OBJ_NEW_QSTR(MP_QSTR_sum), (mp_obj_t)&mp_builtin_sum_obj }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 76 | |
| 77 | // built-in exceptions |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 78 | { MP_OBJ_NEW_QSTR(MP_QSTR_BaseException), (mp_obj_t)&mp_type_BaseException }, |
| 79 | { MP_OBJ_NEW_QSTR(MP_QSTR_ArithmeticError), (mp_obj_t)&mp_type_ArithmeticError }, |
| 80 | { MP_OBJ_NEW_QSTR(MP_QSTR_AssertionError), (mp_obj_t)&mp_type_AssertionError }, |
| 81 | { MP_OBJ_NEW_QSTR(MP_QSTR_AttributeError), (mp_obj_t)&mp_type_AttributeError }, |
| 82 | { MP_OBJ_NEW_QSTR(MP_QSTR_EOFError), (mp_obj_t)&mp_type_EOFError }, |
| 83 | { MP_OBJ_NEW_QSTR(MP_QSTR_Exception), (mp_obj_t)&mp_type_Exception }, |
| 84 | { MP_OBJ_NEW_QSTR(MP_QSTR_GeneratorExit), (mp_obj_t)&mp_type_GeneratorExit }, |
| 85 | { MP_OBJ_NEW_QSTR(MP_QSTR_IOError), (mp_obj_t)&mp_type_IOError }, |
| 86 | { MP_OBJ_NEW_QSTR(MP_QSTR_ImportError), (mp_obj_t)&mp_type_ImportError }, |
| 87 | { MP_OBJ_NEW_QSTR(MP_QSTR_IndentationError), (mp_obj_t)&mp_type_IndentationError }, |
| 88 | { MP_OBJ_NEW_QSTR(MP_QSTR_IndexError), (mp_obj_t)&mp_type_IndexError }, |
| 89 | { MP_OBJ_NEW_QSTR(MP_QSTR_KeyError), (mp_obj_t)&mp_type_KeyError }, |
| 90 | { MP_OBJ_NEW_QSTR(MP_QSTR_LookupError), (mp_obj_t)&mp_type_LookupError }, |
| 91 | { MP_OBJ_NEW_QSTR(MP_QSTR_MemoryError), (mp_obj_t)&mp_type_MemoryError }, |
| 92 | { MP_OBJ_NEW_QSTR(MP_QSTR_NameError), (mp_obj_t)&mp_type_NameError }, |
| 93 | { MP_OBJ_NEW_QSTR(MP_QSTR_NotImplementedError), (mp_obj_t)&mp_type_NotImplementedError }, |
| 94 | { MP_OBJ_NEW_QSTR(MP_QSTR_OSError), (mp_obj_t)&mp_type_OSError }, |
| 95 | { MP_OBJ_NEW_QSTR(MP_QSTR_OverflowError), (mp_obj_t)&mp_type_OverflowError }, |
| 96 | { MP_OBJ_NEW_QSTR(MP_QSTR_RuntimeError), (mp_obj_t)&mp_type_RuntimeError }, |
| 97 | { MP_OBJ_NEW_QSTR(MP_QSTR_StopIteration), (mp_obj_t)&mp_type_StopIteration }, |
| 98 | { MP_OBJ_NEW_QSTR(MP_QSTR_SyntaxError), (mp_obj_t)&mp_type_SyntaxError }, |
| 99 | { MP_OBJ_NEW_QSTR(MP_QSTR_SystemError), (mp_obj_t)&mp_type_SystemError }, |
| 100 | { MP_OBJ_NEW_QSTR(MP_QSTR_TypeError), (mp_obj_t)&mp_type_TypeError }, |
| 101 | { MP_OBJ_NEW_QSTR(MP_QSTR_ValueError), (mp_obj_t)&mp_type_ValueError }, |
| 102 | { MP_OBJ_NEW_QSTR(MP_QSTR_ZeroDivisionError), (mp_obj_t)&mp_type_ZeroDivisionError }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 103 | // Somehow CPython managed to have OverflowError not inherit from ValueError ;-/ |
| 104 | // TODO: For MICROPY_CPYTHON_COMPAT==0 use ValueError to avoid exc proliferation |
| 105 | |
| 106 | // Extra builtins as defined by a port |
| 107 | MICROPY_EXTRA_BUILTINS |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 108 | }; |
| 109 | |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 110 | const mp_obj_dict_t mp_builtin_object_dict_obj = { |
| 111 | .base = {&mp_type_dict}, |
| 112 | .map = { |
| 113 | .all_keys_are_qstrs = 1, |
| 114 | .table_is_fixed_array = 1, |
| 115 | .used = sizeof(mp_builtin_object_table) / sizeof(mp_map_elem_t), |
| 116 | .alloc = sizeof(mp_builtin_object_table) / sizeof(mp_map_elem_t), |
| 117 | .table = (mp_map_elem_t*)mp_builtin_object_table, |
| 118 | }, |
| 119 | }; |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 120 | |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 121 | STATIC const mp_map_elem_t mp_builtin_module_table[] = { |
| 122 | { MP_OBJ_NEW_QSTR(MP_QSTR___main__), (mp_obj_t)&mp_module___main__ }, |
| 123 | { MP_OBJ_NEW_QSTR(MP_QSTR_micropython), (mp_obj_t)&mp_module_micropython }, |
| 124 | |
| 125 | { MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_module_array }, |
Paul Sokolovsky | 98a627d | 2014-04-03 14:57:53 +0300 | [diff] [blame] | 126 | #if MICROPY_ENABLE_MOD_IO |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 127 | { MP_OBJ_NEW_QSTR(MP_QSTR_io), (mp_obj_t)&mp_module_io }, |
Paul Sokolovsky | 98a627d | 2014-04-03 14:57:53 +0300 | [diff] [blame] | 128 | #endif |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 129 | { MP_OBJ_NEW_QSTR(MP_QSTR_collections), (mp_obj_t)&mp_module_collections }, |
Paul Sokolovsky | e9db840 | 2014-04-10 03:45:38 +0300 | [diff] [blame] | 130 | #if MICROPY_ENABLE_MOD_STRUCT |
| 131 | { MP_OBJ_NEW_QSTR(MP_QSTR_struct), (mp_obj_t)&mp_module_struct }, |
| 132 | #endif |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 133 | |
| 134 | #if MICROPY_ENABLE_FLOAT |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 135 | { MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&mp_module_math }, |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 136 | #endif |
| 137 | |
| 138 | // extra builtin modules as defined by a port |
| 139 | MICROPY_EXTRA_BUILTIN_MODULES |
Damien George | caac542 | 2014-03-25 14:18:18 +0000 | [diff] [blame] | 140 | }; |
| 141 | |
Damien George | 7efc5b3 | 2014-04-05 22:36:42 +0100 | [diff] [blame] | 142 | const mp_obj_dict_t mp_builtin_module_dict_obj = { |
| 143 | .base = {&mp_type_dict}, |
| 144 | .map = { |
| 145 | .all_keys_are_qstrs = 1, |
| 146 | .table_is_fixed_array = 1, |
| 147 | .used = sizeof(mp_builtin_module_table) / sizeof(mp_map_elem_t), |
| 148 | .alloc = sizeof(mp_builtin_module_table) / sizeof(mp_map_elem_t), |
| 149 | .table = (mp_map_elem_t*)mp_builtin_module_table, |
| 150 | }, |
| 151 | }; |