Skip to content

Commit ac41b84

Browse files
committed
optimize context requests using arc
1 parent 4fa32c5 commit ac41b84

File tree

7 files changed

+20
-16
lines changed

7 files changed

+20
-16
lines changed

cmd/tests/command.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ async fn test_command_eval() -> Result<(), Box<dyn std::error::Error>> {
3535
let mut command = new_command();
3636
let output = command
3737
.arg("eval")
38-
.arg(r#"println("{string}", "Hello Basjoofan!")"#)
38+
.arg(r#"println("{string}", "🍀 Hello Basjoofan!")"#)
3939
.output()
4040
.await?;
4141
assert!(output.status.success());
42-
assert_eq!(String::from_utf8(output.stdout)?, "Hello Basjoofan!\nnull\n");
42+
assert_eq!(String::from_utf8(output.stdout)?, "🍀 Hello Basjoofan!\nnull\n");
4343
Ok(())
4444
}
4545

lib/src/context.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,36 @@ use std::collections::HashMap;
77
use std::fmt::Display;
88
use std::fmt::Formatter;
99
use std::fmt::Result;
10+
use std::sync::Arc;
1011

1112
#[derive(Default)]
1213
pub struct Context {
1314
inner: HashMap<String, Value>,
14-
requests: HashMap<String, (String, Vec<Expr>)>,
15+
requests: Arc<HashMap<String, (String, Vec<Expr>)>>,
1516
records: Vec<Record>,
1617
}
1718

1819
impl Context {
1920
pub fn new() -> Self {
2021
Self {
2122
inner: HashMap::new(),
22-
requests: HashMap::new(),
23+
requests: Arc::new(HashMap::new()),
2324
records: Vec::new(),
2425
}
2526
}
2627

2728
pub fn from(inner: HashMap<String, Value>) -> Self {
2829
Self {
2930
inner,
30-
requests: HashMap::new(),
31+
requests: Arc::new(HashMap::new()),
3132
records: Vec::new(),
3233
}
3334
}
3435

3536
pub fn extend(&mut self, requests: HashMap<String, (String, Vec<Expr>)>) {
36-
self.requests.extend(requests);
37+
if let Some(inner) = Arc::get_mut(&mut self.requests) {
38+
inner.extend(requests);
39+
}
3740
}
3841

3942
pub fn get(&self, key: &str) -> Option<&Value> {

lib/src/evaluator.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,9 @@ async fn eval_list(items: &[Expr], context: &mut Context) -> Result<Vec<Value>,
248248
#[cfg(test)]
249249
mod tests {
250250
use super::eval_block;
251-
use crate::parser::Parser;
252-
use crate::parser::Source;
253251
use crate::Context;
252+
use crate::Parser;
253+
use crate::Source;
254254
use crate::Value;
255255
use std::collections::HashMap;
256256

lib/src/lexer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ fn test_segment() {
357357
assert_eq!(expect.len(), tokens.len());
358358
for (i, (kind, literal)) in expect.into_iter().enumerate() {
359359
let token = tokens.get(i).unwrap();
360-
assert!(kind == token.kind);
360+
assert_eq!(kind, token.kind);
361361
assert_eq!(literal, token.literal);
362362
}
363363
}

lib/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ use value::Value;
2020
pub use context::Context;
2121
pub use evaluator::eval_block;
2222
pub use parser::Parser;
23-
pub use parser::Source;
2423
pub use stat::Stats;
24+
pub use syntax::Source;
2525
pub use writer::Writer;
2626

2727
#[cfg(test)]

lib/src/parser.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
use crate::lexer;
22
use crate::Expr;
33
use crate::Kind;
4+
use crate::Source;
45
use crate::Token;
56
use std::collections::HashMap;
67

7-
pub struct Source {
8-
pub exprs: Vec<Expr>,
9-
pub requests: HashMap<String, (String, Vec<Expr>)>,
10-
pub tests: HashMap<String, Vec<Expr>>,
11-
}
12-
138
pub struct Parser {
149
tokens: Vec<Token>,
1510
index: usize,

lib/src/syntax.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,9 @@ impl Debug for Expr {
111111
}
112112
}
113113
}
114+
115+
pub struct Source {
116+
pub exprs: Vec<Expr>,
117+
pub requests: HashMap<String, (String, Vec<Expr>)>,
118+
pub tests: HashMap<String, Vec<Expr>>,
119+
}

0 commit comments

Comments
 (0)