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 {
|
macro_rules! input_section_impl {
|
||||||
($($name: ident), *) => ($(
|
($($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)]
|
#[derive(Clone, PartialEq, Eq, Default)]
|
||||||
pub struct $name {
|
pub struct $name {
|
||||||
is_present: bool,
|
is_present: bool,
|
||||||
@ -63,10 +63,66 @@ macro_rules! input_section_impl {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns this section's [IndexMap] of values
|
/// Returns this section's [IndexMap] of values.
|
||||||
pub fn values(&self) -> IndexMap<Parameter, Option<InputValue>> {
|
pub fn values(&self) -> IndexMap<Parameter, Option<InputValue>> {
|
||||||
self.values.clone()
|
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;
|
use indexmap::IndexMap;
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, Default)]
|
main_input_definitions!(MainInput);
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
#![allow(clippy::module_inception)]
|
#![allow(clippy::module_inception)]
|
||||||
|
|
||||||
pub mod const_input;
|
pub mod constant_input;
|
||||||
pub use const_input::*;
|
pub use constant_input::*;
|
||||||
|
|
||||||
pub mod main_input;
|
pub mod main_input;
|
||||||
pub use main_input::*;
|
pub use main_input::*;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// 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/>.
|
// 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::{
|
use leo_input::{
|
||||||
sections::{Header, Section},
|
sections::{Header, Section},
|
||||||
InputParserError,
|
InputParserError,
|
||||||
@ -23,7 +23,7 @@ use leo_input::{
|
|||||||
#[derive(Clone, PartialEq, Eq, Default)]
|
#[derive(Clone, PartialEq, Eq, Default)]
|
||||||
pub struct ProgramInput {
|
pub struct ProgramInput {
|
||||||
pub main: MainInput,
|
pub main: MainInput,
|
||||||
pub constants: ConstInput,
|
pub constants: ConstantInput,
|
||||||
registers: Registers,
|
registers: Registers,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user