diff --git a/compiler/gen_dev/src/lib.rs b/compiler/gen_dev/src/lib.rs index f8b61ade46..7abe230395 100644 --- a/compiler/gen_dev/src/lib.rs +++ b/compiler/gen_dev/src/lib.rs @@ -228,7 +228,7 @@ where .. } => { // If this function is just a lowlevel wrapper, then inline it - if let Some(lowlevel) = LowLevel::from_wrapper_symbol(*func_sym) { + if let Some(lowlevel) = LowLevel::from_inlined_wrapper(*func_sym) { self.build_run_low_level( sym, &lowlevel, diff --git a/compiler/gen_wasm/src/backend.rs b/compiler/gen_wasm/src/backend.rs index 2a4e712ae4..1d0928611e 100644 --- a/compiler/gen_wasm/src/backend.rs +++ b/compiler/gen_wasm/src/backend.rs @@ -471,7 +471,7 @@ impl<'a> WasmBackend<'a> { }) => match call_type { CallType::ByName { name: func_sym, .. } => { // If this function is just a lowlevel wrapper, then inline it - if let Some(lowlevel) = LowLevel::from_wrapper_symbol(*func_sym) { + if let Some(lowlevel) = LowLevel::from_inlined_wrapper(*func_sym) { return self.build_low_level(lowlevel, arguments, wasm_layout); } diff --git a/compiler/module/src/low_level.rs b/compiler/module/src/low_level.rs index 2dfcb00864..fd07a644ad 100644 --- a/compiler/module/src/low_level.rs +++ b/compiler/module/src/low_level.rs @@ -169,8 +169,10 @@ impl LowLevel { } } - /// Used in dev backends to optimise away the wrapper functions - pub fn from_wrapper_symbol(symbol: Symbol) -> Option { + /// Used in dev backends to inline some lowlevel wrapper functions + /// For wrappers that contain logic, we return None to prevent inlining + /// (Mention each explicitly rather than using `_`, to show they have not been forgotten) + pub fn from_inlined_wrapper(symbol: Symbol) -> Option { use LowLevel::*; match symbol { @@ -183,8 +185,8 @@ impl LowLevel { Symbol::STR_SPLIT => Some(StrSplit), Symbol::STR_COUNT_GRAPHEMES => Some(StrCountGraphemes), Symbol::STR_FROM_INT => Some(StrFromInt), - Symbol::STR_FROM_UTF8 => Some(StrFromUtf8), - Symbol::STR_FROM_UTF8_RANGE => Some(StrFromUtf8Range), + Symbol::STR_FROM_UTF8 => None, + Symbol::STR_FROM_UTF8_RANGE => None, Symbol::STR_TO_UTF8 => Some(StrToUtf8), Symbol::STR_REPEAT => Some(StrRepeat), Symbol::STR_FROM_FLOAT => Some(StrFromFloat), @@ -192,8 +194,8 @@ impl LowLevel { Symbol::STR_TRIM_LEFT => Some(StrTrimLeft), Symbol::STR_TRIM_RIGHT => Some(StrTrimRight), Symbol::LIST_LEN => Some(ListLen), - Symbol::LIST_GET => Some(ListGetUnsafe), - Symbol::LIST_SET => Some(ListSet), + Symbol::LIST_GET => None, + Symbol::LIST_SET => None, Symbol::LIST_SINGLE => Some(ListSingle), Symbol::LIST_REPEAT => Some(ListRepeat), Symbol::LIST_REVERSE => Some(ListReverse), @@ -220,13 +222,13 @@ impl LowLevel { Symbol::LIST_DROP_AT => Some(ListDropAt), Symbol::LIST_SWAP => Some(ListSwap), Symbol::LIST_ANY => Some(ListAny), - Symbol::LIST_FIND => Some(ListFindUnsafe), + Symbol::LIST_FIND => None, Symbol::DICT_LEN => Some(DictSize), Symbol::DICT_EMPTY => Some(DictEmpty), Symbol::DICT_INSERT => Some(DictInsert), Symbol::DICT_REMOVE => Some(DictRemove), Symbol::DICT_CONTAINS => Some(DictContains), - Symbol::DICT_GET => Some(DictGetUnsafe), + Symbol::DICT_GET => None, Symbol::DICT_KEYS => Some(DictKeys), Symbol::DICT_VALUES => Some(DictValues), Symbol::DICT_UNION => Some(DictUnion), @@ -236,28 +238,28 @@ impl LowLevel { Symbol::SET_FROM_LIST => Some(SetFromList), Symbol::NUM_ADD => Some(NumAdd), Symbol::NUM_ADD_WRAP => Some(NumAddWrap), - Symbol::NUM_ADD_CHECKED => Some(NumAddChecked), + Symbol::NUM_ADD_CHECKED => None, Symbol::NUM_SUB => Some(NumSub), Symbol::NUM_SUB_WRAP => Some(NumSubWrap), - Symbol::NUM_SUB_CHECKED => Some(NumSubChecked), + Symbol::NUM_SUB_CHECKED => None, Symbol::NUM_MUL => Some(NumMul), Symbol::NUM_MUL_WRAP => Some(NumMulWrap), - Symbol::NUM_MUL_CHECKED => Some(NumMulChecked), + Symbol::NUM_MUL_CHECKED => None, Symbol::NUM_GT => Some(NumGt), Symbol::NUM_GTE => Some(NumGte), Symbol::NUM_LT => Some(NumLt), Symbol::NUM_LTE => Some(NumLte), Symbol::NUM_COMPARE => Some(NumCompare), - Symbol::NUM_DIV_FLOAT => Some(NumDivUnchecked), - Symbol::NUM_DIV_CEIL => Some(NumDivCeilUnchecked), - Symbol::NUM_REM => Some(NumRemUnchecked), + Symbol::NUM_DIV_FLOAT => None, + Symbol::NUM_DIV_CEIL => None, + Symbol::NUM_REM => None, Symbol::NUM_IS_MULTIPLE_OF => Some(NumIsMultipleOf), Symbol::NUM_ABS => Some(NumAbs), Symbol::NUM_NEG => Some(NumNeg), Symbol::NUM_SIN => Some(NumSin), Symbol::NUM_COS => Some(NumCos), - Symbol::NUM_SQRT => Some(NumSqrtUnchecked), - Symbol::NUM_LOG => Some(NumLogUnchecked), + Symbol::NUM_SQRT => None, + Symbol::NUM_LOG => None, Symbol::NUM_ROUND => Some(NumRound), Symbol::NUM_TO_FLOAT => Some(NumToFloat), Symbol::NUM_POW => Some(NumPow), @@ -268,8 +270,8 @@ impl LowLevel { Symbol::NUM_ATAN => Some(NumAtan), Symbol::NUM_ACOS => Some(NumAcos), Symbol::NUM_ASIN => Some(NumAsin), - Symbol::NUM_BYTES_TO_U16 => Some(NumBytesToU16), - Symbol::NUM_BYTES_TO_U32 => Some(NumBytesToU32), + Symbol::NUM_BYTES_TO_U16 => None, + Symbol::NUM_BYTES_TO_U32 => None, Symbol::NUM_BITWISE_AND => Some(NumBitwiseAnd), Symbol::NUM_BITWISE_XOR => Some(NumBitwiseXor), Symbol::NUM_BITWISE_OR => Some(NumBitwiseOr),