Skip to content

Commit 7d74e8b

Browse files
authored
Merge pull request #880 from Dirbaio/collapse-fns
Merge function calls emitted by the macro to save space.
2 parents afebfc5 + ef797cf commit 7d74e8b

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## [Unreleased]
99

10+
- [#880]: Merge function calls emitted by the macro to save space.
1011
- [#874]: `defmt`: Fix doc test
1112
- [#872]: `defmt`: Add `expect!` as alias for `unwrap!` for discoverability
1213
- [#871]: Set MSRV to Rust 1.76

defmt/src/export/mod.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,22 @@ pub fn display(val: &dyn core::fmt::Display) {
209209
}
210210

211211
#[inline(never)]
212-
pub fn header(s: &Str) {
212+
pub unsafe fn acquire_and_header(s: &Str) {
213+
acquire();
213214
istr(s);
214215
timestamp(make_formatter());
215216
}
216217

218+
#[inline(never)]
219+
pub fn acquire_header_and_release(s: &Str) {
220+
// safety: will be released a few lines further down
221+
unsafe { acquire() };
222+
istr(s);
223+
timestamp(make_formatter());
224+
// safety: acquire() was called a few lines above
225+
unsafe { release() };
226+
}
227+
217228
struct FmtWrite;
218229

219230
impl core::fmt::Write for FmtWrite {

macros/src/function_like/log.rs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,25 @@ pub(crate) fn expand_parsed(level: Level, args: Args) -> TokenStream2 {
4141
let env_filter = EnvFilter::from_env_var();
4242

4343
if let Some(filter_check) = env_filter.path_check(level) {
44+
let content = if exprs.is_empty() {
45+
quote!(
46+
defmt::export::acquire_header_and_release(&#header);
47+
)
48+
} else {
49+
quote!(
50+
// safety: will be released a few lines further down
51+
unsafe { defmt::export::acquire_and_header(&#header); };
52+
#(#exprs;)*
53+
// safety: acquire() was called a few lines above
54+
unsafe { defmt::export::release() }
55+
)
56+
};
57+
4458
quote!(
4559
match (#(&(#formatting_exprs)),*) {
4660
(#(#patterns),*) => {
4761
if #filter_check {
48-
// safety: will be released a few lines further down
49-
unsafe { defmt::export::acquire() };
50-
defmt::export::header(&#header);
51-
#(#exprs;)*
52-
// safety: acquire() was called a few lines above
53-
unsafe { defmt::export::release() }
62+
#content
5463
}
5564
}
5665
}

macros/src/function_like/println.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,23 @@ pub(crate) fn expand_parsed(args: Args) -> TokenStream2 {
3535
);
3636

3737
let header = construct::interned_string(&format_string, "println", true, None);
38+
let content = if exprs.is_empty() {
39+
quote!(
40+
defmt::export::acquire_header_and_release(&#header);
41+
)
42+
} else {
43+
quote!(
44+
// safety: will be released a few lines further down
45+
unsafe { defmt::export::acquire_and_header(&#header); };
46+
#(#exprs;)*
47+
// safety: acquire() was called a few lines above
48+
unsafe { defmt::export::release() }
49+
)
50+
};
3851
quote!({
3952
match (#(&(#formatting_exprs)),*) {
4053
(#(#patterns),*) => {
41-
// safety: will be released a few lines further down
42-
unsafe { defmt::export::acquire(); }
43-
defmt::export::header(&#header);
44-
#(#exprs;)*
45-
// safety: acquire() was called a few lines above
46-
unsafe { defmt::export::release() }
54+
#content
4755
}
4856
}
4957
})

0 commit comments

Comments
 (0)