Skip to content

Make param and witness modules optional in SimplicityHL programs #186

@coremoon

Description

@coremoon

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
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions