Typechecking templates: use memo to cache expensive computations.

This commit is contained in:
Fedor Isakov 2020-07-29 11:24:24 +02:00
parent b5286d2671
commit 102d13df0a
2 changed files with 59 additions and 57 deletions

View File

@ -697,6 +697,10 @@
<child id="1618328391714763070" name="macro" index="0oKgB" />
<child id="6097203247162410403" name="prototype" index="3iTdIJ" />
</concept>
<concept id="7889373009908939902" name="jetbrains.mps.lang.coderules.structure.MemoExpression" flags="ng" index="21kpad">
<child id="7889373009908940350" name="valueProvider" index="21kp3d" />
<child id="7889373009908940348" name="key" index="21kp3f" />
</concept>
<concept id="1980609059169917031" name="jetbrains.mps.lang.coderules.structure.CopyItem" flags="ng" index="9KH4l">
<child id="1980609059169917850" name="origin" index="9KHbC" />
</concept>
@ -1956,31 +1960,23 @@
<node concept="3uibUv" id="3bgqfmm02cx" role="1tU5fm">
<ref role="3uigEE" node="rZZ6H4Y2j" resolve="ClassHierarchyGraph.Vertex" />
</node>
<node concept="2YIFZM" id="5wYq9r5EDbK" role="33vP2m">
<ref role="37wK5l" to="lehm:2tjs8VC2Blb" resolve="getOrPut" />
<ref role="1Pybhc" to="lehm:2tjs8VC0K0m" resolve="Memoizer" />
<node concept="2OqwBi" id="3bgqfmm02cz" role="37wK5m">
<node concept="3A2sRY" id="3bgqfmm02c$" role="2Oq$k0">
<ref role="3A2yKK" node="6_5E9TNz50W" resolve="cls" />
</node>
<node concept="iZEcu" id="3bgqfmm02c_" role="2OqNvi" />
</node>
<node concept="1bVj0M" id="3bgqfmm02cA" role="37wK5m">
<node concept="3clFbS" id="3bgqfmm02cB" role="1bW5cS">
<node concept="3clFbF" id="3bgqfmm02cC" role="3cqZAp">
<node concept="2OqwBi" id="3bgqfmm02cD" role="3clFbG">
<node concept="2YIFZM" id="3bgqfmm02cE" role="2Oq$k0">
<node concept="21kpad" id="5HVB6JRf8ic" role="33vP2m">
<node concept="1bVj0M" id="5HVB6JRf8id" role="21kp3d">
<node concept="3clFbS" id="5HVB6JRf8ie" role="1bW5cS">
<node concept="3clFbF" id="5HVB6JRf6vx" role="3cqZAp">
<node concept="2OqwBi" id="5HVB6JRf6vy" role="3clFbG">
<node concept="2YIFZM" id="5HVB6JRf6vz" role="2Oq$k0">
<ref role="1Pybhc" node="74XSvywIK4w" resolve="ClassHierarchy" />
<ref role="37wK5l" node="74XSvywIN2p" resolve="parameterizedGraph" />
<node concept="3clFbT" id="3bgqfmm02cF" role="37wK5m" />
<node concept="3clFbT" id="5HVB6JRf6v$" role="37wK5m" />
</node>
<node concept="liA8E" id="3bgqfmm02cG" role="2OqNvi">
<node concept="liA8E" id="5HVB6JRf6v_" role="2OqNvi">
<ref role="37wK5l" node="rZZ6Haw83" resolve="buildVertex" />
<node concept="2OqwBi" id="3bgqfmm02cH" role="37wK5m">
<node concept="3A2sRY" id="3bgqfmm02cI" role="2Oq$k0">
<node concept="2OqwBi" id="5HVB6JRf6vA" role="37wK5m">
<node concept="3A2sRY" id="5HVB6JRf6vB" role="2Oq$k0">
<ref role="3A2yKK" node="6_5E9TNz50W" resolve="cls" />
</node>
<node concept="2qgKlT" id="3bgqfmm02cJ" role="2OqNvi">
<node concept="2qgKlT" id="5HVB6JRf6vC" role="2OqNvi">
<ref role="37wK5l" to="tpek:2RtWPFZ12w7" resolve="getThisType" />
</node>
</node>
@ -1989,6 +1985,12 @@
</node>
</node>
</node>
<node concept="2OqwBi" id="5HVB6JRfab4" role="21kp3f">
<node concept="3A2sRY" id="5HVB6JRf9ir" role="2Oq$k0">
<ref role="3A2yKK" node="6_5E9TNz50W" resolve="cls" />
</node>
<node concept="iZEcu" id="5HVB6JRfbH4" role="2OqNvi" />
</node>
</node>
</node>
</node>
@ -37076,31 +37078,23 @@
<node concept="3uibUv" id="4JBuioHZ_Z3" role="1tU5fm">
<ref role="3uigEE" node="rZZ6H4Y2j" resolve="ClassHierarchyGraph.Vertex" />
</node>
<node concept="2YIFZM" id="5wYq9r5EDbL" role="33vP2m">
<ref role="37wK5l" to="lehm:2tjs8VC2Blb" resolve="getOrPut" />
<ref role="1Pybhc" to="lehm:2tjs8VC0K0m" resolve="Memoizer" />
<node concept="2OqwBi" id="4JBuioIcVWP" role="37wK5m">
<node concept="3A2sRY" id="4JBuioHZA$G" role="2Oq$k0">
<ref role="3A2yKK" node="29sKO70xfxm" resolve="cls" />
</node>
<node concept="iZEcu" id="4JBuioIcXe2" role="2OqNvi" />
</node>
<node concept="1bVj0M" id="4JBuioHZA$H" role="37wK5m">
<node concept="3clFbS" id="4JBuioHZA$I" role="1bW5cS">
<node concept="3clFbF" id="4JBuioHZA$J" role="3cqZAp">
<node concept="2OqwBi" id="4JBuioHZA$K" role="3clFbG">
<node concept="2YIFZM" id="4JBuioHZA$L" role="2Oq$k0">
<node concept="21kpad" id="5HVB6JRfiKh" role="33vP2m">
<node concept="1bVj0M" id="5HVB6JRfiKi" role="21kp3d">
<node concept="3clFbS" id="5HVB6JRfiKj" role="1bW5cS">
<node concept="3clFbF" id="5HVB6JRfhJl" role="3cqZAp">
<node concept="2OqwBi" id="5HVB6JRfhJm" role="3clFbG">
<node concept="2YIFZM" id="5HVB6JRfhJn" role="2Oq$k0">
<ref role="37wK5l" node="74XSvywIN2p" resolve="parameterizedGraph" />
<ref role="1Pybhc" node="74XSvywIK4w" resolve="ClassHierarchy" />
<node concept="3clFbT" id="4JBuioHZA$M" role="37wK5m" />
<node concept="3clFbT" id="5HVB6JRfhJo" role="37wK5m" />
</node>
<node concept="liA8E" id="4JBuioHZA$N" role="2OqNvi">
<node concept="liA8E" id="5HVB6JRfhJp" role="2OqNvi">
<ref role="37wK5l" node="rZZ6Haw83" resolve="buildVertex" />
<node concept="2OqwBi" id="4JBuioHZA$O" role="37wK5m">
<node concept="3A2sRY" id="4JBuioHZA$P" role="2Oq$k0">
<node concept="2OqwBi" id="5HVB6JRfhJq" role="37wK5m">
<node concept="3A2sRY" id="5HVB6JRfhJr" role="2Oq$k0">
<ref role="3A2yKK" node="29sKO70xfxm" resolve="cls" />
</node>
<node concept="2qgKlT" id="4JBuioHZA$Q" role="2OqNvi">
<node concept="2qgKlT" id="5HVB6JRfhJs" role="2OqNvi">
<ref role="37wK5l" to="tpek:2RtWPFZ12w7" resolve="getThisType" />
</node>
</node>
@ -37109,6 +37103,12 @@
</node>
</node>
</node>
<node concept="2OqwBi" id="5HVB6JRfkcY" role="21kp3f">
<node concept="3A2sRY" id="5HVB6JRfkcZ" role="2Oq$k0">
<ref role="3A2yKK" node="29sKO70xfxm" resolve="cls" />
</node>
<node concept="iZEcu" id="5HVB6JRfkd0" role="2OqNvi" />
</node>
</node>
</node>
</node>

