diff options
| author | Mel <einebeere@gmail.com> | 2021-11-20 00:31:28 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2021-11-20 00:31:28 +0100 |
| commit | 395d086f0dce355ccdcf3da149c309826c539b48 (patch) | |
| tree | 888ad59d8fcebcec0c04bcfd13364889c5047349 /src/types/mod.rs | |
| parent | 334f70f5a2f63ec636ac1a8bc375ce51effba424 (diff) | |
| download | rabbithole-395d086f0dce355ccdcf3da149c309826c539b48.tar.zst rabbithole-395d086f0dce355ccdcf3da149c309826c539b48.zip | |
Runtime types
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 |
