@@ -606,13 +606,17 @@ STATIC mp_obj_t str_rindex(uint n_args, const mp_obj_t *args) {
606606}
607607
608608// TODO: (Much) more variety in args
609- STATIC mp_obj_t str_startswith (mp_obj_t self_in , mp_obj_t arg ) {
610- GET_STR_DATA_LEN (self_in , str , str_len );
611- GET_STR_DATA_LEN (arg , prefix , prefix_len );
612- if (prefix_len > str_len ) {
609+ STATIC mp_obj_t str_startswith (uint n_args , const mp_obj_t * args ) {
610+ GET_STR_DATA_LEN (args [0 ], str , str_len );
611+ GET_STR_DATA_LEN (args [1 ], prefix , prefix_len );
612+ uint index_val = 0 ;
613+ if (n_args > 2 ) {
614+ index_val = mp_get_index (& mp_type_str , str_len , args [2 ], true);
615+ }
616+ if (prefix_len + index_val > str_len ) {
613617 return mp_const_false ;
614618 }
615- return MP_BOOL (memcmp (str , prefix , prefix_len ) == 0 );
619+ return MP_BOOL (memcmp (str + index_val , prefix , prefix_len ) == 0 );
616620}
617621
618622enum { LSTRIP , RSTRIP , STRIP };
@@ -1536,7 +1540,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(str_rindex_obj, 2, 4, str_rindex);
15361540STATIC MP_DEFINE_CONST_FUN_OBJ_2 (str_join_obj , str_join );
15371541STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_split_obj , 1 , 3 , str_split );
15381542STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_rsplit_obj , 1 , 3 , str_rsplit );
1539- STATIC MP_DEFINE_CONST_FUN_OBJ_2 (str_startswith_obj , str_startswith );
1543+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_startswith_obj , 2 , 3 , str_startswith );
15401544STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_strip_obj , 1 , 2 , str_strip );
15411545STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_lstrip_obj , 1 , 2 , str_lstrip );
15421546STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (str_rstrip_obj , 1 , 2 , str_rstrip );
0 commit comments