diff options
Diffstat (limited to 'src/types/mod.rs')
| -rw-r--r-- | src/types/mod.rs | 42 |
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 |
