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