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
e45c1dbd
Commit
e45c1dbd
authored
Jul 23, 2015
by
Damien George
Browse files
py: Allow viper functions to take up to 4 arguments.
Addresses issue #1380.
parent
7693ef3b
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/objfun.c
View file @
e45c1dbd
...
...
@@ -397,6 +397,7 @@ typedef mp_uint_t (*viper_fun_0_t)(void);
typedef
mp_uint_t
(
*
viper_fun_1_t
)(
mp_uint_t
);
typedef
mp_uint_t
(
*
viper_fun_2_t
)(
mp_uint_t
,
mp_uint_t
);
typedef
mp_uint_t
(
*
viper_fun_3_t
)(
mp_uint_t
,
mp_uint_t
,
mp_uint_t
);
typedef
mp_uint_t
(
*
viper_fun_4_t
)(
mp_uint_t
,
mp_uint_t
,
mp_uint_t
,
mp_uint_t
);
STATIC
mp_obj_t
fun_viper_call
(
mp_obj_t
self_in
,
mp_uint_t
n_args
,
mp_uint_t
n_kw
,
const
mp_obj_t
*
args
)
{
mp_obj_fun_viper_t
*
self
=
self_in
;
...
...
@@ -414,7 +415,15 @@ STATIC mp_obj_t fun_viper_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_k
ret
=
((
viper_fun_2_t
)
fun
)(
mp_convert_obj_to_native
(
args
[
0
],
self
->
type_sig
>>
2
),
mp_convert_obj_to_native
(
args
[
1
],
self
->
type_sig
>>
4
));
}
else
if
(
n_args
==
3
)
{
ret
=
((
viper_fun_3_t
)
fun
)(
mp_convert_obj_to_native
(
args
[
0
],
self
->
type_sig
>>
2
),
mp_convert_obj_to_native
(
args
[
1
],
self
->
type_sig
>>
4
),
mp_convert_obj_to_native
(
args
[
2
],
self
->
type_sig
>>
6
));
}
else
if
(
n_args
==
4
)
{
ret
=
((
viper_fun_4_t
)
fun
)(
mp_convert_obj_to_native
(
args
[
0
],
self
->
type_sig
>>
2
),
mp_convert_obj_to_native
(
args
[
1
],
self
->
type_sig
>>
4
),
mp_convert_obj_to_native
(
args
[
2
],
self
->
type_sig
>>
6
),
mp_convert_obj_to_native
(
args
[
3
],
self
->
type_sig
>>
8
)
);
}
else
{
// TODO 5 or more arguments not supported for viper call
assert
(
0
);
ret
=
0
;
}
...
...
tests/micropython/viper_args.py
0 → 100644
View file @
e45c1dbd
# test calling viper functions with different number of args
@
micropython
.
viper
def
f0
():
print
(
0
)
f0
()
@
micropython
.
viper
def
f1
(
x1
:
int
):
print
(
x1
)
f1
(
1
)
@
micropython
.
viper
def
f2
(
x1
:
int
,
x2
:
int
):
print
(
x1
,
x2
)
f2
(
1
,
2
)
@
micropython
.
viper
def
f3
(
x1
:
int
,
x2
:
int
,
x3
:
int
):
print
(
x1
,
x2
,
x3
)
f3
(
1
,
2
,
3
)
@
micropython
.
viper
def
f4
(
x1
:
int
,
x2
:
int
,
x3
:
int
,
x4
:
int
):
print
(
x1
,
x2
,
x3
,
x4
)
f4
(
1
,
2
,
3
,
4
)
# only up to 4 arguments currently supported
tests/micropython/viper_args.py.exp
0 → 100644
View file @
e45c1dbd
0
1
1 2
1 2 3
1 2 3 4
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