mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-11-28 01:01:53 +03:00
add self and mut self to grammar module
This commit is contained in:
parent
2cb44160ab
commit
f8668303e3
@ -14,10 +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::{
|
use crate::{ast::Rule, circuits::CircuitVariableDefinition, functions::Function};
|
||||||
ast::Rule,
|
|
||||||
circuits::{CircuitFunction, CircuitVariableDefinition},
|
|
||||||
};
|
|
||||||
|
|
||||||
use pest_ast::FromPest;
|
use pest_ast::FromPest;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
@ -26,5 +23,5 @@ use serde::Serialize;
|
|||||||
#[pest_ast(rule(Rule::circuit_member))]
|
#[pest_ast(rule(Rule::circuit_member))]
|
||||||
pub enum CircuitMember<'ast> {
|
pub enum CircuitMember<'ast> {
|
||||||
CircuitVariableDefinition(CircuitVariableDefinition<'ast>),
|
CircuitVariableDefinition(CircuitVariableDefinition<'ast>),
|
||||||
CircuitFunction(CircuitFunction<'ast>),
|
CircuitFunction(Function<'ast>),
|
||||||
}
|
}
|
||||||
|
@ -23,8 +23,8 @@ pub use circuit_variable::*;
|
|||||||
pub mod circuit_variable_definition;
|
pub mod circuit_variable_definition;
|
||||||
pub use circuit_variable_definition::*;
|
pub use circuit_variable_definition::*;
|
||||||
|
|
||||||
pub mod circuit_function;
|
// pub mod circuit_function;
|
||||||
pub use circuit_function::*;
|
// pub use circuit_function::*;
|
||||||
|
|
||||||
pub mod circuit_member;
|
pub mod circuit_member;
|
||||||
pub use circuit_member::*;
|
pub use circuit_member::*;
|
||||||
|
@ -35,6 +35,9 @@ pub use line_end::*;
|
|||||||
pub mod mutable;
|
pub mod mutable;
|
||||||
pub use mutable::*;
|
pub use mutable::*;
|
||||||
|
|
||||||
|
pub mod mut_self_keyword;
|
||||||
|
pub use mut_self_keyword::*;
|
||||||
|
|
||||||
pub mod range;
|
pub mod range;
|
||||||
pub use range::*;
|
pub use range::*;
|
||||||
|
|
||||||
|
@ -14,18 +14,29 @@
|
|||||||
// 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::{ast::Rule, common::Static, functions::Function, SpanDef};
|
use crate::{
|
||||||
|
ast::Rule,
|
||||||
|
common::{Mutable, SelfKeyword},
|
||||||
|
SpanDef,
|
||||||
|
};
|
||||||
|
|
||||||
use pest::Span;
|
use pest::Span;
|
||||||
use pest_ast::FromPest;
|
use pest_ast::FromPest;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq, Serialize)]
|
#[derive(Clone, Debug, FromPest, PartialEq, Serialize)]
|
||||||
#[pest_ast(rule(Rule::circuit_function))]
|
#[pest_ast(rule(Rule::mut_self_keyword))]
|
||||||
pub struct CircuitFunction<'ast> {
|
pub struct MutSelfKeyword<'ast> {
|
||||||
pub _static: Option<Static>,
|
pub mutable: Mutable,
|
||||||
pub function: Function<'ast>,
|
pub self_keyword: SelfKeyword<'ast>,
|
||||||
#[pest_ast(outer())]
|
#[pest_ast(outer())]
|
||||||
#[serde(with = "SpanDef")]
|
#[serde(with = "SpanDef")]
|
||||||
pub span: Span<'ast>,
|
pub span: Span<'ast>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'ast> fmt::Display for MutSelfKeyword<'ast> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "mut {}", self.self_keyword)
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
ast::Rule,
|
ast::Rule,
|
||||||
|
common::{MutSelfKeyword, SelfKeyword},
|
||||||
functions::{FunctionInput, InputKeyword},
|
functions::{FunctionInput, InputKeyword},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -26,5 +27,7 @@ use serde::Serialize;
|
|||||||
#[pest_ast(rule(Rule::input))]
|
#[pest_ast(rule(Rule::input))]
|
||||||
pub enum Input<'ast> {
|
pub enum Input<'ast> {
|
||||||
InputKeyword(InputKeyword<'ast>),
|
InputKeyword(InputKeyword<'ast>),
|
||||||
|
SelfKeyword(SelfKeyword<'ast>),
|
||||||
|
MutSelfKeyword(MutSelfKeyword<'ast>),
|
||||||
FunctionInput(FunctionInput<'ast>),
|
FunctionInput(FunctionInput<'ast>),
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,9 @@ protected_name = {
|
|||||||
// Declared in common/self_keyword.rs
|
// Declared in common/self_keyword.rs
|
||||||
self_keyword = { "self" }
|
self_keyword = { "self" }
|
||||||
|
|
||||||
|
// Declared in common/mut_self_keyword.rs
|
||||||
|
mut_self_keyword = { mutable ~ self_keyword }
|
||||||
|
|
||||||
// Declared in common/self_keyword_or_identifier.rs
|
// Declared in common/self_keyword_or_identifier.rs
|
||||||
self_keyword_or_identifier = {
|
self_keyword_or_identifier = {
|
||||||
self_keyword
|
self_keyword
|
||||||
@ -321,11 +324,8 @@ circuit_variable = { identifier ~ ":" ~ expression }
|
|||||||
// Declared in circuits/circuit_variable_definition.rs
|
// Declared in circuits/circuit_variable_definition.rs
|
||||||
circuit_variable_definition = { mutable? ~ identifier ~ ":" ~ type_ ~ ","?}
|
circuit_variable_definition = { mutable? ~ identifier ~ ":" ~ type_ ~ ","?}
|
||||||
|
|
||||||
// Declared in circuits/circuit_function.rs
|
|
||||||
circuit_function = { static_? ~ function }
|
|
||||||
|
|
||||||
// Declared in circuits/circuit_member.rs
|
// Declared in circuits/circuit_member.rs
|
||||||
circuit_member = { circuit_function | circuit_variable_definition ~ NEWLINE*}
|
circuit_member = { function | circuit_variable_definition ~ NEWLINE*}
|
||||||
|
|
||||||
/// Conditionals
|
/// Conditionals
|
||||||
|
|
||||||
@ -429,6 +429,8 @@ input_keyword = { "input" }
|
|||||||
// Declared in functions/input/input.rs
|
// Declared in functions/input/input.rs
|
||||||
input = {
|
input = {
|
||||||
input_keyword
|
input_keyword
|
||||||
|
| self_keyword
|
||||||
|
| mut_self_keyword
|
||||||
| function_input
|
| function_input
|
||||||
}
|
}
|
||||||
input_tuple = _{ "(" ~ NEWLINE* ~ (input ~ ("," ~ NEWLINE* ~ input)* ~ ","?)? ~ NEWLINE* ~ ")"}
|
input_tuple = _{ "(" ~ NEWLINE* ~ (input ~ ("," ~ NEWLINE* ~ input)* ~ ","?)? ~ NEWLINE* ~ ")"}
|
||||||
|
Loading…
Reference in New Issue
Block a user