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
12a5e17a
Commit
12a5e17a
authored
Apr 01, 2015
by
Damien George
Browse files
py: Add finer configuration of static funcs when not in stackless mode.
Also rename call_args_t to mp_call_args_t.
parent
dbc0191d
Changes
4
Hide whitespace changes
Inline
Side-by-side
py/objfun.c
View file @
12a5e17a
...
...
@@ -142,6 +142,7 @@ STATIC void dump_args(const mp_obj_t *a, mp_uint_t sz) {
// Set this to enable a simple stack overflow check.
#define VM_DETECT_STACK_OVERFLOW (0)
#if MICROPY_STACKLESS
mp_code_state
*
mp_obj_fun_bc_prepare_codestate
(
mp_obj_t
self_in
,
mp_uint_t
n_args
,
mp_uint_t
n_kw
,
const
mp_obj_t
*
args
)
{
MP_STACK_CHECK
();
mp_obj_fun_bc_t
*
self
=
self_in
;
...
...
@@ -176,6 +177,7 @@ mp_code_state *mp_obj_fun_bc_prepare_codestate(mp_obj_t self_in, mp_uint_t n_arg
return
code_state
;
}
#endif
STATIC
mp_obj_t
fun_bc_call
(
mp_obj_t
self_in
,
mp_uint_t
n_args
,
mp_uint_t
n_kw
,
const
mp_obj_t
*
args
)
{
MP_STACK_CHECK
();
...
...
py/runtime.c
View file @
12a5e17a
...
...
@@ -577,7 +577,11 @@ mp_obj_t mp_call_method_n_kw(mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *a
return
mp_call_function_n_kw
(
args
[
0
],
n_args
+
adjust
,
n_kw
,
args
+
2
-
adjust
);
}
void
mp_call_prepare_args_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
,
call_args_t
*
out_args
)
{
// This function only needs to be exposed externally when in stackless mode.
#if !MICROPY_STACKLESS
STATIC
#endif
void
mp_call_prepare_args_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
,
mp_call_args_t
*
out_args
)
{
mp_obj_t
fun
=
*
args
++
;
mp_obj_t
self
=
MP_OBJ_NULL
;
if
(
have_self
)
{
...
...
@@ -723,7 +727,7 @@ void mp_call_prepare_args_n_kw_var(bool have_self, mp_uint_t n_args_n_kw, const
}
mp_obj_t
mp_call_method_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
)
{
call_args_t
out_args
;
mp_
call_args_t
out_args
;
mp_call_prepare_args_n_kw_var
(
have_self
,
n_args_n_kw
,
args
,
&
out_args
);
mp_obj_t
res
=
mp_call_function_n_kw
(
out_args
.
fun
,
out_args
.
n_args
,
out_args
.
n_kw
,
out_args
.
args
);
...
...
py/runtime.h
View file @
12a5e17a
...
...
@@ -97,16 +97,19 @@ mp_obj_t mp_call_function_n_kw(mp_obj_t fun, mp_uint_t n_args, mp_uint_t n_kw, c
mp_obj_t
mp_call_method_n_kw
(
mp_uint_t
n_args
,
mp_uint_t
n_kw
,
const
mp_obj_t
*
args
);
mp_obj_t
mp_call_method_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
);
typedef
struct
_call_args_t
{
typedef
struct
_mp
_call_args_t
{
mp_obj_t
fun
;
mp_uint_t
n_args
,
n_kw
,
n_alloc
;
mp_obj_t
*
args
;
}
call_args_t
;
}
mp_
call_args_t
;
#if MICROPY_STACKLESS
// Takes arguments which are the most general mix of Python arg types, and
// prepares argument array suitable for passing to ->call() method of a
// function object (and mp_call_function_n_kw()).
void
mp_call_prepare_args_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
,
call_args_t
*
out_args
);
// (Only needed in stackless mode.)
void
mp_call_prepare_args_n_kw_var
(
bool
have_self
,
mp_uint_t
n_args_n_kw
,
const
mp_obj_t
*
args
,
mp_call_args_t
*
out_args
);
#endif
void
mp_unpack_sequence
(
mp_obj_t
seq
,
mp_uint_t
num
,
mp_obj_t
*
items
);
void
mp_unpack_ex
(
mp_obj_t
seq
,
mp_uint_t
num
,
mp_obj_t
*
items
);
...
...
py/vm.c
View file @
12a5e17a
...
...
@@ -906,7 +906,7 @@ unwind_jump:;
code_state
->
sp
=
sp
;
code_state
->
exc_sp
=
MP_TAGPTR_MAKE
(
exc_sp
,
currently_in_except_block
);
call_args_t
out_args
;
mp_
call_args_t
out_args
;
mp_call_prepare_args_n_kw_var
(
false
,
unum
,
sp
,
&
out_args
);
mp_code_state
*
new_state
=
mp_obj_fun_bc_prepare_codestate
(
out_args
.
fun
,
...
...
@@ -977,7 +977,7 @@ unwind_jump:;
code_state
->
sp
=
sp
;
code_state
->
exc_sp
=
MP_TAGPTR_MAKE
(
exc_sp
,
currently_in_except_block
);
call_args_t
out_args
;
mp_
call_args_t
out_args
;
mp_call_prepare_args_n_kw_var
(
true
,
unum
,
sp
,
&
out_args
);
mp_code_state
*
new_state
=
mp_obj_fun_bc_prepare_codestate
(
out_args
.
fun
,
...
...
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