mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
Extract repeated min/max logic
This commit is contained in:
parent
bec222b0c3
commit
38f0a3717f
1 changed files with 40 additions and 228 deletions
|
@ -1238,272 +1238,54 @@ fn num_int_cast(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
|
|
||||||
/// Num.minI32: I32
|
/// Num.minI32: I32
|
||||||
fn num_min_i32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_min_i32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i32>(symbol, var_store, i32::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i32>(int_var, int_precision_var, i32::MIN);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.maxI32: I32
|
/// Num.maxI32: I32
|
||||||
fn num_max_i32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_max_i32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i32>(symbol, var_store, i32::MAX);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i32>(int_var, int_precision_var, i32::MAX);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.minU32: U32
|
/// Num.minU32: U32
|
||||||
fn num_min_u32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_min_u32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<u32>(symbol, var_store, u32::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<u32>(int_var, int_precision_var, u32::MIN);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.maxU32: U32
|
/// Num.maxU32: U32
|
||||||
fn num_max_u32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_max_u32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<u32>(symbol, var_store, u32::MAX);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<u32>(int_var, int_precision_var, u32::MAX);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.minI64: I64
|
/// Num.minI64: I64
|
||||||
fn num_min_i64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_min_i64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i64>(symbol, var_store, i64::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i64>(int_var, int_precision_var, i64::MIN);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.maxI64: I64
|
/// Num.maxI64: I64
|
||||||
fn num_max_i64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_max_i64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i64>(symbol, var_store, i64::MAX);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i64>(int_var, int_precision_var, i64::MAX);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.minU64: U64
|
/// Num.minU64: U64
|
||||||
fn num_min_u64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_min_u64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<u64>(symbol, var_store, u64::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<u64>(int_var, int_precision_var, u64::MIN);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.maxU64: U64
|
/// Num.maxU64: U64
|
||||||
fn num_max_u64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_max_u64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<u64>(symbol, var_store, iu64::MAX);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<u64>(int_var, int_precision_var, u64::MAX);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.minI128: I128
|
/// Num.minI128: I128
|
||||||
fn num_min_i128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_min_i128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i128>(symbol, var_store, i128::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i128>(int_var, int_precision_var, i128::MIN);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
pattern_vars: SendMap::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Num.maxI128: I128
|
/// Num.maxI128: I128
|
||||||
fn num_max_i128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn num_max_i128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let int_var = var_store.fresh();
|
int_min_or_max::<i128>(symbol, var_store, i128::MIN);
|
||||||
let int_precision_var = var_store.fresh();
|
|
||||||
let body = int::<i128>(int_var, int_precision_var, i128::MAX);
|
|
||||||
|
|
||||||
let std = roc_builtins::std::types();
|
|
||||||
let solved = std.get(&symbol).unwrap();
|
|
||||||
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
|
||||||
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
|
||||||
|
|
||||||
let annotation = crate::def::Annotation {
|
|
||||||
signature,
|
|
||||||
introduced_variables: Default::default(),
|
|
||||||
region: Region::zero(),
|
|
||||||
aliases: Default::default(),
|
|
||||||
};
|
|
||||||
|
|
||||||
Def {
|
|
||||||
annotation: Some(annotation),
|
|
||||||
expr_var: int_var,
|
|
||||||
loc_expr: Loc::at_zero(body),
|
|
||||||
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
|
||||||
pattern_vars: SendMap::default(),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// List.isEmpty : List * -> Bool
|
/// List.isEmpty : List * -> Bool
|
||||||
|
@ -5126,6 +4908,36 @@ fn defn_help(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
fn int_min_or_max<I128>(symbol: Symbol, var_store: &mut VarStore, i: I128) -> Def
|
||||||
|
where
|
||||||
|
I128: Into<i128>,
|
||||||
|
{
|
||||||
|
let int_var = var_store.fresh();
|
||||||
|
let int_precision_var = var_store.fresh();
|
||||||
|
let body = int::<I128>(int_var, int_precision_var, i);
|
||||||
|
|
||||||
|
let std = roc_builtins::std::types();
|
||||||
|
let solved = std.get(&symbol).unwrap();
|
||||||
|
let mut free_vars = roc_types::solved_types::FreeVars::default();
|
||||||
|
let signature = roc_types::solved_types::to_type(&solved.0, &mut free_vars, var_store);
|
||||||
|
|
||||||
|
let annotation = crate::def::Annotation {
|
||||||
|
signature,
|
||||||
|
introduced_variables: Default::default(),
|
||||||
|
region: Region::zero(),
|
||||||
|
aliases: Default::default(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Def {
|
||||||
|
annotation: Some(annotation),
|
||||||
|
expr_var: int_var,
|
||||||
|
loc_expr: Loc::at_zero(body),
|
||||||
|
loc_pattern: Loc::at_zero(Pattern::Identifier(symbol)),
|
||||||
|
pattern_vars: SendMap::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn int<I128>(num_var: Variable, precision_var: Variable, i: I128) -> Expr
|
fn int<I128>(num_var: Variable, precision_var: Variable, i: I128) -> Expr
|
||||||
where
|
where
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue