diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a170259..4fa8b7a 100755
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,8 @@ default:
stages:
- build
- - test
+ - test-frontend
+ - test-backend
compile-library:
stage: build
@@ -15,14 +16,22 @@ compile-decomposer:
script:
- cargo build --bin decomposer
-unit-test-language-frontend:
- stage: test
+unit-test-lexer:
+ stage: test-frontend
script:
- cargo test lexer
+
+unit-test-parser:
+ stage: test-frontend
+ script:
- cargo test parser
unit-test-number-package:
- stage: test
+ stage: test-backend
script:
- cargo test number
+unit-test-stackstack:
+ stage: test-backend
+ script:
+ - cargo test stackstack
diff --git a/Cargo.lock b/Cargo.lock
index 75350e7..e800b30 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,10 +2,6 @@
# It is not intended for manual editing.
version = 4
-[[package]]
-name = "amanita"
-version = "0.1.0"
-
[[package]]
name = "anstream"
version = "0.6.18"
@@ -116,10 +112,6 @@ dependencies = [
"mycelium",
]
-[[package]]
-name = "enoki"
-version = "0.1.0"
-
[[package]]
name = "heck"
version = "0.5.0"
diff --git a/mycelium/src/lib.rs b/mycelium/src/lib.rs
index e404294..bb8a157 100644
--- a/mycelium/src/lib.rs
+++ b/mycelium/src/lib.rs
@@ -25,5 +25,6 @@ pub mod sexpr;
pub mod lexer;
pub mod parser;
pub mod number;
+pub mod stackstack;
extern crate alloc;
diff --git a/mycelium/src/stackstack.rs b/mycelium/src/stackstack.rs
new file mode 100644
index 0000000..c772f99
--- /dev/null
+++ b/mycelium/src/stackstack.rs
@@ -0,0 +1,234 @@
+/* Mycelium Scheme
+ * Copyright (C) 2025 Ava Affine
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+use core::fmt::{self, Debug, Formatter};
+use core::ops::Index;
+use alloc::rc::Rc;
+
+struct StackInner {
+ pub next: Stack,
+ pub data: T
+}
+
+struct Stack (Rc