mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-12-23 10:12:21 +03:00
add exponentiation assignment
This commit is contained in:
parent
90658f362d
commit
e5513d7bcf
@ -1,5 +1,5 @@
|
|||||||
function main() -> (u32) {
|
function main() -> (u32) {
|
||||||
a = 2;
|
a = 2;
|
||||||
a /= 3;
|
a **= 3;
|
||||||
return a
|
return a
|
||||||
}
|
}
|
@ -89,6 +89,41 @@ pub enum BinaryOperator {
|
|||||||
Pow,
|
Pow,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::assign))]
|
||||||
|
pub struct Assign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_add_assign))]
|
||||||
|
pub struct AddAssign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_sub_assign))]
|
||||||
|
pub struct SubAssign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_mul_assign))]
|
||||||
|
pub struct MulAssign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_div_assign))]
|
||||||
|
pub struct DivAssign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_pow_assign))]
|
||||||
|
pub struct PowAssign {}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
|
#[pest_ast(rule(Rule::operation_assign))]
|
||||||
|
pub enum OperationAssign {
|
||||||
|
Assign(Assign),
|
||||||
|
AddAssign(AddAssign),
|
||||||
|
SubAssign(SubAssign),
|
||||||
|
MulAssign(MulAssign),
|
||||||
|
DivAssign(DivAssign),
|
||||||
|
PowAssign(PowAssign),
|
||||||
|
}
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
@ -851,36 +886,6 @@ pub struct DefinitionStatement<'ast> {
|
|||||||
pub span: Span<'ast>,
|
pub span: Span<'ast>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::assign))]
|
|
||||||
pub struct Assign {}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::operation_add_assign))]
|
|
||||||
pub struct AddAssign {}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::operation_sub_assign))]
|
|
||||||
pub struct SubAssign {}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::operation_mul_assign))]
|
|
||||||
pub struct MulAssign {}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::operation_div_assign))]
|
|
||||||
pub struct DivAssign {}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
|
||||||
#[pest_ast(rule(Rule::operation_assign))]
|
|
||||||
pub enum OperationAssign {
|
|
||||||
Assign(Assign),
|
|
||||||
AddAssign(AddAssign),
|
|
||||||
SubAssign(SubAssign),
|
|
||||||
MulAssign(MulAssign),
|
|
||||||
DivAssign(DivAssign),
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, FromPest, PartialEq)]
|
#[derive(Clone, Debug, FromPest, PartialEq)]
|
||||||
#[pest_ast(rule(Rule::statement_assign))]
|
#[pest_ast(rule(Rule::statement_assign))]
|
||||||
pub struct AssignStatement<'ast> {
|
pub struct AssignStatement<'ast> {
|
||||||
|
@ -44,11 +44,11 @@ operation_add_assign = { "+=" }
|
|||||||
operation_sub_assign = { "-=" }
|
operation_sub_assign = { "-=" }
|
||||||
operation_mul_assign = { "*=" }
|
operation_mul_assign = { "*=" }
|
||||||
operation_div_assign = { "/=" }
|
operation_div_assign = { "/=" }
|
||||||
|
operation_pow_assign = { "**=" }
|
||||||
|
|
||||||
operation_assign = {
|
operation_assign = {
|
||||||
assign
|
assign | operation_add_assign | operation_sub_assign |
|
||||||
| operation_add_assign | operation_sub_assign
|
operation_mul_assign | operation_div_assign | operation_pow_assign
|
||||||
| operation_mul_assign | operation_div_assign
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Types
|
/// Types
|
||||||
|
@ -420,6 +420,13 @@ impl<'ast, F: Field + PrimeField> From<ast::AssignStatement<'ast>> for types::St
|
|||||||
Box::new(types::Expression::from(statement.expression)),
|
Box::new(types::Expression::from(statement.expression)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
ast::OperationAssign::PowAssign(ref _assign) => types::Statement::Assign(
|
||||||
|
types::Assignee::from(statement.assignee),
|
||||||
|
types::Expression::Pow(
|
||||||
|
Box::new(converted),
|
||||||
|
Box::new(types::Expression::from(statement.expression)),
|
||||||
|
),
|
||||||
|
),
|
||||||
ast::OperationAssign::Assign(ref _assign) => {
|
ast::OperationAssign::Assign(ref _assign) => {
|
||||||
unimplemented!("cannot assign twice to assign statement")
|
unimplemented!("cannot assign twice to assign statement")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user