Some code rearrangements
This commit is contained in:
parent
e8e9265b26
commit
276662d98a
@ -63,15 +63,15 @@ lazy_static! {
|
|||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref BINOPS: HashMap<&'static str, (Type, (), i32)> =
|
static ref BINOPS: HashMap<&'static str, (Type, (), i32)> =
|
||||||
hashmap! {
|
hashmap! {
|
||||||
"+" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 10),
|
"+" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 10),
|
||||||
"-" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 10),
|
"-" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 10),
|
||||||
"*" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20),
|
"*" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"/" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Float))))), (), 20),
|
"/" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Float))))), (), 20),
|
||||||
"//" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20), //TODO change this to `quot`
|
"//" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20), //TODO change this to `quot`
|
||||||
"%" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20),
|
"%" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"++" => (Func(bx!(Const(StringT)), bx!(Func(bx!(Const(StringT)), bx!(Const(StringT))))), (), 30),
|
"++" => (Func(bx!(Const(StringT)), bx!(Func(bx!(Const(StringT)), bx!(Const(StringT))))), (), 30),
|
||||||
"^" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20),
|
"^" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"&" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20),
|
"&" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
"|" => (Func(bx!(Const(Int)), bx!(Func(bx!(Const(Int)), bx!(Const(Int))))), (), 20),
|
"|" => (Func(bx!(Const(Nat)), bx!(Func(bx!(Const(Nat)), bx!(Const(Nat))))), (), 20),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -34,15 +34,33 @@ pub struct Symbol {
|
|||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub enum Type {
|
pub enum Type {
|
||||||
Const(TConst),
|
Const(TConst),
|
||||||
Sum(Vec<Type>),
|
Var(TVar),
|
||||||
Func(Box<Type>, Box<Type>),
|
Func(Box<Type>, Box<Type>),
|
||||||
//UVar(String),
|
//UVar(String),
|
||||||
//EVar(u64),
|
//EVar(u64),
|
||||||
|
Sum(Vec<Type>),
|
||||||
Void
|
Void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
|
pub struct TVar(String);
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
|
pub enum TConst {
|
||||||
|
Unit,
|
||||||
|
Nat,
|
||||||
|
Int,
|
||||||
|
Float,
|
||||||
|
StringT,
|
||||||
|
Bool,
|
||||||
|
Custom(String),
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Display for Type {
|
impl fmt::Display for Type {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{:?}", self)
|
||||||
|
/*
|
||||||
use self::Type::*;
|
use self::Type::*;
|
||||||
match self {
|
match self {
|
||||||
&Const(ref c) => write!(f, "{:?}", c),
|
&Const(ref c) => write!(f, "{:?}", c),
|
||||||
@ -61,6 +79,7 @@ impl fmt::Display for Type {
|
|||||||
//&EVar(ref n) => write!(f, "{}_e", n),
|
//&EVar(ref n) => write!(f, "{}_e", n),
|
||||||
&Void => write!(f, "Void")
|
&Void => write!(f, "Void")
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,17 +101,6 @@ impl UVarGenerator {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
|
||||||
pub enum TConst {
|
|
||||||
Unit,
|
|
||||||
Nat,
|
|
||||||
Int,
|
|
||||||
Float,
|
|
||||||
StringT,
|
|
||||||
Bool,
|
|
||||||
Custom(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO get rid of this, just instantiate builtin types to the environment
|
//TODO get rid of this, just instantiate builtin types to the environment
|
||||||
impl parsing::TypeName {
|
impl parsing::TypeName {
|
||||||
fn to_type(&self) -> TypeResult<Type> {
|
fn to_type(&self) -> TypeResult<Type> {
|
||||||
@ -274,15 +282,6 @@ impl TypeContext {
|
|||||||
}
|
}
|
||||||
Ok(Sum(types))
|
Ok(Sum(types))
|
||||||
},
|
},
|
||||||
/*
|
|
||||||
Index {
|
|
||||||
indexee: Box<Expression>,
|
|
||||||
indexers: Vec<Expression>,
|
|
||||||
},
|
|
||||||
IfExpression(Box<Expression>, Vec<Statement>, Option<Vec<Statement>>),
|
|
||||||
MatchExpression(Box<Expression>, Vec<MatchArm>),
|
|
||||||
ForExpression
|
|
||||||
*/
|
|
||||||
_ => Err(format!("Type not yet implemented"))
|
_ => Err(format!("Type not yet implemented"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user