From 5672942c6b82e4a55147d3c90526039d4fc2c777 Mon Sep 17 00:00:00 2001 From: Alain Zscheile Date: Thu, 25 May 2023 09:14:02 +0200 Subject: [PATCH] +typesys crate --- Cargo.lock | 4 ++++ crates/wafl-typesys/Cargo.toml | 8 ++++++++ crates/wafl-typesys/src/lib.rs | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 crates/wafl-typesys/Cargo.toml create mode 100644 crates/wafl-typesys/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index e7f1ee2..05566f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -161,6 +161,10 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wafl-typesys" +version = "0.1.0" + [[package]] name = "windows-sys" version = "0.45.0" diff --git a/crates/wafl-typesys/Cargo.toml b/crates/wafl-typesys/Cargo.toml new file mode 100644 index 0000000..e8706d2 --- /dev/null +++ b/crates/wafl-typesys/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "wafl-typesys" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/crates/wafl-typesys/src/lib.rs b/crates/wafl-typesys/src/lib.rs new file mode 100644 index 0000000..68befaf --- /dev/null +++ b/crates/wafl-typesys/src/lib.rs @@ -0,0 +1,33 @@ +use core::fmt; +use std::collections::BTreeMap; +use std::sync::Arc; + +#[derive(Clone, Debug)] +pub enum Type { + Top, + Bot, + Primitive(PrimitiveType), + Union(Vec), + Inter(Vec), + Function(Box<(Type, Type)>), + Recursive(Arc, Box), + Variable(Arc), + Record(BTreeMap), +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum PrimitiveType { + Integer, +} + +#[derive(Debug)] +pub struct TypeVariable { + pub name_hint: String, + pub hash_: u32, +} + +impl fmt::Display for TypeVariable { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}:{:x}", self.name_hint, self.hash_) + } +}