mirror of
https://github.com/AleoHQ/leo.git
synced 2024-12-24 01:54:23 +03:00
added macro for const and main inputs sections
This commit is contained in:
parent
0eb7b972c7
commit
2b6f39fd14
@ -18,7 +18,7 @@
|
||||
macro_rules! input_section_impl {
|
||||
($($name: ident), *) => ($(
|
||||
|
||||
/// An input section declared in an input file with `[$name]`
|
||||
/// An input section declared in an input file with `[$name]`.
|
||||
#[derive(Clone, PartialEq, Eq, Default)]
|
||||
pub struct $name {
|
||||
is_present: bool,
|
||||
@ -63,10 +63,66 @@ macro_rules! input_section_impl {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Returns this section's [IndexMap] of values
|
||||
/// Returns this section's [IndexMap] of values.
|
||||
pub fn values(&self) -> IndexMap<Parameter, Option<InputValue>> {
|
||||
self.values.clone()
|
||||
}
|
||||
}
|
||||
)*)
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! main_input_definitions {
|
||||
($($name: ident), *) => ($(
|
||||
|
||||
/// `[$name]` program input section.
|
||||
#[derive(Clone, PartialEq, Eq, Default)]
|
||||
pub struct $name {
|
||||
input: IndexMap<String, Option<InputValue>>,
|
||||
}
|
||||
|
||||
#[allow(clippy::len_without_is_empty)]
|
||||
impl $name {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// Returns an empty version of this struct with `None` values.
|
||||
/// Called during constraint synthesis to provide private input variables.
|
||||
pub fn empty(&self) -> Self {
|
||||
let mut input = self.input.clone();
|
||||
|
||||
input.iter_mut().for_each(|(_name, value)| {
|
||||
*value = None;
|
||||
});
|
||||
|
||||
Self { input }
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.input.len()
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, key: String, value: Option<InputValue>) {
|
||||
self.input.insert(key, value);
|
||||
}
|
||||
|
||||
/// Parses main input definitions and stores them in `self`.
|
||||
pub fn parse(&mut self, definitions: Vec<Definition>) -> Result<(), InputParserError> {
|
||||
for definition in definitions {
|
||||
let name = definition.parameter.variable.value;
|
||||
let value = InputValue::from_expression(definition.parameter.type_, definition.expression)?;
|
||||
|
||||
self.insert(name, Some(value));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Returns an `Option` of the main function input at `name`.
|
||||
pub fn get(&self, name: &str) -> Option<Option<InputValue>> {
|
||||
self.input.get(name).cloned()
|
||||
}
|
||||
}
|
||||
)*)
|
||||
}
|
||||
|
@ -1,69 +0,0 @@
|
||||
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||
// This file is part of the Leo library.
|
||||
|
||||
// The Leo library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// The Leo library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::InputValue;
|
||||
use leo_input::{definitions::Definition, InputParserError};
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Default)]
|
||||
pub struct ConstInput {
|
||||
input: IndexMap<String, Option<InputValue>>,
|
||||
}
|
||||
|
||||
#[allow(clippy::len_without_is_empty)]
|
||||
impl ConstInput {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// Returns an empty version of this struct with `None` values.
|
||||
/// Called during constraint synthesis to provide private input variables.
|
||||
pub fn empty(&self) -> Self {
|
||||
let mut input = self.input.clone();
|
||||
|
||||
input.iter_mut().for_each(|(_name, value)| {
|
||||
*value = None;
|
||||
});
|
||||
|
||||
Self { input }
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.input.len()
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, key: String, value: Option<InputValue>) {
|
||||
self.input.insert(key, value);
|
||||
}
|
||||
|
||||
/// Parses constant input definitions and stores them in `self`.
|
||||
pub fn parse(&mut self, definitions: Vec<Definition>) -> Result<(), InputParserError> {
|
||||
for definition in definitions {
|
||||
let name = definition.parameter.variable.value;
|
||||
let value = InputValue::from_expression(definition.parameter.type_, definition.expression)?;
|
||||
|
||||
self.insert(name, Some(value));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Returns an `Option` of the constant main function input at `name`.
|
||||
pub fn get(&self, name: &str) -> Option<Option<InputValue>> {
|
||||
self.input.get(name).cloned()
|
||||
}
|
||||
}
|
22
ast/src/input/program_input/constant_input.rs
Normal file
22
ast/src/input/program_input/constant_input.rs
Normal file
@ -0,0 +1,22 @@
|
||||
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||
// This file is part of the Leo library.
|
||||
|
||||
// The Leo library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// The Leo library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::InputValue;
|
||||
use leo_input::{definitions::Definition, InputParserError};
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
main_input_definitions!(ConstantInput);
|
@ -19,51 +19,4 @@ use leo_input::{definitions::Definition, InputParserError};
|
||||
|
||||
use indexmap::IndexMap;
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Default)]
|
||||
pub struct MainInput {
|
||||
input: IndexMap<String, Option<InputValue>>,
|
||||
}
|
||||
|
||||
#[allow(clippy::len_without_is_empty)]
|
||||
impl MainInput {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
/// Returns an empty version of this struct with `None` values.
|
||||
/// Called during constraint synthesis to provide private input variables.
|
||||
pub fn empty(&self) -> Self {
|
||||
let mut input = self.input.clone();
|
||||
|
||||
input.iter_mut().for_each(|(_name, value)| {
|
||||
*value = None;
|
||||
});
|
||||
|
||||
Self { input }
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.input.len()
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, key: String, value: Option<InputValue>) {
|
||||
self.input.insert(key, value);
|
||||
}
|
||||
|
||||
/// Parses main input definitions and stores them in `self`.
|
||||
pub fn parse(&mut self, definitions: Vec<Definition>) -> Result<(), InputParserError> {
|
||||
for definition in definitions {
|
||||
let name = definition.parameter.variable.value;
|
||||
let value = InputValue::from_expression(definition.parameter.type_, definition.expression)?;
|
||||
|
||||
self.insert(name, Some(value));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Returns an `Option` of the main function input at `name`.
|
||||
pub fn get(&self, name: &str) -> Option<Option<InputValue>> {
|
||||
self.input.get(name).cloned()
|
||||
}
|
||||
}
|
||||
main_input_definitions!(MainInput);
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
#![allow(clippy::module_inception)]
|
||||
|
||||
pub mod const_input;
|
||||
pub use const_input::*;
|
||||
pub mod constant_input;
|
||||
pub use constant_input::*;
|
||||
|
||||
pub mod main_input;
|
||||
pub use main_input::*;
|
||||
|
@ -14,7 +14,7 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use crate::{ConstInput, InputValue, MainInput, Registers};
|
||||
use crate::{ConstantInput, InputValue, MainInput, Registers};
|
||||
use leo_input::{
|
||||
sections::{Header, Section},
|
||||
InputParserError,
|
||||
@ -23,7 +23,7 @@ use leo_input::{
|
||||
#[derive(Clone, PartialEq, Eq, Default)]
|
||||
pub struct ProgramInput {
|
||||
pub main: MainInput,
|
||||
pub constants: ConstInput,
|
||||
pub constants: ConstantInput,
|
||||
registers: Registers,
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user