about summary refs log tree commit diff
path: root/users/tazjin/rlox/src/interpreter
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2021-01-14T15·36+0300
committertazjin <mail@tazj.in>2021-01-14T16·53+0000
commit20a6cfeee233bde9ba1f482fa4545f5e395d6235 (patch)
tree95c0f22e1fc187135fa66010e22e3ae13d2e5b3c /users/tazjin/rlox/src/interpreter
parent1d8e3f4f8b4479a47e744b3d153fe0e624958817 (diff)
refactor(tazjin/rlox): Let scanner tokens own their lexeme r/2107
This removes the runtime dependency on a borrow into the program
source code.

It's not yet ideal because there are a lot of tokens where we really
don't care about the lexeme, but this is what the book does and I
am not going to change that.

Change-Id: I888e18f98597766d6f725cbf9241e8eb2bd839e2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2394
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
Diffstat (limited to 'users/tazjin/rlox/src/interpreter')
-rw-r--r--users/tazjin/rlox/src/interpreter/tests.rs29
1 files changed, 10 insertions, 19 deletions
diff --git a/users/tazjin/rlox/src/interpreter/tests.rs b/users/tazjin/rlox/src/interpreter/tests.rs
index bf2cf61b0a76..5bc9f0a0a475 100644
--- a/users/tazjin/rlox/src/interpreter/tests.rs
+++ b/users/tazjin/rlox/src/interpreter/tests.rs
@@ -1,11 +1,8 @@
 use super::*;
 
-fn code(code: &str) -> Vec<char> {
-    code.chars().collect()
-}
-
 /// Evaluate a code snippet, returning a value.
-fn parse_eval<'a>(chars: &'a [char]) -> Value<'a> {
+fn parse_eval(code: &str) -> Value {
+    let chars: Vec<char> = code.chars().collect();
     let tokens = scanner::scan(&chars).expect("could not scan code");
     let program = parser::parse(tokens).expect("could not parse code");
     Interpreter::create()
@@ -15,7 +12,7 @@ fn parse_eval<'a>(chars: &'a [char]) -> Value<'a> {
 
 #[test]
 fn test_if() {
-    let code = code(
+    let result = parse_eval(
         r#"
 if (42 > 23)
   "pass";
@@ -24,15 +21,12 @@ else
 "#,
     );
 
-    assert_eq!(
-        Value::Literal(Literal::String("pass".into())),
-        parse_eval(&code)
-    );
+    assert_eq!(Value::Literal(Literal::String("pass".into())), result,);
 }
 
 #[test]
 fn test_scope() {
-    let code = code(
+    let result = parse_eval(
         r#"
 var result = "";
 
@@ -54,26 +48,23 @@ var c = "global c";
 
     assert_eq!(
         Value::Literal(Literal::String("inner a, outer b, global c".into())),
-        parse_eval(&code),
+        result,
     );
 }
 
 #[test]
 fn test_binary_operators() {
-    assert_eq!(
-        Value::Literal(Literal::Number(42.0)),
-        parse_eval(&code("40 + 2;"))
-    );
+    assert_eq!(Value::Literal(Literal::Number(42.0)), parse_eval("40 + 2;"));
 
     assert_eq!(
         Value::Literal(Literal::String("foobar".into())),
-        parse_eval(&code("\"foo\" + \"bar\";"))
+        parse_eval("\"foo\" + \"bar\";")
     );
 }
 
 #[test]
 fn test_functions() {
-    let code = code(
+    let result = parse_eval(
         r#"
 fun add(a, b, c) {
   a + b + c;
@@ -83,5 +74,5 @@ add(1, 2, 3);
 "#,
     );
 
-    assert_eq!(Value::Literal(Literal::Number(6.0)), parse_eval(&code));
+    assert_eq!(Value::Literal(Literal::Number(6.0)), result);
 }