mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-21 15:59:20 +03:00
Do not inline builtin wrapper for Str.toNum
This commit is contained in:
parent
2cfd49f941
commit
f90d9a74bd
@ -49,22 +49,21 @@ pub fn dispatch_low_level<'a>(
|
||||
}
|
||||
StrCountGraphemes => return BuiltinCall(bitcode::STR_COUNT_GRAPEHEME_CLUSTERS),
|
||||
StrToNum => {
|
||||
if let Layout::Union(UnionLayout::NonRecursive(union_layout)) = mono_layout {
|
||||
// match on the return layout to figure out which zig builtin we need
|
||||
let intrinsic = match union_layout[1][0] {
|
||||
Layout::Builtin(Builtin::Int(int_width)) => &bitcode::STR_TO_INT[int_width],
|
||||
Layout::Builtin(Builtin::Float(float_width)) => {
|
||||
&bitcode::STR_TO_FLOAT[float_width]
|
||||
}
|
||||
Layout::Builtin(Builtin::Decimal) => bitcode::DEC_FROM_STR,
|
||||
rest => internal_error!("Unexpected builtin {:?} for StrToNum", rest),
|
||||
};
|
||||
let number_layout = match mono_layout {
|
||||
Layout::Union(UnionLayout::NonRecursive(tags)) => tags[1][0],
|
||||
Layout::Struct(fields) => fields[0], // TODO: why is it sometimes a struct?
|
||||
_ => internal_error!("Unexpected mono layout {:?} for StrToNum", mono_layout),
|
||||
};
|
||||
// match on the return layout to figure out which zig builtin we need
|
||||
let intrinsic = match number_layout {
|
||||
Layout::Builtin(Builtin::Int(int_width)) => &bitcode::STR_TO_INT[int_width],
|
||||
Layout::Builtin(Builtin::Float(float_width)) => &bitcode::STR_TO_FLOAT[float_width],
|
||||
Layout::Builtin(Builtin::Decimal) => bitcode::DEC_FROM_STR,
|
||||
rest => internal_error!("Unexpected builtin {:?} for StrToNum", rest),
|
||||
};
|
||||
|
||||
return BuiltinCall(intrinsic);
|
||||
} else {
|
||||
internal_error!("Unexpected mono layout {:?} for StrToNum", mono_layout);
|
||||
}
|
||||
} // choose builtin based on storage size
|
||||
return BuiltinCall(intrinsic);
|
||||
}
|
||||
StrFromInt => {
|
||||
// This does not get exposed in user space. We switched to NumToStr instead.
|
||||
// We can probably just leave this as NotImplemented. We may want remove this LowLevel.
|
||||
|
@ -198,20 +198,20 @@ impl LowLevel {
|
||||
Symbol::STR_TRIM => Some(StrTrim),
|
||||
Symbol::STR_TRIM_LEFT => Some(StrTrimLeft),
|
||||
Symbol::STR_TRIM_RIGHT => Some(StrTrimRight),
|
||||
Symbol::STR_TO_DEC => Some(StrToNum),
|
||||
Symbol::STR_TO_F64 => Some(StrToNum),
|
||||
Symbol::STR_TO_F32 => Some(StrToNum),
|
||||
Symbol::STR_TO_NAT => Some(StrToNum),
|
||||
Symbol::STR_TO_U128 => Some(StrToNum),
|
||||
Symbol::STR_TO_I128 => Some(StrToNum),
|
||||
Symbol::STR_TO_U64 => Some(StrToNum),
|
||||
Symbol::STR_TO_I64 => Some(StrToNum),
|
||||
Symbol::STR_TO_U32 => Some(StrToNum),
|
||||
Symbol::STR_TO_I32 => Some(StrToNum),
|
||||
Symbol::STR_TO_U16 => Some(StrToNum),
|
||||
Symbol::STR_TO_I16 => Some(StrToNum),
|
||||
Symbol::STR_TO_U8 => Some(StrToNum),
|
||||
Symbol::STR_TO_I8 => Some(StrToNum),
|
||||
Symbol::STR_TO_DEC => None,
|
||||
Symbol::STR_TO_F64 => None,
|
||||
Symbol::STR_TO_F32 => None,
|
||||
Symbol::STR_TO_NAT => None,
|
||||
Symbol::STR_TO_U128 => None,
|
||||
Symbol::STR_TO_I128 => None,
|
||||
Symbol::STR_TO_U64 => None,
|
||||
Symbol::STR_TO_I64 => None,
|
||||
Symbol::STR_TO_U32 => None,
|
||||
Symbol::STR_TO_I32 => None,
|
||||
Symbol::STR_TO_U16 => None,
|
||||
Symbol::STR_TO_I16 => None,
|
||||
Symbol::STR_TO_U8 => None,
|
||||
Symbol::STR_TO_I8 => None,
|
||||
Symbol::LIST_LEN => Some(ListLen),
|
||||
Symbol::LIST_GET => None,
|
||||
Symbol::LIST_SET => None,
|
||||
|
Loading…
Reference in New Issue
Block a user