about summary refs log tree commit diff
path: root/src/types/mod.rs
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-11-20 00:31:28 +0100
committerMel <einebeere@gmail.com>2021-11-20 00:31:28 +0100
commit395d086f0dce355ccdcf3da149c309826c539b48 (patch)
tree888ad59d8fcebcec0c04bcfd13364889c5047349 /src/types/mod.rs
parent334f70f5a2f63ec636ac1a8bc375ce51effba424 (diff)
downloadrabbithole-395d086f0dce355ccdcf3da149c309826c539b48.tar.zst
rabbithole-395d086f0dce355ccdcf3da149c309826c539b48.zip
Runtime types
Diffstat (limited to 'src/types/mod.rs')
-rw-r--r--src/types/mod.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/types/mod.rs b/src/types/mod.rs
new file mode 100644
index 0000000..f3257eb
--- /dev/null
+++ b/src/types/mod.rs
@@ -0,0 +1,42 @@
+pub mod bag;
+
+use std::cell::RefCell;
+use std::collections::HashMap;
+
+use crate::interpret::value::ValueMap;
+use crate::parse::ast::nodes::Identifier;
+
+#[derive(Debug, Clone)]
+pub struct Type {
+    variant: Box<TypeVariant>,
+    global_associated_values: &'static RefValueMap,
+}
+
+#[derive(Debug, Clone)]
+pub enum TypeVariant {
+    // Concrete types
+    Str,
+    Int,
+    Float,
+    Bool,
+    Void,
+    Fn {
+        parameters: TypeMap,
+        returns: Type,
+    },
+    Array(Type),
+    Tuple(Vec<Type>),
+    Data {
+        data: TypeMap,
+        associated_values: RefValueMap,
+    },
+    // TODO: Implement abstract types.
+    // These should also definitely have `associated_values`,
+    // but as they're not implemented yet...
+    Face(TypeMap),
+    Var(TypeMap),
+}
+
+type TypeMap = HashMap<Identifier, Type>;
+
+type RefValueMap = RefCell<ValueMap>;
\ No newline at end of file