View File

@ -359,6 +359,10 @@
<child id="1618328391714763070" name="macro" index="0oKgB" />
<child id="6097203247162410403" name="prototype" index="3iTdIJ" />
</concept>
<concept id="7889373009908939902" name="jetbrains.mps.lang.coderules.structure.MemoExpression" flags="ng" index="21kpad">
<child id="7889373009908940350" name="valueProvider" index="21kp3d" />
<child id="7889373009908940348" name="key" index="21kp3f" />
</concept>
<concept id="6928531011217292466" name="jetbrains.mps.lang.coderules.structure.IsfreeVariableConstraint" flags="ng" index="2aLmEc" />
<concept id="6928531011217258898" name="jetbrains.mps.lang.coderules.structure.LogicVariableConstraint" flags="ng" index="2aLIYG">
<child id="6928531011217290187" name="variable" index="2aLmnP" />
@ -5981,26 +5985,18 @@
<node concept="3uibUv" id="6$6scRbXIK$" role="1tU5fm">
<ref role="3uigEE" node="3bgqfmmLIge" resolve="ConceptHierarchyGraph.Vertex" />
</node>
<node concept="2YIFZM" id="6$6scRbXIWt" role="33vP2m">
<ref role="1Pybhc" to="lehm:2tjs8VC0K0m" resolve="Memoizer" />
<ref role="37wK5l" to="lehm:2tjs8VC2Blb" resolve="getOrPut" />
<node concept="2OqwBi" id="6$6scRbXIWu" role="37wK5m">
<node concept="3A2sRY" id="6$6scRbXIWv" role="2Oq$k0">
<ref role="3A2yKK" node="6$6scRbXE2W" resolve="cd" />
</node>
<node concept="iZEcu" id="6$6scRbXIWw" role="2OqNvi" />
</node>
<node concept="1bVj0M" id="6$6scRbXIWx" role="37wK5m">
<node concept="3clFbS" id="6$6scRbXIWy" role="1bW5cS">
<node concept="3clFbF" id="6$6scRbXIWz" role="3cqZAp">
<node concept="2OqwBi" id="6$6scRbXIW$" role="3clFbG">
<node concept="2YIFZM" id="6$6scRbXIW_" role="2Oq$k0">
<node concept="21kpad" id="5HVB6JRenI2" role="33vP2m">
<node concept="1bVj0M" id="5HVB6JRenI3" role="21kp3d">
<node concept="3clFbS" id="5HVB6JRenI4" role="1bW5cS">
<node concept="3clFbF" id="5HVB6JRenI5" role="3cqZAp">
<node concept="2OqwBi" id="5HVB6JRenI6" role="3clFbG">
<node concept="2YIFZM" id="5HVB6JRenI7" role="2Oq$k0">
<ref role="37wK5l" node="3bgqfmmMBWt" resolve="defaultGraph" />
<ref role="1Pybhc" node="3bgqfmmLWgA" resolve="ConceptHierarchy" />
</node>
<node concept="liA8E" id="6$6scRbXIWA" role="2OqNvi">
<node concept="liA8E" id="5HVB6JRenI8" role="2OqNvi">
<ref role="37wK5l" node="5OjpQKw2l7T" resolve="buildVertex" />
<node concept="3A2sRY" id="6$6scRbXIWB" role="37wK5m">
<node concept="3A2sRY" id="5HVB6JRenI9" role="37wK5m">
<ref role="3A2yKK" node="6$6scRbXE2W" resolve="cd" />
</node>
</node>
@ -6008,10 +6004,16 @@
</node>
</node>
</node>
<node concept="2OqwBi" id="5HVB6JRenIa" role="21kp3f">
<node concept="3A2sRY" id="5HVB6JRenIb" role="2Oq$k0">
<ref role="3A2yKK" node="6$6scRbXE2W" resolve="cd" />
</node>
<node concept="iZEcu" id="5HVB6JRenIc" role="2OqNvi" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="6tm4iVtWWIQ" role="3cqZAp" />
<node concept="3clFbH" id="5HVB6JReo4b" role="3cqZAp" />
<node concept="3Hbl2A" id="6$6scRbXKa7" role="3cqZAp">
<node concept="3clFbS" id="6$6scRbXKa9" role="9aQI4">
<node concept="3SKdUt" id="6RzTUCTkIyB" role="3cqZAp">
@ -17158,10 +17160,10 @@
<node concept="aZer4" id="6Dg__VJSkE6" role="3XD1gS">
<property role="TrG5h" value="ConceptA" />
</node>
<node concept="2sp9CU" id="6Dg__VJSkE7" role="3vLBG7" />
<node concept="aZer4" id="6Dg__VJSkE5" role="3XD1gS">
<property role="TrG5h" value="ConceptB" />
</node>
<node concept="2sp9CU" id="6Dg__VJSkE7" role="3vLBG7" />
</node>
<node concept="3xSepi" id="6Dg__VJSkE8" role="3xSepv">
<node concept="3Aq9E8" id="6Dg__VJSkE9" role="3xSepj">
@ -17254,10 +17256,10 @@
<node concept="aZer4" id="6Dg__VJTbxO" role="3XD1gS">
<property role="TrG5h" value="ConceptA" />
</node>
<node concept="2sp9CU" id="6Dg__VJTbxQ" role="3vLBG7" />
<node concept="aZer4" id="6Dg__VJTbxP" role="3XD1gS">
<property role="TrG5h" value="ConceptB" />
</node>
<node concept="2sp9CU" id="6Dg__VJTbxQ" role="3vLBG7" />
</node>
<node concept="3xSepi" id="6Dg__VJTbxR" role="3xSepv">
<node concept="3Aq9E8" id="6Dg__VJTbxS" role="3xSepj">