mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
make Num.maxInt and Num.minInt work
This commit is contained in:
parent
e01a0970ee
commit
89e01c63d1
3 changed files with 59 additions and 3 deletions
|
@ -100,6 +100,36 @@ pub fn builtin_defs(var_store: &mut VarStore) -> MutMap<Symbol, Def> {
|
||||||
Symbol::NUM_ATAN => num_atan,
|
Symbol::NUM_ATAN => num_atan,
|
||||||
Symbol::NUM_ACOS => num_acos,
|
Symbol::NUM_ACOS => num_acos,
|
||||||
Symbol::NUM_ASIN => num_asin,
|
Symbol::NUM_ASIN => num_asin,
|
||||||
|
Symbol::NUM_MAX_INT => num_max_int,
|
||||||
|
Symbol::NUM_MIN_INT => num_min_int,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Num.maxInt : Int
|
||||||
|
fn num_max_int(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
|
let int_var = var_store.fresh();
|
||||||
|
let body = Int(int_var, i64::MAX);
|
||||||
|
|
||||||
|
Def {
|
||||||
|
annotation: None,
|
||||||
|
expr_var: int_var,
|
||||||
|
loc_expr: Located::at_zero(body),
|
||||||
|
loc_pattern: Located::at_zero(Pattern::Identifier(symbol)),
|
||||||
|
pattern_vars: SendMap::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Num.minInt : Int
|
||||||
|
fn num_min_int(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
|
let int_var = var_store.fresh();
|
||||||
|
let body = Int(int_var, i64::MIN);
|
||||||
|
|
||||||
|
Def {
|
||||||
|
annotation: None,
|
||||||
|
expr_var: int_var,
|
||||||
|
loc_expr: Located::at_zero(body),
|
||||||
|
loc_pattern: Located::at_zero(Pattern::Identifier(symbol)),
|
||||||
|
pattern_vars: SendMap::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -794,11 +794,23 @@ mod gen_num {
|
||||||
assert_evals_to!(
|
assert_evals_to!(
|
||||||
indoc!(
|
indoc!(
|
||||||
r#"
|
r#"
|
||||||
# Num.maxInt
|
Num.maxInt
|
||||||
Num.add (-1) Num.maxInt
|
|
||||||
"#
|
"#
|
||||||
),
|
),
|
||||||
1,
|
i64::MAX,
|
||||||
|
i64
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn num_min_int() {
|
||||||
|
assert_evals_to!(
|
||||||
|
indoc!(
|
||||||
|
r#"
|
||||||
|
Num.minInt
|
||||||
|
"#
|
||||||
|
),
|
||||||
|
i64::MIN,
|
||||||
i64
|
i64
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2029,6 +2029,20 @@ pub fn with_hole<'a>(
|
||||||
env.arena.alloc(Stmt::Ret(assigned)),
|
env.arena.alloc(Stmt::Ret(assigned)),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
} else if symbol.module_id() != env.home {
|
||||||
|
// TODO here we assume this is a 0-arity thunk. That's not true in general!
|
||||||
|
let result = call_by_name(
|
||||||
|
env,
|
||||||
|
procs,
|
||||||
|
variable,
|
||||||
|
symbol,
|
||||||
|
std::vec::Vec::new(),
|
||||||
|
layout_cache,
|
||||||
|
assigned,
|
||||||
|
env.arena.alloc(Stmt::Ret(assigned)),
|
||||||
|
);
|
||||||
|
dbg!(&procs.externals_we_need);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue