on master help sign in
javascript: remove redundant instanceof checks
commit621f8c1fe02899d05dfc689e96304760b723bb4e authorraichoo <raichoo@googlemail.com> dateWed 29 Jan 2014, 23:15 (13 years ago) parent6a1e21e
1 file changed+57−2
src/IRTS/CodegenJavaScript.hs+57−2
src/IRTS/CodegenJavaScript.hs+57−2
@@ -905,6 +905,60 @@ optimizeEvalTailcalls (fun, tc) js =
905905
906906 optHelper js = js
907907
908+
909+removeInstanceChecks :: JS -> JS
910+removeInstanceChecks (JSCond conds) =
911+ JSCond $ map (removeHelper *** removeInstanceChecks) conds
912+ where
913+ removeHelper (
914+ JSOp "&&" (JSOp "instanceof" _ (JSIdent "__IDRRT__Con")) check
915+ ) = removeHelper check
916+ removeHelper js = js
917+
918+removeInstanceChecks (JSFunction args body) =
919+ JSFunction args $ removeInstanceChecks body
920+
921+removeInstanceChecks (JSSeq seq) =
922+ JSSeq $ map removeInstanceChecks seq
923+
924+removeInstanceChecks (JSReturn ret) =
925+ JSReturn $ removeInstanceChecks ret
926+
927+removeInstanceChecks (JSApp lhs rhs) =
928+ JSApp (removeInstanceChecks lhs) $ map removeInstanceChecks rhs
929+
930+removeInstanceChecks (JSNew con args) =
931+ JSNew con $ map removeInstanceChecks args
932+
933+removeInstanceChecks (JSOp op lhs rhs) =
934+ JSOp op (removeInstanceChecks lhs) (removeInstanceChecks rhs)
935+
936+removeInstanceChecks (JSProj obj field) =
937+ JSProj (removeInstanceChecks obj) field
938+
939+removeInstanceChecks (JSArray vals) =
940+ JSArray $ map removeInstanceChecks vals
941+
942+removeInstanceChecks (JSAssign lhs rhs) =
943+ JSAssign (removeInstanceChecks lhs) (removeInstanceChecks rhs)
944+
945+removeInstanceChecks (JSAlloc var (Just val)) =
946+ JSAlloc var (Just $ removeInstanceChecks val)
947+
948+removeInstanceChecks (JSIndex lhs rhs) =
949+ JSIndex (removeInstanceChecks lhs) (removeInstanceChecks rhs)
950+
951+removeInstanceChecks (JSTernary c t f) =
952+ JSTernary (
953+ removeInstanceChecks c
954+ ) (
955+ removeInstanceChecks t
956+ ) (
957+ removeInstanceChecks f
958+ )
959+
960+removeInstanceChecks js = js
961+
908962reduceLoop :: [String] -> ([JS], [JS]) -> [JS]
909963reduceLoop reduced (cons, program) =
910964 case partition findConstructors program of
@@ -1035,8 +1089,9 @@ codegenJavaScript target definitions filename outputType = do
10351089 inlined = inlineFunctions deadElim
10361090 elimDup = map elimDuplicateEvals inlined
10371091 evalTC = map (optimizeEvalTailcalls ("__IDR__mEVAL0", "__IDRRT__EVALTC")) elimDup
1038− applyTC = map (optimizeEvalTailcalls ("__IDR__mAPPLY0", "__IDRRT__APPLYTC")) evalTC
1039− js = applyTC in
1092+ applyTC = map (optimizeEvalTailcalls ("__IDR__mAPPLY0", "__IDRRT__APPLYTC")) evalTC
1093+ remChecks = map removeInstanceChecks applyTC
1094+ js = remChecks in
10401095 map compileJS js
10411096
10421097 mainLoop :: JS