forked from M-Labs/nac3
core/builtins: Rework handling of PrimitiveStore-Unifier tuples
This commit is contained in:
parent
d0766a116f
commit
f58c3a11f8
|
@ -103,7 +103,7 @@ pub fn get_exn_constructor(
|
||||||
/// [parameter type][Type] and the parameter symbol name.
|
/// [parameter type][Type] and the parameter symbol name.
|
||||||
/// * `codegen_callback`: A lambda generating LLVM IR for the implementation of this function.
|
/// * `codegen_callback`: A lambda generating LLVM IR for the implementation of this function.
|
||||||
fn create_fn_by_codegen(
|
fn create_fn_by_codegen(
|
||||||
primitives: &mut (PrimitiveStore, Unifier),
|
unifier: &mut Unifier,
|
||||||
var_map: &VarMap,
|
var_map: &VarMap,
|
||||||
name: &'static str,
|
name: &'static str,
|
||||||
ret_ty: Type,
|
ret_ty: Type,
|
||||||
|
@ -113,7 +113,7 @@ fn create_fn_by_codegen(
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: name.into(),
|
name: name.into(),
|
||||||
simple_name: name.into(),
|
simple_name: name.into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: param_ty.iter().map(|p| FuncArg {
|
args: param_ty.iter().map(|p| FuncArg {
|
||||||
name: p.1.into(),
|
name: p.1.into(),
|
||||||
ty: p.0,
|
ty: p.0,
|
||||||
|
@ -139,7 +139,7 @@ fn create_fn_by_codegen(
|
||||||
/// [parameter type][Type] and the parameter symbol name.
|
/// [parameter type][Type] and the parameter symbol name.
|
||||||
/// * `intrinsic_fn`: The fully-qualified name of the LLVM intrinsic function.
|
/// * `intrinsic_fn`: The fully-qualified name of the LLVM intrinsic function.
|
||||||
fn create_fn_by_intrinsic(
|
fn create_fn_by_intrinsic(
|
||||||
primitives: &mut (PrimitiveStore, Unifier),
|
unifier: &mut Unifier,
|
||||||
var_map: &VarMap,
|
var_map: &VarMap,
|
||||||
name: &'static str,
|
name: &'static str,
|
||||||
ret_ty: Type,
|
ret_ty: Type,
|
||||||
|
@ -151,7 +151,7 @@ fn create_fn_by_intrinsic(
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
var_map,
|
var_map,
|
||||||
name,
|
name,
|
||||||
ret_ty,
|
ret_ty,
|
||||||
|
@ -203,7 +203,7 @@ fn create_fn_by_intrinsic(
|
||||||
/// * `attrs`: The list of attributes to apply to this function declaration. Note that `nounwind` is
|
/// * `attrs`: The list of attributes to apply to this function declaration. Note that `nounwind` is
|
||||||
/// already implied by the C ABI.
|
/// already implied by the C ABI.
|
||||||
fn create_fn_by_extern(
|
fn create_fn_by_extern(
|
||||||
primitives: &mut (PrimitiveStore, Unifier),
|
unifier: &mut Unifier,
|
||||||
var_map: &VarMap,
|
var_map: &VarMap,
|
||||||
name: &'static str,
|
name: &'static str,
|
||||||
ret_ty: Type,
|
ret_ty: Type,
|
||||||
|
@ -216,7 +216,7 @@ fn create_fn_by_extern(
|
||||||
.collect_vec();
|
.collect_vec();
|
||||||
|
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
var_map,
|
var_map,
|
||||||
name,
|
name,
|
||||||
ret_ty,
|
ret_ty,
|
||||||
|
@ -269,32 +269,36 @@ fn create_fn_by_extern(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
pub fn get_builtins(unifier: &mut Unifier, primitives: &PrimitiveStore) -> BuiltinInfo {
|
||||||
let int32 = primitives.0.int32;
|
let PrimitiveStore {
|
||||||
let int64 = primitives.0.int64;
|
int32,
|
||||||
let uint32 = primitives.0.uint32;
|
int64,
|
||||||
let uint64 = primitives.0.uint64;
|
uint32,
|
||||||
let float = primitives.0.float;
|
uint64,
|
||||||
let boolean = primitives.0.bool;
|
float,
|
||||||
let range = primitives.0.range;
|
bool: boolean,
|
||||||
let string = primitives.0.str;
|
range,
|
||||||
let ndarray = primitives.0.ndarray;
|
str: string,
|
||||||
let ndarray_float = make_ndarray_ty(&mut primitives.1, &primitives.0, Some(float), None);
|
ndarray,
|
||||||
|
..
|
||||||
|
} = *primitives;
|
||||||
|
|
||||||
|
let ndarray_float = make_ndarray_ty(unifier, &primitives, Some(float), None);
|
||||||
let ndarray_float_2d = {
|
let ndarray_float_2d = {
|
||||||
let value = match primitives.0.size_t {
|
let value = match primitives.size_t {
|
||||||
64 => SymbolValue::U64(2u64),
|
64 => SymbolValue::U64(2u64),
|
||||||
32 => SymbolValue::U32(2u32),
|
32 => SymbolValue::U32(2u32),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
let ndims = primitives.1.add_ty(TypeEnum::TLiteral {
|
let ndims = unifier.add_ty(TypeEnum::TLiteral {
|
||||||
values: vec![value],
|
values: vec![value],
|
||||||
loc: None,
|
loc: None,
|
||||||
});
|
});
|
||||||
|
|
||||||
make_ndarray_ty(&mut primitives.1, &primitives.0, Some(float), Some(ndims))
|
make_ndarray_ty(unifier, &primitives, Some(float), Some(ndims))
|
||||||
};
|
};
|
||||||
let list_int32 = primitives.1.add_ty(TypeEnum::TList { ty: int32 });
|
let list_int32 = unifier.add_ty(TypeEnum::TList { ty: int32 });
|
||||||
let num_ty = primitives.1.get_fresh_var_with_range(
|
let num_ty = unifier.get_fresh_var_with_range(
|
||||||
&[int32, int64, float, boolean, uint32, uint64],
|
&[int32, int64, float, boolean, uint32, uint64],
|
||||||
Some("N".into()),
|
Some("N".into()),
|
||||||
None,
|
None,
|
||||||
|
@ -317,7 +321,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
// and they are methods under the same class `Option`
|
// and they are methods under the same class `Option`
|
||||||
let (is_some_ty, unwrap_ty, (option_ty_var, option_ty_var_id)) =
|
let (is_some_ty, unwrap_ty, (option_ty_var, option_ty_var_id)) =
|
||||||
if let TypeEnum::TObj { fields, params, .. } =
|
if let TypeEnum::TObj { fields, params, .. } =
|
||||||
primitives.1.get_ty(primitives.0.option).as_ref()
|
unifier.get_ty(primitives.option).as_ref()
|
||||||
{
|
{
|
||||||
(
|
(
|
||||||
*fields.get(&"is_some".into()).unwrap(),
|
*fields.get(&"is_some".into()).unwrap(),
|
||||||
|
@ -332,7 +336,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
fields: ndarray_fields,
|
fields: ndarray_fields,
|
||||||
params: ndarray_params,
|
params: ndarray_params,
|
||||||
..
|
..
|
||||||
} = &*primitives.1.get_ty(primitives.0.ndarray) else {
|
} = &*unifier.get_ty(primitives.ndarray) else {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -566,7 +570,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "int32".into(),
|
name: "int32".into(),
|
||||||
simple_name: "int32".into(),
|
simple_name: "int32".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: int32,
|
ret: int32,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -641,7 +645,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "int64".into(),
|
name: "int64".into(),
|
||||||
simple_name: "int64".into(),
|
simple_name: "int64".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: int64,
|
ret: int64,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -715,7 +719,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "uint32".into(),
|
name: "uint32".into(),
|
||||||
simple_name: "uint32".into(),
|
simple_name: "uint32".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: uint32,
|
ret: uint32,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -804,7 +808,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "uint64".into(),
|
name: "uint64".into(),
|
||||||
simple_name: "uint64".into(),
|
simple_name: "uint64".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: uint64,
|
ret: uint64,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -879,7 +883,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "float".into(),
|
name: "float".into(),
|
||||||
simple_name: "float".into(),
|
simple_name: "float".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: float,
|
ret: float,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -931,7 +935,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
loc: None,
|
loc: None,
|
||||||
})),
|
})),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_ndarray",
|
"np_ndarray",
|
||||||
ndarray_float,
|
ndarray_float,
|
||||||
|
@ -944,7 +948,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_empty",
|
"np_empty",
|
||||||
ndarray_float,
|
ndarray_float,
|
||||||
|
@ -957,7 +961,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_zeros",
|
"np_zeros",
|
||||||
ndarray_float,
|
ndarray_float,
|
||||||
|
@ -970,7 +974,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_ones",
|
"np_ones",
|
||||||
ndarray_float,
|
ndarray_float,
|
||||||
|
@ -983,10 +987,10 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
{
|
{
|
||||||
let tv = primitives.1.get_fresh_var(Some("T".into()), None).0;
|
let tv = unifier.get_fresh_var(Some("T".into()), None).0;
|
||||||
|
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_full",
|
"np_full",
|
||||||
ndarray,
|
ndarray,
|
||||||
|
@ -1002,7 +1006,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "np_eye".into(),
|
name: "np_eye".into(),
|
||||||
simple_name: "np_eye".into(),
|
simple_name: "np_eye".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![
|
args: vec![
|
||||||
FuncArg { name: "N".into(), ty: int32, default_value: None },
|
FuncArg { name: "N".into(), ty: int32, default_value: None },
|
||||||
// TODO(Derppening): Default values current do not work?
|
// TODO(Derppening): Default values current do not work?
|
||||||
|
@ -1029,7 +1033,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
loc: None,
|
loc: None,
|
||||||
})),
|
})),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_identity",
|
"np_identity",
|
||||||
ndarray_float_2d,
|
ndarray_float_2d,
|
||||||
|
@ -1040,7 +1044,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"round",
|
"round",
|
||||||
int32,
|
int32,
|
||||||
|
@ -1060,7 +1064,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"round64",
|
"round64",
|
||||||
int64,
|
int64,
|
||||||
|
@ -1080,7 +1084,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_round",
|
"np_round",
|
||||||
float,
|
float,
|
||||||
|
@ -1098,7 +1102,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "range".into(),
|
name: "range".into(),
|
||||||
simple_name: "range".into(),
|
simple_name: "range".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![
|
args: vec![
|
||||||
FuncArg { name: "start".into(), ty: int32, default_value: None },
|
FuncArg { name: "start".into(), ty: int32, default_value: None },
|
||||||
FuncArg {
|
FuncArg {
|
||||||
|
@ -1203,7 +1207,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "str".into(),
|
name: "str".into(),
|
||||||
simple_name: "str".into(),
|
simple_name: "str".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "s".into(), ty: string, default_value: None }],
|
args: vec![FuncArg { name: "s".into(), ty: string, default_value: None }],
|
||||||
ret: string,
|
ret: string,
|
||||||
vars: VarMap::default(),
|
vars: VarMap::default(),
|
||||||
|
@ -1223,9 +1227,9 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "bool".into(),
|
name: "bool".into(),
|
||||||
simple_name: "bool".into(),
|
simple_name: "bool".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: primitives.0.bool,
|
ret: primitives.bool,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
})),
|
})),
|
||||||
var_id: Vec::default(),
|
var_id: Vec::default(),
|
||||||
|
@ -1287,7 +1291,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
loc: None,
|
loc: None,
|
||||||
})),
|
})),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"floor",
|
"floor",
|
||||||
int32,
|
int32,
|
||||||
|
@ -1307,7 +1311,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"floor64",
|
"floor64",
|
||||||
int64,
|
int64,
|
||||||
|
@ -1327,7 +1331,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_floor",
|
"np_floor",
|
||||||
float,
|
float,
|
||||||
|
@ -1342,7 +1346,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"ceil",
|
"ceil",
|
||||||
int32,
|
int32,
|
||||||
|
@ -1362,7 +1366,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"ceil64",
|
"ceil64",
|
||||||
int64,
|
int64,
|
||||||
|
@ -1382,7 +1386,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_ceil",
|
"np_ceil",
|
||||||
float,
|
float,
|
||||||
|
@ -1397,25 +1401,25 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
Arc::new(RwLock::new({
|
Arc::new(RwLock::new({
|
||||||
let tvar = primitives.1.get_fresh_var(Some("L".into()), None);
|
let tvar = unifier.get_fresh_var(Some("L".into()), None);
|
||||||
let list = primitives.1.add_ty(TypeEnum::TList { ty: tvar.0 });
|
let list = unifier.add_ty(TypeEnum::TList { ty: tvar.0 });
|
||||||
let ndims = primitives.1.get_fresh_const_generic_var(primitives.0.uint64, Some("N".into()), None);
|
let ndims = unifier.get_fresh_const_generic_var(primitives.uint64, Some("N".into()), None);
|
||||||
let ndarray = make_ndarray_ty(
|
let ndarray = make_ndarray_ty(
|
||||||
&mut primitives.1,
|
unifier,
|
||||||
&primitives.0,
|
primitives,
|
||||||
Some(tvar.0),
|
Some(tvar.0),
|
||||||
Some(ndims.0),
|
Some(ndims.0),
|
||||||
);
|
);
|
||||||
|
|
||||||
let arg_ty = primitives.1.get_fresh_var_with_range(
|
let arg_ty = unifier.get_fresh_var_with_range(
|
||||||
&[list, ndarray, primitives.0.range],
|
&[list, ndarray, primitives.range],
|
||||||
Some("I".into()),
|
Some("I".into()),
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
TopLevelDef::Function {
|
TopLevelDef::Function {
|
||||||
name: "len".into(),
|
name: "len".into(),
|
||||||
simple_name: "len".into(),
|
simple_name: "len".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "ls".into(), ty: arg_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "ls".into(), ty: arg_ty.0, default_value: None }],
|
||||||
ret: int32,
|
ret: int32,
|
||||||
vars: vec![(tvar.1, tvar.0), (arg_ty.1, arg_ty.0)]
|
vars: vec![(tvar.1, tvar.0), (arg_ty.1, arg_ty.0)]
|
||||||
|
@ -1512,7 +1516,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "min".into(),
|
name: "min".into(),
|
||||||
simple_name: "min".into(),
|
simple_name: "min".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![
|
args: vec![
|
||||||
FuncArg { name: "m".into(), ty: num_ty.0, default_value: None },
|
FuncArg { name: "m".into(), ty: num_ty.0, default_value: None },
|
||||||
FuncArg { name: "n".into(), ty: num_ty.0, default_value: None },
|
FuncArg { name: "n".into(), ty: num_ty.0, default_value: None },
|
||||||
|
@ -1572,7 +1576,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "max".into(),
|
name: "max".into(),
|
||||||
simple_name: "max".into(),
|
simple_name: "max".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![
|
args: vec![
|
||||||
FuncArg { name: "m".into(), ty: num_ty.0, default_value: None },
|
FuncArg { name: "m".into(), ty: num_ty.0, default_value: None },
|
||||||
FuncArg { name: "n".into(), ty: num_ty.0, default_value: None },
|
FuncArg { name: "n".into(), ty: num_ty.0, default_value: None },
|
||||||
|
@ -1632,7 +1636,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "abs".into(),
|
name: "abs".into(),
|
||||||
simple_name: "abs".into(),
|
simple_name: "abs".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: num_ty.0, default_value: None }],
|
||||||
ret: num_ty.0,
|
ret: num_ty.0,
|
||||||
vars: var_map.clone(),
|
vars: var_map.clone(),
|
||||||
|
@ -1677,7 +1681,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
loc: None,
|
loc: None,
|
||||||
})),
|
})),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_isnan",
|
"np_isnan",
|
||||||
boolean,
|
boolean,
|
||||||
|
@ -1697,7 +1701,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_isinf",
|
"np_isinf",
|
||||||
boolean,
|
boolean,
|
||||||
|
@ -1717,7 +1721,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_sin",
|
"np_sin",
|
||||||
float,
|
float,
|
||||||
|
@ -1725,7 +1729,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.sin.f64",
|
"llvm.sin.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_cos",
|
"np_cos",
|
||||||
float,
|
float,
|
||||||
|
@ -1733,7 +1737,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.cos.f64",
|
"llvm.cos.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_exp",
|
"np_exp",
|
||||||
float,
|
float,
|
||||||
|
@ -1741,7 +1745,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.exp.f64",
|
"llvm.exp.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_exp2",
|
"np_exp2",
|
||||||
float,
|
float,
|
||||||
|
@ -1749,7 +1753,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.exp2.f64",
|
"llvm.exp2.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_log",
|
"np_log",
|
||||||
float,
|
float,
|
||||||
|
@ -1757,7 +1761,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.log.f64",
|
"llvm.log.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_log10",
|
"np_log10",
|
||||||
float,
|
float,
|
||||||
|
@ -1765,7 +1769,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.log10.f64",
|
"llvm.log10.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_log2",
|
"np_log2",
|
||||||
float,
|
float,
|
||||||
|
@ -1773,7 +1777,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.log2.f64",
|
"llvm.log2.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_fabs",
|
"np_fabs",
|
||||||
float,
|
float,
|
||||||
|
@ -1781,7 +1785,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.fabs.f64",
|
"llvm.fabs.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_sqrt",
|
"np_sqrt",
|
||||||
float,
|
float,
|
||||||
|
@ -1789,7 +1793,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.sqrt.f64",
|
"llvm.sqrt.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_rint",
|
"np_rint",
|
||||||
float,
|
float,
|
||||||
|
@ -1797,7 +1801,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.roundeven.f64",
|
"llvm.roundeven.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_tan",
|
"np_tan",
|
||||||
float,
|
float,
|
||||||
|
@ -1806,7 +1810,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arcsin",
|
"np_arcsin",
|
||||||
float,
|
float,
|
||||||
|
@ -1815,7 +1819,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arccos",
|
"np_arccos",
|
||||||
float,
|
float,
|
||||||
|
@ -1824,7 +1828,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arctan",
|
"np_arctan",
|
||||||
float,
|
float,
|
||||||
|
@ -1833,7 +1837,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_sinh",
|
"np_sinh",
|
||||||
float,
|
float,
|
||||||
|
@ -1842,7 +1846,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_cosh",
|
"np_cosh",
|
||||||
float,
|
float,
|
||||||
|
@ -1851,7 +1855,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_tanh",
|
"np_tanh",
|
||||||
float,
|
float,
|
||||||
|
@ -1860,7 +1864,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arcsinh",
|
"np_arcsinh",
|
||||||
float,
|
float,
|
||||||
|
@ -1869,7 +1873,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arccosh",
|
"np_arccosh",
|
||||||
float,
|
float,
|
||||||
|
@ -1878,7 +1882,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arctanh",
|
"np_arctanh",
|
||||||
float,
|
float,
|
||||||
|
@ -1887,7 +1891,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_expm1",
|
"np_expm1",
|
||||||
float,
|
float,
|
||||||
|
@ -1896,7 +1900,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_cbrt",
|
"np_cbrt",
|
||||||
float,
|
float,
|
||||||
|
@ -1905,7 +1909,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&["readnone", "willreturn"],
|
&["readnone", "willreturn"],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_erf",
|
"sp_spec_erf",
|
||||||
float,
|
float,
|
||||||
|
@ -1914,7 +1918,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_erfc",
|
"sp_spec_erfc",
|
||||||
float,
|
float,
|
||||||
|
@ -1923,7 +1927,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_gamma",
|
"sp_spec_gamma",
|
||||||
float,
|
float,
|
||||||
|
@ -1941,7 +1945,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}
|
}
|
||||||
)),
|
)),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_gammaln",
|
"sp_spec_gammaln",
|
||||||
float,
|
float,
|
||||||
|
@ -1959,7 +1963,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_codegen(
|
create_fn_by_codegen(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_j0",
|
"sp_spec_j0",
|
||||||
float,
|
float,
|
||||||
|
@ -1977,7 +1981,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
}),
|
}),
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"sp_spec_j1",
|
"sp_spec_j1",
|
||||||
float,
|
float,
|
||||||
|
@ -1987,7 +1991,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
),
|
),
|
||||||
// Not mapped: jv/yv, libm only supports integer orders.
|
// Not mapped: jv/yv, libm only supports integer orders.
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_arctan2",
|
"np_arctan2",
|
||||||
float,
|
float,
|
||||||
|
@ -1996,7 +2000,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_copysign",
|
"np_copysign",
|
||||||
float,
|
float,
|
||||||
|
@ -2004,7 +2008,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.copysign.f64",
|
"llvm.copysign.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_fmax",
|
"np_fmax",
|
||||||
float,
|
float,
|
||||||
|
@ -2012,7 +2016,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.maxnum.f64",
|
"llvm.maxnum.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_intrinsic(
|
create_fn_by_intrinsic(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_fmin",
|
"np_fmin",
|
||||||
float,
|
float,
|
||||||
|
@ -2020,7 +2024,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
"llvm.minnum.f64",
|
"llvm.minnum.f64",
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_ldexp",
|
"np_ldexp",
|
||||||
float,
|
float,
|
||||||
|
@ -2029,7 +2033,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_hypot",
|
"np_hypot",
|
||||||
float,
|
float,
|
||||||
|
@ -2038,7 +2042,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
&[],
|
&[],
|
||||||
),
|
),
|
||||||
create_fn_by_extern(
|
create_fn_by_extern(
|
||||||
primitives,
|
unifier,
|
||||||
&var_map,
|
&var_map,
|
||||||
"np_nextafter",
|
"np_nextafter",
|
||||||
float,
|
float,
|
||||||
|
@ -2049,9 +2053,9 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new(TopLevelDef::Function {
|
Arc::new(RwLock::new(TopLevelDef::Function {
|
||||||
name: "Some".into(),
|
name: "Some".into(),
|
||||||
simple_name: "Some".into(),
|
simple_name: "Some".into(),
|
||||||
signature: primitives.1.add_ty(TypeEnum::TFunc(FunSignature {
|
signature: unifier.add_ty(TypeEnum::TFunc(FunSignature {
|
||||||
args: vec![FuncArg { name: "n".into(), ty: option_ty_var, default_value: None }],
|
args: vec![FuncArg { name: "n".into(), ty: option_ty_var, default_value: None }],
|
||||||
ret: primitives.0.option,
|
ret: primitives.option,
|
||||||
vars: VarMap::from([(option_ty_var_id, option_ty_var)]),
|
vars: VarMap::from([(option_ty_var_id, option_ty_var)]),
|
||||||
})),
|
})),
|
||||||
var_id: vec![option_ty_var_id],
|
var_id: vec![option_ty_var_id],
|
||||||
|
|
|
@ -53,10 +53,8 @@ impl TopLevelComposer {
|
||||||
core_config: ComposerConfig,
|
core_config: ComposerConfig,
|
||||||
size_t: u32,
|
size_t: u32,
|
||||||
) -> (Self, HashMap<StrRef, DefinitionId>, HashMap<StrRef, Type>) {
|
) -> (Self, HashMap<StrRef, DefinitionId>, HashMap<StrRef, Type>) {
|
||||||
let mut primitives = Self::make_primitives(size_t);
|
let (primitives_ty, mut unifier) = Self::make_primitives(size_t);
|
||||||
let mut definition_ast_list = builtins::get_builtins(&mut primitives);
|
let mut definition_ast_list = builtins::get_builtins(&mut unifier, &primitives_ty);
|
||||||
let primitives_ty = primitives.0;
|
|
||||||
let mut unifier = primitives.1;
|
|
||||||
let mut keyword_list: HashSet<StrRef> = HashSet::from_iter(vec![
|
let mut keyword_list: HashSet<StrRef> = HashSet::from_iter(vec![
|
||||||
"Generic".into(),
|
"Generic".into(),
|
||||||
"virtual".into(),
|
"virtual".into(),
|
||||||
|
|
Loading…
Reference in New Issue