mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-12-15 21:02:10 +03:00
c35d6f4b0a
Reported in #1191 the fix requires us to get a bit creative I think. The general gist is that a block like this: #[wasm_bindgen] impl Foo { pub fn foo() {} } was previously expanded all in one go. Now, however, it's expanded into: impl Foo { #[__wasm_bindgen_class_marker(Foo = "Foo")] pub fn foo() {} } // goop generated by orginal #[wasm_bindgen] This method of expansion takes advantage of rustc's recursive expansion feature. It also allows us to expand `impl` blocks and allow inner items to not be fully expanded yet, such as still having `#[cfg]` attributes (like in the original bug report). We use theinternal `__wasm_bindgen_class_marker` to indicate that we're parsing an `ImplItemMethod` unconditionally, and then generation proceeds as usual. The only final catch is that when we're expanding in an `impl` block we have to generate tokens for the `Program` (wasm-bindgen injected goop like the custom section) inside the body of the function itself instead of next to it. Otherwise we'd get syntax errors inside of impl blocks! Closes #1191 |
||
---|---|---|
.. | ||
attribute-fails-to-parse.rs | ||
attribute-fails-to-parse.stderr | ||
bad-signatures.rs | ||
bad-signatures.stderr | ||
Cargo.toml | ||
invalid-attr.rs | ||
invalid-attr.stderr | ||
invalid-enums.rs | ||
invalid-enums.stderr | ||
invalid-imports.rs | ||
invalid-imports.stderr | ||
invalid-items.rs | ||
invalid-items.stderr | ||
invalid-methods.rs | ||
invalid-methods.stderr | ||
invalid-setter.rs | ||
invalid-setter.stderr | ||
non-public-function.rs | ||
non-public-function.stderr | ||
start-function.rs | ||
start-function.stderr | ||
structural-and-final.rs | ||
structural-and-final.stderr | ||
test.rs | ||
unused-attributes.rs | ||
unused-attributes.stderr | ||
update-all-references.sh | ||
update-references.sh |