From 395d086f0dce355ccdcf3da149c309826c539b48 Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 20 Nov 2021 00:31:28 +0100 Subject: Runtime types --- src/types/mod.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/types/mod.rs (limited to 'src/types/mod.rs') 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, + 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), + 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; + +type RefValueMap = RefCell; \ No newline at end of file -- cgit 1.4.1