Skip to content

Commit b25cf59

Browse files
committed
fix: C macro memory issue
1 parent 2386d9a commit b25cf59

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Changelog
22

33
## [unreleased]
4-
- [BREAKING] Rename `linear_gradient!` to `linearGradient!` for consistency with the other svg macros (same with `radial_gradient!` and `mesh_gradient!`).
4+
- [BREAKING] Rename `linear_gradient!` to `linearGradient!` for consistency with the other svg macros (same with `radial_gradient!` and `mesh_gradient!`) (#377).
55
- Fixed `base_path` with a trailing slash parsing / handling.
6+
- Fixed `C` macro memory / WASM file size issue.
67

78
## v0.7.0
89
- [BREAKING] Custom elements are now patched in-place (#364). Use `el_key` to force reinitialize an element.

src/shortcuts.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
44
// @TODO merge with `pub use` & `prelude` in `lib.rs` and `browser::util`?
55

6+
use crate::virtual_dom::{At, Attrs};
67
use wasm_bindgen::JsValue;
78

89
/// Copied from [https://github.com/rust-lang/rust/issues/35853](https://github.com/rust-lang/rust/issues/35853)
@@ -325,22 +326,32 @@ macro_rules! C {
325326
{
326327
let mut all_classes = Vec::new();
327328
$(
328-
if let Some(classes) = $class.to_classes() {
329-
for class in classes {
330-
if !class.is_empty() {
331-
all_classes.push(class);
332-
}
333-
}
334-
}
329+
$crate::shortcuts::_fill_all_classes(&mut all_classes, $class.to_classes());
335330
)*
331+
$crate::shortcuts::_all_classes_to_attrs(&all_classes)
332+
}
333+
};
334+
}
336335

337-
let mut attrs = $crate::virtual_dom::Attrs::empty();
338-
if !all_classes.is_empty() {
339-
attrs.add_multiple(At::Class, &all_classes.iter().map(|class| class.as_str()).collect::<Vec<_>>());
336+
pub fn _fill_all_classes(all_classes: &mut Vec<String>, classes: Option<Vec<String>>) {
337+
if let Some(classes) = classes {
338+
for class in classes {
339+
if !class.is_empty() {
340+
all_classes.push(class);
340341
}
341-
attrs
342342
}
343-
};
343+
}
344+
}
345+
346+
pub fn _all_classes_to_attrs(all_classes: &[String]) -> Attrs {
347+
let mut attrs = Attrs::empty();
348+
if !all_classes.is_empty() {
349+
attrs.add_multiple(
350+
At::Class,
351+
&all_classes.iter().map(String::as_str).collect::<Vec<_>>(),
352+
);
353+
}
354+
attrs
344355
}
345356

346357
/// `IF!(predicate => expression) -> Option<expression value>`

0 commit comments

Comments
 (0)