[ty] Shrink size of AstNodeRef (#20028)

## Summary

Removes the `module_ptr` field from `AstNodeRef` in release mode, and
change `NodeIndex` to a `NonZeroU32` to reduce the size of
`Option<AstNodeRef<_>>` fields.

I believe CI runs in debug mode, so this won't show up in the memory
report, but this reduces memory by ~2% in release mode.
This commit is contained in:
Ibraheem Ahmed
2025-08-22 17:03:22 -04:00
committed by GitHub
parent 886c4e4773
commit 7abc41727b
648 changed files with 19641 additions and 20364 deletions

View File

@@ -304,7 +304,7 @@ impl<'src> Parser<'src> {
op: bin_op,
right: Box::new(right.expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
};
@@ -472,7 +472,7 @@ impl<'src> Parser<'src> {
range: identifier.range,
id: identifier.id,
ctx,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -491,7 +491,7 @@ impl<'src> Parser<'src> {
return ast::Identifier {
id: name,
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
};
}
@@ -501,7 +501,7 @@ impl<'src> Parser<'src> {
return ast::Identifier {
id,
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
};
}
@@ -520,7 +520,7 @@ impl<'src> Parser<'src> {
ast::Identifier {
id,
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
} else {
self.add_error(
@@ -531,7 +531,7 @@ impl<'src> Parser<'src> {
ast::Identifier {
id: Name::empty(),
range: self.missing_node_range(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
}
@@ -551,7 +551,7 @@ impl<'src> Parser<'src> {
Expr::NumberLiteral(ast::ExprNumberLiteral {
value: Number::Float(value),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::Complex => {
@@ -561,7 +561,7 @@ impl<'src> Parser<'src> {
Expr::NumberLiteral(ast::ExprNumberLiteral {
value: Number::Complex { real, imag },
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::Int => {
@@ -571,7 +571,7 @@ impl<'src> Parser<'src> {
Expr::NumberLiteral(ast::ExprNumberLiteral {
value: Number::Int(value),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::True => {
@@ -579,7 +579,7 @@ impl<'src> Parser<'src> {
Expr::BooleanLiteral(ast::ExprBooleanLiteral {
value: true,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::False => {
@@ -587,21 +587,21 @@ impl<'src> Parser<'src> {
Expr::BooleanLiteral(ast::ExprBooleanLiteral {
value: false,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::None => {
self.bump(TokenKind::None);
Expr::NoneLiteral(ast::ExprNoneLiteral {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::Ellipsis => {
self.bump(TokenKind::Ellipsis);
Expr::EllipsisLiteral(ast::ExprEllipsisLiteral {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
TokenKind::Name => Expr::Name(self.parse_name()),
@@ -629,7 +629,7 @@ impl<'src> Parser<'src> {
range: self.missing_node_range(),
id: Name::empty(),
ctx: ExprContext::Invalid,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
}
@@ -672,7 +672,7 @@ impl<'src> Parser<'src> {
func: Box::new(func),
arguments,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -702,7 +702,7 @@ impl<'src> Parser<'src> {
arg: None,
value: value.expr,
range: parser.node_range(argument_start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
seen_keyword_unpacking = true;
@@ -767,7 +767,7 @@ impl<'src> Parser<'src> {
ast::Identifier {
id: ident_expr.id,
range: ident_expr.range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
} else {
// TODO(dhruvmanila): Parser shouldn't drop the `parsed_expr` if it's
@@ -780,7 +780,7 @@ impl<'src> Parser<'src> {
ast::Identifier {
id: Name::empty(),
range: parsed_expr.range(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
};
@@ -790,7 +790,7 @@ impl<'src> Parser<'src> {
arg: Some(arg),
value: value.expr,
range: parser.node_range(argument_start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
} else {
if !parsed_expr.is_unparenthesized_starred_expr() {
@@ -815,7 +815,7 @@ impl<'src> Parser<'src> {
let arguments = ast::Arguments {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
args: args.into_boxed_slice(),
keywords: keywords.into_boxed_slice(),
};
@@ -857,11 +857,11 @@ impl<'src> Parser<'src> {
range: slice_range,
id: Name::empty(),
ctx: ExprContext::Invalid,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})),
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
};
}
@@ -881,7 +881,7 @@ impl<'src> Parser<'src> {
ctx: ExprContext::Load,
range: self.node_range(slice_start),
parenthesized: false,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
} else if slice.is_starred_expr() {
// If the only slice element is a starred expression, that is represented
@@ -892,7 +892,7 @@ impl<'src> Parser<'src> {
ctx: ExprContext::Load,
range: self.node_range(slice_start),
parenthesized: false,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
@@ -941,7 +941,7 @@ impl<'src> Parser<'src> {
slice: Box::new(slice),
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1035,7 +1035,7 @@ impl<'src> Parser<'src> {
Expr::Slice(ast::ExprSlice {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
lower,
upper,
step,
@@ -1066,7 +1066,7 @@ impl<'src> Parser<'src> {
op,
operand: Box::new(operand.expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1091,7 +1091,7 @@ impl<'src> Parser<'src> {
attr,
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1135,7 +1135,7 @@ impl<'src> Parser<'src> {
values,
op,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1215,7 +1215,7 @@ impl<'src> Parser<'src> {
ops: operators.into_boxed_slice(),
comparators: comparators.into_boxed_slice(),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1285,22 +1285,22 @@ impl<'src> Parser<'src> {
StringType::Str(string) => Expr::StringLiteral(ast::ExprStringLiteral {
value: ast::StringLiteralValue::single(string),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}),
StringType::Bytes(bytes) => Expr::BytesLiteral(ast::ExprBytesLiteral {
value: ast::BytesLiteralValue::single(bytes),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}),
StringType::FString(fstring) => Expr::FString(ast::ExprFString {
value: ast::FStringValue::single(fstring),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}),
StringType::TString(tstring) => Expr::TString(ast::ExprTString {
value: ast::TStringValue::single(tstring),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}),
},
_ => self.handle_implicitly_concatenated_strings(strings, range),
@@ -1367,7 +1367,7 @@ impl<'src> Parser<'src> {
return Expr::from(ast::ExprBytesLiteral {
value: ast::BytesLiteralValue::concatenated(values),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
}
@@ -1395,7 +1395,7 @@ impl<'src> Parser<'src> {
return Expr::from(ast::ExprTString {
value: ast::TStringValue::concatenated(values),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
}
@@ -1433,7 +1433,7 @@ impl<'src> Parser<'src> {
return Expr::from(ast::ExprStringLiteral {
value: ast::StringLiteralValue::concatenated(values),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
@@ -1457,7 +1457,7 @@ impl<'src> Parser<'src> {
Expr::from(ast::ExprFString {
value: ast::FStringValue::concatenated(parts),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
@@ -1493,7 +1493,7 @@ impl<'src> Parser<'src> {
value: Box::new([]),
range,
flags: ast::BytesLiteralFlags::from(flags).with_invalid(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
} else {
// test_err invalid_string_literal
@@ -1503,7 +1503,7 @@ impl<'src> Parser<'src> {
value: "".into(),
range,
flags: ast::StringLiteralFlags::from(flags).with_invalid(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
}
@@ -1677,7 +1677,7 @@ impl<'src> Parser<'src> {
ast::InterpolatedStringLiteralElement {
value: "".into(),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}),
)
@@ -1846,7 +1846,7 @@ impl<'src> Parser<'src> {
Some(Box::new(ast::InterpolatedStringFormatSpec {
range: self.node_range(spec_start),
elements,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}))
} else {
None
@@ -1898,7 +1898,7 @@ impl<'src> Parser<'src> {
conversion,
format_spec,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -1928,7 +1928,7 @@ impl<'src> Parser<'src> {
elts: vec![],
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
@@ -1980,7 +1980,7 @@ impl<'src> Parser<'src> {
return Expr::Dict(ast::ExprDict {
items: vec![],
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
});
}
@@ -2091,7 +2091,7 @@ impl<'src> Parser<'src> {
elts: vec![],
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
parenthesized: true,
})
.into();
@@ -2180,7 +2180,7 @@ impl<'src> Parser<'src> {
elts,
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
parenthesized: parenthesized.is_yes(),
}
}
@@ -2209,7 +2209,7 @@ impl<'src> Parser<'src> {
elts,
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2258,7 +2258,7 @@ impl<'src> Parser<'src> {
ast::ExprSet {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
elts,
}
}
@@ -2301,7 +2301,7 @@ impl<'src> Parser<'src> {
ast::ExprDict {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
items,
}
}
@@ -2369,7 +2369,7 @@ impl<'src> Parser<'src> {
ast::Comprehension {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
target: target.expr,
iter: iter.expr,
ifs,
@@ -2399,7 +2399,7 @@ impl<'src> Parser<'src> {
elt: Box::new(element),
generators,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
parenthesized: parenthesized.is_yes(),
}
}
@@ -2420,7 +2420,7 @@ impl<'src> Parser<'src> {
elt: Box::new(element),
generators,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2442,7 +2442,7 @@ impl<'src> Parser<'src> {
value: Box::new(value),
generators,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2462,7 +2462,7 @@ impl<'src> Parser<'src> {
elt: Box::new(element),
generators,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2499,7 +2499,7 @@ impl<'src> Parser<'src> {
value: Box::new(parsed_expr.expr),
ctx: ExprContext::Load,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2522,7 +2522,7 @@ impl<'src> Parser<'src> {
ast::ExprAwait {
value: Box::new(parsed_expr.expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2571,7 +2571,7 @@ impl<'src> Parser<'src> {
Expr::Yield(ast::ExprYield {
value,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
@@ -2611,7 +2611,7 @@ impl<'src> Parser<'src> {
Expr::YieldFrom(ast::ExprYieldFrom {
value: Box::new(expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
})
}
@@ -2652,7 +2652,7 @@ impl<'src> Parser<'src> {
target: Box::new(target),
value: Box::new(value.expr),
range,
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2700,7 +2700,7 @@ impl<'src> Parser<'src> {
body: Box::new(body.expr),
parameters,
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2725,7 +2725,7 @@ impl<'src> Parser<'src> {
test: Box::new(test.expr),
orelse: Box::new(orelse.expr),
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
@@ -2751,7 +2751,7 @@ impl<'src> Parser<'src> {
let command = ast::ExprIpyEscapeCommand {
range: self.node_range(start),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
kind,
value,
};
@@ -3010,7 +3010,7 @@ impl From<InterpolatedStringData> for FString {
elements: value.elements,
range: value.range,
flags: value.flags.into(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
}
@@ -3021,7 +3021,7 @@ impl From<InterpolatedStringData> for TString {
elements: value.elements,
range: value.range,
flags: value.flags.into(),
node_index: AtomicNodeIndex::dummy(),
node_index: AtomicNodeIndex::NONE,
}
}
}