Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
be020c27
Commit
be020c27
authored
Mar 21, 2014
by
Paul Sokolovsky
Browse files
py: Make 'str' be a proper type, support standard constructor args.
parent
5972b4c0
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/builtin.c
View file @
be020c27
...
...
@@ -375,16 +375,6 @@ STATIC mp_obj_t mp_builtin_sorted(uint n_args, const mp_obj_t *args, mp_map_t *k
MP_DEFINE_CONST_FUN_OBJ_KW
(
mp_builtin_sorted_obj
,
1
,
mp_builtin_sorted
);
STATIC
mp_obj_t
mp_builtin_str
(
mp_obj_t
o_in
)
{
vstr_t
*
vstr
=
vstr_new
();
mp_obj_print_helper
((
void
(
*
)(
void
*
,
const
char
*
,
...))
vstr_printf
,
vstr
,
o_in
,
PRINT_STR
);
mp_obj_t
s
=
mp_obj_new_str
((
byte
*
)
vstr
->
buf
,
vstr
->
len
,
false
);
vstr_free
(
vstr
);
return
s
;
}
MP_DEFINE_CONST_FUN_OBJ_1
(
mp_builtin_str_obj
,
mp_builtin_str
);
// TODO: This should be type, this is just quick CPython compat hack
STATIC
mp_obj_t
mp_builtin_bytes
(
uint
n_args
,
const
mp_obj_t
*
args
)
{
if
(
!
MP_OBJ_IS_QSTR
(
args
[
0
])
&&
!
MP_OBJ_IS_TYPE
(
args
[
0
],
&
str_type
))
{
...
...
py/objstr.c
View file @
be020c27
...
...
@@ -28,6 +28,7 @@ typedef struct _mp_obj_str_t {
STATIC
mp_obj_t
mp_obj_new_str_iterator
(
mp_obj_t
str
);
STATIC
mp_obj_t
mp_obj_new_bytes_iterator
(
mp_obj_t
str
);
STATIC
mp_obj_t
str_new
(
const
mp_obj_type_t
*
type
,
const
byte
*
data
,
uint
len
);
/******************************************************************************/
/* str */
...
...
@@ -78,6 +79,40 @@ STATIC void str_print(void (*print)(void *env, const char *fmt, ...), void *env,
}
}
STATIC
mp_obj_t
str_make_new
(
mp_obj_t
type_in
,
uint
n_args
,
uint
n_kw
,
const
mp_obj_t
*
args
)
{
switch
(
n_args
)
{
case
0
:
return
MP_OBJ_NEW_QSTR
(
MP_QSTR_
);
case
1
:
{
vstr_t
*
vstr
=
vstr_new
();
mp_obj_print_helper
((
void
(
*
)(
void
*
,
const
char
*
,
...))
vstr_printf
,
vstr
,
args
[
0
],
PRINT_STR
);
mp_obj_t
s
=
mp_obj_new_str
((
byte
*
)
vstr
->
buf
,
vstr
->
len
,
false
);
vstr_free
(
vstr
);
return
s
;
}
case
2
:
case
3
:
{
// TODO: validate 2nd/3rd args
if
(
!
MP_OBJ_IS_TYPE
(
args
[
0
],
&
bytes_type
))
{
nlr_jump
(
mp_obj_new_exception_msg
(
&
mp_type_TypeError
,
"bytes expected"
));
}
GET_STR_DATA_LEN
(
args
[
0
],
str_data
,
str_len
);
GET_STR_HASH
(
args
[
0
],
str_hash
);
mp_obj_str_t
*
o
=
str_new
(
&
str_type
,
NULL
,
str_len
);
o
->
data
=
str_data
;
o
->
hash
=
str_hash
;
return
o
;
}
default:
nlr_jump
(
mp_obj_new_exception_msg
(
&
mp_type_TypeError
,
"str takes at most 3 arguments"
));
}
}
// like strstr but with specified length and allows \0 bytes
// TODO replace with something more efficient/standard
STATIC
const
byte
*
find_subbytes
(
const
byte
*
haystack
,
uint
hlen
,
const
byte
*
needle
,
uint
nlen
)
{
...
...
@@ -619,6 +654,7 @@ const mp_obj_type_t str_type = {
{
&
mp_type_type
},
.
name
=
MP_QSTR_str
,
.
print
=
str_print
,
.
make_new
=
str_make_new
,
.
binary_op
=
str_binary_op
,
.
getiter
=
mp_obj_new_str_iterator
,
.
methods
=
str_type_methods
,
...
...
py/runtime.c
View file @
be020c27
...
...
@@ -102,6 +102,7 @@ STATIC const mp_builtin_elem_t builtin_table[] = {
{
MP_QSTR_list
,
(
mp_obj_t
)
&
list_type
},
{
MP_QSTR_map
,
(
mp_obj_t
)
&
map_type
},
{
MP_QSTR_set
,
(
mp_obj_t
)
&
set_type
},
{
MP_QSTR_str
,
(
mp_obj_t
)
&
str_type
},
{
MP_QSTR_super
,
(
mp_obj_t
)
&
super_type
},
{
MP_QSTR_tuple
,
(
mp_obj_t
)
&
tuple_type
},
{
MP_QSTR_type
,
(
mp_obj_t
)
&
mp_type_type
},
...
...
@@ -137,7 +138,6 @@ STATIC const mp_builtin_elem_t builtin_table[] = {
{
MP_QSTR_repr
,
(
mp_obj_t
)
&
mp_builtin_repr_obj
},
{
MP_QSTR_sorted
,
(
mp_obj_t
)
&
mp_builtin_sorted_obj
},
{
MP_QSTR_sum
,
(
mp_obj_t
)
&
mp_builtin_sum_obj
},
{
MP_QSTR_str
,
(
mp_obj_t
)
&
mp_builtin_str_obj
},
{
MP_QSTR_bytearray
,
(
mp_obj_t
)
&
mp_builtin_bytearray_obj
},
// built-in exceptions
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment