Skip to content

Commit

Permalink
chore: move is_native_field up into noirc_frontend (noir-lang#5119)
Browse files Browse the repository at this point in the history
# Description

## Problem\*

Resolves <!-- Link to GitHub Issue -->

## Summary\*

This struct is only used for a single check up in `noirc_frontend` so we
should move this logic closer to where it's used.

## Additional Context



## Documentation\*

Check one:
- [x] No documentation needed.
- [ ] Documentation included in this PR.
- [ ] **[For Experimental Features]** Documentation to be submitted in a
separate PR.

# PR Checklist\*

- [x] I have tested the changes locally.
- [x] I have formatted the changes with [Prettier](https://prettier.io/)
and/or `cargo fmt` on default settings.
  • Loading branch information
TomAFrench authored May 28, 2024
1 parent a289404 commit 06dd2f2
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 39 deletions.
4 changes: 3 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion acvm-repo/acir_field/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ repository.workspace = true
hex.workspace = true
num-bigint.workspace = true
serde.workspace = true
num-traits.workspace = true

ark-bn254 = { version = "^0.4.0", default-features = false, features = ["curve"] }
ark-bls12-381 = { version = "^0.4.0", optional = true, default-features = false, features = ["curve"] }
Expand Down
32 changes: 0 additions & 32 deletions acvm-repo/acir_field/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@
#![warn(unreachable_pub)]
#![warn(clippy::semicolon_if_nothing_returned)]
#![cfg_attr(not(test), warn(unused_crate_dependencies, unused_extern_crates))]

use num_bigint::BigUint;
use num_traits::Num;
mod generic_ark;

pub use generic_ark::AcirField;
Expand All @@ -15,40 +12,11 @@ pub use generic_ark::FieldElement as GenericFieldElement;
cfg_if::cfg_if! {
if #[cfg(feature = "bls12_381")] {
pub type FieldElement = generic_ark::FieldElement<ark_bls12_381::Fr>;
pub const CHOSEN_FIELD : FieldOptions = FieldOptions::BLS12_381;
} else {
pub type FieldElement = generic_ark::FieldElement<ark_bn254::Fr>;
pub const CHOSEN_FIELD : FieldOptions = FieldOptions::BN254;
}
}

#[derive(Debug, PartialEq, Eq)]
pub enum FieldOptions {
BN254,
BLS12_381,
}

impl FieldOptions {
pub fn to_string(&self) -> &str {
match self {
FieldOptions::BN254 => "bn254",
FieldOptions::BLS12_381 => "bls12_381",
}
}

pub fn is_native_field(str: &str) -> bool {
let big_num = if let Some(hex) = str.strip_prefix("0x") {
BigUint::from_str_radix(hex, 16)
} else {
BigUint::from_str_radix(str, 10)
};
if let Ok(big_num) = big_num {
big_num == FieldElement::modulus()
} else {
CHOSEN_FIELD.to_string() == str
}
}
}
// This is needed because features are additive through the dependency graph; if a dependency turns on the bn254, then it
// will be turned on in all crates that depend on it
#[macro_export]
Expand Down
6 changes: 6 additions & 0 deletions compiler/noirc_frontend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@ smol_str.workspace = true
im.workspace = true
serde_json.workspace = true
serde.workspace = true
num-bigint.workspace = true
num-traits.workspace = true
rustc-hash = "1.1.0"
small-ord-set = "0.1.3"
regex = "1.9.1"
cfg-if = "1.0.0"
tracing.workspace = true
petgraph = "0.6"
lalrpop-util = { version = "0.20.2", features = ["lexer"] }


[dev-dependencies]
base64.workspace = true
strum = "0.24"
Expand All @@ -39,3 +43,5 @@ lalrpop = "0.20.2"

[features]
experimental_parser = []
bn254 = []
bls12_381 = []
29 changes: 27 additions & 2 deletions compiler/noirc_frontend/src/hir/def_collector/dc_mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
use std::{collections::HashMap, path::Path, vec};

use acvm::acir::acir_field::FieldOptions;
use acvm::{AcirField, FieldElement};
use fm::{FileId, FileManager, FILE_EXTENSION};
use noirc_errors::Location;
use num_bigint::BigUint;
use num_traits::Num;

use crate::ast::{
FunctionDefinition, Ident, ItemVisibility, LetStatement, ModuleDeclaration, NoirFunction,
Expand Down Expand Up @@ -233,7 +235,7 @@ impl<'a> ModCollector<'a> {
for function in functions {
// check if optional field attribute is compatible with native field
if let Some(field) = function.attributes().get_field_attribute() {
if !FieldOptions::is_native_field(&field) {
if !is_native_field(&field) {
continue;
}
}
Expand Down Expand Up @@ -721,6 +723,29 @@ fn should_check_siblings_for_module(module_path: &Path, parent_path: &Path) -> b
}
}

cfg_if::cfg_if! {
if #[cfg(feature = "bn254")] {
pub const CHOSEN_FIELD: &str = "bn254";
} else if #[cfg(feature = "bls12_381")] {
pub const CHOSEN_FIELD: &str = "bls12_381";
} else {
compile_error!("please specify a field to compile with");
}
}

fn is_native_field(str: &str) -> bool {
let big_num = if let Some(hex) = str.strip_prefix("0x") {
BigUint::from_str_radix(hex, 16)
} else {
BigUint::from_str_radix(str, 10)
};
if let Ok(big_num) = big_num {
big_num == FieldElement::modulus()
} else {
CHOSEN_FIELD == str
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down
2 changes: 1 addition & 1 deletion compiler/wasm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ acvm = { workspace = true, features = ["bn254"] }
fm.workspace = true
nargo.workspace = true
noirc_driver.workspace = true
noirc_frontend.workspace = true
noirc_frontend = { workspace = true, features = ["bn254"] }
noirc_errors.workspace = true
noirc_evaluator.workspace = true
wasm-bindgen.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion tooling/nargo_cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ nargo_toml.workspace = true
noir_lsp.workspace = true
noir_debugger.workspace = true
noirc_driver.workspace = true
noirc_frontend.workspace = true
noirc_frontend = { workspace = true, features = ["bn254"] }
noirc_abi.workspace = true
noirc_errors.workspace = true
acvm = { workspace = true, features = ["bn254"] }
Expand Down
10 changes: 10 additions & 0 deletions tooling/noirc_abi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,13 @@ num-traits = "0.2"
[dev-dependencies]
strum = "0.24"
strum_macros = "0.24"

[features]
bn254 = [
"acvm/bn254",
"noirc_frontend/bn254",
]
bls12_381 = [
"acvm/bls12_381",
"noirc_frontend/bls12_381",
]
2 changes: 1 addition & 1 deletion tooling/noirc_abi_wasm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ crate-type = ["cdylib"]

[dependencies]
acvm = { workspace = true, features = ["bn254"] }
noirc_abi.workspace = true
noirc_abi = { workspace = true, features = ["bn254"] }
iter-extended.workspace = true
wasm-bindgen.workspace = true
serde.workspace = true
Expand Down

0 comments on commit 06dd2f2

Please sign in to comment.