git.delta.rocks / jrsonnet / refs/commits / 9b267d56d788

difftreelog

feat(evaluator) create evaluator crate BREAKING CHANGE: rename Expr internals to not match Expr variants

Лач2020-05-16parent: #31dfb91.patch.diff
in: master

6 files changed

modifiedCargo.lockdiffbeforeafterboth
1# This file is automatically @generated by Cargo.1# This file is automatically @generated by Cargo.
2# It is not intended for manual editing.2# It is not intended for manual editing.
3[[package]]
4name = "jsonnet-evaluator"
5version = "0.1.0"
6dependencies = [
7 "jsonnet-parser",
8]
9
3[[package]]10[[package]]
4name = "jsonnet-parser"11name = "jsonnet-parser"
modifiedCargo.tomldiffbeforeafterboth
1[workspace]1[workspace]
2members = ["crates/jsonnet-parser"]2members = [
3 "crates/jsonnet-parser",
4 "crates/jsonnet-evaluator",
5]
36
addedcrates/jsonnet-evaluator/Cargo.tomldiffbeforeafterboth

no changes

addedcrates/jsonnet-evaluator/src/lib.rsdiffbeforeafterboth

no changes

modifiedcrates/jsonnet-parser/src/expr.rsdiffbeforeafterboth
43}43}
4444
45#[derive(Debug, Clone, PartialEq)]45#[derive(Debug, Clone, PartialEq)]
46pub enum UnaryOp {46pub enum UnaryOpType {
47 Plus,47 Plus,
48 Minus,48 Minus,
49 BitNot,49 BitNot,
50 Not,50 Not,
51}51}
5252
53#[derive(Debug, Clone, PartialEq)]53#[derive(Debug, Clone, PartialEq)]
54pub enum BinaryOp {54pub enum BinaryOpType {
55 Mul,55 Mul,
56 Div,56 Div,
57 Mod,57 Mod,
129}129}
130130
131#[derive(Debug, Clone, PartialEq)]131#[derive(Debug, Clone, PartialEq)]
132pub enum Literal {132pub enum ValueType {
133 Null,133 Null,
134 True,134 True,
135 False,135 False,
136}
137
138#[derive(Debug, Clone, PartialEq)]
139pub enum LiteralType {
136 This,140 This,
137 Super,141 Super,
138 Dollar,142 Dollar,
139}143}
140144
141/// Syntax base145/// Syntax base
142#[derive(Debug, Clone, PartialEq)]146#[derive(Debug, Clone, PartialEq)]
143pub enum Expr {147pub enum Expr {
148 Value(ValueType),
144 /// Plain value: null/true/false149 /// Plain value: null/true/false
145 Literal(Literal),150 Literal(LiteralType),
146151
147 /// String value: "hello"152 /// String value: "hello"
148 Str(String),153 Str(String),
177 Params(Params),182 Params(Params),
178 Args(Args),183 Args(Args),
179184
180 UnaryOp(UnaryOp, Box<Expr>),185 UnaryOp(UnaryOpType, Box<Expr>),
181 BinaryOp(Box<Expr>, BinaryOp, Box<Expr>),186 BinaryOp(Box<Expr>, BinaryOpType, Box<Expr>),
182 AssertExpr(AssertStmt, Box<Expr>),187 AssertExpr(AssertStmt, Box<Expr>),
183 LocalExpr(Vec<Bind>, Box<Expr>),188 LocalExpr(Vec<Bind>, Box<Expr>),
184189
modifiedcrates/jsonnet-parser/src/lib.rsdiffbeforeafterboth
1use peg::parser;1use peg::parser;
22
3pub mod expr;3mod expr;
4use expr::{Expr, Literal};4pub use expr::*;
55
6enum Suffix {6enum Suffix {
7 String(String),7 String(String),
101 cond_else,101 cond_else,
102 }}102 }}
103 pub rule expr_basic() -> Expr103 pub rule expr_basic() -> Expr
104 = "null" {Expr::Literal(Literal::Null)}104 = "null" {Expr::Value(ValueType::Null)}
105 / "true" {Expr::Literal(Literal::True)} / "false" {Expr::Literal(Literal::False)}105 / "true" {Expr::Value(ValueType::True)} / "false" {Expr::Value(ValueType::False)}
106
106 / "self" {Expr::Literal(Literal::This)} / "$" {Expr::Literal(Literal::Dollar)}107 / "self" {Expr::Literal(LiteralType::This)} / "$" {Expr::Literal(LiteralType::Dollar)}
107 / "super" {Expr::Literal(Literal::Super)}108 / "super" {Expr::Literal(LiteralType::Super)}
108109
109 / string_expr() / number_expr()110 / string_expr() / number_expr()
110 / array_expr()111 / array_expr()
124125
125 rule expr() -> Expr126 rule expr() -> Expr
126 = a:precedence! {127 = a:precedence! {
127 a:(@) __() "||" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Or, Box::new(b))}128 a:(@) __() "||" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Or, Box::new(b))}
128 --129 --
129 a:(@) __() "&&" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::And, Box::new(b))}130 a:(@) __() "&&" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::And, Box::new(b))}
130 --131 --
131 a:(@) __() "|" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::BitOr, Box::new(b))}132 a:(@) __() "|" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::BitOr, Box::new(b))}
132 --133 --
133 a:@ __() "^" __() b:(@) {Expr::BinaryOp(Box::new(a), expr::BinaryOp::BitXor, Box::new(b))}134 a:@ __() "^" __() b:(@) {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::BitXor, Box::new(b))}
134 --135 --
135 a:(@) __() "&" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::BitAnd, Box::new(b))}136 a:(@) __() "&" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::BitAnd, Box::new(b))}
136 --137 --
137 a:(@) __() "==" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Eq, Box::new(b))}138 a:(@) __() "==" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Eq, Box::new(b))}
138 a:(@) __() "!=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Ne, Box::new(b))}139 a:(@) __() "!=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Ne, Box::new(b))}
139 --140 --
140 a:(@) __() "<" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Lt, Box::new(b))}141 a:(@) __() "<" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Lt, Box::new(b))}
141 a:(@) __() ">" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Gt, Box::new(b))}142 a:(@) __() ">" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Gt, Box::new(b))}
142 a:(@) __() "<=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Lte, Box::new(b))}143 a:(@) __() "<=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Lte, Box::new(b))}
143 a:(@) __() ">=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Gte, Box::new(b))}144 a:(@) __() ">=" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Gte, Box::new(b))}
144 --145 --
145 a:(@) __() "<<" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Lhs, Box::new(b))}146 a:(@) __() "<<" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Lhs, Box::new(b))}
146 a:(@) __() ">>" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Rhs, Box::new(b))}147 a:(@) __() ">>" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Rhs, Box::new(b))}
147 --148 --
148 a:(@) __() "+" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Add, Box::new(b))}149 a:(@) __() "+" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Add, Box::new(b))}
149 a:(@) __() "-" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Sub, Box::new(b))}150 a:(@) __() "-" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Sub, Box::new(b))}
150 --151 --
151 a:(@) __() "*" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Mul, Box::new(b))}152 a:(@) __() "*" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Mul, Box::new(b))}
152 a:(@) __() "/" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Div, Box::new(b))}153 a:(@) __() "/" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Div, Box::new(b))}
153 a:(@) __() "%" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOp::Mod, Box::new(b))}154 a:(@) __() "%" __() b:@ {Expr::BinaryOp(Box::new(a), expr::BinaryOpType::Mod, Box::new(b))}
154 --155 --
155 e:expr_basic() {e}156 e:expr_basic() {e}
156 "(" __() e:expr_basic() __() ")" {Expr::Parened(Box::new(e))}157 "(" __() e:boxed_expr() __() ")" {Expr::Parened(e)}
157 } suffixes:(__() suffix:expr_suffix() {suffix})* {158 } suffixes:(__() suffix:expr_suffix() {suffix})* {
158 let mut cur = a;159 let mut cur = a;
159 for suffix in suffixes {160 for suffix in suffixes {
196 parse("2+2*2").unwrap(),197 parse("2+2*2").unwrap(),
197 Expr::BinaryOp(198 Expr::BinaryOp(
198 Box::new(Expr::Num(2.0)),199 Box::new(Expr::Num(2.0)),
199 BinaryOp::Add,200 BinaryOpType::Add,
200 Box::new(Expr::BinaryOp(201 Box::new(Expr::BinaryOp(
201 Box::new(Expr::Num(2.0)),202 Box::new(Expr::Num(2.0)),
202 BinaryOp::Mul,203 BinaryOpType::Mul,
203 Box::new(Expr::Num(2.0))204 Box::new(Expr::Num(2.0))
204 ))205 ))
205 )206 )