Skip to content

Commit 091fd60

Browse files
stepanchegfacebook-github-bot
authored andcommitted
move StmtCompiled to stmt.rs
Summary: It is better for it to live there. Reviewed By: ndmitchell Differential Revision: D30888375 fbshipit-source-id: 484fdf0fe02b37f7eba6bd828d37ebb71c10b3c5
1 parent a175c50 commit 091fd60

File tree

3 files changed

+89
-86
lines changed

3 files changed

+89
-86
lines changed

starlark/src/eval/compiler/mod.rs

Lines changed: 1 addition & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -30,89 +30,7 @@ use crate::{
3030
use anyhow::anyhow;
3131
use gazebo::prelude::*;
3232
use once_cell::sync::Lazy;
33-
use std::{fmt::Debug, mem};
34-
35-
pub(crate) type StmtCompiled =
36-
Box<dyn for<'v> Fn(&mut Evaluator<'v, '_>) -> Result<(), EvalException<'v>> + Send + Sync>;
37-
38-
enum SmallVec1<T> {
39-
Empty,
40-
One(T),
41-
Many(Vec<T>),
42-
}
43-
44-
impl<T> SmallVec1<T> {
45-
fn extend(&mut self, stmts: SmallVec1<T>) {
46-
*self = match (mem::replace(self, SmallVec1::Empty), stmts) {
47-
(SmallVec1::Empty, right) => right,
48-
(left, SmallVec1::Empty) => left,
49-
(SmallVec1::One(left), SmallVec1::One(right)) => SmallVec1::Many(vec![left, right]),
50-
(SmallVec1::One(left), SmallVec1::Many(mut right)) => {
51-
right.insert(0, left);
52-
SmallVec1::Many(right)
53-
}
54-
(SmallVec1::Many(mut left), SmallVec1::One(right)) => {
55-
left.push(right);
56-
SmallVec1::Many(left)
57-
}
58-
(SmallVec1::Many(mut left), SmallVec1::Many(right)) => {
59-
left.extend(right);
60-
SmallVec1::Many(left)
61-
}
62-
}
63-
}
64-
}
65-
66-
pub(crate) struct StmtsCompiled(SmallVec1<StmtCompiled>);
67-
68-
impl StmtsCompiled {
69-
pub(crate) fn empty() -> StmtsCompiled {
70-
StmtsCompiled(SmallVec1::Empty)
71-
}
72-
73-
pub(crate) fn one(stmt: StmtCompiled) -> StmtsCompiled {
74-
StmtsCompiled(SmallVec1::One(stmt))
75-
}
76-
77-
pub(crate) fn len(&self) -> usize {
78-
match &self.0 {
79-
SmallVec1::Empty => 0,
80-
SmallVec1::One(_) => 1,
81-
SmallVec1::Many(stmts) => stmts.len(),
82-
}
83-
}
84-
85-
pub(crate) fn is_empty(&self) -> bool {
86-
match &self.0 {
87-
SmallVec1::Empty => true,
88-
SmallVec1::One(_) => false,
89-
SmallVec1::Many(stmts) => {
90-
debug_assert!(stmts.len() > 1);
91-
false
92-
}
93-
}
94-
}
95-
96-
pub(crate) fn extend(&mut self, right: StmtsCompiled) {
97-
self.0.extend(right.0);
98-
}
99-
100-
pub(crate) fn as_compiled(self) -> StmtCompiled {
101-
match self.0 {
102-
SmallVec1::Empty => box |_eval| Ok(()),
103-
SmallVec1::One(stmt) => stmt,
104-
SmallVec1::Many(vec) => {
105-
debug_assert!(vec.len() > 1);
106-
box move |eval| {
107-
for stmt in &vec {
108-
stmt(eval)?;
109-
}
110-
Ok(())
111-
}
112-
}
113-
}
114-
}
115-
}
33+
use std::fmt::Debug;
11634

11735
#[derive(Debug)]
11836
pub(crate) enum EvalException<'v> {

starlark/src/eval/fragment/def.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@ use crate::{
2626
scope::{
2727
Captured, CstAssignIdent, CstExpr, CstParameter, CstStmt, ScopeId, ScopeNames,
2828
},
29-
throw_eval_exception, Compiler, EvalException, StmtCompiled,
29+
throw_eval_exception, Compiler, EvalException,
30+
},
31+
fragment::{
32+
expr::{ExprCompiled, ExprCompiledValue},
33+
stmt::StmtCompiled,
3034
},
31-
fragment::expr::{ExprCompiled, ExprCompiledValue},
3235
runtime::{
3336
arguments::{ParameterKind, ParametersSpec},
3437
evaluator::Evaluator,

starlark/src/eval/fragment/stmt.rs

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use crate::{
2929
compiler::{
3030
expr_throw,
3131
scope::{Captured, CstAssign, CstExpr, CstStmt, Slot},
32-
throw, Compiler, EvalException, ExprEvalException, StmtsCompiled,
32+
throw, Compiler, EvalException, ExprEvalException,
3333
},
3434
fragment::{
3535
expr::{ExprCompiled, ExprCompiledValue},
@@ -45,6 +45,88 @@ use gazebo::prelude::*;
4545
use std::mem;
4646
use thiserror::Error;
4747

48+
pub(crate) type StmtCompiled =
49+
Box<dyn for<'v> Fn(&mut Evaluator<'v, '_>) -> Result<(), EvalException<'v>> + Send + Sync>;
50+
51+
enum SmallVec1<T> {
52+
Empty,
53+
One(T),
54+
Many(Vec<T>),
55+
}
56+
57+
impl<T> SmallVec1<T> {
58+
fn extend(&mut self, stmts: SmallVec1<T>) {
59+
*self = match (mem::replace(self, SmallVec1::Empty), stmts) {
60+
(SmallVec1::Empty, right) => right,
61+
(left, SmallVec1::Empty) => left,
62+
(SmallVec1::One(left), SmallVec1::One(right)) => SmallVec1::Many(vec![left, right]),
63+
(SmallVec1::One(left), SmallVec1::Many(mut right)) => {
64+
right.insert(0, left);
65+
SmallVec1::Many(right)
66+
}
67+
(SmallVec1::Many(mut left), SmallVec1::One(right)) => {
68+
left.push(right);
69+
SmallVec1::Many(left)
70+
}
71+
(SmallVec1::Many(mut left), SmallVec1::Many(right)) => {
72+
left.extend(right);
73+
SmallVec1::Many(left)
74+
}
75+
}
76+
}
77+
}
78+
79+
pub(crate) struct StmtsCompiled(SmallVec1<StmtCompiled>);
80+
81+
impl StmtsCompiled {
82+
pub(crate) fn empty() -> StmtsCompiled {
83+
StmtsCompiled(SmallVec1::Empty)
84+
}
85+
86+
pub(crate) fn one(stmt: StmtCompiled) -> StmtsCompiled {
87+
StmtsCompiled(SmallVec1::One(stmt))
88+
}
89+
90+
pub(crate) fn len(&self) -> usize {
91+
match &self.0 {
92+
SmallVec1::Empty => 0,
93+
SmallVec1::One(_) => 1,
94+
SmallVec1::Many(stmts) => stmts.len(),
95+
}
96+
}
97+
98+
pub(crate) fn is_empty(&self) -> bool {
99+
match &self.0 {
100+
SmallVec1::Empty => true,
101+
SmallVec1::One(_) => false,
102+
SmallVec1::Many(stmts) => {
103+
debug_assert!(stmts.len() > 1);
104+
false
105+
}
106+
}
107+
}
108+
109+
pub(crate) fn extend(&mut self, right: StmtsCompiled) {
110+
self.0.extend(right.0);
111+
}
112+
113+
pub(crate) fn as_compiled(self) -> StmtCompiled {
114+
match self.0 {
115+
SmallVec1::Empty => box |_eval| Ok(()),
116+
SmallVec1::One(stmt) => stmt,
117+
SmallVec1::Many(vec) => {
118+
debug_assert!(vec.len() > 1);
119+
box move |eval| {
120+
for stmt in &vec {
121+
stmt(eval)?;
122+
}
123+
Ok(())
124+
}
125+
}
126+
}
127+
}
128+
}
129+
48130
#[derive(Debug, Error)]
49131
enum AssignError {
50132
// Incorrect number of value to unpack (expected, got)

0 commit comments

Comments
 (0)