Merge branch 'master' of github.com:micropython/micropython

This commit is contained in:
Damien George 2014-04-20 01:26:25 +01:00
commit 53775026e7
4 changed files with 30 additions and 10 deletions

View File

@ -139,14 +139,27 @@ STATIC mp_obj_t array_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value
return MP_OBJ_NOT_SUPPORTED; return MP_OBJ_NOT_SUPPORTED;
} else { } else {
mp_obj_array_t *o = self_in; mp_obj_array_t *o = self_in;
uint index = mp_get_index(o->base.type, o->len, index_in, false); if (MP_OBJ_IS_TYPE(index_in, &mp_type_slice)) {
if (value == MP_OBJ_SENTINEL) { machine_uint_t start, stop;
// load if (!m_seq_get_fast_slice_indexes(o->len, index_in, &start, &stop)) {
return mp_binary_get_val_array(o->typecode, o->items, index); assert(0);
}
mp_obj_array_t *res = array_new(o->typecode, stop - start);
int sz = mp_binary_get_size('@', o->typecode, NULL);
assert(sz > 0);
byte *p = o->items;
memcpy(res->items, p + start * sz, (stop - start) * sz);
return res;
} else { } else {
// store uint index = mp_get_index(o->base.type, o->len, index_in, false);
mp_binary_set_val_array(o->typecode, o->items, index, value); if (value == MP_OBJ_SENTINEL) {
return mp_const_none; // load
return mp_binary_get_val_array(o->typecode, o->items, index);
} else {
// store
mp_binary_set_val_array(o->typecode, o->items, index, value);
return mp_const_none;
}
} }
} }
} }

View File

@ -13,3 +13,7 @@ s = 0
for i in a: for i in a:
s += i s += i
print(s) print(s)
print(a[1:])
print(a[:-1])
print(a[2:3])

View File

@ -1,7 +1,10 @@
class Base: class Base:
def __init__(self):
self.a = 1
def meth(self): def meth(self):
print("in Base meth") print("in Base meth", self.a)
class Sub(Base): class Sub(Base):

View File

@ -141,7 +141,7 @@ STATIC mp_obj_t ffimod_func(uint n_args, const mp_obj_t *args) {
mp_obj_t iterable = mp_getiter(args[3]); mp_obj_t iterable = mp_getiter(args[3]);
mp_obj_t item; mp_obj_t item;
int i = 0; int i = 0;
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) { while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
o->params[i++] = get_ffi_type(item); o->params[i++] = get_ffi_type(item);
} }
@ -178,7 +178,7 @@ STATIC mp_obj_t mod_ffi_callback(mp_obj_t rettype_in, mp_obj_t func_in, mp_obj_t
mp_obj_t iterable = mp_getiter(paramtypes_in); mp_obj_t iterable = mp_getiter(paramtypes_in);
mp_obj_t item; mp_obj_t item;
int i = 0; int i = 0;
while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) { while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
o->params[i++] = get_ffi_type(item); o->params[i++] = get_ffi_type(item);
} }