Refactor typechecking state/cache subsystem.

Refactor whe way TypecheckingResultsCache is updated:
all mutatiting methods extracted to Update subclass, which is
only available to the updater.

Make TypecheckingState a regular container for (unit) caches.
Make TypecheckingService responsible for managing caches.

Extract TypeModuleOwner and TypeModelHandler classes.
Get rid of QueryResultsCache, merge into TypecheckingResultsCache.
TypeModuleOwner to manage "repository" cache.
This commit is contained in:
Fedor Isakov 2020-08-13 17:45:09 +02:00
parent 905e11ac33
commit 54439e255e
6 changed files with 4978 additions and 5034 deletions

View File

@ -208,6 +208,7 @@
<child id="1144230900587" name="variable" index="1Duv9x" />
</concept>
<concept id="1107796713796" name="jetbrains.mps.baseLanguage.structure.Interface" flags="ig" index="3HP615" />
<concept id="1082113931046" name="jetbrains.mps.baseLanguage.structure.ContinueStatement" flags="nn" index="3N13vt" />
<concept id="6329021646629104954" name="jetbrains.mps.baseLanguage.structure.SingleLineComment" flags="nn" index="3SKdUt">
<child id="8356039341262087992" name="line" index="1aUNEU" />
</concept>
@ -4517,41 +4518,133 @@
</node>
</node>
</node>
<node concept="3clFbF" id="WJTIIoWsSc" role="3cqZAp">
<node concept="2OqwBi" id="WJTIIoWt1w" role="3clFbG">
<node concept="37vLTw" id="WJTIIoWsSa" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoWrMf" resolve="newIndex" />
<node concept="2Gpval" id="1z4$59jdVSO" role="3cqZAp">
<node concept="3clFbS" id="1z4$59jdVSP" role="2LFqv$">
<node concept="3clFbJ" id="1z4$59jdVTp" role="3cqZAp">
<node concept="3clFbS" id="1z4$59jdVTq" role="3clFbx">
<node concept="3N13vt" id="1z4$59jdVTr" role="3cqZAp" />
</node>
<node concept="2OqwBi" id="1z4$59jdVTs" role="3clFbw">
<node concept="37vLTw" id="1z4$59jdVTJ" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoZGPI" resolve="invalidNodes" />
</node>
<node concept="3JPx81" id="1z4$59jdVTu" role="2OqNvi">
<node concept="2OqwBi" id="1z4$59jeTVN" role="25WWJ7">
<node concept="2GrUjf" id="1z4$59jeTVO" role="2Oq$k0">
<ref role="2Gs0qQ" node="1z4$59jdVTG" resolve="m" />
</node>
<node concept="3AY5_j" id="1z4$59jeTVP" role="2OqNvi" />
</node>
</node>
</node>
</node>
<node concept="liA8E" id="WJTIIoYfFc" role="2OqNvi">
<ref role="37wK5l" to="tj24:WJTIIoWM1i" resolve="invalidateTypes" />
<node concept="37vLTw" id="WJTIIp06vq" role="37wK5m">
<ref role="3cqZAo" node="tyIfzC1aQx" resolve="repo" />
</node>
<node concept="37vLTw" id="WJTIIp0Cyf" role="37wK5m">
<ref role="3cqZAo" node="WJTIIoZGPI" resolve="invalidNodes" />
</node>
<node concept="37vLTw" id="WJTIIoYmtt" role="37wK5m">
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
<node concept="3clFbH" id="1z4$59jdVTw" role="3cqZAp" />
<node concept="3clFbF" id="1z4$59jdVTx" role="3cqZAp">
<node concept="2OqwBi" id="1z4$59jdVTM" role="3clFbG">
<node concept="liA8E" id="1z4$59jdVTL" role="2OqNvi">
<ref role="37wK5l" node="1z4$59je3qp" resolve="putType" />
<node concept="2OqwBi" id="1z4$59jdVTz" role="37wK5m">
<node concept="2GrUjf" id="1z4$59jdVT$" role="2Oq$k0">
<ref role="2Gs0qQ" node="1z4$59jdVTG" resolve="m" />
</node>
<node concept="3AY5_j" id="1z4$59jdVT_" role="2OqNvi" />
</node>
<node concept="2OqwBi" id="1z4$59jdVTA" role="37wK5m">
<node concept="2GrUjf" id="1z4$59jdVTB" role="2Oq$k0">
<ref role="2Gs0qQ" node="1z4$59jdVTG" resolve="m" />
</node>
<node concept="3AV6Ez" id="1z4$59jdVTC" role="2OqNvi" />
</node>
</node>
<node concept="37vLTw" id="WJTIIoWsSa" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoWrMf" resolve="newIndex" />
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="WJTIIp0Daa" role="3cqZAp">
<node concept="2OqwBi" id="WJTIIp0DQG" role="3clFbG">
<node concept="37vLTw" id="WJTIIp0DzL" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoWrMf" resolve="newIndex" />
<node concept="2OqwBi" id="1z4$59jdVTD" role="2GsD0m">
<node concept="37vLTw" id="1z4$59jdVTK" role="2Oq$k0">
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
</node>
<node concept="liA8E" id="WJTIIp0Ec7" role="2OqNvi">
<ref role="37wK5l" to="tj24:WJTIIoXnLi" resolve="invalidateReportItems" />
<node concept="37vLTw" id="WJTIIp0EwL" role="37wK5m">
<ref role="3cqZAo" node="WJTIIoZGPL" resolve="invalidatedFeedbackKeys" />
<node concept="liA8E" id="1z4$59je8Zm" role="2OqNvi">
<ref role="37wK5l" to="tj24:1FOQehxe9vM" resolve="allTypes" />
</node>
</node>
<node concept="2GrKxI" id="1z4$59jdVTG" role="2Gsz3X">
<property role="TrG5h" value="m" />
</node>
</node>
<node concept="1DcWWT" id="1z4$59jegXA" role="3cqZAp">
<node concept="3clFbS" id="1z4$59jegXB" role="2LFqv$">
<node concept="3clFbJ" id="1z4$59jeKKb" role="3cqZAp">
<node concept="3clFbS" id="1z4$59jeKKd" role="3clFbx">
<node concept="3clFbJ" id="1z4$59jeLmn" role="3cqZAp">
<node concept="3clFbS" id="1z4$59jeLmp" role="3clFbx">
<node concept="3N13vt" id="1z4$59jePLy" role="3cqZAp" />
</node>
<node concept="2OqwBi" id="1z4$59jeOOS" role="3clFbw">
<node concept="37vLTw" id="1z4$59jeObs" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoZGPL" resolve="invalidatedFeedbackKeys" />
</node>
<node concept="3JPx81" id="1z4$59jePsF" role="2OqNvi">
<node concept="2OqwBi" id="1z4$59jeM93" role="25WWJ7">
<node concept="1eOMI4" id="1z4$59jeLqt" role="2Oq$k0">
<node concept="10QFUN" id="1z4$59jeLqq" role="1eOMHV">
<node concept="3uibUv" id="1z4$59jeLqv" role="10QFUM">
<ref role="3uigEE" to="tj24:1FOQehwovmW" resolve="TypecheckingReportItem" />
</node>
<node concept="37vLTw" id="1z4$59jeLqw" role="10QFUP">
<ref role="3cqZAo" node="1z4$59jegXF" resolve="it" />
</node>
</node>
</node>
<node concept="liA8E" id="1z4$59jeMQ5" role="2OqNvi">
<ref role="37wK5l" to="tj24:5b5WPl4QD9T" resolve="getFeedbackIdentity" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="37vLTw" id="WJTIIp0EXG" role="37wK5m">
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
<node concept="2ZW3vV" id="1z4$59jeL08" role="3clFbw">
<node concept="3uibUv" id="1z4$59jeL4e" role="2ZW6by">
<ref role="3uigEE" to="tj24:1FOQehwovmW" resolve="TypecheckingReportItem" />
</node>
<node concept="37vLTw" id="1z4$59jeKNT" role="2ZW6bz">
<ref role="3cqZAo" node="1z4$59jegXF" resolve="it" />
</node>
</node>
</node>
<node concept="3clFbF" id="1z4$59jegXC" role="3cqZAp">
<node concept="2OqwBi" id="1z4$59jegYf" role="3clFbG">
<node concept="liA8E" id="1z4$59jegYe" role="2OqNvi">
<ref role="37wK5l" node="1z4$59jenqx" resolve="addReportItem" />
<node concept="37vLTw" id="1z4$59jegXE" role="37wK5m">
<ref role="3cqZAo" node="1z4$59jegXF" resolve="it" />
</node>
</node>
<node concept="37vLTw" id="1z4$59jeiRG" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoWrMf" resolve="newIndex" />
</node>
</node>
</node>
</node>
<node concept="3cpWsn" id="1z4$59jegXF" role="1Duv9x">
<property role="TrG5h" value="it" />
<node concept="3uibUv" id="1z4$59jegXG" role="1tU5fm">
<ref role="3uigEE" to="d6hs:~ReportItem" resolve="ReportItem" />
</node>
</node>
<node concept="2OqwBi" id="1z4$59jegXH" role="1DdaDG">
<node concept="37vLTw" id="1z4$59jegYb" role="2Oq$k0">
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
</node>
<node concept="liA8E" id="1z4$59jej9y" role="2OqNvi">
<ref role="37wK5l" to="tj24:3yEb0I3SXN3" resolve="allReportItems" />
</node>
</node>
</node>
<node concept="3clFbH" id="1z4$59jeJtN" role="3cqZAp" />
<node concept="3clFbF" id="WJTIIoZO7o" role="3cqZAp">
<node concept="2OqwBi" id="WJTIIoZOli" role="3clFbG">
<node concept="37vLTw" id="WJTIIoZO7m" role="2Oq$k0">
@ -4593,7 +4686,7 @@
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
</node>
<node concept="liA8E" id="WJTIIp0AgC" role="2OqNvi">
<ref role="37wK5l" to="tj24:6$gg4kA3UdB" resolve="putAllTypes" />
<ref role="37wK5l" node="1z4$59jdhR$" resolve="putAllTypes" />
<node concept="2OqwBi" id="WJTIIp9ct_" role="37wK5m">
<node concept="37vLTw" id="WJTIIp0AxH" role="2Oq$k0">
<ref role="3cqZAo" node="WJTIIoZGPA" resolve="typesDelta" />
@ -4611,7 +4704,7 @@
<ref role="3cqZAo" node="5Qx6_65wuyf" resolve="typesIndex" />
</node>
<node concept="liA8E" id="WJTIIp0HLS" role="2OqNvi">
<ref role="37wK5l" to="tj24:9dktABHyKF" resolve="addReportItems" />
<ref role="37wK5l" node="1z4$59jetoN" resolve="addReportItems" />
<node concept="2OqwBi" id="WJTIIp0IFT" role="37wK5m">
<node concept="2OqwBi" id="WJTIIp9cXh" role="2Oq$k0">
<node concept="37vLTw" id="WJTIIp0I7H" role="2Oq$k0">
@ -4853,7 +4946,117 @@
</node>
</node>
</node>
<node concept="2tJIrI" id="6dzPt95E0$P" role="jymVt" />
<node concept="2tJIrI" id="1z4$59jdh5g" role="jymVt" />
<node concept="3clFb_" id="1z4$59je3qp" role="jymVt">
<property role="TrG5h" value="putType" />
<node concept="37vLTG" id="1z4$59je3qq" role="3clF46">
<property role="TrG5h" value="ref" />
<node concept="3uibUv" id="1z4$59je3qr" role="1tU5fm">
<ref role="3uigEE" to="mhbf:~SNodeReference" resolve="SNodeReference" />
</node>
</node>
<node concept="37vLTG" id="1z4$59je3qs" role="3clF46">
<property role="TrG5h" value="type" />
<node concept="3Tqbb2" id="1z4$59je3qt" role="1tU5fm" />
</node>
<node concept="3cqZAl" id="1z4$59je3qu" role="3clF45" />
<node concept="3Tm1VV" id="1z4$59je3qv" role="1B3o_S" />
<node concept="3clFbS" id="1z4$59je3qG" role="3clF47">
<node concept="3clFbF" id="1z4$59je3qL" role="3cqZAp">
<node concept="3nyPlj" id="1z4$59je3qK" role="3clFbG">
<ref role="37wK5l" to="tj24:6QH_LDtcYUC" resolve="putType" />
<node concept="37vLTw" id="1z4$59je3qI" role="37wK5m">
<ref role="3cqZAo" node="1z4$59je3qq" resolve="ref" />
</node>
<node concept="37vLTw" id="1z4$59je3qJ" role="37wK5m">
<ref role="3cqZAo" node="1z4$59je3qs" resolve="type" />
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="1z4$59je3qH" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="1z4$59jeD9R" role="jymVt" />
<node concept="3clFb_" id="1z4$59jdhR$" role="jymVt">
<property role="TrG5h" value="putAllTypes" />
<node concept="37vLTG" id="1z4$59jdhR_" role="3clF46">
<property role="TrG5h" value="loc2typeNode" />
<node concept="3rvAFt" id="1z4$59jdhRA" role="1tU5fm">
<node concept="3Tqbb2" id="1z4$59jdhRB" role="3rvSg0" />
<node concept="2sp9CU" id="1z4$59jdhRC" role="3rvQeY" />
</node>
</node>
<node concept="3cqZAl" id="1z4$59jdhRD" role="3clF45" />
<node concept="3Tm1VV" id="1z4$59jdjlc" role="1B3o_S" />
<node concept="3clFbS" id="1z4$59jdhS8" role="3clF47">
<node concept="3clFbF" id="1z4$59jdhSc" role="3cqZAp">
<node concept="3nyPlj" id="1z4$59jdhSb" role="3clFbG">
<ref role="37wK5l" to="tj24:6$gg4kA3UdB" resolve="putAllTypes" />
<node concept="37vLTw" id="1z4$59jdhSa" role="37wK5m">
<ref role="3cqZAo" node="1z4$59jdhR_" resolve="loc2typeNode" />
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="1z4$59jdhS9" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="3clFb_" id="1z4$59jenqx" role="jymVt">
<property role="TrG5h" value="addReportItem" />
<node concept="3Tm1VV" id="1z4$59jenqy" role="1B3o_S" />
<node concept="3cqZAl" id="1z4$59jenrl" role="3clF45" />
<node concept="37vLTG" id="1z4$59jenrm" role="3clF46">
<property role="TrG5h" value="ri" />
<node concept="3uibUv" id="1z4$59jenrn" role="1tU5fm">
<ref role="3uigEE" to="d6hs:~ReportItem" resolve="ReportItem" />
</node>
</node>
<node concept="3clFbS" id="1z4$59jenro" role="3clF47">
<node concept="3clFbF" id="1z4$59jenrs" role="3cqZAp">
<node concept="3nyPlj" id="1z4$59jenrr" role="3clFbG">
<ref role="37wK5l" to="tj24:3yEb0I3WCjJ" resolve="addReportItem" />
<node concept="37vLTw" id="1z4$59jenrq" role="37wK5m">
<ref role="3cqZAo" node="1z4$59jenrm" resolve="ri" />
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="1z4$59jenrp" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="1z4$59jeGQz" role="jymVt" />
<node concept="3clFb_" id="1z4$59jetoN" role="jymVt">
<property role="TrG5h" value="addReportItems" />
<node concept="3Tm1VV" id="1z4$59jetoO" role="1B3o_S" />
<node concept="3cqZAl" id="1z4$59jetoY" role="3clF45" />
<node concept="37vLTG" id="1z4$59jetoZ" role="3clF46">
<property role="TrG5h" value="items" />
<node concept="A3Dl8" id="1z4$59jetp0" role="1tU5fm">
<node concept="3qUE_q" id="1z4$59jetp1" role="A3Ik2">
<node concept="3uibUv" id="1z4$59jetp2" role="3qUE_r">
<ref role="3uigEE" to="d6hs:~ReportItem" resolve="ReportItem" />
</node>
</node>
</node>
</node>
<node concept="3clFbS" id="1z4$59jetp3" role="3clF47">
<node concept="3clFbF" id="1z4$59jetp7" role="3cqZAp">
<node concept="3nyPlj" id="1z4$59jetp6" role="3clFbG">
<ref role="37wK5l" to="tj24:9dktABHyKF" resolve="addReportItems" />
<node concept="37vLTw" id="1z4$59jetp5" role="37wK5m">
<ref role="3cqZAo" node="1z4$59jetoZ" resolve="items" />
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="1z4$59jetp4" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
</node>
<node concept="2tJIrI" id="WJTIIoV3ib" role="jymVt" />
<node concept="2tJIrI" id="WJTIIoU_Aj" role="jymVt" />

