waker context: Fix size and align of raw vtable

This commit is contained in:
oblique
2020-08-09 21:37:19 +03:00
parent 4f275f1339
commit b0ca76b3d5

View File

@@ -98,6 +98,7 @@ Let's explain this in code instead of words by implementing our own trait
object from these parts: object from these parts:
```rust ```rust
# use std::mem::{align_of, size_of};
// A reference to a trait object is a fat pointer: (data_ptr, vtable_ptr) // A reference to a trait object is a fat pointer: (data_ptr, vtable_ptr)
trait Test { trait Test {
fn add(&self) -> i32; fn add(&self) -> i32;
@@ -138,9 +139,9 @@ fn main() {
// format where the three first values has a special meaning like the // format where the three first values has a special meaning like the
// length of the array is encoded in the array itself as the second value. // length of the array is encoded in the array itself as the second value.
let vtable = vec![ let vtable = vec![
0, // pointer to `Drop` (which we're not implementing here) 0, // pointer to `Drop` (which we're not implementing here)
6, // length of vtable size_of::<Data>(), // length of data
8, // alignment align_of::<Data>(), // alignment of data
// we need to make sure we add these in the same order as defined in the Trait. // we need to make sure we add these in the same order as defined in the Trait.
add as usize, // function pointer - try changing the order of `add` add as usize, // function pointer - try changing the order of `add`