Skip to content

Commit 46c8d92

Browse files
authored
Fix column by name. (#2602)
1 parent 4dbbadf commit 46c8d92

File tree

3 files changed

+20
-15
lines changed

3 files changed

+20
-15
lines changed

ast/src/analyzed/mod.rs

+13
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,19 @@ impl<T> Analyzed<T> {
136136
.collect()
137137
}
138138

139+
/// Tries to resolve a symbol by name. Does not support individual array elements,
140+
/// just plain symbols. Also supports intermediate columns.
141+
pub fn try_symbol_by_name(&self, name: &str) -> Option<&Symbol> {
142+
self.definitions
143+
.get(name)
144+
.map(|(symbol, _)| symbol)
145+
.or_else(|| {
146+
self.intermediate_columns
147+
.get(name)
148+
.map(|(symbol, _)| symbol)
149+
})
150+
}
151+
139152
pub fn constant_polys_in_source_order(
140153
&self,
141154
) -> impl Iterator<Item = &(Symbol, Option<FunctionValueDefinition>)> {

executor/src/witgen/jit/prover_function_heuristics.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use powdr_number::FieldElement;
1515
use crate::witgen::{machines::MachineParts, FixedData};
1616

1717
pub trait TrySymbolByName: Copy {
18+
/// Tries to resolve a symbol by name.
1819
fn try_symbol_by_name<'a>(&'a self, name: &str) -> Option<&'a Symbol>;
1920
}
2021

@@ -540,13 +541,13 @@ fn unpack(mut e: &Expression) -> &Expression {
540541

541542
impl<T: FieldElement> TrySymbolByName for &FixedData<'_, T> {
542543
fn try_symbol_by_name<'a>(&'a self, name: &str) -> Option<&'a Symbol> {
543-
FixedData::try_symbol_by_name(self, name)
544+
self.analyzed.try_symbol_by_name(name)
544545
}
545546
}
546547

547548
impl<T> TrySymbolByName for &Analyzed<T> {
548549
fn try_symbol_by_name<'a>(&'a self, name: &str) -> Option<&'a Symbol> {
549-
self.definitions.get(name).map(|(s, _)| s)
550+
Analyzed::try_symbol_by_name(self, name)
550551
}
551552
}
552553

executor/src/witgen/mod.rs

+4-13
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ pub struct FixedData<'a, T: FieldElement> {
322322
bus_receives: BTreeMap<T, BusReceive<T>>,
323323
fixed_cols: FixedColumnMap<FixedColumn<'a, T>>,
324324
witness_cols: WitnessColumnMap<WitnessColumn<'a, T>>,
325+
/// A map from column name to PolyID, supports array elements.
325326
column_by_name: HashMap<String, PolyID>,
326327
challenges: BTreeMap<u64, T>,
327328
global_range_constraints: GlobalConstraints<T>,
@@ -408,12 +409,7 @@ impl<'a, T: FieldElement> FixedData<'a, T> {
408409
bus_receives,
409410
fixed_cols,
410411
witness_cols,
411-
column_by_name: analyzed
412-
.definitions
413-
.iter()
414-
.filter(|(_, (symbol, _))| matches!(symbol.kind, SymbolKind::Poly(_)))
415-
.flat_map(|(_, (symbol, _))| symbol.array_elements())
416-
.collect(),
412+
column_by_name: analyzed.name_to_poly_id().into_iter().collect(),
417413
challenges,
418414
global_range_constraints,
419415
intermediate_definitions,
@@ -533,17 +529,12 @@ impl<'a, T: FieldElement> FixedData<'a, T> {
533529
}
534530
}
535531

532+
/// Returns a PolyID given the name of it. Supports array elements
533+
/// in that for `"X[7]"` it returns the PolyID of element 7 of the array `X`.
536534
pub fn try_column_by_name(&self, name: &str) -> Option<PolyID> {
537535
self.column_by_name.get(name).cloned()
538536
}
539537

540-
pub fn try_symbol_by_name(&self, name: &str) -> Option<&Symbol> {
541-
self.analyzed
542-
.definitions
543-
.get(name)
544-
.map(|(symbol, _)| symbol)
545-
}
546-
547538
fn external_witness(&self, row: DegreeType, column: &PolyID) -> Option<T> {
548539
self.witness_cols[column]
549540
.external_values

0 commit comments

Comments
 (0)