View File

@ -6362,10 +6362,10 @@
<node concept="3cqZAl" id="6gnqipLyY7s" role="3clF45" />
<node concept="3Tm6S6" id="6gnqipLyYB4" role="1B3o_S" />
<node concept="3clFbS" id="6gnqipLyY7u" role="3clF47">
<node concept="3clFbF" id="6gnqipLIjE_" role="3cqZAp">
<node concept="2YIFZM" id="6gnqipLIjEA" role="3clFbG">
<ref role="37wK5l" to="tj24:14$_tTxAmT8" resolve="clearAll" />
<ref role="1Pybhc" to="tj24:4Z$O9mrQIzY" resolve="TypecheckingState" />
<node concept="3clFbF" id="1z4$59jNxF2" role="3cqZAp">
<node concept="2YIFZM" id="1z4$59jNxMt" role="3clFbG">
<ref role="37wK5l" to="tj24:1z4$59jKua2" resolve="clearAll" />
<ref role="1Pybhc" to="tj24:1z4$59jK85m" resolve="TypesModuleOwner" />
</node>
</node>
<node concept="3clFbJ" id="1z4$59h_Gkc" role="3cqZAp">

View File

@ -182,106 +182,6 @@
</node>
</node>
</node>
<node concept="AVZre" id="3MFPGC50Any">
<property role="TrG5h" value="ConversionMainSeq" />
<ref role="2YbDB9" to="kqnc:24Vro6cM_J$" resolve="ConversionMain" />
<node concept="1nLNMY" id="3MFPGC50KDp" role="1nK1Vg">
<property role="TrG5h" value="converts_sequence_covariance" />
<node concept="3clFbS" id="3MFPGC50KDq" role="1nLNMH">
<node concept="1nLNNL" id="3MFPGC50KDr" role="3cqZAp">
<node concept="1nLNMm" id="3MFPGC50KDs" role="1nLNNK">
<node concept="3Aq93q" id="3MFPGC50KDt" role="1nLNMb">
<node concept="3I6sU6" id="3MFPGC50KDu" role="3Ip0Jz">
<node concept="3I6s7M" id="3MFPGC50KDv" role="3I6sU7">
<node concept="3Aqt3T" id="3MFPGC50KDw" role="3I6s78">
<ref role="3AqCNq" to="kqnc:3vTJNooZDgN" resolve="convertsTo" />
<node concept="1HFMs5" id="3MFPGC50KDx" role="3AunhB">
<node concept="a7P8L" id="3MFPGC50KDy" role="1uarlU">
<ref role="a7OzE" node="3MFPGC50KDJ" resolve="T" />
</node>
<node concept="ns1u0" id="3MFPGC50KDz" role="1uarlW">
<ref role="ns1xF" node="3MFPGC50Ab3" resolve="sequence" />
<node concept="nsMwS" id="3MFPGC50KD$" role="ns1xD">
<ref role="nsMwP" node="3MFPGC50Aiu" resolve="elem" />
<node concept="1nq8_$" id="3MFPGC50KD_" role="nsMwV">
<node concept="a7P8L" id="3MFPGC50KDA" role="1nq8_t">
<ref role="a7OzE" node="3MFPGC50KDL" resolve="TElem" />
</node>
</node>
</node>
</node>
</node>
<node concept="1HFMs5" id="3MFPGC50KDB" role="3AunhB">
<node concept="a7P8L" id="3MFPGC50KDC" role="1uarlU">
<ref role="a7OzE" node="3MFPGC50KDI" resolve="S" />
</node>
<node concept="ns1u0" id="3MFPGC50KDD" role="1uarlW">
<ref role="ns1xF" node="3MFPGC50Ab3" resolve="sequence" />
<node concept="nsMwS" id="3MFPGC50KDE" role="ns1xD">
<ref role="nsMwP" node="3MFPGC50Aiu" resolve="elem" />
<node concept="1nq8_$" id="3MFPGC50KDF" role="nsMwV">
<node concept="a7P8L" id="3MFPGC50KDG" role="1nq8_t">
<ref role="a7OzE" node="3MFPGC50KDK" resolve="SElem" />
</node>
</node>
</node>
</node>
</node>
<node concept="a7P8L" id="4s_lMmH6Cxe" role="3AunhB">
<ref role="a7OzE" node="4s_lMmH6Cxc" resolve="Options" />
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="3MFPGC50KDH" role="0Rg$4">
<node concept="aZer4" id="3MFPGC50KDI" role="3XD1gS">
<property role="TrG5h" value="S" />
</node>
<node concept="aZer4" id="3MFPGC50KDJ" role="3XD1gS">
<property role="TrG5h" value="T" />
</node>
<node concept="aZer4" id="3MFPGC50KDK" role="3XD1gS">
<property role="TrG5h" value="SElem" />
</node>
<node concept="aZer4" id="3MFPGC50KDL" role="3XD1gS">
<property role="TrG5h" value="TElem" />
</node>
<node concept="32pEOW" id="3MFPGC50KDM" role="3vLBG7" />
</node>
<node concept="3xSepi" id="3MFPGC50KDN" role="3xSepv">
<node concept="3Aq9E8" id="3MFPGC50KDO" role="3xSepj">
<node concept="3I6sU6" id="3MFPGC50KDP" role="3Ip0Jz">
<node concept="3I6s7M" id="3MFPGC50KYx" role="3I6sU7">
<node concept="3Aqt3T" id="3MFPGC50KYw" role="3I6s78">
<ref role="3AqCNq" to="kqnc:3vTJNooZDgN" resolve="convertsTo" />
<node concept="a7P8L" id="3MFPGC50L02" role="3AunhB">
<ref role="a7OzE" node="3MFPGC50KDL" resolve="TElem" />
</node>
<node concept="a7P8L" id="3MFPGC50L0U" role="3AunhB">
<ref role="a7OzE" node="3MFPGC50KDK" resolve="SElem" />
</node>
<node concept="a7P8L" id="4s_lMmH6Cxf" role="3AunhB">
<ref role="a7OzE" node="4s_lMmH6Cxc" resolve="Options" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="4s_lMmH6Cxa" role="0Rg$4">
<node concept="3uibUv" id="4s_lMmH6Cxb" role="3vLBG7">
<ref role="3uigEE" to="kqnc:3vTJNooZBhQ" resolve="ConvertsContext.Options" />
</node>
<node concept="aZer4" id="4s_lMmH6Cxc" role="3XD1gS">
<property role="TrG5h" value="Options" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="0oKg$" id="1oUE7CXmlxI">
<property role="TrG5h" value="SequenceTypeMacro" />
<node concept="3hwh0R" id="1oUE7CX4dOb" role="0oKgB">
@ -490,5 +390,105 @@
</node>
</node>
</node>
<node concept="AVZre" id="3MFPGC50Any">
<property role="TrG5h" value="ConversionMainSeq" />
<ref role="2YbDB9" to="kqnc:24Vro6cM_J$" resolve="ConversionMain" />
<node concept="1nLNMY" id="3MFPGC50KDp" role="1nK1Vg">
<property role="TrG5h" value="converts_sequence_covariance" />
<node concept="3clFbS" id="3MFPGC50KDq" role="1nLNMH">
<node concept="1nLNNL" id="3MFPGC50KDr" role="3cqZAp">
<node concept="1nLNMm" id="3MFPGC50KDs" role="1nLNNK">
<node concept="3Aq93q" id="3MFPGC50KDt" role="1nLNMb">
<node concept="3I6sU6" id="3MFPGC50KDu" role="3Ip0Jz">
<node concept="3I6s7M" id="3MFPGC50KDv" role="3I6sU7">
<node concept="3Aqt3T" id="3MFPGC50KDw" role="3I6s78">
<ref role="3AqCNq" to="kqnc:3vTJNooZDgN" resolve="convertsTo" />
<node concept="1HFMs5" id="3MFPGC50KDx" role="3AunhB">
<node concept="a7P8L" id="3MFPGC50KDy" role="1uarlU">
<ref role="a7OzE" node="3MFPGC50KDJ" resolve="T" />
</node>
<node concept="ns1u0" id="3MFPGC50KDz" role="1uarlW">
<ref role="ns1xF" node="3MFPGC50Ab3" resolve="sequence" />
<node concept="nsMwS" id="3MFPGC50KD$" role="ns1xD">
<ref role="nsMwP" node="3MFPGC50Aiu" resolve="elem" />
<node concept="1nq8_$" id="3MFPGC50KD_" role="nsMwV">
<node concept="a7P8L" id="3MFPGC50KDA" role="1nq8_t">
<ref role="a7OzE" node="3MFPGC50KDL" resolve="TElem" />
</node>
</node>
</node>
</node>
</node>
<node concept="1HFMs5" id="3MFPGC50KDB" role="3AunhB">
<node concept="a7P8L" id="3MFPGC50KDC" role="1uarlU">
<ref role="a7OzE" node="3MFPGC50KDI" resolve="S" />
</node>
<node concept="ns1u0" id="3MFPGC50KDD" role="1uarlW">
<ref role="ns1xF" node="3MFPGC50Ab3" resolve="sequence" />
<node concept="nsMwS" id="3MFPGC50KDE" role="ns1xD">
<ref role="nsMwP" node="3MFPGC50Aiu" resolve="elem" />
<node concept="1nq8_$" id="3MFPGC50KDF" role="nsMwV">
<node concept="a7P8L" id="3MFPGC50KDG" role="1nq8_t">
<ref role="a7OzE" node="3MFPGC50KDK" resolve="SElem" />
</node>
</node>
</node>
</node>
</node>
<node concept="a7P8L" id="4s_lMmH6Cxe" role="3AunhB">
<ref role="a7OzE" node="4s_lMmH6Cxc" resolve="Options" />
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="3MFPGC50KDH" role="0Rg$4">
<node concept="aZer4" id="3MFPGC50KDI" role="3XD1gS">
<property role="TrG5h" value="S" />
</node>
<node concept="aZer4" id="3MFPGC50KDJ" role="3XD1gS">
<property role="TrG5h" value="T" />
</node>
<node concept="aZer4" id="3MFPGC50KDK" role="3XD1gS">
<property role="TrG5h" value="SElem" />
</node>
<node concept="aZer4" id="3MFPGC50KDL" role="3XD1gS">
<property role="TrG5h" value="TElem" />
</node>
<node concept="32pEOW" id="3MFPGC50KDM" role="3vLBG7" />
</node>
<node concept="3xSepi" id="3MFPGC50KDN" role="3xSepv">
<node concept="3Aq9E8" id="3MFPGC50KDO" role="3xSepj">
<node concept="3I6sU6" id="3MFPGC50KDP" role="3Ip0Jz">
<node concept="3I6s7M" id="3MFPGC50KYx" role="3I6sU7">
<node concept="3Aqt3T" id="3MFPGC50KYw" role="3I6s78">
<ref role="3AqCNq" to="kqnc:3vTJNooZDgN" resolve="convertsTo" />
<node concept="a7P8L" id="3MFPGC50L02" role="3AunhB">
<ref role="a7OzE" node="3MFPGC50KDL" resolve="TElem" />
</node>
<node concept="a7P8L" id="3MFPGC50L0U" role="3AunhB">
<ref role="a7OzE" node="3MFPGC50KDK" resolve="SElem" />
</node>
<node concept="a7P8L" id="4s_lMmH6Cxf" role="3AunhB">
<ref role="a7OzE" node="4s_lMmH6Cxc" resolve="Options" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3NuqgR" id="4s_lMmH6Cxa" role="0Rg$4">
<node concept="3uibUv" id="4s_lMmH6Cxb" role="3vLBG7">
<ref role="3uigEE" to="kqnc:3vTJNooZBhQ" resolve="ConvertsContext.Options" />
</node>
<node concept="aZer4" id="4s_lMmH6Cxc" role="3XD1gS">
<property role="TrG5h" value="Options" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</model>

View File

@ -922,10 +922,14 @@
</node>
<node concept="1wplmZ" id="c$FHnYWtOSZ" role="1zxBo6">
<node concept="3clFbS" id="4pwDyRC1qWk" role="1wplMD">
<node concept="3clFbF" id="4pwDyRC1qWl" role="3cqZAp">
<node concept="2YIFZM" id="4pwDyRC1qWm" role="3clFbG">
<ref role="37wK5l" to="tj24:14$_tTxAmT8" resolve="clearAll" />
<ref role="1Pybhc" to="tj24:4Z$O9mrQIzY" resolve="TypecheckingState" />
<node concept="3clFbF" id="1z4$59jNu69" role="3cqZAp">
<node concept="2OqwBi" id="1z4$59jNuJm" role="3clFbG">
<node concept="37vLTw" id="1z4$59jNu67" role="2Oq$k0">
<ref role="3cqZAo" node="61G6TdBScAl" resolve="typecheckingService" />
</node>
<node concept="liA8E" id="1z4$59jNvkn" role="2OqNvi">
<ref role="37wK5l" to="tj24:5HVB6JS1mjL" resolve="clearAllCaches" />
</node>
</node>
</node>
</node>