Replace Mark:: functions with consts

This commit is contained in:
Richard Feldman 2019-12-24 20:52:45 -08:00
parent f04d8f5b03
commit b715d3e2f8
3 changed files with 16 additions and 27 deletions

View file

@ -73,7 +73,7 @@ pub fn run(
let mut pools = Pools::default(); let mut pools = Pools::default();
let state = State { let state = State {
vars_by_symbol: vars_by_symbol.clone(), vars_by_symbol: vars_by_symbol.clone(),
mark: Mark::none().next(), mark: Mark::NONE.next(),
}; };
let rank = Rank::toplevel(); let rank = Rank::toplevel();
@ -661,7 +661,7 @@ fn register(subs: &mut Subs, rank: Rank, pools: &mut Pools, content: Content) ->
let var = subs.fresh(Descriptor { let var = subs.fresh(Descriptor {
content, content,
rank, rank,
mark: Mark::none(), mark: Mark::NONE,
copy: None, copy: None,
}); });

View file

@ -9,20 +9,9 @@ use std::sync::atomic::{AtomicUsize, Ordering};
pub struct Mark(i32); pub struct Mark(i32);
impl Mark { impl Mark {
#[inline(always)] pub const NONE: Mark = Mark(2);
pub fn none() -> Mark { pub const OCCURS: Mark = Mark(1);
Mark(2) pub const GET_VAR_NAMES: Mark = Mark(1);
}
#[inline(always)]
pub fn occurs() -> Mark {
Mark(1)
}
#[inline(always)]
pub fn get_var_names() -> Mark {
Mark(0)
}
#[inline(always)] #[inline(always)]
pub fn next(self) -> Mark { pub fn next(self) -> Mark {
@ -32,11 +21,11 @@ impl Mark {
impl fmt::Debug for Mark { impl fmt::Debug for Mark {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if self == &Mark::none() { if self == &Mark::NONE {
write!(f, "none") write!(f, "none")
} else if self == &Mark::occurs() { } else if self == &Mark::OCCURS {
write!(f, "occurs") write!(f, "occurs")
} else if self == &Mark::get_var_names() { } else if self == &Mark::GET_VAR_NAMES {
write!(f, "get_var_names") write!(f, "get_var_names")
} else { } else {
write!(f, "Mark({})", self.0) write!(f, "Mark({})", self.0)
@ -251,7 +240,7 @@ impl Subs {
Descriptor { Descriptor {
content: content.clone(), content: content.clone(),
rank: Rank::NONE, rank: Rank::NONE,
mark: Mark::none(), mark: Mark::NONE,
copy: None, copy: None,
}, },
); );
@ -343,7 +332,7 @@ impl From<Content> for Descriptor {
Descriptor { Descriptor {
content, content,
rank: Rank::NONE, rank: Rank::NONE,
mark: Mark::none(), mark: Mark::NONE,
copy: None, copy: None,
} }
} }
@ -436,10 +425,10 @@ fn get_var_names(
use self::Content::*; use self::Content::*;
let desc = subs.get(var); let desc = subs.get(var);
if desc.mark == Mark::get_var_names() { if desc.mark == Mark::GET_VAR_NAMES {
taken_names taken_names
} else { } else {
subs.set_mark(var, Mark::get_var_names()); subs.set_mark(var, Mark::GET_VAR_NAMES);
match desc.content { match desc.content {
Error(_) | FlexVar(None) => taken_names, Error(_) | FlexVar(None) => taken_names,
@ -534,10 +523,10 @@ where
fn var_to_err_type(subs: &mut Subs, state: &mut NameState, var: Variable) -> ErrorType { fn var_to_err_type(subs: &mut Subs, state: &mut NameState, var: Variable) -> ErrorType {
let desc = subs.get(var); let desc = subs.get(var);
if desc.mark == Mark::occurs() { if desc.mark == Mark::OCCURS {
ErrorType::Infinite ErrorType::Infinite
} else { } else {
subs.set_mark(var, Mark::occurs()); subs.set_mark(var, Mark::OCCURS);
let err_type = content_to_err_type(subs, state, var, desc.content); let err_type = content_to_err_type(subs, state, var, desc.content);

View file

@ -442,7 +442,7 @@ fn merge(subs: &mut Subs, ctx: &Context, content: Content) {
let desc = Descriptor { let desc = Descriptor {
content, content,
rank, rank,
mark: Mark::none(), mark: Mark::NONE,
copy: None, copy: None,
}; };
@ -463,7 +463,7 @@ fn fresh(subs: &mut Subs, pool: &mut Pool, ctx: &Context, content: Content) -> V
Descriptor { Descriptor {
content, content,
rank: ctx.first_desc.rank.min(ctx.second_desc.rank), rank: ctx.first_desc.rank.min(ctx.second_desc.rank),
mark: Mark::none(), mark: Mark::NONE,
copy: None, copy: None,
}, },
pool, pool,