Skip to content

Commit 671d536

Browse files
committed
fix: correct layout calculation with folding tags. [no ci]
1 parent 7363a62 commit 671d536

File tree

3 files changed

+132
-93
lines changed

3 files changed

+132
-93
lines changed

crates/oxc_ast/src/generated/assert_layouts.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ const _: () = {
202202
assert!(align_of::<ArrayPattern<'static>>() == 8usize);
203203
assert!(size_of::<BindingRestElement<'static>>() == 40usize);
204204
assert!(align_of::<BindingRestElement<'static>>() == 8usize);
205-
assert!(size_of::<Function<'static>>() == 144usize);
205+
assert!(size_of::<Function<'static>>() == 136usize);
206206
assert!(align_of::<Function<'static>>() == 8usize);
207207
assert!(size_of::<FunctionType>() == 4usize);
208208
assert!(align_of::<FunctionType>() == 4usize);
@@ -374,11 +374,11 @@ const _: () = {
374374
assert!(align_of::<TSSignature<'static>>() == 8usize);
375375
assert!(size_of::<TSIndexSignature<'static>>() == 56usize);
376376
assert!(align_of::<TSIndexSignature<'static>>() == 8usize);
377-
assert!(size_of::<TSCallSignatureDeclaration<'static>>() == 80usize);
377+
assert!(size_of::<TSCallSignatureDeclaration<'static>>() == 72usize);
378378
assert!(align_of::<TSCallSignatureDeclaration<'static>>() == 8usize);
379379
assert!(size_of::<TSMethodSignatureKind>() == 4usize);
380380
assert!(align_of::<TSMethodSignatureKind>() == 4usize);
381-
assert!(size_of::<TSMethodSignature<'static>>() == 112usize);
381+
assert!(size_of::<TSMethodSignature<'static>>() == 104usize);
382382
assert!(align_of::<TSMethodSignature<'static>>() == 8usize);
383383
assert!(size_of::<TSConstructSignatureDeclaration<'static>>() == 40usize);
384384
assert!(align_of::<TSConstructSignatureDeclaration<'static>>() == 8usize);
@@ -416,7 +416,7 @@ const _: () = {
416416
assert!(align_of::<TSImportAttribute<'static>>() == 8usize);
417417
assert!(size_of::<TSImportAttributeName<'static>>() == 32usize);
418418
assert!(align_of::<TSImportAttributeName<'static>>() == 8usize);
419-
assert!(size_of::<TSFunctionType<'static>>() == 80usize);
419+
assert!(size_of::<TSFunctionType<'static>>() == 72usize);
420420
assert!(align_of::<TSFunctionType<'static>>() == 8usize);
421421
assert!(size_of::<TSConstructorType<'static>>() == 40usize);
422422
assert!(align_of::<TSConstructorType<'static>>() == 8usize);
@@ -699,7 +699,7 @@ const _: () = {
699699
assert!(align_of::<ArrayPattern<'static>>() == 4usize);
700700
assert!(size_of::<BindingRestElement<'static>>() == 24usize);
701701
assert!(align_of::<BindingRestElement<'static>>() == 4usize);
702-
assert!(size_of::<Function<'static>>() == 92usize);
702+
assert!(size_of::<Function<'static>>() == 88usize);
703703
assert!(align_of::<Function<'static>>() == 4usize);
704704
assert!(size_of::<FunctionType>() == 4usize);
705705
assert!(align_of::<FunctionType>() == 4usize);
@@ -871,11 +871,11 @@ const _: () = {
871871
assert!(align_of::<TSSignature<'static>>() == 4usize);
872872
assert!(size_of::<TSIndexSignature<'static>>() == 32usize);
873873
assert!(align_of::<TSIndexSignature<'static>>() == 4usize);
874-
assert!(size_of::<TSCallSignatureDeclaration<'static>>() == 52usize);
874+
assert!(size_of::<TSCallSignatureDeclaration<'static>>() == 48usize);
875875
assert!(align_of::<TSCallSignatureDeclaration<'static>>() == 4usize);
876876
assert!(size_of::<TSMethodSignatureKind>() == 4usize);
877877
assert!(align_of::<TSMethodSignatureKind>() == 4usize);
878-
assert!(size_of::<TSMethodSignature<'static>>() == 76usize);
878+
assert!(size_of::<TSMethodSignature<'static>>() == 72usize);
879879
assert!(align_of::<TSMethodSignature<'static>>() == 4usize);
880880
assert!(size_of::<TSConstructSignatureDeclaration<'static>>() == 28usize);
881881
assert!(align_of::<TSConstructSignatureDeclaration<'static>>() == 4usize);
@@ -913,7 +913,7 @@ const _: () = {
913913
assert!(align_of::<TSImportAttribute<'static>>() == 4usize);
914914
assert!(size_of::<TSImportAttributeName<'static>>() == 20usize);
915915
assert!(align_of::<TSImportAttributeName<'static>>() == 4usize);
916-
assert!(size_of::<TSFunctionType<'static>>() == 52usize);
916+
assert!(size_of::<TSFunctionType<'static>>() == 48usize);
917917
assert!(align_of::<TSFunctionType<'static>>() == 4usize);
918918
assert!(size_of::<TSConstructorType<'static>>() == 24usize);
919919
assert!(align_of::<TSConstructorType<'static>>() == 4usize);

tasks/ast_codegen/src/defs.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ pub struct StructDef {
2525
pub has_lifetime: bool,
2626
pub size_64: usize,
2727
pub align_64: usize,
28-
pub headroom_64: u128,
28+
pub headroom_64: usize,
2929
pub size_32: usize,
3030
pub align_32: usize,
31-
pub headroom_32: u128,
31+
pub headroom_32: usize,
3232
}
3333

3434
#[derive(Debug, Serialize)]
@@ -40,10 +40,10 @@ pub struct EnumDef {
4040
pub has_lifetime: bool,
4141
pub size_64: usize,
4242
pub align_64: usize,
43-
pub headroom_64: u128,
43+
pub headroom_64: usize,
4444
pub size_32: usize,
4545
pub align_32: usize,
46-
pub headroom_32: u128,
46+
pub headroom_32: usize,
4747
}
4848

4949
#[derive(Debug, Serialize)]
@@ -76,26 +76,18 @@ impl From<&RType> for Option<TypeDef> {
7676
}
7777
}
7878

79-
macro_rules! unpack_layouts {
80-
($it:ident) => {{
81-
let KnownLayout { align: align_32, size: size_32, headroom: headroom_32 } = $it
82-
.meta
83-
.layout_32
84-
.layout()
85-
.expect(format!("Uncalculated layout on {}!", $it.item.ident.to_string()).as_str());
86-
let KnownLayout { align: align_64, size: size_64, headroom: headroom_64 } = $it
87-
.meta
88-
.layout_64
89-
.layout()
90-
.expect(format!("Uncalculated layout on {}!", $it.item.ident.to_string()).as_str());
91-
((size_64, align_64, headroom_64), (size_32, align_32, headroom_32))
92-
}};
93-
}
94-
9579
impl From<&REnum> for EnumDef {
9680
fn from(it @ REnum { item, meta }: &REnum) -> Self {
97-
let ((size_64, align_64, headroom_64), (size_32, align_32, headroom_32)) =
98-
unpack_layouts!(it);
81+
let (size_64, align_64, headroom_64) = meta
82+
.layout_64
83+
.layout()
84+
.map(|it| it.unpack())
85+
.expect(format!("Uncalculated layout on {}!", item.ident.to_string()).as_str());
86+
let (size_32, align_32, headroom_32) = meta
87+
.layout_32
88+
.layout()
89+
.map(|it| it.unpack())
90+
.expect(format!("Uncalculated layout on {}!", item.ident.to_string()).as_str());
9991
Self {
10092
name: it.ident().to_string(),
10193
variants: item.variants.iter().map(Into::into).collect(),
@@ -113,9 +105,17 @@ impl From<&REnum> for EnumDef {
113105
}
114106

115107
impl From<&RStruct> for StructDef {
116-
fn from(it @ RStruct { item, .. }: &RStruct) -> Self {
117-
let ((size_64, align_64, headroom_64), (size_32, align_32, headroom_32)) =
118-
unpack_layouts!(it);
108+
fn from(it @ RStruct { item, meta }: &RStruct) -> Self {
109+
let (size_64, align_64, headroom_64) = meta
110+
.layout_64
111+
.layout()
112+
.map(|it| it.unpack())
113+
.expect(format!("Uncalculated layout on {}!", item.ident.to_string()).as_str());
114+
let (size_32, align_32, headroom_32) = meta
115+
.layout_32
116+
.layout()
117+
.map(|it| it.unpack())
118+
.expect(format!("Uncalculated layout on {}!", item.ident.to_string()).as_str());
119119
Self {
120120
name: it.ident().to_string(),
121121
fields: item.fields.iter().map(Into::into).collect(),

0 commit comments

Comments
 (0)