-
Notifications
You must be signed in to change notification settings - Fork 20
Closed
Description
Project
core | compiler
Describe the feature
Problem
It seems to me an unnecessary boilerplate for programs without parameters or witnesses to require:
mod param {}
mod witness {}
fn main() {}Solution
Modify src/ast.rs - analyze_named_module() function:
Before:
let witness_module = iter
.next()
.ok_or(Error::ModuleRequired(name.shallow_clone()))
.with_span(from)?;After:
let witness_module = iter.next();
if iter.next().is_some() {
return Err(Error::ModuleRedefined(name)).with_span(from);
}
let mut map = HashMap::new();
if let Some(witness_module) = witness_module {
for assignment in witness_module.assignments() {
if map.contains_key(assignment.name()) {
return Err(Error::WitnessReassigned(assignment.name().shallow_clone()))
.with_span(assignment);
}
map.insert(
assignment.name().shallow_clone(),
assignment.value().clone(),
);
}
}
Ok(map)Why: Stores the result without immediate error, checks for duplicates, then optionally processes the module if it exists.
Result: Modules are now optional instead of required.
Labels: enhancement, usability
Metadata
Metadata
Assignees
Labels
No labels