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-17T09·13+0300
committertazjin <mail@tazj.in>2021-01-17T09·34+0000
commitf8b3e2a100fdb28cad24948703439d2964c31580 (patch)
treefdd7b13f4a359532f6acaa183d78e7d777f5c32d /users/tazjin/rlox/src/interpreter
parent052f8976bb3273d16fb0e1c4643de5abcaf0f135 (diff)
refactor(tazjin/rlox): Move treewalk interpreter into subdirectory r/2120
Change-Id: I9163f75db5a1ff75e1b1f81bad78fd9d8ddb104a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2409
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/builtins.rs25
-rw-r--r--users/tazjin/rlox/src/interpreter/tests.rs101
2 files changed, 0 insertions, 126 deletions
diff --git a/users/tazjin/rlox/src/interpreter/builtins.rs b/users/tazjin/rlox/src/interpreter/builtins.rs
deleted file mode 100644
index 6ed9f07c3ffa..000000000000
--- a/users/tazjin/rlox/src/interpreter/builtins.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-use std::fmt;
-use std::time::{SystemTime, UNIX_EPOCH};
-
-use crate::errors::Error;
-use crate::interpreter::Value;
-use crate::parser::Literal;
-
-pub trait Builtin: fmt::Debug {
-    fn arity(&self) -> usize;
-    fn call(&self, args: Vec<Value>) -> Result<Value, Error>;
-}
-
-// Builtin to return the current timestamp.
-#[derive(Debug)]
-pub struct Clock {}
-impl Builtin for Clock {
-    fn arity(&self) -> usize {
-        0
-    }
-
-    fn call(&self, _args: Vec<Value>) -> Result<Value, Error> {
-        let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
-        Ok(Value::Literal(Literal::Number(now.as_secs() as f64)))
-    }
-}
diff --git a/users/tazjin/rlox/src/interpreter/tests.rs b/users/tazjin/rlox/src/interpreter/tests.rs
deleted file mode 100644
index 34b1df34b0b6..000000000000
--- a/users/tazjin/rlox/src/interpreter/tests.rs
+++ /dev/null
@@ -1,101 +0,0 @@
-use super::*;
-
-/// Evaluate a code snippet, returning a value.
-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()
-        .interpret(program)
-        .expect("could not eval code")
-}
-
-#[test]
-fn test_if() {
-    let result = parse_eval(
-        r#"
-if (42 > 23)
-  "pass";
-else
-  "fail";
-"#,
-    );
-
-    assert_eq!(Value::Literal(Literal::String("pass".into())), result,);
-}
-
-#[test]
-fn test_scope() {
-    let result = parse_eval(
-        r#"
-var result = "";
-
-var a = "global a, ";
-var b = "global b, ";
-var c = "global c";
-
-{
-  var a = "outer a, ";
-  var b = "outer b, ";
-
-  {
-    var a = "inner a, ";
-    result = a + b + c;
-  }
-}
-"#,
-    );
-
-    assert_eq!(
-        Value::Literal(Literal::String("inner a, outer b, global c".into())),
-        result,
-    );
-}
-
-#[test]
-fn test_binary_operators() {
-    assert_eq!(Value::Literal(Literal::Number(42.0)), parse_eval("40 + 2;"));
-
-    assert_eq!(
-        Value::Literal(Literal::String("foobar".into())),
-        parse_eval("\"foo\" + \"bar\";")
-    );
-}
-
-#[test]
-fn test_functions() {
-    let result = parse_eval(
-        r#"
-fun add(a, b, c) {
-  a + b + c;
-}
-
-add(1, 2, 3);
-"#,
-    );
-
-    assert_eq!(Value::Literal(Literal::Number(6.0)), result);
-}
-
-#[test]
-fn test_closure() {
-    let result = parse_eval(
-        r#"
-fun makeCounter() {
-  var i = 0;
-  fun count() {
-    i = i + 1;
-  }
-
-  return count;
-}
-
-var counter = makeCounter();
-counter(); // "1".
-counter(); // "2".
-"#,
-    );
-
-    assert_eq!(Value::Literal(Literal::Number(2.0)), result);
-}