@@ -53,6 +53,7 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
53
53
let f = parse_macro_input ! ( input as ItemFn ) ;
54
54
55
55
// check the function arguments
56
+ #[ cfg( not( feature = "u-boot" ) ) ]
56
57
if f. sig . inputs . len ( ) > 3 {
57
58
return parse:: Error :: new (
58
59
f. sig . inputs . last ( ) . unwrap ( ) . span ( ) ,
@@ -61,6 +62,17 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
61
62
. to_compile_error ( )
62
63
. into ( ) ;
63
64
}
65
+ #[ cfg( feature = "u-boot" ) ]
66
+ if f. sig . inputs . len ( ) != 2 {
67
+ return parse:: Error :: new (
68
+ f. sig . inputs . last ( ) . unwrap ( ) . span ( ) ,
69
+ "`#[entry]` function must have exactly two arguments" ,
70
+ )
71
+ . to_compile_error ( )
72
+ . into ( ) ;
73
+ }
74
+
75
+ #[ cfg( not( feature = "u-boot" ) ) ]
64
76
for arg in & f. sig . inputs {
65
77
match arg {
66
78
FnArg :: Receiver ( _) => {
@@ -77,6 +89,40 @@ pub fn entry(args: TokenStream, input: TokenStream) -> TokenStream {
77
89
}
78
90
}
79
91
}
92
+ #[ cfg( feature = "u-boot" ) ]
93
+ {
94
+ // We have checked that there are two arguments above.
95
+ let ( a1, a2) = ( & f. sig . inputs [ 0 ] , & f. sig . inputs [ 1 ] ) ;
96
+
97
+ match a1 {
98
+ FnArg :: Receiver ( _) => {
99
+ return parse:: Error :: new ( a1. span ( ) , "invalid argument" )
100
+ . to_compile_error ( )
101
+ . into ( ) ;
102
+ }
103
+ FnArg :: Typed ( t) => {
104
+ if !is_simple_type ( & t. ty , "c_int" ) {
105
+ return parse:: Error :: new ( t. ty . span ( ) , "argument type must be c_int" )
106
+ . to_compile_error ( )
107
+ . into ( ) ;
108
+ }
109
+ }
110
+ }
111
+ match a2 {
112
+ FnArg :: Receiver ( _) => {
113
+ return parse:: Error :: new ( a2. span ( ) , "invalid argument" )
114
+ . to_compile_error ( )
115
+ . into ( ) ;
116
+ }
117
+ FnArg :: Typed ( t) => {
118
+ if !is_simple_type ( & t. ty , "usize" ) {
119
+ return parse:: Error :: new ( t. ty . span ( ) , "argument type must be usize" )
120
+ . to_compile_error ( )
121
+ . into ( ) ;
122
+ }
123
+ }
124
+ }
125
+ }
80
126
81
127
// check the function signature
82
128
let valid_signature = f. sig . constness . is_none ( )
0 commit comments