mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-02 16:21:11 +00:00
add new AliasVariables type
This commit is contained in:
parent
c8007201b0
commit
67182baa81
1 changed files with 55 additions and 0 deletions
|
@ -850,6 +850,61 @@ pub enum Content {
|
|||
Error,
|
||||
}
|
||||
|
||||
struct AliasVariables {
|
||||
lowercases_start: u32,
|
||||
variables_start: u32,
|
||||
lowercases_len: u16,
|
||||
variables_len: u16,
|
||||
}
|
||||
impl AliasVariables {
|
||||
pub const fn names(&self) -> SubsSlice<Lowercase> {
|
||||
SubsSlice::new(self.variables_start, self.variables_len)
|
||||
}
|
||||
|
||||
pub const fn variables(&self) -> VariableSubsSlice {
|
||||
VariableSubsSlice {
|
||||
slice: SubsSlice::new(self.variables_start, self.variables_len),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert_into_subs<I1, I2>(
|
||||
subs: &mut Subs,
|
||||
type_arguments: I1,
|
||||
unnamed_arguments: I2,
|
||||
) -> Self
|
||||
where
|
||||
I1: IntoIterator<Item = (Lowercase, Variable)>,
|
||||
I2: IntoIterator<Item = Variable>,
|
||||
{
|
||||
let lowercases_start = subs.field_names.len() as u32;
|
||||
let variables_start = subs.variables.len() as u32;
|
||||
|
||||
let it1 = type_arguments.into_iter();
|
||||
let it2 = unnamed_arguments.into_iter();
|
||||
|
||||
subs.variables
|
||||
.reserve(it1.size_hint().0 + it2.size_hint().0);
|
||||
subs.field_names.reserve(it1.size_hint().0);
|
||||
|
||||
for (field_name, var) in it1 {
|
||||
subs.field_names.push(field_name);
|
||||
subs.variables.push(var);
|
||||
}
|
||||
|
||||
subs.variables.extend(it2);
|
||||
|
||||
let lowercases_len = (subs.field_names.len() as u32 - lowercases_start) as u16;
|
||||
let variables_len = (subs.variables.len() as u32 - variables_start) as u16;
|
||||
|
||||
Self {
|
||||
lowercases_start,
|
||||
variables_start,
|
||||
lowercases_len,
|
||||
variables_len,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Content {
|
||||
#[inline(always)]
|
||||
pub fn is_number(&self) -> bool {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue