git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Optimize mkFn even when the body is not a return statement.
8265486Phil Freeman
src/Language/PureScript/Optimizer/Inliner.hs+5−5
@@ -158,19 +158,19 @@ inlineCommonOperators = applyAll $
158 mkFn 0 = everywhereOnJS convert
158 mkFn 0 = everywhereOnJS convert
159 where
159 where
160 convert :: JS -> JS
160 convert :: JS -> JS
161− convert (JSApp mkFnN [JSFunction Nothing [_] (JSBlock [JSReturn ret])]) | isNFn C.mkFn 0 mkFnN =
161+ convert (JSApp mkFnN [JSFunction Nothing [_] (JSBlock js)]) | isNFn C.mkFn 0 mkFnN =
162− JSFunction Nothing [] (JSBlock [JSReturn ret])
162+ JSFunction Nothing [] (JSBlock js)
163 convert other = other
163 convert other = other
164 mkFn n = everywhereOnJS convert
164 mkFn n = everywhereOnJS convert
165 where
165 where
166 convert :: JS -> JS
166 convert :: JS -> JS
167 convert orig@(JSApp mkFnN [fn]) | isNFn C.mkFn n mkFnN =
167 convert orig@(JSApp mkFnN [fn]) | isNFn C.mkFn n mkFnN =
168 case collectArgs n [] fn of
168 case collectArgs n [] fn of
169− Just (args, ret) -> JSFunction Nothing args (JSBlock [JSReturn ret])
169+ Just (args, js) -> JSFunction Nothing args (JSBlock js)
170 Nothing -> orig
170 Nothing -> orig
171 convert other = other
171 convert other = other
172− collectArgs :: Int -> [String] -> JS -> Maybe ([String], JS)
172+ collectArgs :: Int -> [String] -> JS -> Maybe ([String], [JS])
173− collectArgs 0 acc ret | length acc == n = Just (reverse acc, ret)
173+ collectArgs 1 acc (JSFunction Nothing [oneArg] (JSBlock js)) | length acc == n - 1 = Just (reverse (oneArg : acc), js)
174 collectArgs m acc (JSFunction Nothing [oneArg] (JSBlock [JSReturn ret])) = collectArgs (m - 1) (oneArg : acc) ret
174 collectArgs m acc (JSFunction Nothing [oneArg] (JSBlock [JSReturn ret])) = collectArgs (m - 1) (oneArg : acc) ret
175 collectArgs _ _ _ = Nothing
175 collectArgs _ _ _ = Nothing
176
176