Skip to content
Prev Previous commit
Next Next commit
PARAMETER -> DEF_PARAM
  • Loading branch information
ShaharNaveh committed Jun 27, 2026
commit 70e834ce39fe79158c6cfb2ffde54d13298fd237
4 changes: 2 additions & 2 deletions crates/codegen/src/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10804,7 +10804,7 @@ impl<'warnings> Compiler<'warnings> {
let mut pushed_locals: Vec<String> = Vec::new();
let mut fast_hidden_locals: Vec<String> = Vec::new();
for (name, sym) in &comp_table.symbols {
if sym.flags.contains(SymbolFlags::PARAMETER) {
if sym.flags.contains(SymbolFlags::DEF_PARAM) {
continue; // skip .0
}
let is_local = sym
Expand All @@ -10824,7 +10824,7 @@ impl<'warnings> Compiler<'warnings> {
// module/class scopes, also enable temporary fast locals for
// comprehension-bound names only.
for (name, comp_sym) in &comp_table.symbols {
if comp_sym.flags.contains(SymbolFlags::PARAMETER) {
if comp_sym.flags.contains(SymbolFlags::DEF_PARAM) {
continue; // skip .0
}
let comp_scope = comp_sym.scope;
Expand Down
24 changes: 12 additions & 12 deletions crates/codegen/src/symboltable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ impl SymbolTable {
.or_insert_with(|| Symbol::new(name));
symbol
.flags
.insert(SymbolFlags::PARAMETER | SymbolFlags::USE);
.insert(SymbolFlags::DEF_PARAM | SymbolFlags::USE);
if !self.varnames.iter().any(|varname| varname == name) {
self.varnames.push(name.to_owned());
}
Expand Down Expand Up @@ -291,9 +291,9 @@ bitflags! {
pub struct SymbolFlags: u16 {
const DEF_GLOBAL = 0x200;
const DEF_LOCAL = 2;
const DEF_PARAM = 0x004;
const USE = 0x001;

const PARAMETER = 0x004; // DEF_PARAM
const ANNOTATED = 0x008; // DEF_ANNOT
const IMPORTED = 0x010; // DEF_IMPORT
const NONLOCAL = 0x020; // DEF_NONLOCAL
Expand All @@ -315,7 +315,7 @@ bitflags! {
const COMP_ITER = 0x400; // DEF_COMP_ITER
const COMP_CELL = 0x800; // DEF_COMP_CELL
const TYPE_PARAM = 0x1000; // DEF_TYPE_PARAM
const BOUND = Self::DEF_LOCAL.bits() | Self::PARAMETER.bits() | Self::IMPORTED.bits() | Self::ITER.bits() | Self::TYPE_PARAM.bits();
const BOUND = Self::DEF_LOCAL.bits() | Self::DEF_PARAM.bits() | Self::IMPORTED.bits() | Self::ITER.bits() | Self::TYPE_PARAM.bits();
}
}

Expand Down Expand Up @@ -444,7 +444,7 @@ fn inline_comprehension(
let mut removed_class_implicits = IndexSet::default();
for (name, sub_symbol) in &comp.symbols {
// Skip the .0 parameter
if sub_symbol.flags.contains(SymbolFlags::PARAMETER) {
if sub_symbol.flags.contains(SymbolFlags::DEF_PARAM) {
continue;
}

Expand Down Expand Up @@ -3250,7 +3250,7 @@ impl SymbolTableBuilder {
if matches!(
role,
SymbolUsage::Parameter | SymbolUsage::AnnotationParameter
) && flags.contains(SymbolFlags::PARAMETER)
) && flags.contains(SymbolFlags::DEF_PARAM)
{
return Err(SymbolTableError {
error: format!("duplicate argument '{original_name}' in function definition"),
Expand All @@ -3267,7 +3267,7 @@ impl SymbolTableBuilder {
}
match role {
SymbolUsage::Global if !symbol.is_global() => {
if flags.contains(SymbolFlags::PARAMETER) {
if flags.contains(SymbolFlags::DEF_PARAM) {
return Err(SymbolTableError {
error: format!("name '{name}' is parameter and global"),
location,
Expand Down Expand Up @@ -3295,7 +3295,7 @@ impl SymbolTableBuilder {
}
}
SymbolUsage::Nonlocal => {
if flags.contains(SymbolFlags::PARAMETER) {
if flags.contains(SymbolFlags::DEF_PARAM) {
return Err(SymbolTableError {
error: format!("name '{name}' is parameter and nonlocal"),
location,
Expand Down Expand Up @@ -3375,15 +3375,15 @@ impl SymbolTableBuilder {
flags.insert(SymbolFlags::DEF_LOCAL | SymbolFlags::IMPORTED);
}
SymbolUsage::Parameter => {
flags.insert(SymbolFlags::PARAMETER);
flags.insert(SymbolFlags::DEF_PARAM);
// Parameters are always added to varnames first
let name_str = symbol.name.clone();
if !self.current_varnames.contains(&name_str) {
self.current_varnames.push(name_str);
}
}
SymbolUsage::AnnotationParameter => {
flags.insert(SymbolFlags::PARAMETER | SymbolFlags::ANNOTATED);
flags.insert(SymbolFlags::DEF_PARAM | SymbolFlags::ANNOTATED);
// Annotated parameters are also added to varnames
let name_str = symbol.name.clone();
if !self.current_varnames.contains(&name_str) {
Expand Down Expand Up @@ -3622,7 +3622,7 @@ mod tests {
assert!(
format
.flags
.contains(SymbolFlags::PARAMETER | SymbolFlags::USE),
.contains(SymbolFlags::DEF_PARAM | SymbolFlags::USE),
"CPython symtable_enter_block() adds both DEF_PARAM and USE for annotation-like .format"
);

Expand All @@ -3638,7 +3638,7 @@ mod tests {
assert!(
format
.flags
.contains(SymbolFlags::PARAMETER | SymbolFlags::USE),
.contains(SymbolFlags::DEF_PARAM | SymbolFlags::USE),
"CPython TypeAliasBlock .format has DEF_PARAM | USE"
);

Expand All @@ -3659,7 +3659,7 @@ mod tests {
assert!(
format
.flags
.contains(SymbolFlags::PARAMETER | SymbolFlags::USE),
.contains(SymbolFlags::DEF_PARAM | SymbolFlags::USE),
"CPython TypeVariableBlock .format has DEF_PARAM | USE"
);
}
Expand Down
4 changes: 2 additions & 2 deletions crates/vm/src/stdlib/_symtable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ mod _symtable {
pub(super) const DEF_LOCAL: i32 = SymbolFlags::DEF_LOCAL.bits() as i32;

#[pyattr]
pub(super) const DEF_PARAM: i32 = 2 << 1;
pub(super) const DEF_PARAM: i32 = SymbolFlags::DEF_PARAM.bits() as i32;

#[pyattr]
pub(super) const DEF_NONLOCAL: i32 = 2 << 2;
Expand Down Expand Up @@ -289,7 +289,7 @@ mod _symtable {

#[pymethod]
const fn is_parameter(&self) -> bool {
self.symbol.flags.contains(SymbolFlags::PARAMETER)
self.symbol.flags.contains(SymbolFlags::DEF_PARAM)
}

#[pymethod]
Expand Down