Commit ee3fd46f authored by Damien George's avatar Damien George
Browse files

Rename configuration variables controling Python features.

Now of the form MICROPY_PY_*.  See issue #35.
parent d0ceb04b
......@@ -12,13 +12,13 @@
#define MICROPY_HELPER_REPL (0)
#define MICROPY_HELPER_LEXER_UNIX (0)
#define MICROPY_ENABLE_SOURCE_LINE (0)
#define MICROPY_ENABLE_MOD_COLLECTIONS (0)
#define MICROPY_ENABLE_MOD_MATH (0)
#define MICROPY_ENABLE_MOD_CMATH (0)
#define MICROPY_ENABLE_MOD_IO (0)
#define MICROPY_ENABLE_MOD_STRUCT (0)
#define MICROPY_ENABLE_MOD_SYS (0)
#define MICROPY_ENABLE_PROPERTY (0)
#define MICROPY_PY_COLLECTIONS (0)
#define MICROPY_PY_MATH (0)
#define MICROPY_PY_CMATH (0)
#define MICROPY_PY_IO (0)
#define MICROPY_PY_STRUCT (0)
#define MICROPY_PY_SYS (0)
#define MICROPY_PY_PROPERTY (0)
#define MICROPY_CPYTHON_COMPAT (0)
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_NONE)
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
......
......@@ -73,7 +73,7 @@ mp_import_stat_t find_file(const char *file_str, uint file_len, vstr_t *dest) {
// extract the list of paths
uint path_num = 0;
mp_obj_t *path_items;
#if MICROPY_ENABLE_MOD_SYS
#if MICROPY_PY_SYS
mp_obj_list_get(mp_sys_path, &path_num, &path_items);
#endif
......
......@@ -53,14 +53,14 @@ STATIC const mp_map_elem_t mp_builtin_object_table[] = {
#if MICROPY_ENABLE_FLOAT
{ MP_OBJ_NEW_QSTR(MP_QSTR_float), (mp_obj_t)&mp_type_float },
#endif
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
{ MP_OBJ_NEW_QSTR(MP_QSTR_frozenset), (mp_obj_t)&mp_type_frozenset },
#endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_int), (mp_obj_t)&mp_type_int },
{ MP_OBJ_NEW_QSTR(MP_QSTR_list), (mp_obj_t)&mp_type_list },
{ MP_OBJ_NEW_QSTR(MP_QSTR_map), (mp_obj_t)&mp_type_map },
{ MP_OBJ_NEW_QSTR(MP_QSTR_object), (mp_obj_t)&mp_type_object },
#if MICROPY_ENABLE_PROPERTY
#if MICROPY_PY_PROPERTY
{ MP_OBJ_NEW_QSTR(MP_QSTR_property), (mp_obj_t)&mp_type_property },
#endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_range), (mp_obj_t)&mp_type_range },
......@@ -159,26 +159,26 @@ STATIC const mp_map_elem_t mp_builtin_module_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_micropython), (mp_obj_t)&mp_module_micropython },
{ MP_OBJ_NEW_QSTR(MP_QSTR_array), (mp_obj_t)&mp_module_array },
#if MICROPY_ENABLE_MOD_IO
#if MICROPY_PY_IO
{ MP_OBJ_NEW_QSTR(MP_QSTR_io), (mp_obj_t)&mp_module_io },
#endif
#if MICROPY_ENABLE_MOD_COLLECTIONS
#if MICROPY_PY_COLLECTIONS
{ MP_OBJ_NEW_QSTR(MP_QSTR__collections), (mp_obj_t)&mp_module_collections },
#endif
#if MICROPY_ENABLE_MOD_STRUCT
#if MICROPY_PY_STRUCT
{ MP_OBJ_NEW_QSTR(MP_QSTR_struct), (mp_obj_t)&mp_module_struct },
#endif
#if MICROPY_ENABLE_FLOAT
{ MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&mp_module_math },
#if MICROPY_ENABLE_MOD_CMATH
#if MICROPY_PY_CMATH
{ MP_OBJ_NEW_QSTR(MP_QSTR_cmath), (mp_obj_t)&mp_module_cmath },
#endif
#endif
#if MICROPY_ENABLE_MOD_SYS
#if MICROPY_PY_SYS
{ MP_OBJ_NEW_QSTR(MP_QSTR_sys), (mp_obj_t)&mp_module_sys },
#endif
#if MICROPY_ENABLE_MOD_GC && MICROPY_ENABLE_GC
#if MICROPY_PY_GC && MICROPY_ENABLE_GC
{ MP_OBJ_NEW_QSTR(MP_QSTR_gc), (mp_obj_t)&mp_module_gc },
#endif
......
......@@ -32,7 +32,7 @@
#include "obj.h"
#include "builtin.h"
#if MICROPY_ENABLE_FLOAT && MICROPY_ENABLE_MOD_CMATH
#if MICROPY_ENABLE_FLOAT && MICROPY_PY_CMATH
// These are defined in modmath.c
extern const mp_obj_float_t mp_math_e_obj;
......@@ -154,4 +154,4 @@ const mp_obj_module_t mp_module_cmath = {
.globals = (mp_obj_dict_t*)&mp_module_cmath_globals,
};
#endif // MICROPY_ENABLE_FLOAT && MICROPY_ENABLE_MOD_CMATH
#endif // MICROPY_ENABLE_FLOAT && MICROPY_PY_CMATH
......@@ -30,7 +30,7 @@
#include "obj.h"
#include "builtin.h"
#if MICROPY_ENABLE_MOD_COLLECTIONS
#if MICROPY_PY_COLLECTIONS
STATIC const mp_map_elem_t mp_module_collections_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR__collections) },
......@@ -54,4 +54,4 @@ const mp_obj_module_t mp_module_collections = {
.globals = (mp_obj_dict_t*)&mp_module_collections_globals,
};
#endif // MICROPY_ENABLE_MOD_COLLECTIONS
#endif // MICROPY_PY_COLLECTIONS
......@@ -35,7 +35,7 @@
#include "objstr.h"
#include "gc.h"
#if MICROPY_ENABLE_MOD_GC && MICROPY_ENABLE_GC
#if MICROPY_PY_GC && MICROPY_ENABLE_GC
STATIC mp_obj_t py_gc_collect(void) {
gc_collect();
......
......@@ -30,7 +30,7 @@
#include "obj.h"
#include "builtin.h"
#if MICROPY_ENABLE_MOD_IO
#if MICROPY_PY_IO
extern const mp_obj_type_t mp_type_fileio;
extern const mp_obj_type_t mp_type_textio;
......@@ -40,14 +40,14 @@ STATIC const mp_map_elem_t mp_module_io_globals_table[] = {
// Note: mp_builtin_open_obj should be defined by port, it's not
// part of the core.
{ MP_OBJ_NEW_QSTR(MP_QSTR_open), (mp_obj_t)&mp_builtin_open_obj },
#if MICROPY_MOD_IO_FILEIO
#if MICROPY_PY_IO_FILEIO
{ MP_OBJ_NEW_QSTR(MP_QSTR_FileIO), (mp_obj_t)&mp_type_fileio },
#endif
#if MICROPY_CPYTHON_COMPAT
{ MP_OBJ_NEW_QSTR(MP_QSTR_TextIOWrapper), (mp_obj_t)&mp_type_textio },
#endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_StringIO), (mp_obj_t)&mp_type_stringio },
#if MICROPY_IO_BYTESIO
#if MICROPY_PY_IO_BYTESIO
{ MP_OBJ_NEW_QSTR(MP_QSTR_BytesIO), (mp_obj_t)&mp_type_bytesio },
#endif
};
......
......@@ -32,7 +32,7 @@
#include "obj.h"
#include "builtin.h"
#if MICROPY_ENABLE_FLOAT && MICROPY_ENABLE_MOD_MATH
#if MICROPY_ENABLE_FLOAT && MICROPY_PY_MATH
//TODO: Change macros to check for overflow and raise OverflowError or RangeError
#define MATH_FUN_1(py_name, c_name) \
......@@ -184,4 +184,4 @@ const mp_obj_module_t mp_module_math = {
.globals = (mp_obj_dict_t*)&mp_module_math_globals,
};
#endif // MICROPY_ENABLE_FLOAT && MICROPY_ENABLE_MOD_MATH
#endif // MICROPY_ENABLE_FLOAT && MICROPY_PY_MATH
......@@ -37,7 +37,7 @@
#include "binary.h"
#include "parsenum.h"
#if MICROPY_ENABLE_MOD_STRUCT
#if MICROPY_PY_STRUCT
STATIC char get_fmt_type(const char **fmt) {
char t = **fmt;
......
......@@ -34,7 +34,7 @@
#include "objtuple.h"
#include "objstr.h"
#if MICROPY_ENABLE_MOD_SYS
#if MICROPY_PY_SYS
// These should be implemented by ports, specific types don't matter,
// only addresses.
......@@ -65,11 +65,11 @@ STATIC const mp_map_elem_t mp_module_sys_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_byteorder), MP_OBJ_NEW_QSTR(MP_QSTR_big) },
#endif
#if MICROPY_MOD_SYS_EXIT
#if MICROPY_PY_SYS_EXIT
{ MP_OBJ_NEW_QSTR(MP_QSTR_exit), (mp_obj_t)&mp_sys_exit_obj },
#endif
#if MICROPY_MOD_SYS_STDFILES
#if MICROPY_PY_SYS_STDFILES
{ MP_OBJ_NEW_QSTR(MP_QSTR_stdin), (mp_obj_t)&mp_sys_stdin_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_stdout), (mp_obj_t)&mp_sys_stdout_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_stderr), (mp_obj_t)&mp_sys_stderr_obj },
......
......@@ -131,7 +131,16 @@
#endif
/*****************************************************************************/
/* Fine control over Python features */
/* Optimisations */
// Whether to use computed gotos in the VM, or a switch
// Computed gotos are roughly 10% faster, and increase VM code size by a little
#ifndef MICROPY_OPT_COMPUTED_GOTO
#define MICROPY_OPT_COMPUTED_GOTO (0)
#endif
/*****************************************************************************/
/* Python internal features */
// Whether to include the garbage collector
#ifndef MICROPY_ENABLE_GC
......@@ -209,92 +218,91 @@ typedef double mp_float_t;
#define MICROPY_ENABLE_FLOAT (0)
#endif
// Whether to provide "collections" module
#ifndef MICROPY_ENABLE_MOD_COLLECTIONS
#define MICROPY_ENABLE_MOD_COLLECTIONS (1)
// Enable features which improve CPython compatibility
// but may lead to more code size/memory usage.
// TODO: Originally intended as generic category to not
// add bunch of once-off options. May need refactoring later
#ifndef MICROPY_CPYTHON_COMPAT
#define MICROPY_CPYTHON_COMPAT (1)
#endif
// Whether to provide "math" module
#ifndef MICROPY_ENABLE_MOD_MATH
#define MICROPY_ENABLE_MOD_MATH (1)
// Whether POSIX-semantics non-blocking streams are supported
#ifndef MICROPY_STREAMS_NON_BLOCK
#define MICROPY_STREAMS_NON_BLOCK (0)
#endif
// Whether to provide "cmath" module
#ifndef MICROPY_ENABLE_MOD_CMATH
#define MICROPY_ENABLE_MOD_CMATH (0)
#endif
/*****************************************************************************/
/* Fine control over Python builtins, classes, modules, etc */
// Whether to provide "gc" module
#ifndef MICROPY_ENABLE_MOD_GC
#define MICROPY_ENABLE_MOD_GC (1)
// Whether to support slice object and correspondingly
// slice subscript operators
#ifndef MICROPY_PY_SLICE
#define MICROPY_PY_SLICE (1)
#endif
// Whether to provide "io" module
#ifndef MICROPY_ENABLE_MOD_IO
#define MICROPY_ENABLE_MOD_IO (1)
// Whether to support frozenset object
#ifndef MICROPY_PY_FROZENSET
#define MICROPY_PY_FROZENSET (0)
#endif
#ifndef MICROPY_MOD_IO_FILEIO
#define MICROPY_MOD_IO_FILEIO (0)
// Whether to support the property object
#ifndef MICROPY_PY_PROPERTY
#define MICROPY_PY_PROPERTY (1)
#endif
#ifndef MICROPY_IO_BYTESIO
#define MICROPY_IO_BYTESIO (1)
// Whether to provide "collections" module
#ifndef MICROPY_PY_COLLECTIONS
#define MICROPY_PY_COLLECTIONS (1)
#endif
// Whether to provide "struct" module
#ifndef MICROPY_ENABLE_MOD_STRUCT
#define MICROPY_ENABLE_MOD_STRUCT (1)
// Whether to provide "math" module
#ifndef MICROPY_PY_MATH
#define MICROPY_PY_MATH (1)
#endif
// Whether to provide "sys" module
#ifndef MICROPY_ENABLE_MOD_SYS
#define MICROPY_ENABLE_MOD_SYS (1)
// Whether to provide "cmath" module
#ifndef MICROPY_PY_CMATH
#define MICROPY_PY_CMATH (0)
#endif
// sys.exit() availability
#ifndef MICROPY_MOD_SYS_EXIT
#define MICROPY_MOD_SYS_EXIT (0)
// Whether to provide "gc" module
#ifndef MICROPY_PY_GC
#define MICROPY_PY_GC (1)
#endif
// sys.{stdin,stdout,stderr} availability
#ifndef MICROPY_MOD_SYS_STDFILES
#define MICROPY_MOD_SYS_STDFILES (0)
// Whether to provide "io" module
#ifndef MICROPY_PY_IO
#define MICROPY_PY_IO (1)
#endif
// Whether to support slice object and correspondingly
// slice subscript operators
#ifndef MICROPY_ENABLE_SLICE
#define MICROPY_ENABLE_SLICE (1)
// Whether to provide "io.FileIO" class
#ifndef MICROPY_PY_IO_FILEIO
#define MICROPY_PY_IO_FILEIO (0)
#endif
// Whether to support frozenset object
#ifndef MICROPY_ENABLE_FROZENSET
#define MICROPY_ENABLE_FROZENSET (0)
// Whether to provide "io.BytesIO" class
#ifndef MICROPY_PY_IO_BYTESIO
#define MICROPY_PY_IO_BYTESIO (1)
#endif
// Whether to support the property object
#ifndef MICROPY_ENABLE_PROPERTY
#define MICROPY_ENABLE_PROPERTY (1)
// Whether to provide "struct" module
#ifndef MICROPY_PY_STRUCT
#define MICROPY_PY_STRUCT (1)
#endif
// Enable features which improve CPython compatibility
// but may lead to more code size/memory usage.
// TODO: Originally intended as generic category to not
// add bunch of once-off options. May need refactoring later
#ifndef MICROPY_CPYTHON_COMPAT
#define MICROPY_CPYTHON_COMPAT (1)
// Whether to provide "sys" module
#ifndef MICROPY_PY_SYS
#define MICROPY_PY_SYS (1)
#endif
// Whether POSIX-semantics non-blocking streams are supported
#ifndef MICROPY_STREAMS_NON_BLOCK
#define MICROPY_STREAMS_NON_BLOCK (0)
// Whether to provide "sys.exit" function
#ifndef MICROPY_PY_SYS_EXIT
#define MICROPY_PY_SYS_EXIT (0)
#endif
// Whether to use computed gotos in the VM, or a switch
// Computed gotos are roughly 10% faster, and increase VM code size by a little
#ifndef MICROPY_OPT_COMPUTED_GOTO
#define MICROPY_OPT_COMPUTED_GOTO (0)
// Whether to provide sys.{stdin,stdout,stderr} objects
#ifndef MICROPY_PY_SYS_STDFILES
#define MICROPY_PY_SYS_STDFILES (0)
#endif
/*****************************************************************************/
......
......@@ -150,7 +150,7 @@ STATIC mp_obj_t list_binary_op(int op, mp_obj_t lhs, mp_obj_t rhs) {
STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
if (value == MP_OBJ_NULL) {
// delete
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
mp_obj_list_t *self = self_in;
machine_uint_t start, stop;
......@@ -174,7 +174,7 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
} else if (value == MP_OBJ_SENTINEL) {
// load
mp_obj_list_t *self = self_in;
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
machine_uint_t start, stop;
if (!mp_seq_get_fast_slice_indexes(self->len, index, &start, &stop)) {
......@@ -188,7 +188,7 @@ STATIC mp_obj_t list_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
uint index_val = mp_get_index(self->base.type, self->len, index, false);
return self->items[index_val];
} else {
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
mp_obj_list_t *self = self_in;
assert(MP_OBJ_IS_TYPE(value, &mp_type_list));
......
......@@ -34,7 +34,7 @@
#include "obj.h"
#include "objtuple.h"
#if MICROPY_ENABLE_MOD_COLLECTIONS
#if MICROPY_PY_COLLECTIONS
typedef struct _mp_obj_namedtuple_type_t {
mp_obj_type_t base;
......@@ -174,4 +174,4 @@ STATIC mp_obj_t new_namedtuple_type(mp_obj_t name_in, mp_obj_t fields_in) {
}
MP_DEFINE_CONST_FUN_OBJ_2(mp_namedtuple_obj, new_namedtuple_type);
#endif // MICROPY_ENABLE_MOD_COLLECTIONS
#endif // MICROPY_PY_COLLECTIONS
......@@ -34,7 +34,7 @@
#include "obj.h"
#include "runtime.h"
#if MICROPY_ENABLE_PROPERTY
#if MICROPY_PY_PROPERTY
typedef struct _mp_obj_property_t {
mp_obj_base_t base;
......@@ -115,4 +115,4 @@ const mp_obj_t *mp_obj_property_get(mp_obj_t self_in) {
return self->proxy;
}
#endif // MICROPY_ENABLE_PROPERTY
#endif // MICROPY_PY_PROPERTY
......@@ -52,13 +52,13 @@ STATIC mp_obj_t set_it_iternext(mp_obj_t self_in);
STATIC bool is_set_or_frozenset(mp_obj_t o) {
return MP_OBJ_IS_TYPE(o, &mp_type_set)
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
|| MP_OBJ_IS_TYPE(o, &mp_type_frozenset)
#endif
;
}
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
STATIC void check_set_or_frozenset(mp_obj_t o) {
if (!is_set_or_frozenset(o)) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "'set' object required"));
......@@ -72,7 +72,7 @@ STATIC void check_set(mp_obj_t o) {
if (!MP_OBJ_IS_TYPE(o, &mp_type_set)) {
// Emulate CPython behavior
// AttributeError: 'frozenset' object has no attribute 'add'
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
if (MP_OBJ_IS_TYPE(o, &mp_type_frozenset)) {
nlr_raise(mp_obj_new_exception_msg(&mp_type_AttributeError, "'frozenset' has no such attribute"));
}
......@@ -83,11 +83,11 @@ STATIC void check_set(mp_obj_t o) {
STATIC void set_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
mp_obj_set_t *self = self_in;
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
bool is_frozen = MP_OBJ_IS_TYPE(self_in, &mp_type_frozenset);
#endif
if (self->set.used == 0) {
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
if (is_frozen) {
print(env, "frozen");
}
......@@ -96,7 +96,7 @@ STATIC void set_print(void (*print)(void *env, const char *fmt, ...), void *env,
return;
}
bool first = true;
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
if (is_frozen) {
print(env, "frozenset(");
}
......@@ -112,7 +112,7 @@ STATIC void set_print(void (*print)(void *env, const char *fmt, ...), void *env,
}
}
print(env, "}");
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
if (is_frozen) {
print(env, ")");
}
......@@ -556,7 +556,7 @@ const mp_obj_type_t mp_type_set = {
.locals_dict = (mp_obj_t)&set_locals_dict,
};
#if MICROPY_ENABLE_FROZENSET
#if MICROPY_PY_FROZENSET
const mp_obj_type_t mp_type_frozenset = {
{ &mp_type_type },
.name = MP_QSTR_frozenset,
......
......@@ -56,7 +56,7 @@ const mp_obj_ellipsis_t mp_const_ellipsis_obj = {{&mp_type_ellipsis}};
/******************************************************************************/
/* slice object */
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
// TODO: This implements only variant of slice with 2 integer args only.
// CPython supports 3rd arg (step), plus args can be arbitrary Python objects.
......
......@@ -349,7 +349,7 @@ STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
GET_STR_DATA_LEN(self_in, self_data, self_len);
if (value == MP_OBJ_SENTINEL) {
// load
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
machine_uint_t start, stop;
if (!mp_seq_get_fast_slice_indexes(self_len, index, &start, &stop)) {
......
......@@ -37,7 +37,7 @@
#include "stream.h"
#include "objstr.h"
#if MICROPY_ENABLE_MOD_IO
#if MICROPY_PY_IO
typedef struct _mp_obj_stringio_t {
mp_obj_base_t base;
......@@ -156,7 +156,7 @@ const mp_obj_type_t mp_type_stringio = {
.locals_dict = (mp_obj_t)&stringio_locals_dict,
};
#if MICROPY_IO_BYTESIO
#if MICROPY_PY_IO_BYTESIO
const mp_obj_type_t mp_type_bytesio = {
{ &mp_type_type },
.name = MP_QSTR_BytesIO,
......
......@@ -161,7 +161,7 @@ mp_obj_t mp_obj_tuple_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
if (value == MP_OBJ_SENTINEL) {
// load
mp_obj_tuple_t *self = self_in;
#if MICROPY_ENABLE_SLICE
#if MICROPY_PY_SLICE
if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
machine_uint_t start, stop;
if (!mp_seq_get_fast_slice_indexes(self->len, index, &start, &stop)) {
......
......@@ -413,7 +413,7 @@ STATIC void instance_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
mp_obj_class_lookup(self, self->base.type, attr, 0, dest);
mp_obj_t member = dest[0];
if (member != MP_OBJ_NULL) {
#if MICROPY_ENABLE_PROPERTY
#if MICROPY_PY_PROPERTY
if (MP_OBJ_IS_TYPE(member, &mp_type_property)) {
// object member is a property
// delegate the store to the property
......@@ -447,7 +447,7 @@ STATIC void instance_load_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
STATIC bool instance_store_attr(mp_obj_t self_in, qstr attr, mp_obj_t value) {
mp_obj_instance_t *self = self_in;
#if MICROPY_ENABLE_PROPERTY
#if MICROPY_PY_PROPERTY
// for property, we need to do a lookup first in the class dict
// this makes all stores slow... how to fix?
mp_obj_t member[2] = {MP_OBJ_NULL};
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment